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

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

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

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

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

6
задан 21 March 2017 в 20:44
4 ответа

AWS использует АРН (Имя ресурса AWS) для ссылки на ресурсы. Здесь представлено общее форматирование:

arn:partition:service:region:account-id:resource арн:раздел:сервис:регион:аккаунт-ид:тип ресурса/ресурс arn:partition:service:region:account-id:resourcetype:resource

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

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

.
-1
ответ дан 3 December 2019 в 00:42

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

  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-параметр --type String --name "/ project / mail / EmailUser" --value aws ssm put-parameter --type SecureString --key-id alias / your-well-known-iam-kms-alias --name "/ project / mail / EmailPassword" --value `

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

2
ответ дан 3 December 2019 в 00:42

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

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

Source: 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

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

0
ответ дан 3 December 2019 в 00:42

Если вы знаете имена своего ресурса, вы можете построить ресурс ARN по переменным и именам следующим образом:

Queue: !Sub arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:alarms-queue-${Environment}
0
ответ дан 5 December 2020 в 09:50

Теги

Похожие вопросы