gpt4 book ai didi

aws-cloudformation - Cloudformation 嵌套堆栈导入/导出 - 未找到名为 EXPORT_NAME 的导出

转载 作者:行者123 更新时间:2023-12-04 10:41:25 27 4
gpt4 key购买 nike

我有一个 Cloudformation 堆栈,其中包含一个主模板和两个嵌套模板,其中一个包含 Lambda 和关联的角色,另一个包含 S3 存储桶。我想从 Lambda 模板导出 Lambda ARN 并将其传递到 S3 模板,以便我可以执行一些事件通知操作(让 S3 存储桶中的新项目触发 Lambda)。

如果我注释掉主模板中导入导出的 Lambda ARN 并将其传递到存储桶的 CF 代码,则一切正常 - 主模板和嵌套模板部署正常,并且我可以看到导出的 Lambda ARN -

(c4abb639548f2545e145ea54ed13d2ea) justin@justin-XPS-13-9360:~/work/gists/c4abb639548f2545e145ea54ed13d2ea$ ./describe_outputs.sh xxx-MyLambda-1B451J61821EC
------------------------------------------------------------------------------------------------------------------
| DescribeStacks |
+-------------------------+--------------+-----------------------------------------------------------------------+
| ExportName | OutputKey | OutputValue |
+-------------------------+--------------+-----------------------------------------------------------------------+
| xxx-lambda-arn| FunctionArn | arn:aws:lambda:eu-west-1:119552584133:function:xxx-lambda |
+-------------------------+--------------+-----------------------------------------------------------------------+

但是,如果我取消注释将导出的 Lambda ARN 传递到存储桶模板的代码 -

  MyBucket:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: !Sub "https://s3.${AWS::Region}.amazonaws.com/${S3Bucket}/${AppName}/templates/bucket.yaml"
Parameters:
BucketName: !Join
- '-'
- - Ref: AppName
- bucket
LambdaArn: # <- this
Fn::ImportValue: # <- this
Fn::Sub: "${AppName}-lambda-arn" # <- this

然后整个堆栈的部署突然失败 -

(c4abb639548f2545e145ea54ed13d2ea) justin@justin-XPS-13-9360:~/work/gists/c4abb639548f2545e145ea54ed13d2ea$ aws cloudformation describe-stack-events --stack-name xxx
{...}
ROLLBACK_IN_PROGRESS | No export named xxx-lambda-arn found. Rollback requested by user.

令我惊讶的是,主堆栈无法检测到其嵌套堆栈之一(S3 堆栈)需要从另一个嵌套堆栈(Lambda 堆栈)导出一个值。

我希望可以通过添加 DependsOn block 来解决这个问题,使 S3 嵌套堆栈依赖于 Lambda 嵌套堆栈,但这也不起作用。

跨属于同一主堆栈的嵌套堆栈导入/导出值是否存在某种限制?或者有解决方法吗?

完整要点在这里 -

https://gist.github.com/jhw/c4abb639548f2545e145ea54ed13d2ea

最佳答案

在嵌套堆栈中,您需要指定一个输出,以便主堆栈可以从资源访问它,即

Lambda 堆栈

"Resources": {
"LambdaFunction": ...
}
"Outputs": {
"LambdaFunction": {
"Value":
{ "Fn::GetAtt": ["LambdaFunction","Arn"] }
}

主堆栈

LambdaArn: !GetAtt Lambda.Outputs.LambdaArn

可以从主堆栈引用 Lambda 以了解更多信息,请查看此引用架构 https://github.com/aws-samples/ecs-refarch-cloudformation .

关于aws-cloudformation - Cloudformation 嵌套堆栈导入/导出 - 未找到名为 EXPORT_NAME 的导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59907781/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com