Есть ли в Cloudformation что-то похожее на модули терраформ , где вы можете создать параметризованный шаблон (группу ресурсов, а не шаблон CF ), а затем использовать его в своем Шаблон CF несколько раз с разными параметрами?
В моих шаблонах CF я вижу много более ярких YAML, и я ищу способ его рефакторинга. Я использовал terraform раньше, и это обеспечивало эту функциональность.
Пример:
Я создаю много заданий AWS Glue, многие из них отличаются только двумя параметрами, но каждое определение состоит из 25 строк кода.
Resources:
myGlueJob1:
Type: AWS::Glue::Job
Properties:
ExecutionProperty:
MaxConcurrentRuns: 1
MaxRetries: 3
Name: myGlueJob1
Role: arn:aws:iam::xxxxxxx:role/XXXXXXXXXXXXXX
Command:
Name: glueetl
ScriptLocation: XXXXXX
DefaultArguments:
"--ga_project_id": PARAM1-THAT-DIFFERS
"--ga_view_id": PARAM2-THAT-DIFFERS
"--ga_service_account_keyfile": gc.key-SAME_FOR_ALL_RESOURCES
"--date": YESTERDAY-SAME_FOR_ALL_RESOURCES
"--temp_gcs_bucket": "foobar-SAME_FOR_ALL_RESOURCES"
"--output_path": "s3://some-s3-path-SAME_FOR_ALL_RESOURCES"
"--job-language": scala
"--class": GlueApp
"--TempDir": "s3://some-other-s3-path-SAME_FOR_ALL_RESOURCES"
"--extra-files": "s3://some-s3-path-SAME_FOR_ALL_RESOURCES"
"--extra-jars": "s3://looooooooooooooooooooooooots-of-s3-paths-SAME_FOR_ALL_RESOURCES"
myGlueJob2:
Type: AWS::Glue::Job
Properties:
ExecutionProperty:
MaxConcurrentRuns: 1
MaxRetries: 3
Name: myGlueJob2
Role: arn:aws:iam::xxxxxxx:role/XXXXXXXXXXXXXX
Command:
Name: glueetl
ScriptLocation: XXXXXX
DefaultArguments:
"--ga_project_id": PARAM1-THAT-DIFFERS
"--ga_view_id": PARAM2-THAT-DIFFERS
"--ga_service_account_keyfile": gc.key-SAME_FOR_ALL_RESOURCES
"--date": YESTERDAY-SAME_FOR_ALL_RESOURCES
"--temp_gcs_bucket": "foobar-SAME_FOR_ALL_RESOURCES"
"--output_path": "s3://some-s3-path-SAME_FOR_ALL_RESOURCES"
"--job-language": scala
"--class": GlueApp
"--TempDir": "s3://some-other-s3-path-SAME_FOR_ALL_RESOURCES"
"--extra-files": "s3://some-s3-path-SAME_FOR_ALL_RESOURCES"
"--extra-jars": "s3://looooooooooooooooooooooooots-of-s3-paths-SAME_FOR_ALL_RESOURCES"
Я могу представить решение, которое выглядит примерно так:
Module:
Type: Me::MyGlueJob
Resouces:
Type: AWS::Glue::Job
Properties:
ExecutionProperty:
MaxConcurrentRuns: 1
MaxRetries: 3
Name: myGlueJob2
Role: arn:aws:iam::xxxxxxx:role/XXXXXXXXXXXXXX
Command:
Name: glueetl
ScriptLocation: XXXXXX
DefaultArguments:
"--ga_project_id": {{ MY_PARAM1 }}
"--ga_view_id": {{ MY_PARAM2 }}
"--ga_service_account_keyfile": gc.key-SAME_FOR_ALL_RESOURCES
"--date": YESTERDAY-SAME_FOR_ALL_RESOURCES
"--temp_gcs_bucket": "foobar-SAME_FOR_ALL_RESOURCES"
"--output_path": "s3://some-s3-path-SAME_FOR_ALL_RESOURCES"
"--job-language": scala
"--class": GlueApp
"--TempDir": "s3://some-other-s3-path-SAME_FOR_ALL_RESOURCES"
"--extra-files": "s3://some-s3-path-SAME_FOR_ALL_RESOURCES"
"--extra-jars": "s3://looooooooooooooooooooooooots-of-s3-paths-SAME_FOR_ALL_RESOURCES"
Resources:
myGlueJob1:
Type: Me::MyGlueJob
Properties:
MY_PARAM1: value-for-job1
MY_PARAM2: value-for-job1
myGlueJob2:
Type: Me::MyGlueJob
Properties:
MY_PARAM1: value-for-job2
MY_PARAM2: value-for-job2
Буду очень признателен за любую подсказку о передовой практике.