как включить несколько файлов ресурсов в SAM template.yml

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

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

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

мой файл 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:
    # 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

моя структура папок. введите здесь описание изображения

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

мой файл buildspec.yml:

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 Ошибка формата шаблона: должен быть определен хотя бы один элемент ресурсов.

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

[Контейнер] 2020/03/07 15:24:43 Запуск команды aws cloudformation package —template-file template.yml —s3-bucket $ BUCKET —output-template-file outputtemplate.yml

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

Ошибка 4: сборка кода выполнена успешно, и при развертывании появляется сообщение об ошибке ниже.

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

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

использовать вложенные стеки. используйте Type: AWS :: CloudFormation :: Stack в качестве ресурса с TemplateURL в качестве свойства, указывающего на расположение. SAM помогает здесь docs.aws.amazon.com/AWSCloudFormation / latest / UserGuide /   —  person Amir    schedule 05.03.2020

См. также:  Почему эта ошибка? Подключиться к sts.amazonaws.com:443 [sts.amazonaws.com/54.239.29.25] не удалось: время ожидания подключения истекло: com.amazonaws.SdkClientException
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. Amir

    вы можете использовать свойство 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
    

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

    Спасибо!………

    @pepe: tqvm для предоставленного решения, теперь мое приложение может быть построено, но не выполняется на этапе развертывания. Любая идея? Ошибка преобразования AWS :: Serverless-2016-10-31: Недействительный документ спецификации бессерверного приложения. Количество обнаруженных ошибок: 1. Неверная структура шаблона SAM. Раздел «Ресурсы» обязателен person Amir; 05.03.2020

    Привет @amir, я только что отредактировал ответ, чтобы включить приложение. Вы можете попробовать? person Amir; 06.03.2020

    Спасибо за вашу помощь. теперь развертывание прошло успешно, но невозможно выполнить набор изменений. Не удалось создать следующие ресурсы: [yourApplicationAliasName]. . Откат запрошен пользователем. 2020-03-06 13:37:38 UTC + 0800 yourApplicationAliasName CREATE_FAILED Ошибка формата шаблона: должен быть определен хотя бы один элемент ресурсов. мой отступ правильный для lambda-function.yml? person Amir; 06.03.2020

    Привет @amir, я думаю, проблема была в файле lambda-functions.yml. Я отредактировал ответ, чтобы исправить это. Ты можешь попробовать? person Amir; 06.03.2020

    в вашем коде была проблема с отступом, я исправил это, но во время сборки у меня возникла новая ошибка. Я отредактировал свой вопрос с последними деталями. теперь ошибка довольно забавна для меня, Невозможно загрузить артефакт ./resources/lambda-functions.yml, на который ссылается параметр Location вашего ресурсаApplicationAliasName. Невозможно загрузить артефакт hello-world / на который ссылается параметр CodeUri ресурса HelloWorldFunction. Параметр CodeUri ресурса HelloWorldFunction относится к несуществующему файлу или папке / codebuild / output / src606023065 / src / resources / hello-world person Amir; 07.03.2020

    поскольку я помещаю lambda-functions.yml в папку ресурсов, нужно ли мне менять CodeUri с hello-world / на CodeUri: ../hello-world/? person Amir; 07.03.2020

    Привет @amir, я так не думаю. person Amir; 07.03.2020

    Есть идеи об ошибке 3? развертывание сборки также не создает приложение должным образом. Я имею в виду, что он просто копирует шаблон в папку .aws-sam. person Amir; 07.03.2020

    Привет @amir, можешь опубликовать структуру каталогов? потому что я думаю, вам нужно будет использовать флаг —base-dir в этом случае. person Amir; 07.03.2020

    Я также добавил свою структуру папок. где мне нужно добавить —base-dir? person Amir; 07.03.2020

    отлично, да … в таком случае вам нужно изменить CodeUri на ../hello-world :) person Amir; 07.03.2020

    теперь сборка успешно выполняется конвейером кода, но не может быть развернута. :( Ошибка формата шаблона: должен быть определен хотя бы один элемент ресурсов. Не удалось создать следующие ресурсы: [yourApplicationAliasName].. Откат запрошен пользователем. person Amir; 07.03.2020

    Позвольте нам продолжить это обсуждение в чате. person Amir; 07.03.2020

    Я добавил образец URL проекта для вашей справки. github.com/day2daychallenge/nest_application.git person Amir; 11.03.2020

    Привет, @amir, вы пробовали использовать sam вместо aws cloudformation для сборки / развертывания? person Amir; 11.03.2020

    Нет, я не пробовал Сэм, вы рекомендуете использовать какую-то конкретную команду? это правильная ссылка для перехода? документы. aws.amazon.com/serverless-application-model/latest/ person Amir; 11.03.2020

  2. Amir

    @amir было бы любопытно узнать от вас, разобрались ли вы с этим. Для тех, кто ищет это, насколько я видел, это не сработает, потому что вложенные стеки, похоже, не поддерживают преобразования (пока) в CloudFormation.

    В этой проблеме упоминается, что вложенные стеки не могут использовать преобразуется как SAM, и в этом закрытом выпуске GitHub , один из разработчиков AWS SAM CLI отметил Закрытие, поскольку мы еще не поддерживаем вложенные шаблоны в сборке SAM или любые другие команды, кроме package. Мы должны создать общую проблему для этой поддержки.

    Пожалуйста, дайте высокую оценку дорожной карте CF, чтобы попросить AWS поддержать ее.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: