LocalStackでAWSのモックコンテナを利用する
LocalStack」をDockerコンテナで使ってみます。
GitHubからdocker-composeファイルをダウンロードして起動するだけでとりあえず使えます。
過去の情報だとサービスごとにポートが分かれてるみたいなんですが、2020/09/15のリリースからは4566ポートのみを使うようになっているようです。
何か8080でダッシュボードが見れるって情報もあるんですがこれもなぜだか見れません…。
とりあえず
AWS CLIからS3を使ってみます。
DynamoDBも使ってみます。
作ったリソースはコンテナを落とすと消えるので注意しましょう。
今度はPHPでSDKから使ってみます。
「endpoint」を指定することで、モックとして本物のAWS環境と変わりなく利用することができています。
ローカル開発環境をDockerで配布するときなどに便利に使えそうです。
AWS環境をモックサーバ化した「
GitHubからdocker-composeファイルをダウンロードして起動するだけでとりあえず使えます。
>curl https://raw.githubusercontent.com/localstack/localstack/master/docker-compose.yml > docker-compose.yaml
>docker-compose up -d
Creating network "desktop_default" with the default driver
Pulling localstack (localstack/localstack:latest)...
latest: Pulling from localstack/localstack
e013b3d5381d: Pull complete Digest: sha256:7a3f2d073146b7dd6489109c29e337e39350894914dbb12bffae4bfe30a26786
Status: Downloaded newer image for localstack/localstack:latest
Creating desktop_localstack_1 ... done
>curl http://localhost:4566/
{"status": "running"}
何か8080でダッシュボードが見れるって情報もあるんですがこれもなぜだか見れません…。
とりあえず
AWS CLIからS3を使ってみます。
>aws configure --profile localstack
AWS Access Key ID [None]: test
AWS Secret Access Key [None]: test
Default region name [None]: ap-northeast-1
Default output format [None]: json
>aws s3 mb s3://mybucket --profile localstack --endpoint-url=http://localhost:4566
make_bucket: mybucket
>aws s3 ls --profile localstack --endpoint-url=http://localhost:4566
2020-12-28 15:10:10 mybucket
$ aws dynamodb create-table --table-name 'mytable' \
--attribute-definitions '[{"AttributeName":"key","AttributeType": "S"}]' \
--key-schema '[{"AttributeName":"key","KeyType": "HASH"}]' \
--provisioned-throughput '{"ReadCapacityUnits": 5,"WriteCapacityUnits": 5}' \
--endpoint-url=http://localhost:4566
$ aws dynamodb put-item --table-name mytable --item '{"key":{"S": "001"}, "name":{"S": "dog"}}' --endpoint-url=http://localhost:4566
$ aws dynamodb scan --table-name mytable --endpoint-url=http://localhost:4566
{
"Items": [
{
"name": {
"S": "dog"
},
"key": {
"S": "001"
}
}
],
"Count": 1,
"ScannedCount": 1,
"ConsumedCapacity": null
}
今度はPHPでSDKから使ってみます。
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
$s3client = S3Client::factory([
'endpoint' => 'https://127.0.0.1:4566',
'credentials' => [
'key' => 'test',
'secret' => 'test',
],
'region' => 'ap-northeast-1',
'version' => 'latest',
]);
$file = date('YmdHis') . '.txt';
$content = 'LoaclStack S3 upload file.';
file_put_contents($file, $content);
$result = $s3client->putObject([
'Bucket' => 'mybucket',
'Key' => 'test.txt',
'SourceFile' => $file,
'ContentType' => mime_content_type($file),
]);
$result = $s3client->getObject([
'Bucket' => 'mybucket',
'Key' => 'test.txt',
]);
echo $result['Body'];
>php s3.php
LoaclStack S3 upload file.
ローカル開発環境をDockerで配布するときなどに便利に使えそうです。
ディスカッション
コメント一覧
まだ、コメントがありません