omuronの備忘録

個人的な備忘録

LocalStack で S3 ローカル環境構築

JAWS-UG 初心者支部#43 AWS Builders Online Series recap1 にて、織田さんが LT していた「S3について整理しよう 」とてもわかりやすくてよかったです。
よほどお金が S3 にかからない限り、考えるの大変だからそのまま S3 使いがちですね。
開発だったら LocalStack 使えばお金かからないので、試してみた備忘録です。

LocalStack

github.com

LocalStack を使うと疑似的な AWS 環境をローカルに作れるようです。

Docker で試す

hub.docker.com

DockerHub にイメージがあったので、これを利用します。
現時点の最新版は 0.13.3 なので、こちらを利用。

Docker Compose ファイル作成

Docker Compose で試すため docker-compose.yml を作成。

version: "3"

services:
  localstack:
    image: localstack/localstack:0.13.3
    container_name: localstack
    ports:
      # LocalStack の AWS サービス
      - 4566:4566
    environment:
      - DEFAULT_REGION=ap-northeast-1
      - SERVICES=s3
      - DATA_DIR=/tmp/localstack/data
    volumes:
      - localstack:/tmp/localstack/ 

volumes:
  localstack:

AWS ダミープロファイル作成

LocalStack 用の dummy の AWS プロファイルを準備。

$ cat >> ~/.aws/credentials << EOF
[LocalStack]
aws_access_key_id = dummy
aws_secret_access_key = dummy
EOF
$ cat >> ~/.aws/config << EOF
[profile LocalStack]
region = ap-northeast-1
output = json
EOF

Docker 起動

Docker を起動。

$ docker-compose up -d

起動を確認。

$ docker ps
CONTAINER ID   IMAGE                                           COMMAND                  CREATED          STATUS          PORTS                                                         NAMES
5d918f216b8f   localstack/localstack:0.13.3                    "docker-entrypoint.sh"   12 minutes ago   Up 12 minutes   4571/tcp, 0.0.0.0:4566->4566/tcp, 5678/tcp                    localstack

S3 アクセス

S3 コマンドを叩くときに --endpoint-url=http://localhost:4556 と、作成したプロファイルを指定 --profile LocalStack すれば、操作可能。

$ aws s3 mb s3://sample --endpoint-url=http://localhost:4566 --profile LocalStack  
make_bucket: sample
$ aws s3 cp ./sample.txt s3://sample/ --endpoint-url=http://localhost:4566 --profile LocalStack  
upload: ./sample.txt to s3://sample/sample.txt                  
$ aws s3 ls s3://sample/ --endpoint-url=http://localhost:4566 --profile LocalStack
2022-02-02 20:35:45          7 sample.txt

Docker 終了

$ docker-compose down

ボリューム不要になったら後片付け。

$ docker volume ls
DRIVER    VOLUME NAME
local     localstack_localstack
$ docker volume rm localstack_localstack
localstack_localstack

所感

想像以上に簡単に試すことができました。