Amazon web services AWS Serverless,CloudFormation:错误,试图将非字符串值填充到变量的字符串中

Amazon web services AWS Serverless,CloudFormation:错误,试图将非字符串值填充到变量的字符串中,amazon-web-services,amazon-cloudformation,serverless-framework,aws-serverless,Amazon Web Services,Amazon Cloudformation,Serverless Framework,Aws Serverless,我正在使用无服务器框架在AWS云上部署我的应用程序 https://serverless.com/ 我希望在serverless.yml文件中使用AWS帐户ID的值,并希望将Account ID导出为环境变量,以便可以从Lambda函数访问它 基于这个lambda函数的值,我想创建一些引用这个accountId变量的资源(比如IAM角色等) 但是当我尝试部署堆栈时,我得到以下错误 尝试将非字符串值填充到变量的字符串中 ${self:custom.accountId}。请确认财产的价值 这是一根

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

https://serverless.com/
我希望在serverless.yml文件中使用AWS帐户ID的值,并希望将Account ID导出为环境变量,以便可以从Lambda函数访问它

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

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

尝试将非字符串值填充到变量的字符串中 ${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文件中帐户Id的值吗?

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

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

您可以使用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\u ID]“null”值在TemplatesOrry中是不允许的,我应该更具体一些。因为问题在于AWS::AccountId是在CloudFormation中设置的,所以不能将其设置为无服务器变量。所以需要在函数级别设置环境。谢谢,我将在函数级别设置环境变量