Назад | Перейти на главную страницу

Ссылаясь на существующий ресурс в шаблоне CF

У нас есть несколько скриптов CloudFormation для создания нашего стека.

Теперь мы хотим написать (автоматизировать) новые скрипты, которые будут использоваться только для обновления 1 конкретный ресурс (бизнес-требование).

Я застрял в том, как ссылаться к существующему ресурсу в моем скрипте обновления? Я знаю есть REF функция, но я считаю, что это используется только для ссылки на ресурсы в том же скрипте. Есть ли что-то, что AWS предоставляет для ссылки на существующий ресурс?

Я читал, что мы можем использовать parameters а есть ли другой вариант?

Недавно мне пришлось сделать это для некоторых многоуровневых развертываний, которые ссылались на общие службы. Помимо параметров, есть еще несколько вариантов:

  1. Именованный экспорт: это хороший вариант, если у вас есть ресурсы, которые были созданы отдельным стеком CloudFormation, и вы просто хотите сослаться на них (например, администратор инфраструктуры настраивает часть нижнего уровня для развертывания группы приложений поверх).

  2. Замена: во многих случаях вам может потребоваться просто сослаться на известное имя, которое является постоянным, но ARN варьируется в зависимости от идентификатора учетной записи AWS. Ты можешь использовать Fn::Sub расширить несколько «Псевдопараметры» например идентификатор учетной записи или регион:

    "TaskRoleArn": { "Fn::Sub": "arn:aws:iam::${AWS::AccountId}:role/YourSharedServiceTaskRole" }

  3. Параметры SSM: у вас может быть динамическая ссылка, которая извлекает свойство SSM. Это удобно, поскольку оно полностью абстрагируется от источника этого значения - оно может быть создано CloudFormation, но буквально также может быть кем-то, кто запускает одноразовый сценарий командной строки, и поддерживает безопасное хранение паролей и других секретов, которые можно настроить для предотвращения извлечение кем-либо, кроме целевой службы (например, роль экземпляра EC2 / ECS IAM) - например, я использовал это для хранения учетных данных SES:

    aws ssm put-parameter --type String --name "/project/mail/EmailHost" --value email-smtp.us-east-1.amazonaws.com aws ssm put-parameter --type String --name "/project/mail/EmailUser" --value <SES_ACCESS_KEY> aws ssm put-parameter --type SecureString --key-id alias/your-well-known-iam-kms-alias --name "/project/mail/EmailPassword" --value <SES PASSWORD>`

  4. Макросы: об этом было недавно объявлено, и это очень мощный механизм, в котором вы можете иметь функцию Lambda, которая возвращает произвольный JSON для включения в шаблон. Это может делать практически все, от предоставления дополнительных ресурсов, которые создатель стека CloudFormation не имеет прямого разрешения на создание, до поиска значений в базе данных и возврата шаблона, настроенного, например, с выделениями VPC CIDR из большего пула резервирования, который является управляется головной организацией.

Амазонки CDK (в настоящее время находится в стадии предварительного просмотра для разработчиков на момент написания) предлагает способ импорта существующих ресурсов:

Если вам нужно сослаться на ресурс, такой как корзина Amazon S3 или VPC, который определен вне вашего приложения CDK, вы можете использовать статические методы Xxxx.import (...), доступные в конструкциях AWS. Например, вы можете использовать метод Bucket.import () для получения объекта BucketRef, который можно использовать в большинстве мест, где требуется ведро. Этот шаблон позволяет обрабатывать ресурсы, определенные вне вашего приложения, как если бы они были частью вашего приложения.

Источник: https://docs.aws.amazon.com/CDK/latest/userguide/aws_construct_lib.html

Он также позволяет импортировать существующие шаблоны CloudFormation: https://docs.aws.amazon.com/CDK/latest/userguide/use_cfn_template.html

Надеюсь, это поможет.

AWS использует ARN (имя ресурса AWS) для ссылки на ресурсы. Вот общее форматирование:

arn: partition: service: region: account-id: resource arn: partition: service: region: account-id: resourcetype / resource arn: partition: service: region: account-id: resourcetype: resource

Вы можете найти дополнительную информацию http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html

Также вы можете найти конкретный ARN, используемый ресурсами, на которые вы хотите ссылаться, на их страницах служебной документации.