到目前为止,我所做的事情:我从创建队列的堆栈中导出了队列的Arn和QueueName,并在我想触发并在lambda函数下的Events中使用了它们还定义了该堆栈中的QueuePolicy,以从队列中获取对ReceiveMessage的权限。
这种方法在我第一次构建两个堆栈时都有效,但是在下次构建时,它将禁用SQS队列定义中Lambda触发器下的触发器。我从未成功将其视为lambda函数下的触发器。
让我知道我在做错什么。
答案 0 :(得分:0)
您可以使用NotificationArns
选项调用cloudformation堆栈操作(创建/更新/删除...)。
这将为每个堆栈资源事件发送一条消息。然后,它提供了触发lambda的能力。
消息遵循这种有效负载:
{
"Records": [
{
"EventSource": "aws:sns",
"EventVersion": "1.0",
"EventSubscriptionArn": "arn:aws:sns:eu-west-1:12345678912:my-sns-topic:00000000-0000-0000-0000-000000000000",
"Sns": {
"Type": "Notification",
"MessageId": "00000000-0000-0000-0000-000000000000",
"TopicArn": "arn:aws:sns:eu-west-0:000000000000:my-sns-topic",
"Subject": "AWS CloudFormation Notification",
"Message": "
StackId='${STACK_ID}'\n
Timestamp='2018-01-01T00:00:00.000Z'\n
EventId='00000000-0000-0000-0000-000000000000'\n
LogicalResourceId='${STACK_NAME}'\n
Namespace='000000000000'\n
PhysicalResourceId='${STACK_ID}'\n
PrincipalId='ABCDEFGHIJKLMNOPQRSTU:1234567890123456789'\n
ResourceProperties='null'\
ResourceStatus='${RESOURCE_STATUS}'\n
ResourceStatusReason=''\n
ResourceType='AWS::CloudFormation::Stack'\n
StackName='${STACK_NAME}'\n
ClientRequestToken='null'\n
",
"Timestamp": "2018-01-01T00:00:00.000Z",
"SignatureVersion": "1",
"Signature": "_",
"SigningCertUrl": "_",
"UnsubscribeUrl": "_",
"MessageAttributes": {}
}
}
]
}