Включить существующие ресурсы AWS в стек облачной информации

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

7 ответов

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

Поскольку мы не предоставляем информацию о состоянии стека где-либо за пределами службы, которую вы можете изменить, единственный подход, который вы можете использовать, пока мы не предложим функцию принятия, - это либо сохранить метаданные о ресурсах в хранилище параметров, либо использовать пользовательский ресурс в качестве Оболочка для извлечения информации о базовом ресурсе и последующего ее отображения в стек через Fn::GetAtt.

Теперь вы, наконец, можете сделать это с помощью функции импорта ресурсов, ссылки:

https://github.com/aws/aws-sdk-js/blob/master/CHANGELOG.md

https://twitter.com/shortjared/status/1193985448164691970?s=21

Вы можете сделать это, передав информацию о существующих ресурсах в ваш стек через параметры. Вот пример того, как передать эти параметры в стек.

Прочтите этот пост в блоге Эрика Хаммонда, описывающий, как вы можете включить эти параметры в остальную часть стека. Описанный вариант использования немного отличается тем, что при необходимости они создают новые ресурсы, если они не были переданы, но общая структура применима к описанному вами случаю.

В этом случае я не думаю, что обнаружение дрейфа поможет вам, так как оно покажет различия между развернутыми ресурсами и конфигурацией, описанной в стеке. Ресурсы, определенные / созданные вне стека, проверяться не будут.

Amazons 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

CloudFormation теперь поддерживает импорт существующих ресурсов в стеки:

Объявление от AWS: AWS CloudFormation запускает импорт ресурсов

Инструкции На примере: ЗДЕСЬ

Cloudformer может помочь вам создать новый стек из существующих ресурсов, а затем вы можете добавить больше ресурсов в стек. Но не знаю, как "объединить" существующий стек с существующими ресурсами вне стека.

В моем случае мне нужно было импортировать значение ARN из существующего вывода SAM в моей учетной записи, чтобы я мог добавить правильную политику вызова в свой новый стек.

Я искал аналог SAM Fn::ImportValue, и обнаружил, что основной модуль имеет статический Fn.importValue метод, который вы можете использовать как таковой:

      const cdk = require('@aws-cdk/core');
const lambda = require('@aws-cdk/aws-lambda')

class MyStack extends cdk.Stack {
    constructor(scope, id, props) {
        super(scope, id, props);

        // The below line did the trick
        const arn = cdk.Fn.importValue(`your-sam-function-export-name`)
        const myLambda = lambda.Function.fromFunctionArn(this, 'myLambda', arn)
        // ...
    }
}


Ссылка: https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.Fn.html

Другие вопросы по тегам