LocalStackを使ってローカル開発環境で AWS をエミュレートしてみます。
LocalStackコンテナを自分のPCで立ち上げ、AWS CLIやプログラムの向き先をLocalStackコンテナにすることで、エミュレートされたAWS(実際のAWSではない、自分用のAWSエミュレート環境)を使った動作確認が可能です。
LocalStackのインストール
以下のコマンドで、GitHubからLocalStack環境一式をダウンロードします。
git clone https://github.com/localstack/localstack.git
cd localstack
以下のコマンドで、LocalStackコンテナを立ち上げます。
docker-compose up -d
以下のコマンドで、使用できるAWSサービスの一覧取得してみます。
curl -s "http://127.0.0.1:4566/_localstack/health" | jq .
<取得した使用できるサービスの一覧>
{
"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": "running",
"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": "3.4.1.dev"
}
いっぱいある….!素晴らしー
AWS CLIでLocalStackを使ってみる
AWS CLIのインストール
PCがmacの場合
以下のコマンドでAWS CLIをインストールします。
brew install awscli
PCがWindowsの場合
以下URLからMSI インストーラをダウンロードして、AWS CLIをインストールします。
動作確認
以下のコマンドでAWS CLIがインストールできているか確認します。
aws --version
以下のような出力がされればOKです。
aws-cli/2.15.48 Python/3.11.9 Darwin/23.4.0 source/arm64 prompt/off
AWS CLIの設定
以下のように設定します。
aws configure --profile localstack
AWS Access Key ID [None]: aaa
AWS Secret Access Key [None]: aaa
Default region name [None]: ap-northeast-1
Default output format [None]:
Access KeyとSecret Access keyは適当な値でOKです。
regionは「ap-northeast-1」を指定、formatは指定なしでOK
S3バケットを作ってみる
以下のコマンドで「test-bucket」という名前のS3バケットを作成可能です。
aws --endpoint-url=http://localhost:4566 --profile localstack s3 mb s3://test-bucket
以下のような結果が出力され、バケットが作成されたことがわかります。
make_bucket: test-bucket
AWS CLIの使い方
「aws –endpoint-url=http://localhost:4566 –profile localstack」の部分は固定で、その後ろに実行したいAWSコマンドを記載します。
aws --endpoint-url=http://localhost:4566 --profile localstack {実行したいAWS CLIコマンド}
プログラムからLocalStackを使ってみる
プログラムからLocalStackを使ってみます。
プログラム言語はPHPを使い、S3にファイルアップロードしてみます。
PHPでLocalStackを使ってみる
まず、aws-sdk-phpをインストールします。
composer require aws/aws-sdk-php
「composer: command not found」と表示された場合、composerのインストールが必要なので、composerインストール後に、上記コマンドを実行します。
macの場合、以下のコマンドでcomposerをインストールできます。
brew install composer
次にPHPファイルを作成します。S3にファイルをアップロードするプログラムです。
vi test.php
<ファイルの中身>
<?php require_once 'vendor/autoload.php';
use Aws\S3\S3Client;
$config = [ 'credentials' => [
'key' => 'hoge',
'secret' => 'fuga',
],
'region' => 'ap-northeast-1',
'endpoint' => 'http://localhost:4566',
'use_path_style_endpoint' => true,
];
$s3 = new S3Client($config);
// アップロード
$result = $s3->putObject([
'Bucket' => 'test-bucket', // バケット名
'Key' => 'test.txt', // s3のアップロード先
'Body' => 'hello world!!', // ファイルの内容
]);
作成したPHPを以下のコマンドで実行します。
php test.php
ファイルがアップロードされているか以下のAWS CLIで確認します。
aws --endpoint-url=http://localhost:4566 --profile localstack s3 ls s3://test-bucket
2024-05-11 17:13:48 13 test.txt
想定通り「test.txt」がアップロードされていることが確認できます。
まとめ
LocalStackを使ってローカル開発環境で AWS 環境をエミュレートする方法を記載しました。
結構簡単に、AWS CLIやプログラムからLocalStackを使用できることがわかりましたー