使用Cloudformation创建触发器来启动lambda函数,并在S3 bucket中上传文件时验证哪个区域可用



我有以下结构:

  • 一个S3存储桶,用于上传文件
  • 一个云形成模板,我在其中创建了一个lambda函数来处理上传到s3 bucket中的文件

现在我想创建一个触发器(这是我第一次(,使用CloudformationS3 bucket中上传文件时自动启动lambda函数。这里的问题是,我在两个不同的区域(us-east-1 and us-west-2)中有lambda函数,并且只有一个S3 bucket共享。我想默认选择us-west-2来触发lambda函数,在us-west2不可用的情况下,更改区域并使用us-east-1启动lambda函数。

您想要这样的东西:

您的职能部门需要接受CustomResource请求并做出适当的响应。

您将需要处理创建请求、更新请求或两者。你需要用成功(或失败(来回应请求。

请注意,除非AWS::CloudFormation::CustomResource更新了一些值,否则可能(我记不清了(不会收到更新请求。在这种情况下,用日期或UUID填充的自定义资源上的sentinel属性将强制重新创建它。

只有当堆栈在us-west-1中时,AWS::CloudFormation::CustomResource上的Condition才会有条件地创建它(从而有条件地调用函数(。如果您愿意,也可以将此条件附加到函数中。

您可以完全删除该条件,并在执行过程中检查lambda函数所在的区域,这可能更干净。

{
"Resources": {
"MyLambdaFunction": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Role": {
"Ref": "MyLambdaFunctionRole"
}
}
},
"CustomResource": {
"Condition": "IsUsWest",
"Type": "AWS::CloudFormation::CustomResource",
"Properties": {
"ServiceToken": {
"Fn::GetAtt": [
"MyLambdaFunction",
"Arn"
]
}
}
}
},
"Parameters": {
"MyLambdaFunctionRole": {
"Type": "String"
}
},
"Conditions": {
"IsUsWest": {
"Fn::Equals": [
{
"Ref": "AWS::Region"
},
"us-west-1"
]
}
}
}

您想要的是在普通CloudFormatin中实现是不可能的。您需要为这样的逻辑开发自定义资源。

最新更新