Cloudformation部署适用于JavaScript的AWS开发工具包

时间:2018-09-13 00:58:21

标签: node.js aws-sdk amazon-cloudformation aws-sdk-js

看一下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.deployStackSDK CLI来执行NOT

1 个答案:

答案 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'
}