views4GCPのストレージサービスについてまとめてみた。Exp:141302017年10月より入社しました。これまでの技術分野は主にインフラ関係です。今後はGCPでフルスタック対応できるエンジニアを目指し日々いろいろと活動しています。TweetShareHatenaみんな大好きわたしも大好きなTerraformが0.12にバージョンアップして、早いもので1か月が経過しようとしています。Terraform0.12で採用されているHCL2はより柔軟な設定がかけたり、validateやplan時のチェックが強化されていたりと、なかなか興味深い機能が追加されていたります。この記事では差し当たって0.12ベースに移行するときに何を気を付けるべきかについてまとめてみました。0.12以降の新構文についてはあまり触れていません。Language)がバージョン2に更新されました。0.12以降の設定構文をHCL2、0.11以前の設定構文をHCL1と呼ぶことにします。0.12以降で使えない可能性があります。等がエラーになり、ツール等の実行に支障をきたす可能性もあります。古いものに固定している場合は、Providerのバージョンアップを先に実施する必要があります。サブコマンドが実装されています。checklistコマンドと呼ぶことにします。変更された際に明らかに構文エラーとなるものについて事前チェックを行うコマンドです。既存のtfファイルに対して読み取りのみ行い、tfファイル内容やstateファイルへの変更は行いません。このchecklistコマンドで特に問題無ければ以下のようなメッセージが出力されます。v0.12.チェック項目の詳細について以下に記載します。未対応のプロバイダがある場合にメッセージを出力します。checklistコマンドを実行した場合のメッセージ例です。アップグレードする必要があります。実行すると最新版にアップグレードされます。リソース名、エイリアス名HCL1では、リソース名の先頭文字に数字や記号を使うことができました。google_compute_subnetwork._012subHCL2では、リソース名の先頭文字はletter(A~Z,a~z)のみ許容される仕様となったため、リソース名の先頭文字がletter以外の場合は修正が必要になります。ファイル上のリソース名をtfファイルのリソース名と一致するようにします。ちなみに、同様の制約は、リソース名だけでなくプロバイダのエイリアス名にも適用されます。以下のようなエイリアス名はHCL2以降はエラーとなります。"${var.project_id}"}変数名(variable)HCL2では変数名として使用できない予約キーワードが追加されました。HCL1では使えますが、HCL2では予約キーワードとなり使用できなくなります。その他の使用できないキーワードについては下記ドキュメントを参照してください。Variable※ちなみに、変数名の先頭文字はリソース名と同様の制約はありません。リソース名と記述レベルを合わせるという意味では、変数名の先頭文字にletter以外を使わない方がよいと思います。HCL2ベースの構文にアップデートすることになります。サブコマンドがどのようなことを行うかについて説明します。upgradeコマンドと呼ぶことにします。コマンドは既存のtfファイルを変更してしまうため、コマンド実行前にtfファイルをバックアップしておくべきです。upgradeコマンド実行後の作業upgradeコマンドによりtfファイルのコードベースがHCL1からHCL2に修正されます。機械的に変更できない(もしくは、変更したが正しく動作しない可能性がある)記述については「TF-UPGRADE-TODO」というコメントが挿入されます。「TF-UPGRADE-TODO」のコメントが挿入された設定についてはユーザーが何らかチェックし、場合により手で修正する必要があります。実行すると、以下のようなメッセージが表示されます。value」に続けて「yes」と入力すると、tfファイルの自動修正が実施され、以下のようなメッセージが表示されます。0.12以降にバージョン制限する設定が追加されます。いうファイルが作成されます。コマンド実行すると既にアップグレードされている旨のメッセージが出力されます。両方の記述を許容していました。いう記述が残っているとHCL2では構文エラーとなります。いうブロックタイプの記述を許容していました。いう記述が残っているとHCL2では構文エラーとなります。