Crie um AWS Stack com cfndsl

Codificar manualmente seu modelo json CloudFormation não é divertido, então você decide usar cfndsl . Ótimo. Mas cfndsl envia o modelo para o console, então você precisa contornar isso para enviar seu modelo para a AWS.

Um template cfndsl bastante básico ( template.rb )

CloudFormation {
AWSTemplateFormatVersion "2010-09-09"
Description "My Stack"

Parameter("InstanceType") {
Description "Type of EC2 instance to launch"
Type "String"
Default "m1.medium"
}

Resource("Ec2Instance") {
Type "AWS::EC2::Instance"
Property("InstanceType", "t1.micro")
...
}

}

… que você avalia com cfndsl e redireciona a saída para uma string em vez da saída padrão.

def generate_template
results
= $stdout = StringIO.new

template
= CfnDsl::CloudFormationTemplate.new
template
.instance_eval(File.read('template.rb'), 'template.rb')

results
.close_write
results
.rewind
$stdout
= STDOUT

results
.read
end

Agora você pode enviar seu modelo json para AWS e ter sua pilha criada.

require 'cfndsl'
require
'aws-sdk'
require
'stringio'

def create_stack
client
= AWS::CloudFormation::Client.new(region: 'ap-southeast-2')
client
.create_stack(stack_name: 'MyStack', template_body: generate_template)
end