Local Stack とは
こいつです
bitbucket.org
LocalStack provides an easy-to-use test/mocking framework for developing Cloud applications.
Currently, the focus is primarily on supporting the AWS cloud stack.
クラウドアプリのテストやモックに使うフレームワークです。現在はとりあえず AWS のサービスに対応することに注力しているみたいです。手間の削減や、お金の節約になるね!仕事のプロジェクトに本格導入するのはまだ怖いけど、手元のプログラムとかのテストとかには良さそう!ただ既存のシステムへの改修のテストにつかうのは、既存の模倣が大変そうなのでいまのところシンドそう!
起動
docker run -it -p 4567-4580:4567-4580 -p 8080:8080 atlassianlabs/localstack
こんな感じで、localhost に各AWSサービスを偽装したエンドポイントが立ち上がります。
...
Starting local dev environment. CTRL-C to quit.
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
* Restarting with stat
Starting local Elasticsearch (port 4571)...
Starting mock ES service (port 4578)...
Starting mock S3 (port 4572)...
Starting mock SNS (port 4575)...
Starting mock SQS (port 4576)...
Starting mock API Gateway (port 4567)...
Starting mock DynamoDB (port 4569)...
Starting mock DynamoDB Streams service (port 4570)...
Starting mock Firehose service (port 4573)...
Starting mock Lambda service (port 4574)...
Starting mock Kinesis (port 4568)...
Starting mock Redshift (port 4577)...
Starting mock Route53 (port 4580)...
Starting mock SES (port 4579)...
Starting mock CloudFormation (port 4581)...
...
ダッシュボード
http://0.0.0.0:8080/
にアクセスすると表示される。正直まだちょっと何につかうか、わからない。
つかってみた
DynamoDB の テーブルをつくって、Item を挿入できるか
1. DynamoDB テーブル作成
aws cli をつかって、テーブルを作成してみます。--endpoint-url
オプションを LocalStack の 偽装エンドポイントを指定します。
$aws dynamodb create-table \
--endpoint-url=http://localhost:4569 \
--table-name Music \
--attribute-definitions \
AttributeName=Artist,AttributeType=S \
AttributeName=SongTitle,AttributeType=S \
--key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
こんなレスポンスが返って来ればOK
{
"TableDescription": {
"TableArn": "arn:aws:dynamodb:us-east-1:000000000000:table/Music",
"AttributeDefinitions": [
{
"AttributeName": "Artist",
"AttributeType": "S"
},
{
"AttributeName": "SongTitle",
"AttributeType": "S"
}
],
"ProvisionedThroughput": {
"NumberOfDecreasesToday": 0,
"WriteCapacityUnits": 1,
"ReadCapacityUnits": 1
},
"TableSizeBytes": 0,
"TableName": "Music",
"TableStatus": "CREATING",
"KeySchema": [
{
"KeyType": "HASH",
"AttributeName": "Artist"
},
{
"KeyType": "RANGE",
"AttributeName": "SongTitle"
}
],
"ItemCount": 0,
"CreationDateTime": 1493371126.181
}
}
テーブルができたみたいです。
2. DynamoDB テーブルの確認
他のコマンドを実行してみます。dynamodb のテーブル一覧を取得してみましょう。
$aws --endpoint-url=http://localhost:4569 dynamodb list-tables
こんなレスポンスが返って来ればOK
{
"TableNames": [
"Music"
]
}
さきほど作成した Music
テーブルの情報が返却されてきます。
3. DynamoDB に Item を挿入する
$aws dynamodb put-item \
--endpoint-url=http://localhost:4569 \
--table-name Music \
--item \
'{"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Call Me Today"}, "AlbumTitle": {"S": "Somewhat Famous"}}' \
--return-consumed-capacity TOTAL
こんなレスポンスが返って来ればOK
{
"ConsumedCapacity": {
"CapacityUnits": 1,
"TableName": "Music"
}
}
4. DynamoDB の table を scan してみる
Item 挿入されたか確認する為に、scan してみましょう。
$aws --endpoint-url=http://localhost:4569 dynamodb scan --table-name=Music
挿入されてるみたいですね。
{
"Count": 1,
"Items": [
{
"AlbumTitle": {
"S": "Somewhat Famous"
},
"SongTitle": {
"S": "Call Me Today"
},
"Artist": {
"S": "No One You Know"
}
}
],
"ScannedCount": 1,
"ConsumedCapacity": null
}
5. スタックのリセット
Ctrl+C
でプロセスを終了すると、スタックはクリアされます。
もういちど起動して、再度 dynamodb のテーブル一覧を取得してみましょう。
$aws dynamodb list-tables --endpoint-url=http://localhost:4569
さきほどの Music
テーブルが消えてることがわかります。
{
"TableNames": []
}