Я написал инструмент для обработки загрузки стековых зависимостей, включая вложенные шаблоны CloudFormation и не встроенные лямбда-функции.
В настоящее время AWS Клей не обрабатывался, так как я еще не пробовал в любом проекте. Но это должно быть легко расширить для поддержки Glue.
Зависимости были определены в отдельном файле конфигурации, и часть кода в инструменте отвечает за конфигурацию. Вот пример конфигурации:
Вложенные шаблоны CloudFormation:
# DEPENDS=( <ParameterName>=<NestedTemplate> )
#
# Required: Yes if has nested template, otherwise No
# Default: None
# Syntax:
# <ParameterName>: The name of template parameter that is referred at the
# value of nested template property `TemplateURL`.
# <NestedTemplate>: A local path or a S3 URL starting with `s3://` or
# `https://` pointing to the nested template.
# The nested templates at local is going to be uploaded
# to S3 Bucket automatically during the deployment.
# Description:
# Double quote the pairs which contain whitespaces or special characters.
# Use `#` to comment out.
# ---
# Example:
# DEPENDS=(
# NestedTemplateFooURL=/path/to/nested/foo/stack.json
# NestedTemplateBarURL=/path/to/nested/bar/stack.json
# )
Лямбда-функции:
# LAMBDA=( <S3BucketParameterName>:<S3KeyParameterName>=<LambdaFunction> )
#
# Required: Yes if has None-inline Lambda Function, otherwise No
# Default: None
# Syntax:
# <S3BucketParameterName>: The name of template parameter that is referred
# at the value of Lambda property `Code.S3Bucket`.
# <S3KeyParameterName>: The name of template parameter that is referred
# at the value of Lambda property `Code.S3Key`.
# <LambdaFunction>: A local path or a S3 URL starting with `s3://` pointing
# to the Lambda Function.
# The Lambda Functions at local is going to be zipped and
# uploaded to S3 Bucket automatically during the deployment.
# Description:
# Double quote the pairs which contain whitespaces or special characters.
# Use `#` to comment out.
# ---
# Example:
# DEPENDS=(
# S3BucketForLambdaFoo:S3KeyForLambdaFoo=/path/to/LambdaFoo.py
# S3BucketForLambdaBar:S3KeyForLambdaBar=s3://mybucket/LambdaBar.py
# )
Инструменты написаны на bash и состоят из 2 частей:
- x sh: он работает как bash каркас библиотеки.
- x sh -lib / aws: это библиотека x sh.
Код, который вам может понадобиться развернуть, находится в x sh -lib / aws / functions / cfn / deploy. sh.
Пример команды развертывания выглядит следующим образом:
$ xsh aws/cfn/deploy -C /path/to/your/template-and-config-dir -t stack.json -c sample.conf
Я собираюсь абстрагировать зависимости, такие как шаблон CloudFormation, функции Lambda и Glue, в единый интерфейс. как для конфигов, так и для обработчиков. Это облегчит добавление новых обработчиков зависимостей в развертыватель.