Amazon web services 我可以在状态机定义文件中使用全局变量吗?
我正在使用AWS SAM进行一个无服务器项目,该项目由lambda和状态机资源组成(请参见下面的SAM模板)。我想知道是否有一种方法可以在我的状态机定义文件中定义一个“全局”变量,就像我们在SAM模板中使用的方法一样 我想这样做的原因是缩短我的状态机定义。现在,有一些状态使用了完全相同的属性,例如我的Fargate任务的Amazon web services 我可以在状态机定义文件中使用全局变量吗?,amazon-web-services,aws-step-functions,Amazon Web Services,Aws Step Functions,我正在使用AWS SAM进行一个无服务器项目,该项目由lambda和状态机资源组成(请参见下面的SAM模板)。我想知道是否有一种方法可以在我的状态机定义文件中定义一个“全局”变量,就像我们在SAM模板中使用的方法一样 我想这样做的原因是缩短我的状态机定义。现在,有一些状态使用了完全相同的属性,例如我的Fargate任务的NetworkConfiguration块: definition.asl.json { "StartAt": "Generate Conf
NetworkConfiguration
块:
definition.asl.json
{
"StartAt": "Generate Config",
"States": {
"Generate Config": {
"Type": "Task",
"Resource": "${GenerateConfigFunctionArn}",
"Next": "ETL"
},
"ETL": {
"Type": "Task",
"Resource": "arn:aws:states:::ecs:runTask.sync",
"Next": "ETL",
"Parameters": {
"LaunchType": "FARGATE",
"Cluster": "arn:aws:ecs:region:11111111:cluster/clustername",
"TaskDefinition": "arn:aws:ecs:region:11111111:task-definition/taskdef",
"NetworkConfiguration": {
"AwsvpcConfiguration": {
"Subnets": [
"subnet-00d610225d369486e"
],
"SecurityGroups": [
"sg-016650ff9ecd28a9a"
],
"AssignPublicIp": "ENABLED"
}
},
"Overrides": {
"ContainerOverrides": [
{
"Name": "Phase-1-start",
"Environment": [
{
"Name": "COMMAND",
"Value": "etl"
}
]
}
]
}
}
},
"Well_Calc": {
"Type": "Task",
"Resource": "arn:aws:states:::ecs:runTask.sync",
"End": true,
"Parameters": {
"LaunchType": "FARGATE",
"Cluster": "arn:aws:ecs:region:11111111:cluster/clustername",
"TaskDefinition": "arn:aws:ecs:region:11111111:task-definition/taskdef",
"NetworkConfiguration": {
"AwsvpcConfiguration": {
"Subnets": [
"subnet-00d610225d369486e"
],
"SecurityGroups": [
"sg-016650ff9ecd28a9a"
],
"AssignPublicIp": "ENABLED"
}
},
"Overrides": {
"ContainerOverrides": [
{
"Name": "Phase-1-start",
"Environment": [
{
"Name": "COMMAND",
"Value": "calculation"
}
]
}
]
}
}
}
}
}
SAM模板
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Resources:
MySAMPOC:
Type: AWS::Serverless::StateMachine
Properties:
DefinitionUri: stateMachine/definition.asl.json
DefinitionSubstitutions:
GenerateConfigFunctionArn: !GetAtt GenerateConfigFunction.Arn
GenerateConfigFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: functions/generate_config
Handler: app.lambda_handler
Runtime: python3.8
状态机定义是否支持使用全局变量(或类似变量)?全局变量目前不支持
AWS::Serverless::StateMachine
。您可以考虑的一些备选方案:
- 对某些值使用
:定义替换
- Step函数现在在开发工具中支持YAML,所以从JSON切换到YAML至少可以节省一点缩进和大括号李>
- 使用CDK定义您的状态机。您可以创建封装公共属性的自定义构造。显然,这不是山姆,但您可以将山姆资源与CDK应用程序集成在一起,或者考虑将应用程序的部分迁移到CDK。李>