как включить несколько файлов ресурсов в SAM template.yml - PullRequest
0 голосов
/ 05 марта 2020

Я хочу записать свой yml-файл формирования облака в другой файл и загрузить их отдельно. Это легко сделать в безсерверной среде, но я не мог понять, как это сделать с SAM. Не могли бы вы помочь мне, как это сделать?

Я предоставил копию проекта ниже:

https://github.com/day2daychallenge/nest_application.git

my template.yml file:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  Sample SAM Template

# Create our resources with separate CloudFormation templates
resources:
  Resources:
    # Lambda function
    - ${file(resources/lambda-functions.yml)}

Файл моего ресурса (lambda-functions.yml) выглядит следующим образом:

  HelloWorldFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs12.x
      Events:
        HelloWorld:
          Type: Api 
          Properties:
            Path: /helloworld
            Method: get

структура моей папки. enter image description here

Edit4:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  Sample SAM Template

# Create our resources with separate CloudFormation templates resources:
Resources:
  yourApplicationAliasName:
    Type: AWS::Serverless::Application
    Properties:
      # Lambda function
      Location: ./resources/lambda-functions.yml

lambda-functions.yml содержимое:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: AWS Lambda function.
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: ../hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs12.x
      Events:
        HelloWorld:
          Type: Api 
          Properties:
            Path: /helloworld
            Method: get

my buildspe c .yml file :

version: 0.2
phases:
  install:
    runtime-versions:
      nodejs: 12
  pre_build:
    commands:
      - echo Install source NPM dependencies...
      - npm install
  build:
    commands:
      - echo packaging files by using cloudformation...
      - export BUCKET=sls-simple
      - aws cloudformation package --template-file template.yml --s3-bucket $BUCKET --output-template-file outputtemplate.yml
    finally:
      - echo This always runs even if the install command fails
artifacts:
  type: zip
  files:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
    - template.yml
    - outputtemplate.yml

Ошибка1 в сборке (решена):

Преобразование AWS :: Serverless-2016-10-31 завершилось с ошибкой: недопустимый документ безсерверной спецификации приложения. Количество найденных ошибок: 1. Структура шаблона SAM неверна. Требуется раздел «Ресурсы». Время создания

Ошибка2 при развертывании (выполнить набор изменений)

Не удалось создать следующие ресурсы: [yourApplicationAliasName]. , Откат запрошен пользователем. 2020-03-06 13:37:38 UTC + 0800 yourApplicationAliasName CREATE_FAILED Ошибка формата шаблона: необходимо указать хотя бы один элемент Resources.

Ошибка3 в разделе сборки

[Контейнер] 2020/03/07 15:24:43 Выполнение команды aws пакет облачной информации - файл-шаблона template.yml --s3-bucket $ BUCKET --output-template-file outputtemplate.yml

Невозможно загрузить артефакт ./resources/lambda-functions.yml, на который ссылается параметр Location ресурса yourApplicationAliasName. Невозможно загрузить артефакт hello-world / на него ссылается параметр CodeUri ресурса HelloWorldFunction. Параметр CodeUri ресурса HelloWorldFunction относится к несуществующему файлу или папке / codebuild / output / src606023065 / src / resources / hello-world

Error4: сборка кода теперь выполнена успешно, и я получаю ниже ошибка во время развертывания.

Ошибка формата шаблона: должен быть определен хотя бы один член ресурсов.

Не удалось создать следующие ресурсы: [yourApplicationAliasName]. , Откат по запросу пользователя.

1 Ответ

1 голос
/ 05 марта 2020

вы можете использовать свойство Location (https://docs.aws.amazon.com/de_de/serverless-application-model/latest/developerguide/serverless-sam-template-nested-applications.html)

В вашем случае должно быть что-то вроде

template.yml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  Sample SAM Template

# Create our resources with separate CloudFormation templates resources:
Resources:
  yourApplicationAliasName:
    Type: AWS::Serverless::Application
    Properties:
      # Lambda function
      Location: ./resources/lambda-functions.yml

и файл lambda-functions.yml

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: AWS Lambda function.
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs12.x
      Events:
        HelloWorld:
          Type: Api 
          Properties:
            Path: /helloworld
            Method: get

попробуйте использовать команду be sam для упаковки, как показано ниже:

sam package --template template.yml --output-template-file outputtemplate.yml --s3-bucket your-bucket-name

, затем вам нужно развернуть ее:

sam deploy --template-file outputtemplate.yml --stack-name your-bucket-name --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND

** не забудьте удалить свой предыдущий стек, если он есть.

Thx! .........

...