Артефакт, который я создаю и разворачиваю, содержит номер версии. Он имеет вид:
universe-0.0.1-SNAPSHOT.zip
, где 0.0.1-SNAPSHOT
- версия.
Теперь шаблон CloudFormation имеет обработчик, сопоставленный через функцию Fn :: Join:
UFunctionCelestial:
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket: !Ref ArtefactRepositoryBucket
S3Key: !Join [ '', [!Sub '${AWS::StackName}-', !Ref CodeVersion, '.zip' ] ]
Handler: !Join [ '', [!Sub '${AWS::StackName}-', !Ref CodeVersion, '/src/lambdas/celestial_persist_function.handler'] ]
Role: !GetAtt [ UIAMRoleFunctionServiceRoleCelestial, Arn ]
Runtime: python3.7
Environment:
Variables:
CELESTIAL_TABLE_NAME: !Ref UTableCelestial
PRIMARY_KEY: id
DependsOn:
- UIAMRoleFunctionServiceRolePolicyCelestial
- UIAMRoleFunctionServiceRoleCelestial
...SNIP...
Parameters:
ArtefactRepositoryBucket:
Type: String
Description: S3 bucket for asset "foundry-cdk/CelestialHandler/Code"
CodeVersion:
Type: String
Description: S3 key for asset version "foundry-cdk/CelestialHandler/Code"
Я думаю, что большая часть этого не имеет значения, за исключением свойства Handler
Теперь версия кода !Ref CodeVersion
для этой строки, по некоторым причинам, оценивается как 0/0/1-SNAPSHOT
, хотя я и вызываю этот шаблон с командой:
aws2 cloudformation deploy \
--template-file ${CF_TEMPLATE_FILE} \
--region ${ACCOUNT_REGION} \
--stack-name ${PROJECT_NAME} \
--force-upload \
--capabilities CAPABILITY_IAM \
--parameter-overrides \
ArtefactRepositoryBucket=${S3_AWS_RELEASES_BUCKET} \
CodeVersion=${APPLICATION_VERSION}
Я повторил ${APPLICATION_VERSION}
и, да, он оценивается в 0.0.1-SNAPSHOT
и все же, когда я go на консоль и посмотреть на моей лямбде я получаю сообщение:
лямбда не может найти файл юниверс-0/0/1-SNAPSHOT / src / lambdas / celestial_persist_function.py. Убедитесь, что ваш обработчик поддерживает формат: file-name.method.
Итак, мой вопрос: почему CloudFormation превращает мои точки в косые черты и дает лямбда-ссылку задницу?