1

私は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
4

1 に答える 1