Amazon.co.jpアソシエイト2013年11月8日金曜日AWSのDynamoDBをJavaScriptから直接操作する前回の記事のとおり、AWSのSDKがブラウザ用JavaScriptで利用できるようになった。今回は実際に試して利用できるようになったまでの手順を記す。ちなみに検索しても日本語の情報はおろか英語の情報すらあまり見つからず、総当り的に試行錯誤ており、またDynamoDBそのものとかGoogleの認証周りは今ひとつわかっていないので、手順には無駄や間違った箇所があるかもしれない。そのあたりは各自で修正していただきたい。(そして出来れば私にも教えてほしい)今回やることは、Googleで認証を受けて、その認証トークンを使ってDynamoDBに接続して、データを取得・設定する。利用の想定はGoogleのユーザーIDごとにjsonかなにかの文字列を保存しておく単純なアプリケーションとする。クライアント側での大まかな流れとしては、Googleでログインしてもらってそこから返されたid_tokenからGoogleのuser_idを取得する。AWSのDynamoDBのキー値はこのuser_idにする。DynamoDBとのアクセス時に一緒にid_tokenを渡すことでAWS側でもuser_idが正しいことが照合され、自分のuser_idがキーのデータのみにアクセスできるようになる。利用までの手順としては以下のような流れになる。Googleにアプリケーション登録をするAWSでDynamoDBにテーブルを作成するDynamoDBでWeb認証のときのポリシーを作成できるので作ってコピーしておくAWSでIAMにDynamoDBにアクセスできるRoleを作成する(3のポリシーを使う)ブラウザ上でDynamoDBに接続するアプリケーションを作成するではひとつずつ説明していく。Console上記リンクのどっちでも良い(下の方が新しい)。これらは本来GoogleのAPI(地図とかカレンダーとか)を利用申請する画面なのだけど、今回はログインを利用するだけなので登録のみでOK。IDがあるのでそれを記録しておく。****.apps.googleusercontent.comみたいなやつ。****.projectというやつは違うので気を付ける。Secretは使わない。Engineなんかのプロジェクトとも統合されていて、その設定を行える。このあたりはたぶんググればどんだけでも情報があるので省略。Tabelで作成する。ググれば(略)スループットを全Table合計でwrite:5/read:10以上に設定すると、時間単価が有料になるので気を付ける(初めて作るならどっちも1にしておけば大丈夫)。3.DynamoDBでWeb認証のときのポリシーを作成できるので作ってコピーしておくこれ。ProviderをGoogleにして、権限をあたえる処理にチェックをする。Attributesってので列制限もできるみたい。Documentの欄の設定値をコピーしておく。設定に触れると、dynamodb:LeadingKeysが${accounts.google.com:sub}になっているので、キー値がgoogleのsub(ユーザーID)と一致したときのみ権限が与えられるようになっている。id_tokenはgoogleのエンドポイントに投げるとユーザーID、アプリケーションID等々が返されるので、正しいアプリケーションであるかどうかとか、正しいユーザーIDであるかどうかが分かるのでAWS側で照合してくれてるっぽい。4.AWSでIAMにDynamoDBにアクセスできるRoleを作成する(3のポリシーを使う)IAMのサービスにアクセスしてRoleを作成する。適当なRole名をつける。