У нас есть несколько скриптов CloudFormation для создания нашего стека.
Теперь мы хотим написать (автоматизировать) новые скрипты, которые будут использоваться только для обновления 1 конкретный ресурс (бизнес-требование).
Я застрял в том, как ссылаться к существующему ресурсу в моем скрипте обновления? Я знаю есть REF
функция, но я считаю, что это используется только для ссылки на ресурсы в том же скрипте. Есть ли что-то, что AWS предоставляет для ссылки на существующий ресурс?
Я читал, что мы можем использовать parameters
а есть ли другой вариант?
Недавно мне пришлось сделать это для некоторых многоуровневых развертываний, которые ссылались на общие службы. Помимо параметров, есть еще несколько вариантов:
Именованный экспорт: это хороший вариант, если у вас есть ресурсы, которые были созданы отдельным стеком CloudFormation, и вы просто хотите сослаться на них (например, администратор инфраструктуры настраивает часть нижнего уровня для развертывания группы приложений поверх).
Замена: во многих случаях вам может потребоваться просто сослаться на известное имя, которое является постоянным, но ARN варьируется в зависимости от идентификатора учетной записи AWS. Ты можешь использовать Fn::Sub
расширить несколько «Псевдопараметры» например идентификатор учетной записи или регион:
"TaskRoleArn": {
"Fn::Sub": "arn:aws:iam::${AWS::AccountId}:role/YourSharedServiceTaskRole"
}
Параметры 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>`
Макросы: об этом было недавно объявлено, и это очень мощный механизм, в котором вы можете иметь функцию 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, используемый ресурсами, на которые вы хотите ссылаться, на их страницах служебной документации.