LocalStack
LocalStack は AWS クラウドサービスをローカル環境 で模擬 するツールで、開発 とテスト に適 しています。
S3
S3 Bucket を作成
aws --endpoint-url=http://localhost:4566 s3api create-bucket --bucket my-local-bucket --region us-east-1出力:
{
"Location": "/my-local-bucket"
}S3 Bucket を一覧表示
aws --endpoint-url=http://localhost:4566 s3api list-buckets出力:
{
"Buckets": [
{
"Name": "my-local-bucket",
"CreationDate": "2024-03-11T14:58:54+00:00"
}
],
"Owner": {
"DisplayName": "webfile",
"ID": "75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a"
}
}オブジェクトを Bucket にアップロード
aws --endpoint-url=http://localhost:4566 s3api put-object --bucket my-local-bucket --key mytestingfile.txt --body=mytestingfile.txt出力:
{
"ETag": "\"e9486e179a81fd5a256bbe06ddfba273\"",
"ServerSideEncryption": "AES256"
}Bucket 内のオブジェクトを一覧表示
aws --endpoint-url=http://localhost:4566 s3api list-objects --bucket my-local-bucket出力:
{
"Contents": [
{
"Key": "mytestingfile.txt",
"LastModified": "2024-03-11T15:01:55+00:00",
"ETag": "\"e9486e179a81fd5a256bbe06ddfba273\"",
"Size": 42,
"StorageClass": "STANDARD",
"Owner": {
"DisplayName": "webfile",
"ID": "75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a"
}
}
]
}SQS
Queue を作成
awslocal sqs create-queue --queue-name localstack-queue出力:
{
"QueueUrl": "http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/localstack-queue"
}Queue を一覧表示
awslocal sqs list-queues出力:
{
"QueueUrls": [
"http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/localstack-queue"
]
}Queue 属性を照会
awslocal sqs get-queue-attributes --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/localstack-queue --attribute-names All出力:
{
"Attributes": {
"ApproximateNumberOfMessages": "0",
"ApproximateNumberOfMessagesNotVisible": "0",
"ApproximateNumberOfMessagesDelayed": "0",
"CreatedTimestamp": "1710818989",
"DelaySeconds": "0",
"LastModifiedTimestamp": "1710818989",
"MaximumMessageSize": "262144",
"MessageRetentionPeriod": "345600",
"QueueArn": "arn:aws:sqs:us-east-1:000000000000:localstack-queue",
"ReceiveMessageWaitTimeSeconds": "0",
"VisibilityTimeout": "30",
"SqsManagedSseEnabled": "true"
}
}メッセージの送受信
メッセージ送信:
awslocal sqs send-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/localstack-queue --message-body "Hello World"出力:
{
"MD5OfMessageBody": "b10a8db164e0754105b7a99be72e3fe5",
"MessageId": "2962d260-733c-4e0a-8418-ab532906039c"
}メッセージ受信:
awslocal sqs receive-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/localstack-queue出力:
{
"Messages": [
{
"MessageId": "2962d260-733c-4e0a-8418-ab532906039c",
"ReceiptHandle": "ZDc5OWQzMzUtZWVkZS00OTMwLWEwZDktMGE4Yzg3ZTE2ZGVjI...",
"MD5OfBody": "b10a8db164e0754105b7a99be72e3fe5",
"Body": "Hello World"
}
]
}Dead-Letter Queue の例
Queue を作成:
awslocal sqs create-queue --queue-name input-queue
awslocal sqs create-queue --queue-name dead-letter-queue
awslocal sqs create-queue --queue-name recovery-queueRedrive Policy を設定:
awslocal sqs set-queue-attributes \
--queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/input-queue \
--attributes '{
"RedrivePolicy": "{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:000000000000:dead-letter-queue\",\"maxReceiveCount\":\"1\"}"
}'input-queue にメッセージ送信:
awslocal sqs send-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/input-queue --message-body '{"hello": "world"}'2回受信して DLQ をトリガー:
awslocal sqs receive-message --visibility-timeout 0 --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/input-queue
awslocal sqs receive-message --visibility-timeout 0 --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/input-queueDLQ メッセージを recovery-queue に移動:
awslocal sqs start-message-move-task \
--source-arn arn:aws:sqs:us-east-1:000000000000:dead-letter-queue \
--destination-arn arn:aws:sqs:us-east-1:000000000000:recovery-queuerecovery-queue からメッセージ受信:
awslocal sqs receive-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/recovery-queueSNS
SNS Topic を作成
awslocal sns create-topic --name localstack-topic出力:
{
"TopicArn": "arn:aws:sns:us-east-1:000000000000:localstack-topic"
}Topic 属性を設定
awslocal sns set-topic-attributes \
--topic-arn arn:aws:sns:us-east-1:000000000000:localstack-topic \
--attribute-name DisplayName \
--attribute-value MyTopicDisplayNameSNS Topic を一覧表示
awslocal sns list-topics出力:
{
"Topics": [
{
"TopicArn": "arn:aws:sns:us-east-1:000000000000:localstack-topic"
}
]
}Topic 属性を取得
awslocal sns get-topic-attributes \
--topic-arn arn:aws:sns:us-east-1:000000000000:localstack-topicTopic にメッセージをパブリッシュ
awslocal sns publish \
--topic-arn "arn:aws:sns:us-east-1:000000000000:localstack-topic" \
--message file:///opt/code/localstack/message.txt出力:
{
"MessageId": "f9e062ca-df27-4647-9c95-f89a3f77ed86"
}SNS Topic をサブスクライブ
Email サブスクリプション:
awslocal sns subscribe \
--topic-arn arn:aws:sns:us-east-1:000000000000:localstack-topic \
--protocol email \
--notification-endpoint test@gmail.com出力:
{
"SubscriptionArn": "arn:aws:sns:us-east-1:000000000000:localstack-topic:13c3866a-9b7f-4f96-9762-c60809a2da05"
}サブスクリプション属性を設定:
awslocal sns set-subscription-attributes \
--subscription-arn "arn:aws:sns:us-east-1:000000000000:localstack-topic:13c3866a-9b7f-4f96-9762-c60809a2da05" \
--attribute-name RawMessageDelivery --attribute-value trueSNS と SQS の統合
SQS Queue を作成:
awslocal sqs create-queue --queue-name my-queueSQS を SNS にサブスクライブ:
awslocal sns subscribe --topic-arn "arn:aws:sns:us-east-1:000000000000:localstack-topic" --protocol sqs --notification-endpoint "arn:aws:sqs:us-east-1:000000000000:my-queue"メッセージをパブリッシュ:
awslocal sns publish --topic-arn "arn:aws:sns:us-east-1:000000000000:localstack-topic" --message "hello"SQS から受信:
awslocal sqs receive-message --queue-url "http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/my-queue"サブスクライバーを一覧表示
awslocal sns list-subscriptionsサブスクリプションを解除
awslocal sns unsubscribe --subscription-arn "arn:aws:sns:us-east-1:000000000000:localstack-topic:9825fc88-3d58-471c-92ad-08524e9f8301"