gpt4 book ai didi

amazon-web-services - AWS 步骤函数 : List Definition Substitutions

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

我在 CloudFormation 中定义了一个步骤函数,它使用 arn:aws:states:::ecs:runTask.waitForTaskToken 启动 ECS 任务。此任务将子网列表作为参数,并且至少需要定义 1 个子网。示例:

# Step Function
MyECSTask:
Type: Task
Resource: arn:aws:states:::ecs:runTask.waitForTaskToken
Parameters:
...
NetworkConfiguration:
AwsvpcConfiguration:
...
Subnets:
- <subnet 1>
- <subnet 2>

我在 StringList SSM 参数中定义了多个子网,我正尝试通过 DefinitionSubstitutions 属性使用 Cloud Formation 将其传递给 step 函数。但是,我无法将 SSM StringList 参数作为列表传递给 Step Function 工作流。将值按原样直接传递到 Step Functions 不起作用:它要么出错,要么将它作为单个字符串值传递(这是不久之前的事,所以我记不清结果了)。

相反,对我有用的唯一解决方案是在 CloudFormation 中拆分 StringList 值,并将每个子网作为单独的替换传递给 Step Function:

# Step Function
MyECSTask:
Type: Task
Resource: arn:aws:states:::ecs:runTask.waitForTaskToken
Parameters:
...
NetworkConfiguration:
AwsvpcConfiguration:
...
Subnets:
- ${Subnet1}
- ${Subnet2}
- ${Subnet3}
# Cloud Formation
Parameters:
ListOfSubnets:
Type: AWS::SSM::Parameter::Value<CommaDelimitedList>

Resources:
MyStateMachine:
Type: AWS::Serverless::StateMachine
Properties:
DefinitionUri: step-functions.asl.yaml
DefinitionSubstitutions:
Subnet1: !Select ["0", !Ref ListOfSubnets]
Subnet2: !Select ["1", !Ref ListOfSubnets]
Subnet3: !Select ["2", !Ref ListOfSubnets]

这种方法的主要问题是它假定有 3 个子网,这对于我们选择部署此工作流的所有区域来说都是不正确的。

有什么方法可以将 ListOfSubnets 作为 DefinitionSubstitution 直接传递到 step 函数中?换句话说,是否可以将 Step Function 替换视为列表而不是字符串?

最佳答案

我已经通过使用 Cloud Formation 模板中的 !Join 函数完成了您正在尝试做的事情,从列表参数构建一个字符串,该字符串由双引号逗号双引号 (", ").

此外,我还创建了 JSON 格式的 Step 函数定义文件。

在您的示例中,您的 Step 函数定义将被修改为:

# Step Function
"MyECSTask":{
"Type": "Task",
"Resource": "arn:aws:states:::ecs:runTask.waitForTaskToken",
"Parameters": {
...
"NetworkConfiguration":{
"AwsvpcConfiguration":{
...
"Subnets": [ "${Subnets}" ],

然后您的 Cloud Formation 模板将修改如下:

Parameters:
ListOfSubnets:
Type: AWS::SSM::Parameter::Value<List<AWS::EC2::Subnet::Id>>
Resources:
MyStateMachine:
Type: AWS::Serverless::StateMachine
Properties:
DefinitionUri: step-functions.asl.json
DefinitionSubstitutions:
Subnets: !Join ['","', !Ref ListOfSubnets]

关于amazon-web-services - AWS 步骤函数 : List Definition Substitutions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69997150/

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