Как использовать очередь SQS в одном стеке CloudFormation в качестве триггера лямбда-функции в другом стеке CloudFormation?

введите здесь описание изображения

Что я сделал до сих пор: я экспортировал Arn очереди и QueueName из стека, в котором создается очередь, и использовал их в событиях под лямбда-функцией, которую я хочу запустить, а также определил QueuePolicy в этом стеке, чтобы получить разрешения для ReceiveMessage из очереди.

Этот подход работает, когда я впервые создаю оба стека, но в следующий раз, когда я создаю, он отключает триггер под триггерами Lambda в определении очереди SQS. Мне никогда не удавалось рассматривать это как триггер лямбда-функции.

Сообщите мне, что я делаю не так.


comment
Можете ли вы поделиться шаблонами Cloudformation для обоих стеков? Как вы их строите?   -  person Milan Cermak    schedule 08.02.2019


Ответы (1)


Вы можете вызвать действие стека облачной информации (создать / обновить / удалить ...) с помощью параметра NotificationArns.

Это отправит сообщение для каждого события ресурсов стека. Затем он дает возможность запускать лямбду.

Сообщение следует за этим типом полезной нагрузки:

{
    "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": {}
            }
        }
    ]
}
person Christophe Morio    schedule 08.02.2019