Можно ли / рекомендуется использовать `sam build` в AWS CodeBuild? - PullRequest
0 голосов
/ 31 декабря 2018

Этот вопрос возник из этого .Теперь, когда я лучше понимаю, что там происходит, и работоспособное, хотя и несовершенное, решение , я отправляю более сфокусированное продолжение (я все еще новичок в StackOverflow- пожалуйста, дайте мне знать, если это противоречит этикету, и я должен продолжить на оригинале).

Эта страница предполагает, что " Вы используете AWS CodeBuild для сборки, локального тестированияи упакуйте ваше безсерверное приложение".Однако, когда я включаю команду sam build в свой buildspec.yml, я получаю следующий вывод журнала, предполагая, что sam не установлен на образах CodeBuild:

[Container] 2018/12/31 11:41:49 Running command sam build --use-container 
sh: 1: sam: not found 

[Container] 2018/12/31 11:41:49 Command did not exit successfully sam build --use-container exit status 127 
[Container] 2018/12/31 11:41:49 Phase complete: BUILD Success: false 
[Container] 2018/12/31 11:41:49 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: sam build --use-container. Reason: exit status 127 

Более того, если я установлю SAMс pip install aws-sam-cli, выполнение sam build --use-container в CodeBuild дает ошибку .sam build само по себе успешно, но так как он не устанавливает тестовые зависимости, мне все равно нужно использовать pip install -r tests/requirements-test.txt -t ., чтобы иметь возможность запускать тесты в CodeBuild.Более того, this предполагает, что --use-container требуется для " пакетов, которые имеют встроенные программы ").

Это заставляет меня задуматься, пытаюсь ли я это сделатьчто-то не так. Каков рекомендуемый способ построения сервисов SAM в рабочем процессе CI / CD на AWS ?

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Если вы хотите запустить команду sam build в CodeBuild, вы должны сначала установить aws-sam-cli (вероятно, на этапе install buildspec.yml file), т. Е. С помощью команды pip install aws-sam-cli или аналогичной. Параметр

--use-container в команде sam build заставит команду получить образ Docker, напоминающий среду выполнения AWS Lambda, а затем запуститьКонтейнер из этого образа Docker в pip install (если ваша лямбда написана на Python) зависимости вашей функции для создания вашего пакета развертывания лямбда.Это обеспечит использование лямбда-функции собственных скомпилированных библиотек, совместимых с фактической средой выполнения AWS Lambda.

Поэтому, если вы укажете опцию --use-container для команды sam build, выполняемой в CodeBuild, вы такженеобходимо убедиться, что образ Docker, используемый вашим проектом сборки CodeBuild, должен поддерживать среду выполнения Docker.

Самый простой способ - использовать среду сборки CodeBuild с именем aws/codebuild/standard:2.0 Образ Docker. Включение среды выполнения Docker в свойстве runtime-versions в установках фаз вашего buildspec.yml .Также вам может потребоваться включить PrevilegedMode вашего проекта CodeBuild для подключения к демону Docker из вашей среды сборки.

0 голосов
/ 31 декабря 2018

Пожалуйста, смотрите ниже для buildspec.yaml, который работает для меня при использовании AWS SAM с AWS CodeBuild , с cloudformation.yml

phases:
  build:
    commands:
      - pip install --user aws-sam-cli
      - USER_BASE_PATH=$(python -m site --user-base)
      - export PATH=$PATH:$USER_BASE_PATH/bin
      - sam build -t cloudformation.yml
      - aws cloudformation package --template-file .aws-sam/build/template.yaml --s3-bucket <TARGET_S3_BUCKET> --output-template-file cloudformation-packaged.yaml
      - aws s3 cp ./cloudformation-packaged.yaml <TARGET_S3_BUCKET>/cloudformation-packaged.yaml   

В результатеЯ получаю пакет развертывания и упакованный шаблон облачной информации в TARGET_S3_BUCKET.

Для каждой функции в папке ./src у меня есть файл requirements.txt, который включает в себя все зависимости,но я не запускаю pip install -r requirements.txt вручную.

...