1

を使用localstackして、次のことを行うテンプレートを作成しようとしています:

  1. SNS トピックを作成する
  2. SQS キューを作成する
  3. SQS キューを SNS トピックにサブスクライブするサブスクリプションを作成します。

私のdocker-composeファイルは次のようになります。

version: '3'

services:

  localstack:
    image: localstack/localstack
    container_name: localstack
    environment:
      - SERVICES=sns,sqs,cloudformation
      - DEBUG=1
      - PORT_WEB_UI=${PORT_WEB_UI- }
      - HOSTNAME=localstack
      - AWS_DEFAULT_REGION=eu-west-2
      - AWS_ACCESS_KEY_ID=XX
      - AWS_SECRET_ACCESS_KEY=XX
    ports:
      - "4575:4575"
      - "4576:4576"
      - "4581:4581"
      - "8080:8080"
    volumes:
      - ./config/formation.yml:/usr/stuff/formation.yml
      - ./config/init.sh:/docker-entrypoint-initaws.d/init.sh

私のinit.shファイルは次のようになります。

#!/bin/bash
aws cloudformation create-stack --stack-name fincorestack --template-body file:///usr/stuff/formation.yml --endpoint-url=http://localstack:4581

最後に、Cloudformation ファイルは次のようになります。

AWSTemplateFormatVersion: '2010-09-09'
Description: 'Test'
Resources:
  MySnsTopic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: MySnsTopic
  MySnsTopicSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      Protocol: sqs
      TopicArn: !Ref MySnsTopic
      Endpoint: !GetAtt
        - MySqsQueue
        - QueueArn
  MySqsQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: MySqsQueue

これにより、非常にあいまいな500 Internal Server Errorが生成されます。これはlocalstackarn が非常に静的であることを知っているので、サブスクリプションのファイルの内容を次のように置き換えてみましymlた。TopcArnEndpoint

TopicArn: arn:aws:sns:eu-west-2:123456789012:MySnsTopic
Endpoint: arn:aws:sqs:elasticmq:000000000000:MySqsQueue

今回はエラーは発生していませんが、サブスクリプションは作成されません。のデバッグ出力から、次のlocalstackことがわかります。

ここに画像の説明を入力

また、サブスクリプションは作成されません。Cloudformationこの機能は実装でサポートされていませんか、localstackそれとも何か間違っていますか?

4

4 に答える 4