AWS SAM CLI игнорирует мои Python зависимости во время сборки, упаковки и развертывания - PullRequest
2 голосов
/ 20 января 2020

Я пытаюсь развернуть AWS лямбда-функцию с помощью инструмента SAM CLI из MacOS, не используя контейнеры Docker.

  • SAM CLI версии 0.4.0
  • Python 3.8 время выполнения для функции Lambda
  • Python 3.7, установленной локально на MacOS
  • У меня есть файл requirements.txt, в том же каталоге, что и мой файл функции Lambda

Requirements.txt

boto3
botostubs

Сценарий развертывания (PowerShell)

sam build --template-file $InputTemplate
sam package --region $AWSRegion --template-file $InputTemplate --profile $ProfileName --s3-bucket $BucketName --output-template-file $OutputTemplate
sam deploy --region $AWSRegion --profile $ProfileName --template-file $OutputTemplate --stack-name $StackName --capabilities CAPABILITY_NAMED_IAM

Фактическое поведение

SAM CLI игнорирует мой requirements.txt файл, и только развертывание моего исходного кода. Это приводит к следующей ошибке при тестировании моей функции.

{
  "errorMessage": "Unable to import module 'xxxxxxxxxxxxxx': No module named 'botostubs'",
  "errorType": "Runtime.ImportModuleError"
}

Ожидаемое поведение

SAM CLI упаковывает объявленные зависимости Python в requirements.txt вместе с моим исходным кодом .

Вопрос : Как я могу гарантировать, что SAM CLI загрузит и упакует мои Python зависимости вместе с моим исходным кодом? Я следовал документации, насколько мне известно.

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-using-build.html

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Только что понял, читая о команде sam build чуть глубже. Я не осознавал, что он создает подпапку с именем .aws-sam/build/ и сохраняет там измененный шаблон.

Я обновил свои команды и пути, и теперь он работает просто отлично.

$InputTemplate = "$PSScriptRoot/cloudformation.yml"
$BuiltTemplate = "$PSScriptRoot/.aws-sam/build/template.yaml"
$BucketName = 'xxxxxxx'
$AWSRegion = 'xxxxxx'
$StackName = 'xxxxxx'

# Package and deploy the application
sam build --template-file $InputTemplate
sam package --region $AWSRegion --template-file $BuiltTemplate --profile $ProfileName --s3-bucket $BucketName
sam deploy --region $AWSRegion --profile $ProfileName --template-file $BuiltTemplate --stack-name $StackName --capabilities CAPABILITY_NAMED_IAM --s3-bucket $BucketName
0 голосов
/ 24 марта 2020

Была похожая проблема. Решил это, изменив каталог в папку сборки (не использует эти переменные оболочки каталога)

sam build --use-container
cd .aws-sam/build/
sam package --template-file template.yaml --s3-bucket sdd-s3-basebucket --output-template-file packaged.yaml
sam deploy --template-file ./packaged.yaml --stack-name prod --capabilities CAPABILITY_IAM --region eu-central-1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...