を使用localstackして、次のことを行うテンプレートを作成しようとしています:
- SNS トピックを作成する
- SQS キューを作成する
- 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それとも何か間違っていますか?
