[やってみた]Step FunctionsのみでDynamo DBテーブルからアイテム取得/登録をしてみた #reinvent

re:Invent 2018のKeyNoteにてStep Functionsのアップデートがあり、Step Functionsと連携するマネージドサービスが飛躍的に増えました!本エントリではStep Functionsから、Dynamo DBより既存アイテムの取得、新アイテムの登録をやってみたいと思います。
2018.11.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、坂巻です。

re:Invent 2018にて、Step Functionsが新たに8つのマネージドサービスと連携可能になりました!

本エントリではStep Functionsから、Dynamo DBより既存アイテムの取得、新アイテムの登録をやってみたいと思います。

やってみた

Dynamo DBテーブル作成

テーブル作成手順については割愛いたしますが、以下のようなテーブルを作成しました。

01

Step Functions(ステートマシン)作成

タスクステートが2つあるシンプルなステートマシンです。

02

ステートマシンの定義は以下となります。

{
  "StartAt": "GetItem",
  "States": {
   "GetItem": {
      "Type": "Task",
      "Resource": "arn:aws:states:::dynamodb:getItem",
      "Parameters": {
        "TableName": "TestDB",
        "Key": {
          "ID": {"N": "1"}
        }
      },
      "ResultPath": "$.DynamoDB",
      "Next": "PutItem"
    },
   "PutItem": {
      "Type": "Task",
      "Resource": "arn:aws:states:::dynamodb:putItem",
      "Parameters": {
        "TableName": "TestDB",
        "Item": {
          "ID": {"N": "2"},
          "Name": {"S": "dog"}
        }
      },
      "ResultPath": "$.DynamoDB",
      "End": true
   } 
  }
}

「GetItem」ステートでは、TestDBよりKeyを指定してアイテムを取得し、「PutItem」ステートでは、TestDBにアイテムを登録しています。 データ取得のリソースにはarn:aws:states:::dynamodb:getItemを指定して、データ挿入のリソースにはarn:aws:states:::dynamodb:putItemを指定しています。

Step Functions(ステートマシン)実行

それでは、ステートマシンを実行します。入力イベントはデフォルトのまま実行しました。

03

ステートマシンの実行が正常終了しました。

04

Dynamo DBテーブルを確認してみたいと思います。

05

「PutItem」ステートで指定していたアイテムが登録されていることが確認できました。 次は「GetItem」ステートでアイテムが取得できていたか確認してみます。

06

「ID」、「Name」が取得できていることが確認できました!! なお、ステートマシンに付与するIAMロールに、Dynamo DBの権限がないとエラーになりますのでご注意ください。

さいごに

Step Functionsと連携するマネージドサービスが飛躍的に増えたことで、より強力なサービスになったと思います。 今回のように、Step Functions単体でも、DynamoDBテーブルからアイテム取得、登録が可能になりましたので、シンプルな仕組みであれば、Lambdaラッパーなしでもシステムが完成するかもしれませんね!!

参考