如何使用 yaml 格式文件在 serverless.yml 中编写嵌套 IF,同时将其用于云形成?

Gur*_*ish 5 yaml amazon-web-services aws-cloudformation serverless-framework serverless-application-model

我试图在秘密管理器(创建的访问机密https://aws.amazon.com/secrets-manager/通过SSM(系统管理器- )https://docs.aws.amazon.com/systems-manager/latest /userguide/systems-manager-parameter-store.html ) 即 AWS 参数存储,并将其存储在serverless.yml文件中的自定义 YAML 变量中?我正在尝试通过无服务器框架(https://serverless.com/)实现云形成,并且我正在尝试在云形成中实现嵌套的 if 语句,以使用下面的代码实现上述内容。

 stage: &stage 'dev' #Hardcoded for now
 rdsMasterPassword:
 !If
  - !Equals [*stage,"prod"]
  - ${ssm:/aws/reference/secretsmanager/cred-prod~true:rdsMasterPassword}
  - !If 
      - !Equals [*stage,"staging"]
      - ${ssm:/aws/reference/secretsmanager/cred-staging~true:rdsMasterPassword}
      - ${ssm:/aws/reference/secretsmanager/cred-dev~true:rdsMasterPassword}
Run Code Online (Sandbox Code Playgroud)

我为此尝试了云形成内在函数 Fn::If ,但面临这个错误: Fn::If requires a list argument with the first element being a condition

css*_*ess 1

只是想指出,如果您希望根据环境加载不同的 SSM 路径,可以通过多种方式实现,如下所述

例如,我在加载 json 文件时度过了一段愉快的时光

-- serverless-staging.json --
{
  "ssm_path": "/path/to/staging/ssm/parameter"
}

-- serverless-prod.json --
{
  "ssm_path": "/path/to/prod/ssm/parameter"
}

-- serverless.yml --
...
stage: ${opt:stage, 'dev'}
environment:
  SSM_PATH: ${file(serverless-${self:provider.stage}.json):ssm_path}
... etc etc
Run Code Online (Sandbox Code Playgroud)

希望这对通过搜索到达这里的其他人有所帮助