TerraformでGCPのリソースを作成する

概要

こんにちは!白々さじきです!

今回は、前回AWSで実施したチュートリアルをGCPで実施してみたいと思います!

本記事の目標としてはGCP上にVPCのネットワークを立てることができれば完了です。

本記事には、GCPのアカウントの作り方は記載しないのでもし作成されてない方はこちらのリンクから作成してください~

それでは始めて行きましょう~

ローカル環境にAlmaLinux9.4の環境作成

AWSのEC2のt2.microだとgcloud CLIがインストールできなかったため、ローカル環境にAlmaLinuxの環境を作成しました。

DockerでAlmaLinuxのコンテナを立てようと思います。

docker-compose.yamlは下記です。

services:
  alma:
    image: almalinux:9.4
    container_name: alma_container
    volumes: #コンテナから参照フォルダを参照できるようにするための設定
      - ./tmp:/tmp
    tty: true

この後下記のコマンドを使ってコンテナに入ります。

docker exec -it [コンテナID] bash

rootで入ることができるので、前回実施したTerraformを使うために必要なコマンドを実行していきます。rootで入っているのでsudoは不要です。

dnf install -y dnf-plugins-core
dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
dnf install terraform -y

これで準備ができました。

GCPでサービスアカウントを作成する

gcloud CLIで使用するGCPのサービスアカウントを作成します。

サービスアカウントに関しては公式に下記のように記載されています。

ユーザーではなく、アプリケーションや Compute Engine インスタンスなどのコンピューティング ワークロードで通常使用される特別なアカウントです。

つまり、今回のTerraformを実行するときに使うアカウントは個々人のユーザーアカウントではなくTerraform用のアカウントを作成しておくということになります。

なので公式のドキュメントを元にサービスアカウントを作成したいと思います。

公式ドキュメントの「始める前に」を実施します。「APIを有効にする」をクリックします。

下記のようにAPIを有効にしたいプロジェクトが表示されることを確認して「次へ」をクリックします。

その後下図の「有効にする」をクリックします。

準備が終わったので、今からコンソール上でサービスアカウントを作成したいと思います。

参考のリンクはこちらです。

サービスアカウントの作成ページに移動し、下図の赤枠の「サービスアカウントの作成」をクリックします。

下図のテキストボックスに必要事項を入力し「作成して続行」をクリックします。

次にロールの設定を行い「続行」をクリックしてください。

今回はAlmaLinux以外では使用しないため、「ユーザーにこのサービス アカウントへのアクセスを許可 」に記載のあるサービスアカウントユーザーロールと管理者ロールに関しては空白で「完了」をクリックします。

その後作成されたサービスアカウントをクリックして下の赤枠の「キー」をクリックします。

「キー」の追加をクリックし、「新しい鍵を作成」をクリックします。

下図の状態で「作成」をクリックします。

その後ダウンロード先が表示されるのでcompose.yamlが置いてあるフォルダ内の「tmp」フォルダを作成して「tmp」フォルダ内においてください。

これで鍵の準備は完了です。

gcloud CLIのインストール

最初にAlmaLinux9.4にgcloud CLIのインストールを行います。

インストールの手順はリンクを参考に行います。

まずは「tee」コマンドを使用してdnfにgoogle-cloud-cliのリポジトリ情報を追加します。

tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM
[google-cloud-cli]
name=Google Cloud CLI
baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el9-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOM

次に下記のインストールコマンドを使用してgoogle-cloud-cliをインストールします。

dnf install -y google-cloud-cli

その後下記のコマンドを実施してください。

gcloud auth activate-service-account SERVICE_ACCOUNT@DOMAIN.COM --key-file=/tmp/key.json --project=PROJECT_ID

これでGcloud CLIの準備は完了です。

Terraformでリソースを作成する

※本当はサービスアカウントを使用して自動的にリソースを作りたかったのですが、うまくいかなかったため、ブラウザログインをしています。。。コメントからどうすればいいか教えていただけると幸いです。。。

Terraformのチュートリアルを元に実際にGCPのVPNのリソースを作成したいと思います。

任意の場所で下記のコマンドを順に実行してください。

mkdir learn-terraform-gcp
cd learn-terraform-gcp
touch main.tf

その後main.tfの中に下記を記載してください。「PROJECT_ID」は自分のGCPのプロジェクトのIDを入れてください。

terraform {
  required_providers {
    google = {
      source = "hashicorp/google"
      version = "4.51.0"
    }
  }
}

provider "google" {
  project = "<PROJECT_ID>"
}

resource "google_compute_network" "vpc_network" {
  name = "terraform-network"
}

その後下記のコマンドを使用して認証情報にログインをしてください。

gcloud auth application-default login

上記のコマンドを使用するとURLが出てくるのでそれをクリックすると下図のような画面が出てきます。

上画像の見切れている2番目のテキストボックスの中身を下図の部分にコピーして貼ってください。(パスワードみたいなものなので見せないようにするためにわざと見切れています。)

その後、下記のコマンドを実行し、「yes」を押すとVPNが作成されます!

terraform init
terraform apply

上図のように出れば完成です!

満足したら下記のコマンドを実行後「yes」をクリックしてリソースを削除しましょう。

terraform destroy

まとめ

今回はDockerのAlmaLinux上でGCPのリソースをTerraformを使って作成することができました!

全部コマンドだけで完結させたかったですが、リソース作成部分だけうまくいかなかったのは心残りなので後日リベンジしたいと思います。

今後も頑張りますー。

下記リンクから買い物していただけると白々のお小遣いが増えて色々な有料サービスを使ったブログ記事を書きやすくなるので、ご協力よろしくお願いします!!!

おまけ

gcloud CLIのインストール部分までのコマンドをまとめましたので下記に記載します。シェルスクリプト化してまとめて実行してみて下さい。

dnf install -y dnf-plugins-core
dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
dnf install terraform -y
tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM
[google-cloud-cli]
name=Google Cloud CLI
baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el9-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOM
dnf install -y google-cloud-cli
gcloud auth activate-service-account SERVICE_ACCOUNT@DOMAIN.COM --key-file=/tmp/key.json --project=PROJECT_ID

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメント

タイトルとURLをコピーしました