読者です 読者をやめる 読者になる 読者になる

はじまる

適当な事を適当に書く

atlassian 製の AWS モックツール LocalStack をさわってみた

LocalStack とは

https://i.imgsafe.org/fe38108cd6.png

こいつです

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/ にアクセスすると表示される。正直まだちょっと何につかうか、わからない。

f:id:satorusangakoronda:20170428175242p:plain

つかってみた

トーリー

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
{
    "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
{
    "TableNames": [
        "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
{
    "ConsumedCapacity": {
        "CapacityUnits": 1,
        "TableName": "Music"
    }
}

4. スタックのリセット

Ctrl+C でプロセスを終了すると、スタックはクリアされる。

aws dynamodb list-tables --endpoint-url=http://localhost:4569
{
    "TableNames": []
}