Ошибка проверки шаблона cloudFormation: как разбить файл serverless.yml - PullRequest
1 голос
/ 30 марта 2020

Я столкнулся с печально известной болью в ошибке $ $: Шаблон CloudFormation недействителен: Ошибка формата шаблона: Количество ресурсов, 202, больше максимально допустимого, 200.

как мне разбить это на две части и дать перекрестную ссылку на ресурсы?

Может ли кто-нибудь поделиться со мной примером или показать мне, как разделить мой? За последние несколько дней я смотрел на aws документы и множество форумов, чтобы понять это, но я не совсем понимаю, что мне нужно делать. Мне просто нужно иметь возможность добавить больше функций / API-вызовов.

Serverless.yml

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)}

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

serverless-plugin-split-stacks - плагин для использования.

Документы здесь: безсерверный разделенный стек

это поможет вам разбить стек на вложенные стеки, максимальный лимит 20.

0 голосов
/ 30 марта 2020

То, что вы хотите, использует Вложенные стеки CloudFormation , они позволяют ссылаться на другой стек CloudFormation, используя тип ресурса AWS::CloudFormation::Stack.

Затем вы можете указать параметры в качестве входных данных для ваших вложенных стеков и извлечения их выходных данных после их развертывания. Это способ обмена данными между основным и вспомогательным стеками.

Ниже приведен пример ссылки на вложенные стеки.

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 Bucket или на файл в вашей файловой системе. Если вы хотите развернуть свои стеки, они должны быть упакованы с использованием AWS CLI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...