Grow up

生活とプログラミング

Lambda(C#) から AWS DynamoDB に Insert してみた

はじめに

AWS DynamoDB に Insert を行うまでの手順をまとめます。
Lambda関数を使うためのロールは作成されている事を前提とします。

f:id:knkomko:20190619013730p:plain:w450

開発環境

・Windows10 Pro
・VisualStudio2017
Visual Studio のインストール | Microsoft Docs

必要なもの

AWS ToolKit for VisualStudio
 https://aws.amazon.com/jp/visualstudio/
・NuGet - AWSSDK.DynamoDBv2
 https://www.nuget.org/packages/AWSSDK.DynamoDBv2/

1. DynamoDBのアクセス権の設定

今回は AmazonDynamoDBFullAccess を使用しました。
f:id:knkomko:20190619012006p:plain:w350

今回は外部公開しないためフルアクセスを使用しました。
新しくポリシーを作るとテーブルごとに読み書き権限を与えられます。

2. AWSSDK.DynamoDBv2のインストール

ohke.hateblo.jp
上記の記事を参考に、TodoEntityクラスを作ります。
クラスを作るとDynamoDBv2の参照先がありませんとエラーになります。
f:id:knkomko:20190619004949p:plain:w350

エラーを解消するためにNuGetを使ってDynamoDBv2をインストールします。
今回は記事作成時点で最新の 3.3.101.25 をインストールしています。
https://www.nuget.org/packages/AWSSDK.DynamoDBv2/

f:id:knkomko:20190619013954p:plain:w400

3. リージョンの設定

DynamoDBのリージョンと合わせる必要がありました。
リージョンが違う状態でInsertをすると以下のエラーが返ってきます。

"errorType": "ResourceNotFoundException",
"errorMessage": "Requested resource not found: Table: Todos not found"

まずはDynamoDBを作成したリージョンを確認します。
今回は東京で作成しました。
f:id:knkomko:20190619004905p:plain:w250

RegionEndpointの定義を確認します。
東京は APNortheast1 です。
f:id:knkomko:20190619005629p:plain:w350

AmazonDynamoDBClient に APNortheast1 を指定します。
f:id:knkomko:20190619005622p:plain:w350

4. 動作確認

デプロイします。
f:id:knkomko:20190619010856p:plain:w350

コンソールからテーブルを確認します。
f:id:knkomko:20190619011001p:plain:w350

以上の手順で DynamoDB に Insert ができました。

遭遇したエラー

下記エラーが表示された時はDynamoDBの項目名とマッピングするクラスのメンバ変数名が完全に一致している事を確認してください。

Unable to locate property for key attribute [DynamoDB 項目名]

以下のstackoverflowの回答が参考になりました。
stackoverflow.com