SAM で簡単な DynamoDB テーブルを生成してみる
DynamoDB のテーブルリソースも、Lambda 関数などのリソースと同様に AWS SAM で自動生成&更新することができます。 CloudFormation のテンプレートをそのまま記述するより、拡張された SAM テンプレートの形式で記述することで、シンプルにリソースを定義することができます。
SAM テンプレート内で DynamoDB のテーブルを定義するときは、リソースタイプとして AWS::Serverless::SimpleTable
を指定します(CloudFormation スタック内に実際に生成されるリソースのタイプは AWS::DynamoDB::Table
になります)。
DynamoDB テーブルを作成するための最低限の SAM テンプレートはとてもシンプルです。
次の例では、MyTable
という 論理 ID (Logical ID) で DynamoDB のテーブルを定義しています。
論理 ID はスタック内でリソースを特定するための名前です。
ひとつもプライマリキーを指定していませんが、その場合はデフォルトで id
という名前のプライマリキー(String
型)が定義されます。
AWS CLI で次のように実行すると、CloudFormation のスタックを作成することができます。
CloudFormation スタック内に、実際にどのような AWS リソースが作成されたかを調べるには以下のようにします。 ここではリソースタイプと、その物理 ID (Pysical ID) を table 形式で出力してみました。
SAM テンプレート内では、DynamoDB テーブルの論理 ID (Logical ID) を MyTable
と定義しましたが、実際のテーブル名(物理 ID)は mystack-MyTable-ABD467NSG1D3
のように、スタック名と論理 ID、ハッシュ値を組み合わせたものから自動生成されていることが分かります。
この物理 ID が、DynamoDB のマネージメントコンソールなどで表示されるテーブル名になります。
もちろん、テーブル名は SAM テンプレート内で明示的に指定することができます(後述)。
DynamoDB テーブル用のプロパティ設定
SAM の AWS::Serverless::SimpleTable
リソースのプロパティ設定には以下のようなものがあります。
TableName … テーブル名(物理 ID)
デフォルトでは、DynamoDB のテーブル名 (Physical ID) は CloudFormation のスタック名と Logical ID から自動生成されますが、TableName
プロパティで明示的に設定できます。
PrimaryKey … プライマリキー
テーブルのプライマリキーは PrimaryKey
プロパティで指定します(属性名を Name
、属性タイプを Type
で指定します)。
属性タイプは String
、Number
、Binary
のいずれかの値を指定します(プライマリキー以外の属性には、他にも Boolean
などの属性タイプがありますが、プライマリキーの属性タイプは 3 種類だけです)。
次の例では、プライマリキーとして、Title
という名前の String
型属性を定義しています。
Tags … タグの配列
DynamoDB テーブルにタグを設定したいときは、Tags
プロパティにマップ形式(キー&バリュー)で指定します。