PHPからAWS DynamoDBにバリューを設定するときに気を付けること。

こんにちは! このタイトル記事に惹かれてページを開いたあなたは、システム屋さんですか?

そんなガッツリ技術系記事。今回は完全に自分用の記事ですww


今回、この記事を書く理由としてネット上にドンピシャの記事がなかったので、開発メンバーのHさんにも教えてもらいつつ理解したことを記します。

AWSは進化早いので直ぐに古くなるかもしれないけど、できるだけわかりやすく書きます!


参考になる実際のソースコードも交えて説明するので、同じように困っている方のお役に立てれば幸いです。




PHPってなに?

Webで動的な処理をするためのWebプログラミング言語です。

PHPはWebサービス・Webアプリケーション開発におけるデファクトスタンダードになっているほど、主流なWebプログラミング言語です。

PHP (PHP: Hypertext Preprocessor を再帰的に略したものです) は、広く使われているオープンソースの汎用スクリプト言語です。 PHP は、特に Web 開発に適しており、HTML に埋め込むことができます。

引用:PHP公式サイトマニュアルより



AWSってなに?

Amazon Web Serviceという読んで字のごとく、Amazonが提供するWeb上に存在するインフラのクラウドサービスです。

仮想インフラをそれぞれの専門特化した機能に分離しており、必要な機能を使うことで様々なサービスを開発したり提供することができます。


余談ですが、Amazonは、この「AWS」で利益を出している企業です。

ショッピングをするいつものAmazonは、実はそんなに利益に貢献していないんですね。日本の市場ではAmazonはマイナスですが、本国アメリカの市場では、大きな利益を生み出しています。


さらに余談ですが、アメリカ政府もAWSを使うほど、信頼性の高いサービスです。



DynamoDBってなに?

NoSQLと呼ばれるデータベース。

KeyとValueだけのデータベースの構造定義の必要がないスキーマレスなデータベースです。

例)

キー:ヴァリュー

"y.ogura":"福井のエンジニア"

"Jeffrey Preston Bezos”:"Amazonの共同創始者"

小倉といえば、福井のエンジニアという非常にシンプルな構造。その代わりにトランザクションなどの処理はできない。


Qiitaのこの記事がわかりやすい:DynamoDB の基礎知識とまとめ


DynamoDBちゃんの公式はこちら



今回の環境

PHP7.x系、AwsSDK for PHP 3.x導入を前提として考えてみます。

※フレームワークにLaravel(ララベル)ちゃんを使用。



データを入れるための処理

※amebaowndではソースコード系が全部死んじゃうので、読みやすくするために全角スペースを入れて調整しています。コピペで使う場合は、全角スペースを殺しながら実装してください。


// AWSのSDKからDynamoDbのDynamoDbClientクラスをimport

use Aws\DynamoDb\DynamoDbClient;

// AWSのSDKからDynamoDbのMarshalerクラスをimport

use Aws\DynamoDb\Marshaler;


// DynamoDBクライアントの初期化

$dynamoDbClient = DynamoDbClient::factory(

 'credentials' => 

  [

   'key' => 'Dynamoのアクセスキー’, 

   'secret' => ’Dynamoのシークレットキー, 

  ], 

 'region' => 'Dynamoのリージョン', 

 'version' => 'latest', 

]);


// Table名の指定

$tableName = 'Dynamoのテーブル名';


// Item = 'Dynamoに入れるValue値';


// DynamoDBに登録

$result = $dynamoDbClient->putItem(['TableName' => $tableName, 'Item' => $item]);



ここがつまづくポイント

『Dynamoに入れるValue値』が適切な型じゃないと、登録に失敗するのですが、それがネット上にはどうしたらいいかがほとんどない。

日本語のリファレンスもないし、とっても絶望的。


結局たどり着くのは英語のリファレンスなのですが、

そのリファレンスの場所もわからないというのがつまづきのポイントです。


ネット見ろ!


って、ここがそのネットなので、こちらをどぉぅぞぉ~


Amazon DynamoDB

下記の部分に書かれたKeysの中がこれでないと通らないようです。

REQUIRED=必須。

'B'とか'S'とかいろいろありますが、使うのは'S'と'N'ぐらいか無いんじゃないかなと思います。

Sが文字列

Nが数字



実際にはこんな形でぶっこむ

で、こんな感じのものを『Dynamoに入れるValue値』にぶっこみます。

下記例ではDynamoに入れるValue値を$saveDataという変数として扱います。

※amebaowndではソースコード系が全部死んじゃうので、読みやすくするために全角スペースを入れて調整しています。コピペで使う場合は、全角スペースを殺しながら実装してください。


$saveData = [

 'keyName(※)' => [ 

   'S' => 'キー名に設定するvalue'

  ], 

 'value' => [ 

   'S' => 'ここにDynamoに入れたいvalueを入れる'

 ]

];

※keyNameはDynamoに作ったキー項目の名前です。

 


終わりに

ということで、AwsSDKを使ってPHPからDynamoDBにつまづいた方の参考になれば、幸いです。

僕は開発メンバーのHさんがすでに開拓してくれていたので、特につまづくことはなかったのですが、軽く調べていて全く良い記事にヒットできなかったので、この記事が上位にあがって同じように困っているプログラマー・コーダーのお役に立てればうれしいです。


小倉のよっちゃん

福井で活動中の会社員システムエンジニア。ビジネス視点がかなり強く、作りたいものを作るよりも、結果が出ることを重要視する。使い手が使いやすいモノを提供して、おせっかいなほど親切な仕組みを世に解き放つ。高校生の頃からノベルゲームを作ったり、大学生の頃は小説を書いたりと、文章を書くのはわりと好き。デザインセンス皆無で、個人制作のCMSで「ラグジュアリーさ出すなら紫」と意気揚々と作ったが、デザイナーの先輩に「CMSにラグジュアリーさいる?ていうか紫はないわ」と言われた経験を持つ。

0コメント

  • 1000 / 1000

福井のハッピー野郎のつぶやき

生涯最後の日に笑って逝きたいので、自分に関わる全ての人々をハッピーにしたいと思っているハッピー野郎の人生哲学・直近の出来事を掲載していく予定です。 福井で働くシステムエンジニアです。技術職の人間なので、IT・プログラミング・DB・WEB技術・インフラについても書いていきます。