はじめに
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の設定
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
削除
aws cloudformation delete-stack --stack-name sample