localstackとは
localstackとは、AWSの主要なサービスをローカル環境でエミュレートできるサービスだよ。s3やDynamoDB、Lambda、SNS、SQSなどのサービスをインターネット接続なしで動作確認できるよ。
動作環境
- Windows11
- DockerDesktopインストール済み
作業内容
作業としては、以下の3ステップで完了するよ。
- docker-compose.ymlの作成
- AWS-CLIのインストール
- credentialsの設定
では、実際にlocalstackを構築してみるよ。
docker-compose.ymlの作成
公式サイトのDocker-Composeでの起動手順を参考に起動するよ。ymlの内容は少しアレンジしているので、公式をみながらアレンジしてね。保存場所は任意のディレクトリでOK。
version: "3.8"
services:
localstack:
container_name: localstack
image: localstack/localstack:latest
ports:
- "4566:4566" # LocalStack Gateway
- "4510-4559:4510-4559" # external services port range
environment:
- DEFAULT_REGION=ap-northeast-1
- DEBUG=1 # トラブルシューティングに役立つため、DEBUGログをonに設定
cmdで以下コマンドを実行し、起動するよ。
docker-compose up -d
AWS-CLIのインストール
AWS公式より、AWS-CLIのインストールを行ってね。
インストールが完了したら、以下コマンドでインストールの確認を行ってね。
aws --version
## 実行結果
aws-cli/1.37.16 Python/3.12.6 Windows/11 botocore/1.36.16
credentialsの設定
cliからLocalStackにアクセスするためにはまずcredentialsの設定が必要だよ。以下コマンドで設定出来るよ。
aws configure --profile localstack
credentialsの設定値は任意でOKで、今回は以下のように設定したよ。
AWS Access Key ID [None]: dummy
AWS Secret Access Key [None]: dummy
Default region name [None]: ap-northeast-1
Default output format [None]: json
バケットの作成をしてみる
次にs3のバケットを作成してみるよ。以下コマンドを実行してね。
# 作成コマンド
aws s3 mb s3://[任意の名前] --endpoint-url=http://localhost:4566 --profile localstack
# 実行結果
make_bucket: [任意の名前]
また、バケットの削除やアップロードのコマンドなども記載しておくよ。
# 削除コマンド
aws s3 rb s3://[削除したいバケット名] --force --endpoint-url=http://localhost:4566 --profile localstack
# s3バケット一覧
aws s3 ls --endpoint-url=http://localhost:4566 --profile localstack
# ファイルのアップロード
aws s3 cp [アップロードしたいファイル] s3://[アップロード先のバケット名] --endpoint-url=http://localhost:4566 --profile localstack
# アップロードできたかの確認
s3 ls s3://[アップロード先のバケット名]/ --endpoint-url=http://localhost:4566 --profile localstack
(参考)CORS設定
フロントエンドからファイルをダウンロード/アップロードする場合、CORS設定が必要なのでその備忘録を記載するよ。
任意のディレクトリに、cors-configuration.jsonを作成するよ。内容は、権限に合わせて作成してね。
{
"CORSRules": [
{
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET", "PUT", "POST"],
"AllowedOrigins": ["*"],
"ExposeHeaders": [],
"MaxAgeSeconds": 3000
}
]
}
作成したファイルを、バケットに設定するよ。
aws --endpoint-url=http://localhost:4566 --profile localstack
s3api put-bucket-cors --bucket [設定したいバケット名] --cors-configuration file://cors-configuration.json
設定が出来たかの確認を行うよ。
aws --endpoint-url=http://localhost:4566 --profile localstack s3api get-bucket-cors --bucket sample-bucket
## 実行結果
{
"CORSRules": [
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"PUT",
"POST"
],
"AllowedOrigins": [
"*"
],
"MaxAgeSeconds": 3000
}
]
}
以上でlocalstackでs3を作成する手順が完了したよ。お疲れ様でした!