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

オラクル散歩道

2022.03.11

1. はじめに

はじめまして、NTTデータ先端技術の陰です。
直近数年は、現行オンプレミスの分析基盤をクラウドへの移行を検討しているお客様向けに後継基盤としてOracle Cloud Infrastructure(OCI)のAutonomous Database(ADB)を提案する作業を担当していました。

クラウド上で環境を構築する方法としては、Graphical User Interface(GUI)のコンソールから実施する方法とApplication Programming Interface(API)やCommand Line Interface(CLI)を利用し、コーディングで実施する方法がありますが、今回はTerraformを活用し、OCIの環境を構築する方法について紹介します。まずは、「Terraformを活用したOCI環境構築の自動化」の前編として、Terraformとは何か、そしてTerraform環境をセットアップするために必要なインストール方法や、準備について紹介します。

2. Terraformとは

Terraformとは、HashiCorp社によって開発されているオープンソースのインフラ自動構築ツールです。
Terraformは、インフラ構成をコード化することで、GUIではなく、構成ファイルを使用したインフラ構成の管理ができるので、手動で操作することなくインフラ構成を自動で管理できます。

3. Terraform環境のセットアップ

Terraformを活用し、OCI構築の自動化および、構成のコード化を実現するための環境を準備します。

前提条件:

  • シェル・ターミナル・コンソールがセットアップされていること
  • OCIコンソールにアクセスでき、いずれかのコンパートメントに対して管理権限のあるOCIアカウントを持っていること

Terraformは、GO言語で書かれているため、様々なOS環境にインストールすることが可能ですが、今回はOracle社で提供する「Oracle-Linux OS 7.8」でのセットアップ方法を紹介します。

3-1. Terraformのインストール

yumコマンドでTerraformをインストールするためには、公式のHashiCorpLinuxリポジトリを追加する必要があります。yum-config-managerにリポジトリを追加する前にyum-utilsパッケージをインストールします。

sudo yum install -y yum-utils

次にyum-config-managerへ公式のHashiCorpLinuxリポジトリを追加します。

sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo

次にyumコマンドでTerraformをインストールします。

sudo yum -y install terraform

インストールが完了したら、Terraformがインストールされていることを確認します。

terraform –v

Terraformのインストールが無事完了したら以下のコマンドを実行し、Terraformで使用可能なコマンドの一覧を確認することができるので、ご確認ください。

terraform –help

3-2. Terraformの準備

Terraformスクリプトを認証および実行するための環境を準備します。また、OCIアカウントがスクリプトの認証に必要な情報を収集します。

3-2-1. API署名キーの生成

OCIにAPIリクエストを送るときは、誰がそれらを送信したかをOCIが特定できるようにAPI署名キーを生成し、OCIアカウントへ追加します。

API署名キーは、コンソールを使用してAPI署名キー・ペアを生成することも可能ですが、今回はOpenSSLコマンドを使用してPEMフォーマットのAPI署名キー・ペアを生成する方法を紹介します。
API署名キーをコンソールで生成する方法は以下を参考にしてください。
https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/apisigningkey.htm#two

まず、ターミナル・コンソールを開き、API署名キー保管用ディレクトリを作成します。
ここではAPI署名キー保管用ディレクトリとしてホームディレクトリの配下にディレクトリを作成していますが、保管用ディレクトリはどこに作成しても構いません。

mkdir $HOME/.oci

2048ビットの秘密キーをPEMフォーマットで生成します。
<rsa-key-name>は、任意のAPI署名キー名を記入してください。

openssl genrsa -out $HOME/.oci/<rsa-key-name>.pem 2048

上記で生成した機密キーから公開キーを生成します。

openssl rsa -pubout -in $HOME/.oci/<rsa-key-name>.pem -out $HOME/.oci/<rsa-key-name>_public.pem

OCIユーザー・アカウントに公開キーを追加するために上記で生成した公開キーの内容をコピーします。(後からこの値をコンソールに貼り付ける必要があります)

cat $HOME/.oci/<rsa-key-name>_public.pem

API署名キー・ペアの生成が完了したら、生成した公開キーをOCIユーザー・アカウントへ追加します。
ここからの操作はGUIコンソールで実施します。

まず、コンソールから「プロファイル」メニューを開き、「ユーザー設定」をクリックします。

ユーザー設定

「APIキー」をクリックし、「APIキーの追加」をクリックします。

APIキーの追加

「公開キーの貼付け」を選択し、前のステップでコピーした公開キーの値を貼り付けます。(公開キーの値にはBEGIN PUBLIC KEYおよび、END PUBLIC KEYの行を含めます)

公開キーの貼付け

最後に「追加」をクリックします。
これで、OCIアカウントに接続するためのAPI署名キーが設定されました。

3-2-2. 必要な情報の収集

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

OCIコンソールから収集

①テナンシOCID: <tenancy-ocid>
コンソールから「プロファイル」メニューを開き、「テナンシ」をクリックします。
テナンシに移動し、OCIDをコピーします。

テナンシOCID

②ユーザーOCID: <user-ocid>
コンソールから「プロファイル」メニューを開き、「ユーザー設定」をクリックします。
ユーザー設定に移動し、OCIDをコピーします。

ユーザーOCID

③フィンガープリント: <fingerprint>
コンソールから「プロファイル」メニューを開き、「ユーザー設定」をクリックします。
その後、「APIキー」をクリックし、フィンガープリントをコピーします。

フィンガープリント

④リージョン: <region-identifier>
コンソールから「リージョン」メニューを開き、「リージョンの管理」をクリックします。

.リージョン

「リージョンの管理」ページから指定するリージョン識別子をコピーします。

リージョン識別子をコピー

ターミナル・コンソールから収集

①秘密キーのパス: <rsa-private-key-path>
「3-2-1. API署名キーの生成」項で作成した機密キーが格納されているパスをコピーします。
例:$HOME/.oci/<rsa-key-name>.pem

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

Terraformを活用し、OCIインフラ構成をコード化するためには、TerraformとOCIサービスおよび、リソースが通信できる必要があります。この項では、TerraformとOCIサービスおよび、リソースが通信できるように構成ファイルを作成します。

まず、Terraformの構成ファイルを作成および、スクリプトを実行するための作業用ディレクトリを作成します。
$HOMEディレクトリにtf-workspaceというディレクトリを作成し、そのディレクトリに移動します。
ここでは作業用ディレクトリとしてホームディレクトリの配下にディレクトリ(tf-workspace)を作成していますが、作業用ディレクトリはどこに作成しても構いません。

mkdir $HOME/tf-workspace
cd $HOME/tf-workspace

プロバイダーファイル(provider.tf)を作成します。プロバイダーファイルを作成することで、どのクラウドベンダーを利用するのか、どのアカウントで接続するのか、そして、どこのリージョンを使用するのかなどの構成情報を指定することができ、Terraformと通信できるようになります。

vi provider.tf
provider "oci" {
  tenancy_ocid = "<tenancy-ocid>"
  user_ocid = "<user-ocid>" 
  private_key_path = "<private-key-path>"
  fingerprint = "<fingerprint>"
  region = "<region-identifier>"
}

プロバイダーファイルを作成するために必要な情報は「3-2-2. 必要な情報の収集」項で収集した情報に置き換えてください。

次にテナンシ内の可用性ドメインのリストをフェッチするためにデータフェッチファイルを作成します。
データをフェッチすることでOCIアカウントがprovider.tfスクリプトを認証し、アカウントから情報を取得することができます。作業用ディレクトリ(tf-workspace)にデータフェッチファイルを作成します。

vi availability-domains.tf
data "oci_identity_availability_domains" "ads" {
  compartment_id = "<tenancy-ocid>"
}

データフェッチファイルを作成するために必要な情報は「3-2-2. 必要な情報の収集」項で収集した情報に置き換えてください。
※provider.tfおよびavailability-domains.tfが同じディレクトリにあることを確認してください。

最後にフェッチされた情報を出力するためのファイルを作成します。
作業用ディレクトリ(tf-workspace)に出力ファイルを作成します。

vi output.tf
# Output the "list" of all availability domains.
output "all-availability-domains-in-your-tenancy" {
  value = data.oci_identity_availability_domains.ads.availability_domains
}

※outputs.tf、provider.tfおよびavailability-domains.tfが同じディレクトリにあることを確認してください。

これで構成ファイルの作成は完了しました。

3-2-4. 初期化の実行

上記で作成した構成ファイルの定義が反映されるように作業用ディレクトリから初期化を実行します。
初期化を実行すると、構成ファイルで定義されたプロバイダーがダウンロードおよびインストールされ、アカウントがスクリプトを認証した後、Terraformはテナンシの可用性ドメインをフェッチすることができます。

terraform init

初期化コマンドの実行結果は以下の通りです。

Initializing the backend...

Initializing provider plugins...
…………………
…………………
…………………
Terraform has been successfully initialized!

初期化コマンドを実行した作業用ディレクトリ(tf-workspace)を確認します。

ls –la

コマンド実行結果「.terraform」ディレクトリが作成されたらTerraformの準備は完了です。

4. 今回のまとめ

今回は「Terraformを活用したOCI環境構築の自動化」の前編として、Terraformとは何か、そしてTerraform環境をセットアップするために必要なインストール方法や、準備について紹介しました。後編では、実際にインフラ構成をコード化するためのスクリプトの作成や、スクリプトの実行について紹介します。

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

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