首页 > 解决方案 > 无服务器:部署时无服务器错误

问题描述

由于我是无服务器堆栈的新手,因此我试图创建一个用于部署的 yml 文件(NodeJS lambda 函数)。但是我可以在部署时发现语法错误。

请在 serverless.yml 下面找到

service: secretManager

provider:
  name: aws
  runtime: nodejs10.x
  timeout: 300
  memorySize: 512
  region: us-east-2
  stage: ${opt:stage,'v1'}
  role: secretManager
  stackTags:
    ApplicationId: ACL_9999999
    Product: secretManager
    Project: secretManager

functions:
  getParams:
    handler: getFromParamStore.getParams
    role: secretManager

resources:
  Resources:
    secretManager:
      Type: AWS::IAM::Role
      Properties:
        Policies:
        - PolicyName: myPolicy
          PolicyDocument:
            Version: '2017'
            Statement:
              - Effect: Allow 
                Action:
                  - logs:CreateLogGroup
                  - logs:CreateLogStream
                  - logs:PutLogEvents
                  - ssm:GetParameters
                  - ssm:GetParameter
                  - ssm:DescribeParameters
                Resource:
                  - 'Fn::Join':
                    - ':'
                    - 'arn:aws:logs'
                    - 'log-group:/aws/lambda/*:*:*'
                    - 'arn:aws:ssm:*:*:parameter/*'

package:
  include:
    - serverless.yml

部署无服务器时会引发错误。

错误:CloudFormation 模板无效:模板错误:每个 Fn::Join 对象都需要两个参数,(1) 字符串分隔符和 (2) 要连接的字符串列表或返回字符串列表的函数(例如Fn::GetAZs) 加入。

在此处输入图像描述

请帮忙

标签: aws-serverless

解决方案


正确的使用方法Fn::Join是:

resources:
  Resources:
    secretManagerLambdaRole:
      Type: AWS::IAM::Role
      Properties:
        Policies:
          - PolicyName: myPolicy
            PolicyDocument:
              Version: '2017'
              Statement:
                - Effect: Allow
                  Action:
                    - logs:CreateLogGroup
                    - logs:CreateLogStream
                    - logs:PutLogEvents
                    - ssm:GetParameters
                    - ssm:GetParameter
                    - ssm:DescribeParameters
                  Resource:
                    - 'Fn::Join':
                        - ':' # delimiter
                        - - 'arn:aws:logs'
                          - 'log-group:/aws/lambda/*:*:*'
                          - 'arn:aws:ssm:*:*:parameter/*'

第一个参数:是分隔符,第二个参数是要连接的字符串列表。


推荐阅读