2022/12/10
Terraform 入門
今回の記事は、筆者が担当の仕事であるTerraformを使ったインフラ構築についてです。Terraformの良さと実際に使って使ってGoogle Cloudのcloud storageにbucketを構築する手順を説明します。インフラ構築の経験がない筆者でもすぐ使いこなせるようになりました。これからGoogle CloudやAWSなどのクラウドサービスを触ってみようと思っている方、またはクラウド上でインフラは構築できるけどTerraformでのコード化に興味がある方にぜひ読んでいただきたいです。
はじめに
クラウドを学び始めてしばらくすると、Infrastructure as Code(IaC)という言葉を見かけます。インフラをコード化できることを知りました。そして、HashiCorp社が提供するTerraformは近年エンジニアにとても人気のあるIaCツールです。今回はTerraformについて紹介します。
クラウドサービス環境の開発においてIaCの必要性は?
従来のインフラ構築は人の手で行っていました。設計書に従ってコマンドを打っていく作業は、規模が大きくなると非常に手間がかかり、時間や人員のコストが非常に高いです。
また、人の手で行う作業であるため、いくら注意を払って作業しても人為的なミスは防げないという問題点もありました。確かに、クラウド側が提供するマネージメントのコンソール画面を操作すれば簡単に構築でき、すぐ完了しますが、規模が大きければ大きいほど煩雑になることは変わりないです。
IaCは、ソフトウェア開発の工程をインフラの自動的に生成するアプローチです。コードとしてのインフラによって、開発者はクラウド環境での変更と作成をより効率的に管理し、コントロールできます。仮想マシン、その周りに構築された仮想ネットワーク、および、その中のアプリケーションをデプロイできます。
ソースコードでインフラを管理することで、バージョン管理や継続的デプロイなどが適用できますので、保守性や拡張性を高めることができます。その他、違う地域や違う環境に同じインフラを流用したい場合は簡単に複製や再利用できます。ソースコードで管理しているため、煩わしいインフラの構築や運用や人為的なミスを回避し、より素早く正確に環境を作れます。
クラウドサービス環境で開発するのであればIaCツールで構築するのがおすすめです。
Terraformとは
TerraformはHashiCorp社が開発しているIaCツールです。クラウド上のリソースの状態定義をソースコードで宣言的に記述して管理できます。
Terraformのメリット
①情報量が多い
IaC技術としてTerraformを採用している企業が非常に多いため、検索すればTerraformに関する情報はたくさんあります。AWS、Google Cloud、 Azureなど大手のクラウドコンピューティングサービスからもTerraformと連携するドキュメントを記載しています。
②公式のドキュメントが分かりやすい
リソースごとに分類されており、細かい説明やサンプルコードが記載されています。
https://registry.terraform.io/providers/hashicorp/google/latest/docs
③学習コストが低い
HCL (HashiCorp Configuration Language)という独自言語で宣言的に記述し定義するが、jsonファイルの書き方と似ていり、すごくわかりやすく、学習コストが低いです。実際アプリケーション構築経験がなかった自分でも記述できました。
Terraformをインストール(Mac OS X)
Terraform の最新バージョンに更新するには、まず Homebrew を更新します。
1 | brew update |
HomebrewでHashicorp tapをインストールします。
1 | brew tap hashicorp |
次に、Terraform をインストールします。
1 | brew install hashicorp/tap/terraform |
次に、upgradeコマンドを実行して、最新の Terraform バージョンをダウンロードして使用します。
1 | brew upgrade hashicorp/tap/terraform |
動作確認
1 | terraform -help |
Terraformの使用例
Terraformのファイルは*.tz、TerraformはHCL言語で構成されます.HCL (HashiCorp Configuration Language) は HashiCorp によって作られた設定言語です。 HCL の目的はコマンドラインツールで使用するために、「人間」と「機械」双方から扱いやすく構成されていて、かつ特に DevOps ツールやサーバーなどを対象とした言語であることです。
1 | main.tf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | terraform { required_providers { google = { source = "registry.terraform.io/hashicorp/google" version = "4.0.0" } } backend "gcs" { bucket = "tfstate-bucket" credentials =file("<NAME>.json") prefix = "terraform/state" } } provider "google" { credentials = file("<NAME>.json") project = "blog-project" region = "asia-northeast1" zone = "asia-northeast1-a" } resource "google_storage_bucket" "bucket" { name = "bucket-blog" location = "asia-northeast1" storage_class = "STANDARD" } |
上記のソースコードはGoogle Cloudのcloud storageにbucketを生成することです。
terraformブロックでTerraformの設定を書いています。versionの指定やtfstateファイルの保存先など。
tfstate
tfstateファイルはTerraformが管理しているリソースの現在の状態を表すファイルです。Terraformでデプロイする前に、tfstateファイルが読まれ、現在の状態と変更内容と比較します。tfstateがないと同じリソースをデプロイすることになるので、エラーになります。初めてTerraformを使う前にクラウドのコンソール画面で、あらかじめtfstateファイルを保存するbucketを作ってください。
credentials(サービスアカウント)
Terraformに、Google Cloudのプロジェクトにリソースを作成するための権限を付与する必要があります。それを実現するのがサービスアカウントというものです。Google Cloudのプロジェクトにリソースを作成するためのサービスアカウントを発行し、その権限情報(イメージとしては鍵)をTerraformに持たせなければ、Terraformはリソースを作れません。実際にはサービスアカウントの情報をjsonファイルにまとめた物をTerraformに渡します。サービスアカウントの作り方は以下のドキュメントを参考してください。
https://cloud.google.com/docs/authentication/production?hl=ja#create_service_account
providerブロックで使用Providerの設定をします(versionなど)。今回はGoogle Cloudを指定します。ここでは、Google Cloudを利用すること、及びバージョンとリージョンを指定します。Google Cloudにアクセスするにはサービスアカウントを指定します。
1 2 3 | resource リソース名 自定義名前 { 屬性 = 值 } |
専用のvariables.tfファイルを作成し、変数を定義すれば、その変数を引用することもできます。
1 2 3 4 5 6 7 8 9 | variable "bucket-name" { type = string default = "bucket-blog" } variable "bucket-location" { type = string default = "asia-northeast1" } |
1 2 3 4 5 | resource "google_storage_bucket" "bucket" { name = var.bucketName location = var.bucket-location storage_class = "STANDARD" } |
Terraform を実行する
①初期化する
Terraform を実行するためには、1番初めに terraform init でワークスペースを初期化することが必須となっています。*.tfファイルのディレクトリに移動して実行します。(実行したらtfstateも自動で作られます。)
1 | terraform init |
②構成ファイルをチェック
1 | terraform validate |
③実行計画を参照する
tfstateファイルに記載された情報を元に、どのようなリソースが 作成/修正/削除 されるかを参照することが可能になります。
1 | terraform plan |
④リソースをデプロイする
Terraform applyを実行すると、bucketが作成されます。
1 | terraform apply |
デプロイしたリソースを削除したいときは
1 | terraform destroy |
まとめ
Terraformの用途と使い方、Google Cloudにリソースをデプロイする例を紹介しました。実際まだ注意しなければならないところはあります。この記事が、どなたかのお役に立てば幸いです。もっと詳しく知りたい方はTerraformのドキュメントをご確認ください。とても分かりやすく作られているので、参考になります。また、HashiCorpが作成したチュートリアルもあります。初心者にはとても役立ちます。ぜひ試してみてください。
Author Profile
スターフィールド編集部
SHARE