私は2つのアプリケーションを持っています:
1 つのアプリケーションがElasticMqキューを使用してメッセージをリッスンします。2 番目のアプリケーションは、SNSトピックに関するメッセージを発行します。
トピックのElasticMqキューにサブスクライブできます。SNSしかし、トピックに公開すると、サブスクリプションが成功したにもかかわらずlocal stack、メッセージを送信できません。elasticmq
awslocal sns list-subscriptions-by-topic --topic-arn arn:aws:sns:us-east-1:123456789012:classification-details-topic
{
"Subscriptions": [
{
"SubscriptionArn": "arn:aws:sns:us-east-1:123456789012:classification-details-topic:ea470c5a-c352-472e-9ae0-a1386044b750",
"Owner": "",
"Protocol": "sqs",
"Endpoint": "http://elasticmq-service:9324/queue/test",
"TopicArn": "arn:aws:sns:us-east-1:123456789012:classification-details-topic"
}
]
}
以下は私が受け取るエラーメッセージです:
awslocal sns publish --topic-arn arn:aws:sns:us-east-1:123456789012:classification-details-topic --message "私のメッセージ"
Publish 操作の呼び出し時にエラー (InvalidParameter) が発生しました: SendMessage 操作の呼び出し時にエラー (AWS.SimpleQueueService.NonExistentQueue) が発生しました: AWS.SimpleQueueService.NonExistentQueue; SQS ドキュメントを参照してください。
elasticmqローカル スタックをサブスクライブしたのは間違っていますか?
docker-compose ファイルを使用して localstack を実行しています
version: '2.1'
services:
localstack:
image: localstack/localstack
ports:
- "4567-4584:4567-4584"
- "${PORT_WEB_UI-8001}:${PORT_WEB_UI-8080}"
environment:
- SERVICES=${SERVICES- }
- DEBUG=${DEBUG- }
- DATA_DIR=${DATA_DIR- }
- PORT_WEB_UI=${PORT_WEB_UI- }
- LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR- }
- KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
networks:
default:
external:
name: my_network
同じdockerネットワーク「my_network」を使用して、別のdocker-composeの一部としてelasticmqと他のサービスを持っています
以下は完全な docker-compose です。エントリを1つのdocker-composeファイルにまとめて再現してみました。
再現する手順
version: '3'
services:
elasticmq:
build: ./elasticmq
ports:
- '9324:9324'
networks:
- my_network
dns:
- 172.16.198.101
localstack:
image: localstack/localstack
ports:
- "4567-4584:4567-4584"
- "${PORT_WEB_UI-8001}:${PORT_WEB_UI-8080}"
environment:
- SERVICES=${SERVICES- }
- DEBUG=${DEBUG- }
- DATA_DIR=${DATA_DIR- }
- PORT_WEB_UI=${PORT_WEB_UI- }
- LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR- }
- KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
links:
- elasticmq:elasticmq-service
networks:
- my_network
dns:
- 172.16.198.101
networks:
my_network:
driver: bridge
ipam:
config:
- subnet: 172.16.198.0/24
この後、次の一連のコマンドを実行できます
awslocal sqs create-queue --queue-name test --endpoint http://elasticmq:9324/
awslocal sns create-topic --name test-topic
awslocal sns subscribe --topic-arn arn:aws:sns:us-east-1:123456789012:test-topic --protocol sqs --notification-endpoin http://elasticmq-service:9324/queue/test