【问题标题】:A valid SSM parameter to satisfy the declaration 'ssm:MY_ENV_VAR' not found未找到满足声明“ssm:MY_ENV_VAR”的有效 SSM 参数
【发布时间】:2020-09-15 07:57:39
【问题描述】:

我正在离线运行 Serverless,并且已经根据阶段配置了环境变量。

provider:
    name: aws
    stage: ${opt:stage,'dev'}
    environment:
      MY_ENV_VAR: ${self:custom.myEnvVar.${self:provider.stage}}
custom:
stages:
    - dev
    - prod
myEnvVar:
    dev: ${env:MY_ENV_VAR}
    prod: ${ssm:MY_ENV_VAR}

当我运行serverless offline start 时,它会发出警告

满足声明的有效 SSM 参数 找不到“ssm:MY_ENV_VAR”。

默认情况下,stage 是dev,那么它为什么要尝试访问 SSM 参数存储?

任何帮助将不胜感激

谢谢

【问题讨论】:

    标签: serverless-framework serverless-offline


    【解决方案1】:

    我在使用最新版本的无服务器 (2.70.0) 时遇到了同样的问题。

    我还将 SSM 参数引用为每个阶段的自定义变量。

    无服务器尝试获取它不需要的值(基于阶段)。所以失败了。因为它没有获取它们的权限。

    例如使用旧变量,它会抛出警告(仍然错误,但至少它运行):

    sls invoke local -f app -s local -p test/events/test.json
    
    #variablesResolutionMode: 20210326
    
     Serverless Warning --------------------------------------
     
      A valid SSM parameter to satisfy the declaration 'ssm:production-variable-here' could not be found.
    

    并且使用新的可变分辨率...

    variablesResolutionMode: 20210326
    

    ...你得到一个错误:

    Cannot resolve variable at "custom.production-variable-here": User: arn:aws:iam::etc is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:etc because no identity-based policy allows the ssm:GetParameter action
    

    错误是正确的:不允许用户获取值。但它没有必要获得价值。因为舞台不需要 SSM 变量。

    【讨论】:

      【解决方案2】:

      根据您的 YAML 文件,首先要考虑的是自定义下 myEnvVar 变量的间距/填充。

      当我尝试 sls print 时,我遇到了同样的错误,问题是 sls 尝试从 SSM 验证/读取变量。因此,如果它不存在,则无论在哪个阶段执行,构建的 sls 都会失败。

      以下脚本适合我:

      provider:
          name: aws
          runtime: python3.8
          environment:
              MY_ENV_VAR: ${self:custom.myEnvVar.${self:provider.stage}}
          region: eu-west-1
      
      custom:
          myEnvVar:
              dev: 'some value'
              prod: ${ssm:some-custom-config}
      

      但要考虑到:

      1. 该变量必须存在于 SSM 中。
      2. 必须在 ssm:parameter 所在的位置设置正确的区域。

      【讨论】:

      • 抱歉,这篇文章中的填充是错误的,实际上它是正确的。因此,仍然需要提供 SSM 变量。问题是我们已经根据环境限制了对这些 ssm 参数的访问。
      猜你喜欢
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 2019-09-29
      • 2021-07-20
      • 2013-09-20
      相关资源
      最近更新 更多