适用于多环境的 AWS SAM/Cloudformation - 将逗号分隔列表转换为 ARN

AWS SAM/Cloudformation for multi environment - convert comma delimited list to ARNs

我正在使用 AWS SAM 为多环境设置生成基础代码。我想为 dev/test/prod 使用相同的 template.yaml 文件和单独的配置文件(即 samconfig.yaml)。 我如何将现有层 ARN 分配给 lambda 函数,因为这些层具有不同的名称和版本?

SAM 模板:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Parameters:
  Client:
    Type: String
  Stage:
    Type: String
  Layers:
    Type: CommaDelimitedList
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub ${Client}-${Stage}-lambda
      Layers:
        # - !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:request-layer:2'

samconfig.toml:

version = 0.1
[default]
[default.deploy]
[default.deploy.parameters]
.
.
.
parameter_overrides = "Layers=\"request-layer:2,pandas-layer:5\""

我的方法是使用逗号分隔的参数,我想使用内部函数将其转换为 ARN 列表,但我不能。

由于Layers是你的CommaDelimitedList类型的参数,你可以按如下方式使用它:

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub ${Client}-${Stage}-lambda
      Layers: !Ref Layers