Terraform Provider for Oracle Cloud Infrastructure の導入

はじめに

こんにちは、id:yokoyama-mです。業務でTerraformを使用する機会があったのですが、Oracle Cloudの対応状況が気になり調べてみました。Oracle Cloud用のプロバイダーは以下となります。

No プロバイダー 対象リソース 提供元
1 Terraform Provider for Oracle Cloud Platform Oracle PaaS Terraform(公式)
2 Terraform Provider for Oracle Cloud Infrastructure Classic Oracle Cloud Infrastructure Classic Terraform(公式)
3 Terraform Provider for Oracle Cloud Infrastructure Oracle Cloud Infrastructure Oracle

他のメジャークラウド用のプロバイダーとは異なり、複数に分かれて提供されていることがわかりました。 また、Oracle PaaSOracle Cloud Infrastructure Classicが対象のプロバイダーは公式として提供されていますが、Oracle Cloud Infrastructureが対象のプロバイダーは公式には含まれていないこともわかりました。

今回は評価用にOracle Cloud Infrastructureのプロバイダーを導入してみたのでその手順を紹介します。

事前準備

Terraformのインストール

以下を参考にTerraform(v0.10.x以降)をインストールしてください。

インストール

APIキーの作成と登録

APIキーを作成します。Oracle Cloud Infrastructure CLIを導入している場合はCLI用のAPIキーを使用することも可能です。

$ mkdir -p ~/.oci
$ openssl genrsa -out ~/.oci/oci_tf_key.pem 2048
$ chmod go-rwx ~/.oci/oci_tf_key.pem
$ openssl rsa -pubout -in ~/.oci/oci_tf_key.pem -out ~/.oci/oci_tf_key_public.pem

APIキーの秘密鍵のフィンガープリントを出力します。出力した内容をメモしておいてください。

$ openssl rsa -pubout -outform DER -in ~/.oci/oci_tf_key.pem | openssl md5 -c

APIキーの公開鍵をOCIのWEBコンソールから登録します。手順は以下の通りです(キーファイル名は適宜読み替えてください)。

Oracle Cloud Infrastructure CLIの導入 (後編:環境設定)より

OCIのコンソール Menu -> Identity -> Users -> cli-userからAPI Keyとしてoci setup configで作成したAPI公開鍵を設定します。 f:id:a-oono:20180731181936p:plain API公開鍵~/.oci/oci_api_key_public.pemをcatした内容を貼り付けます。 f:id:a-oono:20180731180209p:plain

プロバイダーのインストール

以下より最新のプロバイダーをダウンロードします。ご使用の環境用のファイルを選択してください。

ダウンロードしたファイルを解凍した後に所定のディレクトリへコピーします。

$ tar xzf linux_amd64.tar.gz
$ mkdir -p ~/.terraform.d/plugins
$ cp linux_amd64 ~/.terraform.d/plugins/

動作確認

Terraformへ渡す情報を変数ファイルvariables.auto.tfvarsにまとめます。

tenancy_ocid="(対象テナンシーのOCIDを指定してください。)"
user_ocid="(対象ユーザのOCIDを指定してください。)"
compartment_ocid="(対象コンパートメントのOCIDを指定してください。)"
fingerprint="(「APIキーの作成と登録」でメモしたフィンガープリントを指定してください。)"
private_key_path="(「APIキーの作成と登録」で作成した秘密鍵`oci_tf_key.pem`のフルパスを指定してください。)"
region="(対象のリージョンを指定します。)"

以下のサンプルをダウンロードします。

  • https://raw.githubusercontent.com/oracle/terraform-provider-oci/master/docs/examples/networking/vcn/vcn.tf

      variable "tenancy_ocid" {}
      variable "user_ocid" {}
      variable "fingerprint" {}
      variable "private_key_path" {}
      variable "compartment_ocid" {}
      variable "region" {}
    
      provider "oci" {
        tenancy_ocid = "${var.tenancy_ocid}"
        user_ocid = "${var.user_ocid}"
        fingerprint = "${var.fingerprint}"
        private_key_path = "${var.private_key_path}"
        region = "${var.region}"
      }
    
      resource "oci_core_virtual_network" "vcn1" {
        cidr_block = "10.0.0.0/16"
        dns_label = "vcn1"
        compartment_id = "${var.compartment_ocid}"
        display_name = "vcn1"
      }
    

変数ファイルのvariables.auto.tfvarsとダウンロードしたvcn.tfを同じディレクトリに配置しTerraformを実行します。

$ terraform init
$ terraform apply

vcn1という名称のVirtual Cloud Networkがひとつ作成されていれば成功です。

作成したリソースの後始末を行う場合は以下を実行してください。

$ terraform destroy

さいごに

Oracle Cloud Infrastructureのプロバイダーを導入してみました。いかがだったでしょうか。次回はTerraformを実際に使用してリソースを作成してみたいと思います。