gpt4 book ai didi

amazon-web-services - 如何同时使用 Fn::Include 和 Fn::Sub?

转载 作者:行者123 更新时间:2023-12-03 19:24:59 25 4
gpt4 key购买 nike

考虑这段代码:

MyStateMachine:
Type: "AWS::StepFunctions::StateMachine"
Properties:
StateMachineName: MyStateMachine
DefinitionString:
Fn::Sub:
- Fn::Transform:
Name: 'AWS::Include'
Parameters:
Location: s3://my-bucket/my.json
- { Param1: MyLambda1.Arn, Param2: MyLambda2.Arn }

我收到一个错误:

Template error: One or more Fn::Sub intrinsic functions don't specify expected arguments. Specify a string as first argument, and an optional second argument to specify a mapping of values to replace in the string

要求第一个参数必须是字符串,但是如果状态机有 arn 的占位符怎么办?如何更换它们?有什么解决方法吗?

最佳答案

Fn::Sub 不支持 Fn::Transform 作为输入的一部分。如 documentation 中所述:

For the String parameter, you cannot use any functions. You must specify a string value.

一种解决方案是将状态机定义直接包含在 CloudFormation 模板中,而无需借助 Fn::TransformFn::Include,这将允许您使用 Fn::Sub 替换占位符。

根据您将状态机定义放入 S3 的推理,从架构的角度来看,这甚至可能有意义,因为您不再需要单独的 S3 存储桶来存储状态机定义,并且定义将是紧密的耦合到 CloudFormation 堆栈,该堆栈(大概)创建了在状态机中使用的 AWS Lambda 函数。

恐怕这是迄今为止唯一可能的解决方案,因为 Fn::Sub 在这方面相当有限。即使您将状态机定义作为字符串提供,可以在模板中引用(例如作为参数),您也只能将引用替换为状态机定义字符串,而不能替换该字符串内的任何内容。

关于amazon-web-services - 如何同时使用 Fn::Include 和 Fn::Sub?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57647851/

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