Уведомление о ведомости AWS Lambda S3 через CloudFormation
Я пытаюсь создать уведомление Lambda через CloudFormation, но получаю сообщение об ошибке неправильного формата ARN.
Либо моя CloudFormation ошибочна, либо еще не поддерживает предварительный просмотр Lambda.
{
"AWSTemplateFormatVersion": "2010-09-09",
"Parameters": {
"LambdaArn": {
"Type": "String",
"Default": "arn:aws:lambda:{some-region}:{some-account-id}:function:{some-fn-name}"
}
},
"Resources": {
"EventArchive": {
"Type": "AWS::S3::Bucket",
"Properties": {
"NotificationConfiguration": {
"TopicConfigurations": [
{
"Event": "s3:ObjectCreated:Put",
"Topic": {
"Ref": "LambdaArn"
}
}
]
}
}
}
}
}
Но когда я отжимаю эту CloudFormation, я получаю сообщение:
The ARN is not well formed
Кто-нибудь знает, что это значит? Я знаю, что приведенный выше пример был изменен, поэтому я не использовал свой фактический ARN, но в моем фактическом коде я скопировал ARN непосредственно из графического интерфейса.
Интересно, что мне удалось создать уведомление через консоль AWS, и поэтому я просто предполагаю, что AWS CloudFormation еще не поддерживает эту функцию (хотя это не совсем понятно, я не думаю, когда читаю документацию).
Ответы
Ответ 1
Из документы:
Тема Amazon SNS, на которую Amazon S3 сообщает о указанных событиях.
Похоже, что S3 поддерживает отправку событий в Lambda, CloudFormation еще не догнал. Он ожидает SNS ARN, где вы предоставляете функцию Lambda ARN.
В настоящее время, похоже, вам нужно вручную связать уведомление о событиях.
Ответ 2
Похоже, AWS теперь выпустила поддержку для уведомления лямбда-функций непосредственно в CloudFormation.
Определение S3 NotificationConfiguration
, которое использовалось только для включения TopicConfigurations, но было обновлено, чтобы включить LambdaConfigurations
.
После добавления NoficationConfiguration убедитесь, что вы включили ресурс Lambda:: Permission, чтобы S3 разрешал выполнять вашу лямбда-функцию. Вот пример разрешения, которое можно использовать в качестве шаблона:
"PhotoBucketExecuteProcessorPermission": {
"Type" : "AWS::Lambda::Permission",
"Properties" : {
"Action":"lambda:invokeFunction",
"FunctionName": { "Fn::GetAtt": [ "PhotoProcessor", "Arn" ]},
"Principal": "s3.amazonaws.com",
"SourceAccount": {"Ref" : "AWS::AccountId" },
"SourceArn": {
"Fn::Join": [":", [
"arn","aws","s3","", ""
,{"Ref" : "PhotoBucketName"}]]
}
}
}