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

How can I nest a serverless Step Function / State Machine / Lambda build into an existing AWS CloudFormation ElasticBeanstalk Application?

我使用 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

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

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

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

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

请注意,前一种方法需要 re-deploying 您的 Lambda 接收最新的 SSM 参数,而后者始终获取最新的参数值。