首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cloudFormation模板验证错误:如何拆分serverless.yml文件

cloudFormation模板验证错误:如何拆分serverless.yml文件
EN

Stack Overflow用户
提问于 2020-03-29 21:46:26
回答 2查看 626关注 0票数 2

我在$$错误中遇到了臭名昭著的痛苦: CloudFormation模板是无效的:模板格式错误:资源数量,202,大于允许的最大值,200。

如何将其分成两部分,并交叉引用资源?

有人可以和我分享一个例子或者教我如何分割我的吗?在过去的几天里,我一直在研究aws文档和大量的论坛来解决这个问题,但是我不能完全理解我需要做什么。我只需要能够添加更多的函数/api调用。

Serverless.yml

代码语言:javascript
复制
service: p-app-api

# Create an optimized package for our functions
package:
  individually: true

plugins:
  - serverless-bundle # Package our functions with Webpack
  - serverless-offline
  - serverless-dotenv-plugin

provider:
  name: aws
  runtime: nodejs10.x
  stage: dev
  region: us-east-2
  environment:
    stripeSecretKey: ${env:STRIPE_SECRET_KEY}
  # 'iamRoleStatements' defines the permission policy for the Lambda function.
  # In this case Lambda functions are granted with permissions to access DynamoDB.
  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:DescribeTable
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: "arn:aws:dynamodb:us-east-2:433684495079:table/data"
    - Effect: Allow
      Action:
        - dynamodb:Query
        - dynamodb:Scan
      Resource: "arn:aws:dynamodb:us-east-2:433684495079:table/data/index/zipCode-packageSelected-index"
    - Effect: Allow
      Action:
        - dynamodb:Query
        - dynamodb:Scan
      Resource: "arn:aws:dynamodb:us-east-2:433684495079:table/data/index/jobId-index"
    - Effect: Allow
      Action:
        - dynamodb:DescribeTable
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: "arn:aws:dynamodb:us-east-2:433684495079:table/Service"
    - Effect: Allow
      Action:
        - dynamodb:Query
        - dynamodb:Scan
      Resource: "arn:aws:dynamodb:us-east-2:433684495079:table/Service/index/index"
    - Effect: Allow
      Action:
        - s3:*
      Resource: "arn:aws:s3:::service/public/*"
    - Effect: Allow
      Action:
        - dynamodb:DescribeTable
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: "arn:aws:dynamodb:us-east-2:433684495079:table/Service"
    - Effect: Allow
      Action:
        - dynamodb:Query
        - dynamodb:Scan
      Resource: "arn:aws:dynamodb:us-east-2:433684495079:table/data/index/packageSelected"

functions:
  # Defines an HTTP API endpoint that calls the main function in create.js
  # - path: url path is /notes
  # - method: POST request
  # - cors: enabled CORS (Cross-Origin Resource Sharing) for browser cross
  #     domain api call
  # - authorizer: authenticate using the AWS IAM role
  create:
    handler: create.main
    events:
      - http:
          path: data
          method: post
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  get:
    # Defines an HTTP API endpoint that calls the main function in get.js
    # - path: url path is /notes/{id}
    # - method: GET request
    handler: get.main
    events:
      - http:
          path: data/{id}
          method: get
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  list:
    # Defines an HTTP API endpoint that calls the main function in list.js
    # - path: url path is /notes
    # - method: GET request
    handler: list.main
    events:
      - http:
          path: data
          method: get
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  update:
    # Defines an HTTP API endpoint that calls the main function in update.js
    # - path: url path is /notes/{id}
    # - method: PUT request
    handler: update.main
    events:
      - http:
          path: data/{id}
          method: put
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  delete:
    # Defines an HTTP API endpoint that calls the main function in delete.js
    # - path: url path is /notes/{id}
    # - method: DELETE request
    handler: delete.main
    events:
      - http:
          path: data/{id}
          method: delete
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  createCustomer:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: createCustomer.main
    events:
      - http:
          path: createCustomer
          method: post
          cors: true
          authorizer:
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  updateCustomer:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: updateCustomer.main
    events:
      - http:
          path: updateCustomer
          method: post
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  listCustomerCard:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: listCustomerCard.main
    events:
      - http:
          path: listCustomerCard/{id}
          method: get
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  deleteCard:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: DeleteCard.main
    events:
      - http:
          path: deleteCard/{id}/{card}
          method: delete
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  getCustomerInfo:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: getCustomerInfo.main
    events:
      - http:
          path: getCustomerInfo/{id}
          method: get
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  updateCustomerCard:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: updateCustomerCard.main
    events:
      - http:
          path: updateCustomerCard/{id}
          method: post
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  createInvoice:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: createInvoice.main
    events:
      - http:
          path: createInvoice
          method: post
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  deleteInvoice:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: deleteInvoice.main
    events:
      - http:
          path: deleteInvoice/{id}
          method: delete
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  listInvoices:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: listInvoices.main
    events:
      - http:
          path: listInvoices/{id}
          method: get
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  ListNewJobs:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: ListNewJobs.main
    events:
      - http:
          path: data/ListNewJobs
          method: get
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  jobIndex:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: jobIndex.main
    events:
      - http:
          path: data/jobIndex
          method: get
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  updateJobStatus:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: updateJobStatus.main
    events:
      - http:
          path: data/jobStatus
          method: put
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  createNewJob:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: createNewJob.main
    events:
      - http:
          path: ServiceJobs/createNewJob
          method: post
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  listMyNewJobs:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: listMyNewJobs.main
    events:
      - http:
          path: ServiceJobs/listMyNewJobs
          method: get
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  DeleteMyNewJob:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: DeleteMyNewJob.main
    events:
      - http:
          path: ServiceJobs/DeleteMyNewJob/{id}
          method: delete
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  UpdateServiceJobList:
    # Defines an HTTP API endpoint that calls the main function in update.js
    # - path: url path is /notes/{id}
    # - method: PUT request
    handler: UpdateServiceJobList.main
    events:
      - http:
          path: ServicesJobs/Update
          method: put
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  ServiceIndex:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: ServiceIndex.main
    events:
      - http:
          path: ServiceJobs/ServiceIndex
          method: get
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  UpdateMyJob:
    # Defines an HTTP API endpoint that calls the main function in update.js
    # - path: url path is /notes/{id}
    # - method: PUT request
    handler: UpdateMyJob.main
    events:
      - http:
          path: ServiceJobs/UpdateMyJob
          method: put
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  PayInvoiceStripe:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: PayInvoiceStripe.main
    events:
      - http:
          path: stripe/PayInvoice
          method: post
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  StripeNewContractorAccount:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: StripeNewContractorAccount.main
    events:
      - http:
          path: stripe/NewContractorAccount
          method: post
          cors: true
          authorizer:
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  serviceInfoPut:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: serviceInfoPut.main
    events:
      - http:
          path: serviceInfo/post
          method: post
          cors: true
          authorizer:
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
  ListJobsForEdit:
    # Defines an HTTP API endpoint that calls the main function in billing.js
    # - path: url path is /billing
    # - method: POST request
    handler: ListJobsForEdit.main
    events:
      - http:
          path: data/index/packageSelected
          method: get
          cors: true
          authorizer: aws_iam
          arn: aws:cognito-idp:us-east-2:433684495079:userpool/us-east-2_Q0sUvw4Qy
# Create our resources with separate CloudFormation templates
resources:
  # API Gateway Errors
  - ${file(resources/api-gateway-errors.yml)}
EN

回答 2

Stack Overflow用户

发布于 2020-03-29 22:19:38

您需要的是使用CloudFormation嵌套栈,它们允许您使用AWS::CloudFormation::Stack资源类型引用另一个CloudFormation堆栈。

然后,您可以将参数作为嵌套堆栈的输入提供,并在部署它们之后检索它们的输出,这是主堆栈和子堆栈之间的通信方式。

下面是嵌套堆栈引用的示例。

代码语言:javascript
复制
AWSTemplateFormatVersion: "2010-09-09"
Resources: 
  MyNestedStack: 
    Type: AWS::CloudFormation::Stack
    Properties: 
      TemplateURL: "https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template"
      Parameters:
        Param1: "a-value"
        Param2: "another-value"

请注意,TemplateURL可以指向文件系统上的S3桶链接或文件。一旦您想要部署您的堆栈,它们就需要是使用AWS的包装

票数 0
EN

Stack Overflow用户

发布于 2020-04-04 13:34:49

serverless-plugin-split-stacks是要使用的插件。

Docs在这里:无服务器分裂堆栈

它将帮助您将堆栈划分为嵌套堆栈,最大限制为20。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60921152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档