如何将无服务器 Step Function/状态机/Lambda 构建嵌套到现有 AWS CloudFormation ElasticBeanstalk 应用程序中?

Posted

技术标签:

【中文标题】如何将无服务器 Step Function/状态机/Lambda 构建嵌套到现有 AWS CloudFormation ElasticBeanstalk 应用程序中?【英文标题】:How can I nest a serverless Step Function / State Machine / Lambda build into an existing AWS CloudFormation ElasticBeanstalk Application? 【发布时间】:2019-10-16 15:49:14 【问题描述】:

我使用 AWS Step Functions 编写了一项服务。我想将其集成到我们现有的 Elastic Beanstalk 开发过程中的应用程序中,其中我们有不同的开发、暂存和生产应用程序。这些阶段中的每一个都有特定于应用程序的环境变量,我也想将其引入我的 Lambda 函数中。

我目前没有使用 SAM,但如有必要,我可以移植来完成此操作。

以下是我的 serverless.yml 文件的简化配置。

service:
  name: small-service

plugins:
  - serverless-webpack
  - serverless-step-functions
  - serverless-pseudo-parameters

provider:
  name: aws
  runtime: nodejs8.10
  stage: dev
  region: us-east-2
  iamRoleStatements:
    - Effect: "Allow"
      Action:
       - "s3:*"
      Resource:  "Fn::Join": ["", ["arn:aws:s3:::S3-bucket-name", "/*" ] ] 

functions:
  connect:
    handler: handler.connect

stepFunctions:
  stateMachines:
    smallService:
      name: small-service-$self:provider.stage
      definition:
        Comment: Service that connects to things
        StartAt: Connect
        States:
          Connect:
            Type: Task
            Resource: arn:aws:lambda:#AWS::Region:#AWS::AccountId:function:$self:service-$self:provider.stage-connect
            End: true

如何将 step 函数动态部署到不同的 beanstalk 应用程序中?如何从 Step Functions 中访问 ElasticBeanstalk 环境属性?

有没有更好的方法将环境 .env 变量动态导入 EB 之外的无服务器应用程序?我们正在将该服务集成到更大的 AWS 应用程序开发工作流程中,是否有更“无服务器”的方式来做到这一点?

【问题讨论】:

【参考方案1】:

将您的环境变量移至SSM Parameter Store。然后你可以

    reference SSM parameters in your serverless.yaml,或 在每次 Lambda 调用开始时获取 SSM 参数 (see e.g. here)

请注意,前一种方法需要重新部署您的 Lambda 以接收最新的 SSM 参数,而后者总是获取最新的参数值。

【讨论】:

谢谢,这正是我最终要做的。不幸的是,其余的应用程序和服务依赖于 CloudFormation 环境变量。有什么方法可以统一它们而不需要更改堆栈上的所有其他服务? 您可以refer to SSM parameters from Cloudformation。例如,当您添加 AWS::SSM::Parameter::Value<String> 类型的 Cloudformation 参数并将其值设置为 SSM 参数的名称时,将在堆栈评估时获取 SSM 参数值。

以上是关于如何将无服务器 Step Function/状态机/Lambda 构建嵌套到现有 AWS CloudFormation ElasticBeanstalk 应用程序中?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Step Functions:如何访问在 catch 块中生成异常的状态的输入?

如何在不重新部署整个堆栈的情况下部署单个 Step Function?

如何将无服务器代码部署到 AWS API Gateway 中的阶段

虚拟机自动获得IP 地址

运动速度不在状态机中更新

Step Function 中的 AWS Batch 作业执行结果