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 の基礎知識とまとめ
今回の環境
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値』が適切な型じゃないと、登録に失敗するのですが、それがネット上にはどうしたらいいかがほとんどない。
日本語のリファレンスもないし、とっても絶望的。
結局たどり着くのは英語のリファレンスなのですが、
そのリファレンスの場所もわからないというのがつまづきのポイントです。
ネット見ろ!
って、ここがそのネットなので、こちらをどぉぅぞぉ~
下記の部分に書かれた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さんがすでに開拓してくれていたので、特につまづくことはなかったのですが、軽く調べていて全く良い記事にヒットできなかったので、この記事が上位にあがって同じように困っているプログラマー・コーダーのお役に立てればうれしいです。
0コメント