はじまる

適当な事を適当に書く

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

Local Stack とは

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

こんなレスポンスが返って来れば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": []
}