Posted at

CloudFormationでAmazon DynamoDBテーブルを作成してみた


はじめに

CloudFormationでAmazon DynamoDBを作成したので、手順メモです。


準備

aws-cliを使用してCloudFormationを実行するためインストールを行います。


aws-cliをインストール

AWS CLI のインストール(公式ドキュメント) に手順は記載されています。

$ pip3 install awscli --upgrade --user

$ aws --version
bash: /usr/local/bin/aws: /usr/local/opt/python/bin/python3.6: bad interpreter: No such file or directory

自分の環境ではbad interpreterというエラーがでました。

下記を参考にして再インストールを実施したら解決できました。

Fixing the 'Bad Interpreter' Error from AWS and Python 3.7

Macにpythonをインストールしaws-cliが実行できない経緯と解決方法

$ brew reinstall awscli

$ brew link --overwrite awscli
$ aws --version
aws-cli/1.16.170 Python/3.7.3 Darwin/18.6.0 botocore/1.12.160


アクセスキー作成

aws-cliを実行するために必要なクレデンシャルを作成します。

AWSアクセスキー作成 の記事がわかりやすいです。


IAMの設定

IAMの設定画面から設定を進めていきます。

スクリーンショット 2019-07-20 11.03.20.png

とりあえずFull Accessにしています。

スクリーンショット 2019-07-20 11.05.20.png

クレデンシャル情報をcsvでダウンロードしておきます。

スクリーンショット 2019-07-20 13.09.40.png


aws configureの設定

取得したクレデンシャル情報をconfigに設定します。

設定ファイルは ~/.aws/credentials に設定されています。

$ aws configure

AWS Access Key ID [****************5RHA]: xxxxxxx
AWS Secret Access Key [****************CNsa]: xxxxxxx
Default region name [ap-northeast-1]: ap-northeast-1
Default output format [json]:


cloudFormationファイル

AWS::DynamoDB::Table(公式ドキュメント) にsampleコードがあるのでそれを使用しています。

少し長いのでコード折りたたんでおきます。

cloudFormation.yml

AWSTemplateFormatVersion: "2010-09-09"

Resources:
myDynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
-
AttributeName: "Album"
AttributeType: "S"
-
AttributeName: "Artist"
AttributeType: "S"
-
AttributeName: "Sales"
AttributeType: "N"
-
AttributeName: "NumberOfSongs"
AttributeType: "N"
KeySchema:
-
AttributeName: "Album"
KeyType: "HASH"
-
AttributeName: "Artist"
KeyType: "RANGE"
ProvisionedThroughput:
ReadCapacityUnits: "5"
WriteCapacityUnits: "5"
TableName: "myTableName"
GlobalSecondaryIndexes:
-
IndexName: "myGSI"
KeySchema:
-
AttributeName: "Sales"
KeyType: "HASH"
-
AttributeName: "Artist"
KeyType: "RANGE"
Projection:
NonKeyAttributes:
- "Album"
- "NumberOfSongs"
ProjectionType: "INCLUDE"
ProvisionedThroughput:
ReadCapacityUnits: "5"
WriteCapacityUnits: "5"
-
IndexName: "myGSI2"
KeySchema:
-
AttributeName: "NumberOfSongs"
KeyType: "HASH"
-
AttributeName: "Sales"
KeyType: "RANGE"
Projection:
NonKeyAttributes:
- "Album"
- "Artist"
ProjectionType: "INCLUDE"
ProvisionedThroughput:
ReadCapacityUnits: "5"
WriteCapacityUnits: "5"
LocalSecondaryIndexes:
-
IndexName: "myLSI"
KeySchema:
-
AttributeName: "Album"
KeyType: "HASH"
-
AttributeName: "Sales"
KeyType: "RANGE"
Projection:
NonKeyAttributes:
- "Artist"
- "NumberOfSongs"
ProjectionType: "INCLUDE"



実行

作成と削除は冪等性なので何度実行しても問題ありません。


作成

スタックの作成(公式ドキュメント)

aws cloudformation create-stack --stack-name sample --template-body file://cloudFormation.yml

スクリーンショット 2019-07-20 13.18.43.png


削除

スタックの削除(公式ドキュメント)

aws cloudformation delete-stack --stack-name sample


参考URL

CloudFormationをとりあえず実行してみたい人のためのチュートリアル