らんだむな記憶

blogというものを体験してみようか!的なー

LocalStack

ついでに勢いで LocalStack も導入しよう。ローカル環境に AWSSaaSエミュレータを導入するようなやつだ。色んな記事では 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_IDAWS_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 を見ると、相当古くてメンテされてないので利用できないよという感じっぽい・・・。