Передача параметров шаблона

Мы рассматриваем использование aws-cdk в нашем конвейере CI/CD. Мы должны иметь возможность передавать параметры в шаблон во время сборки, чтобы он мог генерировать артефакт для использования во время развертывания. Я вижу, что мы можем использовать файл cdk.json для указания свойств контекста, но это на самом деле не помещает значения в сам шаблон CloudFormation. Просто дает вам доступ к ним в коде.

Я пробовал что-то вроде этого:

const servicenameprop = new PipelinePrerequisitesProps();
servicenameprop.default = 'hello';
servicenameprop.type = 'String';

const serviceNameParameter = new Parameter(this, 'servicename', servicenameprop);
serviceNameParameter.value = new Token(servicename, 'servicename');

Это приводит к тому, что параметры появляются на вкладке панели мониторинга CloudFormation, но значения не заданы, только значения по умолчанию. Это поддерживается в настоящее время? Если нет, планируется ли это на будущее?

1 ответ

Решение

CDK в настоящее время не поддерживает передачу параметров в качестве части cdk deploy, Если вы используете параметры в своих стеках, вам придется самостоятельно управлять отправкой CloudFormation, по крайней мере, сейчас. Например, вы можете использовать интерфейс командной строки AWS вместе с результатом выполнения cdk synth (ты можешь использовать cdk synth -o <directory>).

Вообще говоря, мы поощряем создание стеков CDK, которые являются максимально конкретными. Передача контекста в ваше приложение непосредственно во время "синтеза" позволит вашему коду анализировать их и создавать более простые и более предсказуемые шаблоны (например, вы не можете поместить ресурс в шаблон вместо добавления условия и ресурса с условием).

С выпуском CDK версии 1.28.0 теперь можно передавать параметры CloudFormation вdeploy команда.

public class ExampleApp {
    public static void main(final String[] args) {
        App app = new App();

        new ExampleStack(app, "ExampleStack");

        app.synth();
    }
}

и вот простой стек, который ничего не делает:

public class ExampleStack extends Stack {

    public ExampleStack(final Construct scope, final String id) {
        this(scope, id, null);
    }

    public ExampleStack(final Construct scope, final String id, final StackProps props) {
        super(scope, id, props);

        CfnParameter someVar = CfnParameter.Builder.create(this, "SomeVar")
                .description("Some variable that can be passed in at deploy-time.")
                .type("String")
                .build();

        // rest of stack here
    }
}

Вы можете запустить cdk synth и выведите куда-нибудь шаблон, затем запустите

cdk --app path/to/cdk.out deploy ExampleStack --parameters "ExampleStack:SomeVar=SomeValue"

и параметр будет передан в стек во время развертывания.

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