【问题标题】:Can I use Global variables in State Machine definition files?我可以在状态机定义文件中使用全局变量吗?
【发布时间】:2021-04-10 06:17:31
【问题描述】:

我正在使用 AWS SAM 开发一个无服务器项目,该项目由 lambda 和状态机资源组成(请参阅下面的 SAM 模板)。我想知道是否有一种方法可以在我的状态机定义文件中定义一个“全局”变量,就像我们可以将Globals 用于 SAM 模板一样。

我想这样做的原因是为了缩短我的状态机定义。现在有状态使用完全相同的属性,例如我的 Fargate 任务的 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 template

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

状态机定义是否支持使用 Globals(或类似的)?

【问题讨论】:

    标签: amazon-web-services aws-step-functions


    【解决方案1】:

    目前不支持 AWS::Serverless::StateMachine 的全局变量。您可以考虑一些替代方案:

    【讨论】:

    • 感谢您的回答和详细的建议!我想我会试试 DefinitionSubstitutions 看看它在我的情况下是如何工作的。
    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多