今日を知り、明日を変えるシステム運用メディア

Google CloudアカウントをTerraformに連携する方法を解説!

Google CloudアカウントをTerraformに連携する方法を解説!

この記事は、以下の2部構成で「Terraformで書いたコードをCheckovでセキュリティチェックする方法」を徹底解説します。
【前編】Google Cloudの自分のアカウントをTerraformに連携する方法を解説!
【後編】Terraformにコードを書いて、Checkovでセキュリティチェックする手順を解説

今回は、Googleアカウントとローカル環境のTerraformを連携させるために、Google Cloudアカウントの作成からTerraformのインストール、そして「terraform init」コマンドを使ってワークスペースを初期化する流れを解説します。

次回の後編では、Terraformで記述したインフラコードに対して、Checkovを使ってセキュリティチェックを実施する方法の紹介です。Checkovによるセキュリティチェックを組み込むことで、開発の早い段階でセキュリティのリスクを検出し、信頼性の高いインフラを構築できるようになります。

本シリーズを通じて、Google CloudとTerraformの連携からCheckovを使ったセキュリティ管理まで、実用的な知識を習得できる内容となっていますので、ぜひ最後までご覧ください。

TerraformやCheckovの基礎となる概要や利用するメリットについて知りたい方は、別の記事で解説していますので合わせてご確認ください。

事前準備(今回の解説で使用するツール)

事前準備として、Google Cloud上にリソースを作成するため、Google Cloudのアカウントが必要となります。そして、今回の解説を進めるにあたり、以下の3つのツールが必要になります。

これらのツールがまだインストールされていない場合は、まずそれぞれの公式サイトやリソースからインストールを完了させてください。特にTerraformのインストール手順については、詳しく解説した記事がございますので、こちらを参考にスムーズに導入いただけます。

【Windows編】terraformとCheckovをインストールする方法を解説

【Mac編】terraformとCheckovインストール手順を解説

VSCodeでターミナルを開き、Terraformとgcloudのバージョンを確認する

3つのツールのインストールができたら、VSCodeでターミナルを開き、Terraformとgcloudのバージョンを確認しましょう。

正しくインストールされていれば、上記画像のように、バージョン情報が出力されます。

バージョンが出力されたら、次のステップに進み、Google Cloudアカウントとの連携作業に取りかかりましょう。

Terraformを利用してGoogle Cloudのリソースを構築する際の流れ

まずは、全体の流れを把握しましょう。Terraformを使ってGoogle Cloudリソースを構築する際の基本的な流れは、以下の6つのステップで進行します。

  1. terraform用のGoogle Cloudユーザーを作成
  2. ローカルPCとGoogle Cloudアカウントの紐づけ
  3. backendファイル作成(Terraformで一番重要なファイル)
  4. Terraform init でワークスペースの初期化
  5. VScodeでコード執筆
  6. Google Cloud上にリソースデプロイ

terraform用のGoogle Cloudユーザーを作成

まず最初のステップはGoogle Cloudのコンソール画面上でのIAMユーザー作成です。今回はオーナー権限を持ったユーザーを作成して解説します。

ユーザーは既存のユーザーでも問題ありませんが、Terraformに特化したユーザーを作成することで、権限管理やセキュリティリスクを最小限に抑えられます。

ローカルPCとGoogle Cloudアカウントの紐づけ

次に、ローカル環境でgcloud CLIを使用して、Google Cloudアカウントと接続します。
コマンドプロンプト(ターミナル)に、下記コマンドを入力することでGoogle Cloudのアカウントとの連携が可能です。

gcloud auth login

gcloud auth login コマンドを実行すると、以下の手順で認証プロセスが進みます。

  1. ブラウザが自動的に開く
    コマンドを実行すると、Google の認証ページがブラウザに表示されます。
Google の認証ページがブラウザに表示
  1. Google アカウントでログインまたは選択
    使用したい Google アカウントを選択するか、アカウント情報を入力してログインしてください。
アカウント情報を入力してログイン
  1. アクセス許可を確認
    Google Cloud SDK がアカウントにアクセスするための権限が求められます。「許可」ボタンをクリックして認証を完了します。
アクセス許可を確認

※ブラウザが開かない場合:ターミナルに認証用の URL が表示されます。その場合は、URL をコピーしてブラウザに貼り付け、手動でアクセスしてください。

以下のような画面が表示されていれば、ブラウザ上の認証は完了です。続いて、ターミナルでの設定確認に進みます。

ブラウザ上の認証完了

Google Cloud内のプロジェクトの指定方法

使用するユーザーに対して、複数のプロジェクトを作成している場合のプロジェクト指定方法を解説します。

  1. プロジェクトIDの確認
    まずは、下記コマンドを実行してプロジェクトIDを確認しましょう。プロジェクトIDはgoogle cloudコンソール上でも確認可能です。
gcloud projects list
プロジェクトIDの確認
  1. プロジェクトIDの登録
    使用したいプロジェクトIDをコピーして、次のコードを実行してください。
gcloud config set project [PROJECT_ID]

backendファイル作成

次のステップが、backendファイルの作成です。backendファイルで、AWSやAzureといったプロバイダー情報やリージョン、JSONコードが記述されたファイルの保管場所などの情報を定義します。

backendファイルの作成手順は以下のとおりです。

  1. backendファイルを格納するフォルダの作成
  2. backend.tfファイルを作成
  3. VSCodeでファイルにコードを記述

今回は、Terraformがデプロイしたインフラの「現在の状態」が保存されたtfstateファイルをCloud Storageのバケット内に配置します。

tfstateファイルを格納するためのバケットをGoogle CloudコンソールのCloud Storageのページにある「バケットを作成」から作成してください。

バケットをGoogle CloudコンソールのCloud Storageのページにある「バケットを作成」から作成

パケットを作成したら、VSCodeのターミナルに戻り、下記コマンドを実行してbackendファイルを作成します。

mkdir OpsToday-terraform

mkdir ”任意の名前” でフォルダを作成。

cd OpsToday-terraform

cd コマンドで作成したフォルダに移動。

touch backend.tf

このコマンドを入力しbackend.tf ファイルを作成します。そして、フォルダ内に、backend.tfファイルが作成されていることを確認し、backend.tfファイルをVSCodeで開きます。

先程作成したbackend.tfファイルをVSCodeで開き、ファイル内に下記のコマンドを記述します。

# tfstate管理バケット
terraform {
required_version = “= 1.9.6” #使用しているterraformのバージョンを入力
backend “gcs” {
  bucket = “opstoday-tfstate” #googleコンソール上のバケット名を入力
  prefix = “opstoday-terraform-tfstate” # オブジェクト名を指定。フォルダのように整理可能    
}
}

# プロバイダー指定
provider “google” {
project = “vocal-cyclist-437310-q7”
region   = “asia-northeast1”
zone     = “asia-northeast1-c”
}

このコードを記述する際は、3つの注意するべき点があります。

  1. 実行環境にインストールされているTerraformバージョンが異なる場合、適切なバージョンに変更してください。
  2. バケット名は全世界で「一意」である必要があります。
  3. バケット内のオブジェクト名は一意である必要があります。

コードの記述が終われば、backendファイル作成が完了です。

※バケット名やオブジェクト名に使える文字や命名規則についてはgoogle公式ドキュメントでご確認ください。

Terraform init でワークスペースの初期化

次は、terraform init でワークスペースの初期化の手順です。コマンドプロンプト上で、test-terraformフォルダに移動し、下記コマンドを入力します。

terraform init

init は「initialize(イニシャライズ)」の略で「初期化」を意味します。ここまでの手順で正しく設定が行われていれば、下記画像のようにSuccessfullyと出力されます。

Successfullyと出力

VScodeでコード執筆

ここまでの手順でローカル環境とTerraformの連携は終了ですが、デモとしてvpcを作成手順を解説します。

まずは、test-terraformフォルダ内に「network.tfファイル」を作成し、作成したファイルをVSCodeで開きます。作成したnetwork.tfファイル内に下記のコードを入力しましょう。

resource “google_compute_network” “opstoday-vpc_network” {
name          = “opstoday-vpc” #Google上に作成するリソースの名前を指定
}

resource “google_compute_subnetwork” “opstoday-subnet” {
name          = “opstoday-subnet” #Google上に作成するリソースの名前を指定
ip_cidr_range = “10.0.0.0/24”
network       = google_compute_network.opstoday-vpc_network.id

コードが書けたらターミナルで下記コマンドを入力します。

terraform plan

このコマンドを実行することで、どのリソースが追加・変更・削除されるかを確認できます。

このコマンドを実行することで、どのリソースが追加・変更・削除されるかを確認できる

Plan:2 to add      →今の環境にリソースが追加される
0 to change  →Google Cloud環境内にすでにあるリソースに変更が加わる
     0 to destroy. →Google Cloud環境内のリソースが削除される

今回はvpcとサブネットを作成する予定なので「2 to add」と記載されていれば成功です。

Google Cloud上にリソースデプロイ

コードを執筆し、terraform planで確認まで行ったら下記のコマンドを実行します。

terraform apply

このコマンドは、terraform plan で生成された計画(プラン)を基に、実際にインフラに対する変更を適用します。このコマンドが実行されると、指定されたリソースが Google Cloud上に構築または更新されます。

指定されたリソースが Google Cloud上に構築または更新される

terraform applyの実行後、改めてplan結果が出力されます。問題なければ「yes」と入力しましょう。実行結果として、「complete」 と表示されていれば構築完了です。

作成したユーザーIDでGoogle Cloud コンソールにサインインして、vpcが作成されていることを確認してみましょう。

作成したユーザーIDでGoogle Cloud コンソールにサインインして、vpcが作成されていることを確認

そして、Cloud Storageのバケット内に、オブジェクトが作成されていることも確認しましょう。

Cloud Storageのバケット内に、オブジェクトが作成されていることも確認

デモで作成したVPCをコマンドで削除する方法

今回デモで作成したvpcとサブネットをterraformのコードで削除する手順を解説します
リソースを削除するには下記のコマンドを実行します。

terraform destroy

このコマンドはTerraform で管理しているインフラリソースを全て削除する際に使用します。
plan結果が出力されるため、2 to destroy となっていることを確認し、「yes」と入力します。
Destroy complete!」と出力されていれば削除完了です。

まとめ

今回の記事では、Google CloudアカウントをTerraformに連携する方法とは?と題して、Terraformをローカル環境と連携し、実践としてvpcとサブネットを作成する手順を解説しました。

Terraformでのコード管理の基礎として重要な部分のみを解説しましたので、この記事の内容はしっかりとおさえておきましょう。

次回は、本題となるインスタンスやロードバランサーを作成するためのコードをTerraform上で記述し、Checovでセキュリティチェックを行うための手順を解説します。

現在クラウドエンジニアとして勤務。AWS(SAP、DOP)とAzure(AZ-305)の資格を保有しており、ネットワークやセキュリティに関する業務を主に行っています。

この記事を含む特集

terraformで書いたコードをCheckovでセキュリティチェックしてみよう!

terraformで書いたコードをCheckovでセキュリティチェックしてみよう!

人気の記事

最新情報をお届けします!

最新のITトレンドやセキュリティ対策の情報を、メルマガでいち早く受け取りませんか?ぜひご登録ください

メルマガ登録