はじめに
こんにちは、H×Hのセンリツ大好きエンジニアです。(同担OKです😉)
AWSを用いた開発、どうしてますか?
Lambdaでバッチ処理を行いS3バケットに保存する、みたいな動作をローカルで試してみたいですよね。
今回は、そんなあなたにピッタリのLocalStackの紹介と環境構築をしていきます!😁
LocalStackとは
AWSをローカル環境で開発・テストすることができるサービスです。
正確には、AWSをローカル環境にエミュレートしてくれるサービスです。
ローカルでAWSが試せるので、AWSの利用料は掛かりません!
ただ、サービスによってはLocalStack自体が有料プランになりますのでそこだけ注意🤯
LocalStackの環境構築
方法はいくつかありますが、今回はDockerを使っていきます!
version: "3.8"
services:
localstack:
image: localstack/localstack
ports:
- "127.0.0.1:4566:4566" # LocalStack Gateway
- "127.0.0.1:4510-4559:4510-4559" # external services port range
environment:
DEBUG: 1
DOCKER_HOST: unix:///var/run/docker.sock
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
これだけでOKです!
DEBUG: 1
はデバッグモードを有効にしていますが、こちらは無くても動作します!
ポイントだけ説明すると、
ports:
- "127.0.0.1:4566:4566" # LocalStack Gateway
- "127.0.0.1:4510-4559:4510-4559" # external services port range
4556
番ポートは、LocalStackのゲートウェイポートになります。
ホストの4556
番ポートにマッピングしています。
environment:
DOCKER_HOST: unix:///var/run/docker.sock
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
DOCKER_HOST
は、LocalStackが内部でDockerコンテナを管理するために必要になります。
volumes
はLocalStackがホストのDockerデーモンと通信するために定義しています。
また、LocalStackではAWS CLIを使用しますのでインストールします。
$ brew install awscli
その後、LocalStackが提供しているawscli-local
をインストールします。
これはAWS CLIのラッパーとなります。
$ brew install awscli-local
後はDockerコンテナをビルドして起動するだけで使えるようになります!🤩
S3バケットをLocalStackコンテナ起動時に作成されるようにする
おまけ的な感じです。
S3バケットを作成し、JSONファイルを格納します。
version: "3.8"
services:
localstack:
image: localstack/localstack
ports:
- "127.0.0.1:4566:4566"
- "127.0.0.1:4510-4559:4510-4559"
environment:
DEBUG: 1
DOCKER_HOST: unix:///var/run/docker.sock
SERVICES: s3 # 使用するサービスを指定
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "./init-scripts:/docker-entrypoint-initaws.d" # 初期化スクリプトをマウント
- "./data:/data" # JSONファイルをマウント
SERVICES: s3
で使うサービスを指定します。
今回はS3を使用します。
volumes:
- "./init-scripts:/docker-entrypoint-initaws.d" # 初期化スクリプトをマウント
- "./data:/data" # JSONファイルをマウント
init-scripts
ディレクトリをコンテナ内の/docker-entrypoint-initaws.d
にマウントします。
LocalStackはこのディレクトリ内のスクリプトを起動時に実行します。
#!/bin/bash
# S3バケットの作成
awslocal s3 mb s3://my-bucket
# JSONファイルのアップロード
awslocal s3 cp /data/sample.json s3://my-bucket/sample.json
初期化スクリプトで、S3バケットの作成とJSONファイルのアップロードを行います。
{
"name": "John Doe",
"age": 30,
"city": "New York"
}
使用するJSONファイルです。
これで再ビルドして、コンテナを起動します。
http://localhost:4566/my-bucket/sample.json にアクセスすると、JSONが出力されていることが確認できます!
おわりに
ローカル環境でAWSを試せるLocalStackは如何でしたでしょうか?
気になった方は是非触ってみてください!
ここまでご覧いただき、ありがとうございました!