はじめに
AWSの無料枠はあるものの、「誤って課金されるのが怖い」と感じて、触るのを諦めたことはありませんか?
そんなときに便利なのが LocalStack です(たぶんね)。
LocalStack(無料版でOK!)を使えば、AWSの主要なサービスをローカル環境でシミュレーションできるため、課金の心配なく試すことができます。
今回は、LocalStackをDockerで立ち上げ、S3のバケットを作成し、HTMLファイルをアップロードするまでの流れを試してみようと思います。
LocalStackの設定
まず、LocalStackをDockerで立ち上げるための設定を行います。
以下の内容を compose.yml
に記載します。
version: "3.8"
services:
localstack:
container_name: 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:
# LocalStack configuration: https://docs.localstack.cloud/references/configuration/
- DEBUG=${DEBUG:-0}
volumes:
- ./localstack:/var/lib/localstack
- "/var/run/docker.sock:/var/run/docker.sock"
この設定では、LocalStack
をローカルのポート 4566
で公開しています。
AWSの各サービスもそれぞれポートを通じてアクセス可能になります。
LocalStackの起動
次に、上記の compose.yml
が保存されているディレクトリで以下のコマンドを実行して、LocalStackを起動します。
-d
オプションをつけることで、バックグラウンドで起動できます。
docker compose up -d
起動後、サービスの状態を確認してみます。
サービス確認
curl http://localhost:4566/_localstack/health | jq
このコマンドを実行すると、以下のようなレスポンスが表示され、LocalStackが立ち上がっていることが確認できます。
{
"services": {
"acm": "available",
"apigateway": "available",
"cloudformation": "available",
"cloudwatch": "available",
"config": "available",
"dynamodb": "available",
"dynamodbstreams": "available",
"ec2": "available",
"es": "available",
"events": "available",
"firehose": "available",
"iam": "available",
"kinesis": "available",
"kms": "available",
"lambda": "available",
"logs": "available",
"opensearch": "available",
"redshift": "available",
"resource-groups": "available",
"resourcegroupstaggingapi": "available",
"route53": "available",
"route53resolver": "available",
"s3": "available",
"s3control": "available",
"scheduler": "available",
"secretsmanager": "available",
"ses": "available",
"sns": "available",
"sqs": "available",
"ssm": "available",
"stepfunctions": "available",
"sts": "available",
"support": "available",
"swf": "available",
"transcribe": "available"
},
"edition": "community",
"version": "4.3.1.dev3"
}
S3バケットの作成
お試しでS3バケットを作成してみます。
まず、コンテナに入ります。
docker compose exec -it localstack bash
コンテナ内でawslocal
コマンドを使って、S3バケットを作成します。
awslocal s3 mb s3://sample-bucket
バケットが作成されると、以下のようなメッセージが表示されます。
make_bucket: sample-bucket
その後、バケットが作成されているか確認します。
awslocal s3 ls
2025-03-30 15:46:48 sample-bucket
これで、S3バケットがローカル環境に作成されました。
S3バケットにHTMLファイルをアップロード
続いて、作成したS3バケットにHTMLファイルをアップロードし、ブラウザで表示してみます。
まず、アップロード用のHTMLファイルを作成します。
echo "<html><head><meta charset="UTF-8"><title>静的ホスティング</title></head><body><h1>Hello World</h1></body></html>" > sample.html
次に、awslocal
コマンドを使って sample.html
を sample-bucket にアップロードします。
awslocal s3 cp sample.html s3://sample-bucket/
成功すると、以下のようなメッセージが表示されます。
upload: ./sample.html to s3://sample-bucket/sample.html
ブラウザでアクセスし、Hello World
と表示されていれば成功です。
まとめ
想像以上に簡単にLocalStackを立ち上げることができ、無料でS3を試すことができました。
これならAWSの課金を気にせず、安心して検証できそうですね。
次回は、Goを使ってS3バケットに画像をアップロードする方法を試してみようと思います。