Terraformを活用したOCI環境構築の自動化(後編)

オラクル散歩道

2022.08.29

1. はじめに

こんにちは、NTTデータ先端技術の陰です。
前回は、「Terraformを活用したOCI環境構築の自動化」の前編として、Terraformとは何か、そしてTerraform環境をセットアップするためのインストール方法や、必要な準備について紹介しました。後編となる今回は、実際にインフラの構成を標準化(コード化)し、Oracle Cloud Infrastructure(OCI)上にコンパートメントを作成する方法について紹介します。

「Terraformを活用したOCI環境構築の自動化」の前編については、以下のリンクをご確認ください。
https://www.intellilink.co.jp/column/oracle-promenade/2022/031100.aspx

2. Terraform環境説明

今回、構成ファイルの作成および、実行するOS環境は、前編と同じくOracle社で提供する「Oracle-Linux OS 7.8」になります。

前提条件:

  • シェル・ターミナル・コンソールがセットアップされていること
  • OCIコンソールにアクセスでき、いずれかのコンパートメントに対して管理権限のあるOCIアカウントを持っていること
  • 「Terraformを活用したOCI環境構築の自動化(前編)」を実施し、Terraform環境のセットアップが完了していること

3. Terraform構成の流れ

Terraformを活用し、インフラ構成をコード化するためには、3つのステップが必要です。

  • Write:構成ファイルを作成し、インフラ構成を定義する
  • Plan:インフラ構成に加える変更内容を確認する
  • Apply:インフラ構成をプロビジョニングし、変更内容を反映する

以降、各ステップの詳細を記載していきます。

4. Terraform構成ファイルの作成

ステップ1(Write)として、コンパートメントを作成するための構成ファイルを作成します。

4-1. 必要な情報の収集

コンパートメントの構成ファイルを作成するために必要な情報を収集します。
収集した情報は後で構成ファイルを作成する際に必要なので、メモ帳にコピーしてください。

OCIコンソールから収集

①コンパートメントOCID: <compartment-ocid>
コンソールから左上にあるハンバーガーメニューを開き、「アイデンティティとセキュリティ」をクリック、次に「コンパートメント」をクリックします。

コンソール

「コンパートメント」ページからコンパートメントを作成する親コンパートメントをクリックします。

コンパートメント

「コンパートメントの詳細」ページから親コンパートメントのOCIDをコピーします。

コンパートメントの詳細

4-2. 構成ファイルの作成

インフラ構成をコード化し、OCI上にコンパートメントを作成するために必要な構成ファイルを作成します。必要な構成ファイルは以下の 4つのファイルです。

  • availability-domains.tf:データフェッチファイル
  • output.tf:出力ファイル
  • provider.tf:プロバイダーファイル
  • compartment.tf:コンパートメントファイル

①~③までの構成ファイルは前編で紹介しましたので、今回は割愛し、④のコンパートメントファイルの作成方法を紹介します。

①~③の構成ファイルの作成については、前編をご確認ください。
https://www.intellilink.co.jp/column/oracle-promenade/2022/031100.aspx

コンパートメントファイルの作成

Terraformの構成ファイルを作成および、実行するための作業用ディレクトリに移動します。
ここでは、前編で作成したホームディレクトリの配下にある作業用ディレクトリ(tf-workspace)を使用していますが、作業用ディレクトリはどこに作成しても構いません。ただし、これから作成するコンパートメントファイル(compartment.tf)は出力ファイル(output.tf)、プロバイダーファイル(provider.tf)、データフェッチファイル(availability-domains.tf)と同じディレクトリにある必要があるので、作業用ディレクトリを作成する際にはご注意ください。

cd $HOME/tf-workspace

コンパートメントファイル(compartment.tf)を作成します。

vi compartment.tf
resource "oci_identity_compartment" "tf-compartment" {
    compartment_id = "<compartment-ocid>"
    description = "<compartment-description>"
    name = "<compartment-name>"
}

<compartment-ocid>:「4-1 必要な情報の収集」項で収集した親コンパートメントのOCIDを入力します。
<compartment-description>:作成するコンパートメントの任意の説明を入力します。
<compartment-name>:作成するコンパートメントの名前を入力します。(親コンパートメント内のすべてのコンパートメントで一意である必要があります)

5. Terraform構成ファイルの計画

ステップ2(Plan)として、インフラ構成に加える変更内容を確認します。

5-1. 構成ファイルの計画

構成ファイルを実行するために作業用ディレクトリに移動します。

cd $HOME/tf-workspace

「4-2. 構成ファイルの作成」項で作成した構成ファイルの定義が反映されるように作業用ディレクトリから初期化(init)を実行します。

terraform init

インフラ構成に加える変更内容を確認するために計画(plan)を実行します。
計画を実行することで、実際のリソースに変更を加える前に実行計画を確認することができます。

terraform plan

出力例

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # oci_identity_compartment.tf-compartment will be created
  + resource "oci_identity_compartment" "tf-compartment" {
  ・・・
  ・・・
  ・・・
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + all-availability-domains-in-your-tenancy = [
      + {
          + compartment_id = "ocid1...kxi
          + id             = "ocid1...3do"
          + name           = "Ggmb:AP-TOKYO-1-AD-1"

表示された内容が特に問題なければ、次に進みます。

6. Terraform構成ファイルの実行

ステップ3(Apply)として、インフラ構成をプロビジョニングし、変更内容を反映します。

6-1. 事前確認

作成した構成ファイルを実行してインフラ構成に変更を反映する前に、現在の環境情報を確認します。

ターミナル・コンソールから確認

リソースの現在の状態を表すterraform.tfstateファイルが作成されていないことを確認します。

ls -l $HOME/tf-workspace/terraform.tfstate
OCIコンソールから確認

コンソールから左上にあるハンバーガーメニューを開き、「アイデンティティとセキュリティ」をクリック、次に「コンパートメント」をクリックします。

コンソール

「コンパートメント」ページからコンパートメントを作成した親コンパートメントをクリックします。

コンパートメント

「コンパートメントの詳細」ページの「子コンパートメント」から今回対象のコンパートメントが作成されていないことを確認します。

コンパートメントの詳細

6-2. 構成ファイルの実行

インフラ構成をプロビジョニングし、変更内容を反映します。

terraform apply

確認を求められた場合は、yesを入力します。

出力例

oci_identity_compartment.tf-compartment: Creating...
oci_identity_compartment.tf-compartment: Creation complete after 24s [id=ocid1.compartment.oc1...yra]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:

all-availability-domains-in-your-tenancy = tolist([
  {
    "compartment_id" = "ocid1.tenancy.oc1...2wr
    "id" = "ocid1.availabilitydomain.oc1...5scr
    "name" = "Ggmb:AP-TOKYO-1-AD-1"
  },
])

6-3. 構成ファイルの実行後確認

これで構成ファイルの実行が完了しましたので、変更内容が反映されていることを確認します。

ターミナル・コンソールから確認

リソースの現在の状態を表すterraform.tfstateファイルが作成されていることを確認します。

ls -l $HOME/tf-workspace/terraform.tfstate

コンパートメントファイルの変更内容がterraform.tfstateファイルに反映されていることを確認します。

cat $HOME/tf-workspace/terraform.tfstate

出力例

{
  "version": 4,
  "terraform_version": "1.2.6",
  "serial": 1,
  "lineage": "5b34807e-c73a-7447-0e02-d2d83c3d0516",
  "outputs": {
    "all-availability-domains-in-your-tenancy": {
      "value": [
        {
          "compartment_id": "ocid1...xip
          "id": "ocid1...y6l
          "name": "Ggmb:AP-TOKYO-1-AD-1"
        }
      ],
      "type": [
   ...
   ...
   ...
OCIコンソールから確認

「6-1. 事前確認」項の「OCIコンソールから確認」を実施し、コンパートメントが作成されていることを確認します。

7. 今回のまとめ

今回は「Terraformを活用したOCI環境構築の自動化」の後編として、インフラ構成をコード化し、OCI上にコンパートメントを作成するための構成ファイルの作成方法や、実行方法について紹介しました。前編と後編を通し、Terraformの紹介や、基礎的な操作方法についての紹介が完了しました。これからは、各リソースを作成するための構成ファイルの作成方法(構成ファイルの書き方)や、構成ファイルを管理するための方法について、実際にいくつかの環境を構築しながら紹介したいと思います。

※文章中の商品名、会社名、団体名は、各社の商標または登録商標です。

Terraformを活用したOCI環境構築の自動化(後編)