【问题标题】:AWS Serverless, CloudFormation : Error, Trying to populate non string value into a string for variableAWS Serverless,CloudFormation:错误,尝试将非字符串值填充到变量的字符串中
【发布时间】:2020-03-14 23:11:47
【问题描述】:

我正在使用无服务器框架在 AWS 云上部署我的应用程序。

https://serverless.com/

我想在我的 serverless.yml 文件中使用 AWS 账户 ID 的值,并且我想将账户 ID 导出为环境变量,以便可以从 Lambda 函数中访问它。

基于这个 lambda 函数的值,我想创建一些资源(比如 IAM 角色等),它们引用这个 accountId 变量。

但是当我尝试部署堆栈时,出现以下错误,

尝试将非字符串值填充到变量的字符串中 ${self:custom.accountId}。请确认房产价值 是一个字符串。

我的 Serverless.yml 文件如下

custom:
  accountId : !Ref "AWS::AccountId"


provider:
  name: aws
  runtime: go1.x
  stage: dev

  region: us-east-1

  environment:
     ACCOUNT_ID : ${self:custom.accountId}       
     myRoleArn: arn:aws:iam::${self:custom.accountId}:role/xxxxxxxx

有没有办法引用 serverless.yml 文件中 Account Id 的值?

【问题讨论】:

  • 当我回到我的电脑时,我会写一个正确的答案,但谷歌无服务器插件伪参数。

标签: amazon-web-services amazon-cloudformation serverless-framework aws-serverless


【解决方案1】:

您不能在 serverless.yml 中引用 AWS::AccountId,因为在创建 CloudFormation 模板时它不能完全转换。

解决方法是使用无服务器插件Pseudo Parameters

您可以使用 npm 安装插件。

npm install serverless-pseudo-parameters

您还需要将插件添加到 serverless.yml 文件中。

plugins:
  - serverless-pseudo-parameters

然后您可以使用 #{AWS::AccountId} 引用您的 AccountId

functions:
  helloWorld:
    handler: index.handler
    events:
      - http:
          path: /
          method: get
    environment:
      ACCOUNT_ID : #{AWS::AccountId}

请注意,引用以哈希而不是美元符号开头。

【讨论】:

  • 谢谢。我试过这个建议。我在 lambda 函数中使用 Account ID 的值作为环境变量。但我收到以下错误 - CloudFormation 模板无效:[/Resources/CfdemoapiLambdaFunction/Type/Environment/Variables/ACCOUNT_ID] 模板中不允许使用“null”值
  • 对不起,我应该更具体一些。因为问题是 AWS::AccountId 在 CloudFormation 中设置,所以您不能将其设置为无服务器变量。所以环境需要在功能层面进行设置。
  • 谢谢,我会在函数级别设置环境变量
猜你喜欢
  • 2020-03-20
  • 2018-08-25
  • 2022-10-17
  • 2021-07-22
  • 2022-01-14
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
相关资源
最近更新 更多