看一下Java的AWS开发工具包,看来我们只能create stacks
,但我正在寻找一种deploy
堆栈的方法。我将如何使用提供的SDK执行此操作?这是他们目前拥有的:
cloudformation.createStack(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
我希望有这样的东西:
cloudformation.deployStack(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
基本上,我想使用sdk而不是cli重新创建此命令:
aws cloudformation deploy --template-file /path_to_template/template.json --stack-name my-new-stack --parameter-overrides Key1=Value1 Key2=Value2 --tags Key1=Value1 Key2=Value2
这是因为我使用Linux,并且可以将其放置在shell脚本中,而我与之共事的大多数人都使用Windows,但我不想使用Windows Batch,而是使用了像npm这样的跨平台解决方案,因此aws-sdk for javascript approach
。
您将如何使用cloudformation.deployStack
和SDK
CLI来执行NOT
?
答案 0 :(得分:4)
当前用于Javascript的AWS sdk当前没有没有,但是,AWS CLI的deploy命令是包装器:
通过创建然后执行变更集来部署指定的AWS CloudFormation模板
考虑到这一点,我编写了以下代码:
const CloudformationInstance = new Cloudformation(accessParams)
CloudformationInstance.createChangeSet(changeSetParams, (err, data) => {
if (err) throw new Error(err, err.stack)
console.info('Succesfully created the ChangeSet: ', data)
CloudformationInstance.waitFor('changeSetCreateComplete', {ChangeSetName: config.changeSetName}, (err, data) => {
if (err) throw new Error(err, err.stack)
const { StackName } = data.Stacks[0]
CloudformationInstance.executeChangeSet({ StackName, ChangeSetName }, (err, data) => {
if (err) throw new Error(err, err.stack)
console.info('Succesfully finished creating the set: ', data)
})
})
})
注意: :changeSetType(changeSetParams的一部分)需要明确定义为 更新”。因此,使用类似:
const upsertParam = await CloudformationInstance.describeStacks(params, (err, data) => {
if(err) return 'CREATE'
return 'UPDATE'
}