本日も乙スマートフォン用の表示で見る本日も乙ただの自己満足な備忘録。terraform[toc]Terraformでオートスケール設定をしています。設定の記述が簡単なのが良いですね。BlueとGreenのオートスケーリンググループ(ASG)の台数を設定ファイルに外だし(variables.tfvarsなど)にしたいと考えていました。ASGの台数はデプロイ状況によって可変であるため、スクリプトで設定ファイルを変更しようと考えていました。Language)というJSON互換でありながらも形式が全く異なるため、パースをどうするかを考えていました。Terraform及び周辺ツールのソースやドキュメントを漁りながら調べた結果、Go言語で書かれているHashicorp製のHCLライブラリが使えることがわかりました。今回は、そのライブラリを使ってHCLのパースと生成方法についてサンプルスクリプトを元に紹介します。サンプルサンプルはGitHubに公開しています。https://github.com/ohsawa0515/hcl_parse_sample試し方は簡単です。ensureすると依存パッケージ(hashicorp/hcl)がvendorディレクトリ以下にダウンロードされます。runすれば実行されます。variables.tfvarsをパース、中身を編集して、HCLを生成した結果を標準出力します。パースjsonやyamlと同じようにUnmarshal関数を使うだけなので簡単です。&variables)値を書き換えやすくするため、データ構造に合わせて構造体を定義していましたが、ただパースするだけならinterface型で十分です。生成パースに比べて生成が若干面倒くさいです。いうのも、jsonやyamlのようなMarshal関数がないからです。Marshal相当の上手いこと生成してくれる関数は実装されていませんでした。JSON型として生成した後、HCL型にパースし直して整形&出力するといった方法をとりました。回りくどい方法ですが、これ以外の方法が見つからなかったです。効率の良いやり方があればコメントください。json2hclというJSONとHCLを相互変換するツールを参考にしています。log.Fatal(err.Error())}fmt.Println(out)最後にHCLファイルをパース及び生成する方法を紹介しました。Keyにダブルクオーテーションが入ったりと若干不満があるので、hcl.Marshalを早く実装してもらいたいものです。月別アーカイブはてなブログをはじめよう!ohsawa0515さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。