🐷

LocalStackについて

2025/02/26に公開

1. LocalStackとは

AWS環境をローカル環境で再現できるもの。AWSサービスを使ったアプリケーション開発を行う際に、クラウド環境を用意しなくても、ローカルの環境で開発・テストを行うことができる。今回はS3に画像データのアップロード処理を行う実装をし、その際に利用した。S3以外にも以下に記載のサービスを再現できるらしい。

  • DynamoDB
  • Lambda
  • SQS
  • SNS

2. 環境構築方法

今回はcompose.ymlに以下のような記述を行い、LocalStackの環境を構築した。

services:
    ...

    localstack:
        container_name: localstack
        ports:
          - "4566:4566"  # Edge port for LocalStack
        volumes:
          - "./localstack-scripts:/etc/localstack/init/ready.d"  # ready hook
          - "./var/run/docker.sock:/var/run/docker.sock"
        image: localstack/localstack:s3-latest 
        env_file:
          - ./compose.env
        environment:
          DEBUG: 1
          AWS_ENDPOINT_URL: http://localstack:4566
          AWS_ACCESS_KEY_ID: test
          AWS_SECRET_ACCESS_KEY: test
          AWS_DEFAULT_REGION: ap-northeast-1
          AWS_S3_BUCKET_NAME: myBucket
          AWS_S3_BUCKET_REGION: ap-northeast-1
          AWS_S3_ENDPOINT_URL: http://localstack:4566
          FILE_ID_SALT: DEV
          TZ: Asia/Tokyo
        networks:
          - backend
        stop_grace_period: 1s # LocalStack のコンテナが停止する際の待機時間を 1秒 に設定。

./localstack-scriptsディレクトリ配下にS3のバケットを初期で作成するshを作成している。コンテナ内の /etc/localstack/init/ready.d にマウントすることで、LocalStack起動時に実行されるスクリプトを配置する。

また、LocalStackは認証不要のため、AWSアクセスキーなど任意で設定することができる。

3. AWS CLIを使ってできること

上記で作成したLocalStack環境に対してAWS CLIを使用することができる。(aws configureでアクセスキーなどの設定は必要)

バケットの作成

aws --endpoint-url=http://localhost:4566 s3 mb s3://myBucket

作成されたバケットの確認

aws --endpoint-url=http://localhost:4566 s3 ls

ファイルのアップロード

echo "Hello, World!" > hello-world.txt
aws --endpoint-url=http://localhost:4566 s3 cp hello-world.txt s3://myBucket/

ファイルの確認

aws --endpoint-url=http://localhost:4566 s3 ls s3://myBucket/

Discussion