Cloudformation развернуть AWS SDK для JavaScript - PullRequest
0 голосов
/ 13 сентября 2018

Глядя на AWS SDK для Javascript, кажется, что мы можем только 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 и могу поместить это в сценарий оболочки, в то время как большинство людей, с которыми я работаю, используют Windows, и я не хочу использовать Windows Batch, а вместо этого кроссплатформеннуюрешение, такое как npm и, следовательно, aws-sdk for javascript approach.

Как бы вы выполнили cloudformation.deployStack, используя SDK и NOT CLI?

1 Ответ

0 голосов
/ 03 октября 2018

Текущий AWS SDK для Javascript не в настоящее время имеет метод развертывания, однако команда deploy CLI AWS является оболочкой:

Развертывает указанный шаблон 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'
}
...