ついでに勢いで LocalStack も導入しよう。ローカル環境に AWS の SaaS のエミュレータを導入するようなやつだ。色んな記事では git clone しているが、公式では pip を使えという感じなので、
$ pip install localstack
する。
$ localstack start -d __ _______ __ __ / / ____ _________ _/ / ___// /_____ ______/ /__ / / / __ \/ ___/ __ `/ /\__ \/ __/ __ `/ ___/ //_/ / /___/ /_/ / /__/ /_/ / /___/ / /_/ /_/ / /__/ ,< /_____/\____/\___/\__,_/_//____/\__/\__,_/\___/_/|_| 💻 LocalStack CLI 0.14.0 [02:26:54] starting LocalStack in Docker mode 🐳 localstack.py:115 preparing environment bootstrap.py:710 configuring container bootstrap.py:718 starting container
したら暫くして
[02:27:39] detaching
と出た。たぶん内部で docker pull localstack/localstack
が実行されている。2 回目からはすぐにデタッチできる。
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE localstack/localstack latest e50a85480f2f 17 hours ago 1.55GB
ってね。やっぱりね。でかい・・・。
具体的にどのタグのものが pull されたかは以下でわかる:
docker inspect <IMAGE_ID> | grep localstack/localstack@sha256
・・・何故か https://hub.docker.com/r/localstack/localstack/tags の中からは見つからないように見えるのは何故だろう・・・。そして、後の調査で、現時点では cdk bootstrap
にこけるイメージをつかまされる気がするので、CDK (5) - らんだむな記憶 に書いたように Docker Hub から直接 0.12.19 のような bootstrap が通るイメージを pull して使ったほうが良さそうに思える。
localstack/docker-compose.yml at master · localstack/localstack · GitHub を参考に眺めると、
$ ls /tmp/localstack/
cache localstack_main_container.log var_libs
に色々見える。
次に、GitHub - localstack/awscli-local: 💲 "awslocal" - Thin wrapper around the "aws" command line interface for use with LocalStack に従って
$ pip install awscli-local[ver1]
を実行する。
$ pip list | grep aws awscli 1.22.49 awscli-local 0.18
という感じになっている。
$ aws --endpoint-url=http://localhost:4566 kinesis list-streams
とか書く代わりに
$ awslocal kinesis list-streams
と書けると。エンドポイントを気にしなくて良いのは便利。なお localstack/awscli-local/bin/awslocal#L113-L116 ということらしいので、AWS_ACCESS_KEY_ID
と AWS_SECRET_ACCESS_KEY
には気をつけたほうが良いのかもしれない。
$ awslocal s3api create-bucket --bucket test { "Location": "/test" }
でとりあえず S3 のバケットができているはず。
$ awslocal s3 ls s3://test
で空っぽだけどバケットが見える。
$ echo "hoge" > hoge.txt $ awslocal s3 cp hoge.txt s3://test/ upload: ./hoge.txt to s3://test/hoge.txt $ awslocal s3 ls s3://test 2022-02-07 02:45:13 5 hoge.txt
でファイルもアップロードできた。なるほど。
$ localstack stop
container stopped: localstack_main
して、
$ localstack start -d
で再度コンテナを起動すると
$ awslocal s3 ls s3://test An error occurred (NoSuchBucket) when calling the ListObjectsV2 operation: The specified bucket does not exist
って感じで永続化されていませんと。予想通りというか・・・。コンテナの中だけっぽい。
$ docker exec -it localstack_main bash root@d28b5c5bad00:/opt/code/localstack#
でコンテナに乗り込める・・・が乗り込んだところでよく分からなかったのでそのまま抜けてきた・・・。
なお、S3 Data persistence to volume · Issue #1175 · localstack/localstack · GitHub を見た感じでは、S3 のデータは永続化されないようなので、MinIO | High Performance, Kubernetes Native Object Storage を使ったほうが良さそうである。
Web の記事を見ると「ダッシュボード」という存在が見えるが、どうも現在は存在していない様子。refactor logic across the codebase to make use of the Docker client u… · localstack/localstack@25b2d01 · GitHub で完全に削除されたような感じがする。Docker-compose dashboard start_web not working - in localstack-full image · Issue #4535 · localstack/localstack · GitHub を見ると、相当古くてメンテされてないので利用できないよという感じっぽい・・・。