【问题标题】:Cloudformation deploy aws sdk for javascriptCloudformation 为 javascript 部署 aws sdk
【发布时间】:2019-03-25 01:37:17
【问题描述】:

查看适用于 Javascript 的 AWS sdk,看来我们只能 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.

您将如何使用SDKNOT CLI 执行cloudformation.deployStack

【问题讨论】:

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


    【解决方案1】:

    当前适用于 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)需要明确定义为either“创建或更新”。所以使用类似的东西:

    const upsertParam = await CloudformationInstance.describeStacks(params, (err, data) => {
      if(err) return 'CREATE'
      return 'UPDATE'
    }
    

    【讨论】:

    • 谢谢,帮了大忙!!一些注意事项是waitFor 应该在createChangeSet 的回调中,否则会出现“资源不在堆栈中”错误。此外,waitFor('changeCreateComplete') 应该将 ChangeSetName 作为参数传递,而不是 StackName
    • @Emma 好呼唤,更新!
    猜你喜欢
    • 2017-10-21
    • 1970-01-01
    • 2018-10-01
    • 2018-08-06
    • 2020-06-24
    • 2018-07-19
    • 2013-08-25
    • 2023-03-28
    • 2020-01-04
    相关资源
    最近更新 更多