LocalStackを試した
手元で AWS のサービスを動かしたかったので試しました。
やっていくぞ!
tl;dr
LocalStack を使うと、AWS のサービスをローカルで使用出来る。
aws-cli でエンドポイントを指定するだけ。
簡単!
参考URL
GitHub - localstack/localstack: 💻 A fully functional local AWS cloud stack. Develop and test your cloud apps offline! qiita.com
環境
- macOS Sierra
- Python 3.6
- Docker version 18.03.1-ce, build 9ee9f40
- docker-compose version 1.21.2, build a133471
- aws-cli/1.15.30
対応している AWS サービス一覧とエンドポイント
- API Gateway at http://localhost:4567
- Kinesis at http://localhost:4568
- DynamoDB at http://localhost:4569
- DynamoDB Streams at http://localhost:4570
- Elasticsearch at http://localhost:4571
- S3 at http://localhost:4572
- Firehose at http://localhost:4573
- Lambda at http://localhost:4574
- SNS at http://localhost:4575
- SQS at http://localhost:4576
- Redshift at http://localhost:4577
- ES (Elasticsearch Service) at http://localhost:4578
- SES at http://localhost:4579
- Route53 at http://localhost:4580
- CloudFormation at http://localhost:4581
- CloudWatch at http://localhost:4582
- SSM at http://localhost:4583
利用方法
事前準備
Docker と docker-compose の環境が必須なので、事前に準備してください。
aws profile の設定
LocalStack 用にプロファイルを作成します。
aws-cli を使用するのでインストールを行ってください。
# aws profile の設定 $ aws configure --profile localstack AWS Access Key ID [None]: dummy AWS Secret Access Key [None]: dummy Default region name [None]: ap-northeast-1 Default output format [None]: json # ダミーの key が設定されている $ cat ~/.aws/credentials [localstack] aws_access_key_id = dummy aws_secret_access_key = dummy # リージョンやログ出力の設定 $ cat ~/.aws/config [profile localstack] region = ap-northeast-1 output = json
pip でローカルにインストール
pip を利用してインストールします。
$ pip install localstack
macOS にインストール時、アクセス権の問題でエラーが発生する場合があるので、その時は --user
を付与してインストールしてください。
$ pip install --user localstack
起動は下記コマンドです。
$ localstack start
僕の環境では、起動はしたのですが
http://localhost:8080/
へアクセス出来ず。
--docker
オプションをつけて Docker で起動するとアクセスできた。
$ localstack start --docker
アクセスすると下記のページが表示されます。
git clone後にDockerで起動
LocalStack リポジトリを git clone して実行する方法もあります。
手軽に試せるのはこれ。
$ git clone https://github.com/localstack/localstack.git $ cd localstack $ docker-compose up
起動後、http://localhost:8080/
へアクセスできるか確認。
使用例
Lambda 関数作成と実行
試しに、Lambda 関数を作成して実行します。
適当なディレクトリで test.py 作成
$ mkdir test $ cd test $ vim test.py
def lambda_handler(event, context): print(event) return 'Hello from Lambda'
zipに纏めて LocalStack に Lambda 関数作成
# test.py を test.zip に固める $ zip test.zip test.py
aws-cli で Lambda 関数作成時にエンドポイントを指定する事で、LocalStack 上に Lambda 関数を作成できます。
--endpoint-url=http://localhost:4574
実際に LocalStack 上に関数を作るコマンドはこちらです。
$ aws --endpoint-url=http://localhost:4574 --profile localstack lambda create-function --function-name=test --runtime=python3.6 --role=test --handler=lambda.lambda_handler --zip-file fileb://test.zip
LocalStack のダッシュボードを確認すると、作成した Lambda 関数が表示されています。
Lambda 関数実行
AWS 上の Lambda 関数を aws-cli で実行するには、下記のように打ち込むと実行できます。
$ aws lambda invoke --function-name=test --payload hoge
LocalStack 上の Lambda 関数を実行する際には、関数作成の時同様にエンドポイントを指定するオプションを付与します。
$ aws lambda --endpoint-url=http://localhost:4574 invoke --function-name=test --payload '{"key1":"value1", "key2":"value2", "key3":"value3"}' result.log # 成功すると下記のステータスコードが返される { "StatusCode": 200 }
成功すると、ディレクトリに result.log
が作成されます。
確認すると、作成した Lambda 関数の返り値が記録されています。
$ cat result.log Hello from Lambda
Lambda 関数の一覧取得
$ aws --endpoint-url=http://localhost:4574 --profile localstack lambda list-functions
Lambda 関数更新と削除
更新
$ aws --endpoint-url=http://localhost:4574 --profile localstack lambda update-function-code --profile localstack --function-name=test --zip-file fileb://test.zip --publish
削除
$ aws --endpoint-url=http://localhost:4574 --profile localstack lambda delete-function --function-name=test