CloudFormation ke Terraform Alat cli sederhana untuk menghasilkan konfigurasi Terraform untuk template CloudFormation yang ada. | |
Proyek Buatan Manusia . Dikelola oleh @nathanielks. |
Alat CLI node ini digunakan untuk menghasilkan file konfigurasi Terraform serta status Terraform sehingga Anda dapat menggunakan Terraform untuk mengelola templat CloudFormation. Untuk memperjelas lebih lanjut, ini tidak menghasilkan konfigurasi terraform untuk ketentuan CloudFormation sumber daya individual, ini menghasilkan sumber daya aws_cloudformation_stack
sehingga Anda dapat mengelola tumpukan CloudFormation yang ada dengan Terraform alih-alih atau bersama dengan Konsol AWS dan CLI.
npm i -g @humanmade/cf-to-tf
Karena ini dirancang untuk menghasilkan sumber daya Terraform, sebaiknya instal terraform
. Anda dapat menginstal biner itu sendiri atau menggunakan alat seperti brew
untuk mengelolanya untuk Anda.
Disarankan juga untuk menginstal json2hcl
karena ini akan membantu dalam memproses output dari cf-to-tf
nantinya.
Mari gunakan respons CloudFormation Stack berikut sebagai contoh:
{
"Stacks": [
{
"StackId": "arn:aws:cloudformation:eu-central-1:123456789012:stack/foobarbaz/255491f0-71b8-11e7-a154-500c52a6cefe",
"Description": "FooBar Stack",
"Parameters": [
{
"ParameterValue": "bar",
"ParameterKey": "foo"
},
{
"ParameterValue": "baz",
"ParameterKey": "bar"
},
{
"ParameterValue": "qux",
"ParameterKey": "baz"
}
],
"Tags": [
{
"Value": "bar",
"Key": "foo"
},
{
"Value": "qux",
"Key": "baz"
}
],
"Outputs": [
{
"Description": "Foobarbaz",
"OutputKey": "FooBarBaz",
"OutputValue": "output value"
}
],
"CreationTime": "2017-07-26T04:08:57.266Z",
"Capabilities": [
"CAPABILITY_IAM"
],
"StackName": "foobarbaz",
"NotificationARNs": [],
"StackStatus": "CREATE_COMPLETE",
"DisableRollback": true
}
]
}
Menjalankan cf-to-tf --stack foobarbaz config | json2hcl | cf-to-tf clean-hcl | terraform fmt -
akan menghasilkan konfigurasi berikut:
resource "aws_cloudformation_stack" "network" {
capabilities = ["CAPABILITY_IAM"]
disable_rollback = true
name = "foobarbaz"
parameters = {
foo = "bar"
bar = "baz"
baz = "qux"
}
tags = {
foo = "bar"
baz = "qux"
}
}
Usage: cf-to-tf [options] [command]
Options:
-s, --stack <stack> The CloudFormation stack to import
-r, --resource-name <resourceName> The name to assign the terraform resource
-h, --help output usage information
Commands:
config Generates Terraform configuration in JSON
state Generates Terraform state file in JSON
template Prints the CloudFormation Stack Template
clean-hcl Cleans generated HCL according to my preferences
Alat ini dirancang untuk digunakan bersama dengan alat lainnya. Ini hanya akan menampilkan data ke STDOUT
dan dirancang untuk disalurkan ke program lain untuk menulis file ke suatu lokasi. Misalnya, untuk menghasilkan file konfigurasi untuk tumpukan bernama lambda-resources
, kita dapat melakukan hal berikut:
cf-to-tf -s lambda-resources config | tee main.tf.json
Perintah ini akan mengambil tumpukan CloudFormation bernama lambda-resources
dan menghasilkan konfigurasi Terraform yang diperlukan untuknya. Kami kemudian menyalurkan output ke tee
yang akan menulis ke file bernama main.tf.json
. Karena HCL kompatibel dengan JSON, Terraform dapat membaca main.tf.json
secara asli.
Untuk menghasilkan status Terraform terkait untuk tumpukan CloudFormation ini, Anda perlu menjalankan perintah berikut:
cf-to-tf -s lambda-resources state | tee terraform.tfstate
Ini akan membuat file negara dari awal. Ini mengasumsikan Anda belum memiliki file status. Saya sedang mempertimbangkan untuk memperbarui alat agar hanya menulis bagian sumber daya negara bagian sehingga dapat ditambahkan ke file negara yang sudah ada, tapi itu bukan prioritas utama.
Kedua perintah ini akan menghasilkan keluaran JSON terkompresi, yang berarti spasi telah dihapus. Untuk mencetak keluaran secara cantik agar lebih mudah dibaca, Anda dapat menyalurkan keluaran ke jq
, lalu ke tee
:
cf-to-tf -s lambda-resources config | jq '.' | tee main.tf.json
cf-to-tf -s lambda-resources state | jq '.' | tee terraform.tfstate
Dimungkinkan juga untuk menggunakan alat bernama json2hcl
untuk menghasilkan HCL:
cf-to-tf -s lambda-resources config | json2hcl | tee main.tf
Sayangnya, meskipun json2hcl
menghasilkan HCL yang valid, formatnya tidak saya suka. Untuk mengatasi masalah tersebut, perintah clean-hcl
juga tersedia. Untuk menghasilkan HCL dalam format yang biasa Anda lihat, Anda dapat menjalankan rantai ini:
cf-to-tf -s lambda-resources config | json2hcl | cf-to-tf clean-hcl | terraform fmt - | tee main.tf
Kami melakukan hal yang sama yang kami lakukan sebelumnya, tapi sekarang kami juga menyalurkan hasilnya ke cf-to-tf clean-hcl
yang memformat file dengan cara tertentu, lalu menyalurkannya ke terraform fmt -
yang memformat file lebih lanjut (terutama, alat ini menyelaraskan =
dan menambahkan baris baru jika diperlukan).
Dimungkinkan juga untuk membaca data tumpukan cf-to-tf
dari STDIN
. Misalnya, jika Anda memiliki respons JSON dari panggilan aws-cli
yang disimpan dalam variabel untuk digunakan kembali, Anda dapat melakukan hal berikut:
JSON="$(aws cloudformation describe-stacks --stack-name lambda-resources)"
echo "$JSON" | cf-to-tf -s - config
Perintah ini menggunakan AWS SDK di bawah tenda untuk mengambil detail tumpukan CloudFormation, jadi atur kredensial autentikasi Anda seperti biasa ( ~/.aws/credentials
, AWS_PROFILE
, AWS_REGION
, dll).
Untuk contoh cara menggunakan skrip ini dalam operasi batch yang mengimpor banyak tumpukan di beberapa wilayah, lihat Intisari ini.