雑なやつ

レベルを上げて技術で殴りたい

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 サービス一覧とエンドポイント

利用方法

事前準備

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