Передача параметров шаблона
Мы рассматриваем использование 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"
и параметр будет передан в стек во время развертывания.