APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【OCI】Terraformとリソース・マネージャを使用してOCIリソースを作成する

目次

はじめに

こんにちは、クラウド事業部の早房です。
今回は、TerraformでOCIリソースを定義して、リソース・マネージャでリソースを作成してみました!

どんなひとに読んで欲しい

OCI のリソースをIaCで管理したい人

Terraform について

Terraformは、クラウドインフラをコードで管理できるIaCツールです。OCI 以外にも、AWS、Azure、GCP などのクラウド環境に対応しています。
インンスタンスやネットワークなどのリソースをコードで定義し、作成・変更・削除することができます。
同じテンプレートを使用すれば、どこでも同一の環境を作成できるので再現性が高いです。
また、Git などでコード管理を行うことでバージョン管理が行えたり複数人での運用も可能になります。

Terraformでのリソース定義

Terraformではリソース定義と変数定義をそれぞれ別ファイルとすることで、コードの保守性や可読性を高めることができます。
今回は以下のファイルを作成しました。

  • main.tf

    • OCIのProvider設定と、作成するリソースの定義を記述。
  • variables.tf

    • 変数の型や説明を管理。
  • terraform.tfvars

    • 実際に使用する変数の値を設定。

※参考
docs.oracle.com

1. main.tf

TerraformがOCIに接続してリソースを作成するために必要なProviderの設定と、VCN・サブネット・インスタンスを作成するためのリソース定義を行います。

# OCIプロバイダの設定
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
}

# VCN(仮想クラウドネットワーク)の作成
resource "oci_core_virtual_network" "demo_vcn" {
  compartment_id = var.compartment_ocid
  cidr_block     = "10.0.0.0/16"
  display_name   = "demo_vcn"
}

# サブネットの作成
resource "oci_core_subnet" "demo_subnet" {
  compartment_id      = var.compartment_ocid
  vcn_id              = oci_core_virtual_network.demo_vcn.id  # 👆で定義したVCNのIDを参照
  cidr_block          = "10.0.1.0/24"
  display_name        = "demo_subnet"
  availability_domain = var.availability_domain
}

# インスタンスの作成
resource "oci_core_instance" "demo_instance" {
  compartment_id      = var.compartment_ocid
  availability_domain = var.availability_domain
  shape               = "VM.Standard.E2.1.Micro" 
  display_name        = "demo_instance"

  # VNIC(ネットワークインタフェース)に関する設定
  create_vnic_details {
    subnet_id        = oci_core_subnet.demo_subnet.id  # 👆で定義したサブネットを指定
    assign_public_ip = true  # パブリックIPの割り当てを有効化
  }

  # OSイメージの指定
  source_details {
    source_type = "image"
    source_id   = var.image_id
  }
}

補足

  • プロバイダprovider "oci"
    Terraformが OCI APIにアクセスするための認証情報やリージョン情報を定義しています。
    providerは、Terraformでクラウド環境を操作するためには必須です。
  • VCN (oci_core_virtual_network)
    cidr_block = "10.0.0.0/16" のようにCIDRを指定し、VCNを定義しています。
  • サブネット (oci_core_subnet)
    VCNのidを参照する際には、oci_core_virtual_network.demo_vcn.idのように指定します。
    VCNと同様、cidr_block = "10.0.1.0/24" のようにCIDRを指定しています。
  • インスタンス (oci_core_instance)
    イメージのOCID(var.image_id)を指定することで、OSイメージを決定しています。
    ※指定可能なimage_idはOCI CLIで確認できます。(後述します。)

2. variables.tf

variables.tfには、Terraform内で使う変数の定義や型などを指定します。
実際に変数に入る値は、後述の terraform.tfvars 内で定義します。
ここでは変数名と型と変数の説明のみを定義します。

# variables.tf

variable "tenancy_ocid" {
  type        = string
  description = "OCID of the tenancy."
}

variable "user_ocid" {
  type        = string
  description = "OCID of the user."
}

variable "fingerprint" {
  type        = string
  description = "Fingerprint of the user's API key."
}

variable "private_key_path" {
  type        = string
  description = "Path to the private key used for API signing."
}

variable "region" {
  type        = string
  description = "Region name."
}

variable "compartment_ocid" {
  type        = string
  description = "OCID of the compartment for resources."
}

variable "availability_domain" {
  type        = string
  description = "Availability domain to use for resources."
}

variable "image_id" {
  type        = string
  description = "OCID of the image to use for the instance."
}

補足

  • typestringlist(string), boolなどの型を指定できます。
  • descriptionにはその変数の用途や意味を持つかを書いておくとわかりやすいかと思います。

    3. terraform.tfvars

実際に使用する変数の値を入力するファイルです。

# terraform.tfvars (例)

tenancy_ocid        = "ocid1.tenancy.oc1..aaaaaaaa...."
user_ocid           = "ocid1.user.oc1..aaaaaaaa...."
fingerprint         = "aa:bb:cc:dd:ee:ff:00:11:22:33:44:55"
private_key_path    = "/home/user/.oci/oci_api_key.pem"
region              = "ap-tokyo-1"
compartment_ocid    = "ocid1.compartment.oc1..aaaaaaaa...."
availability_domain = "Uocm:AP-TOKYO-1-AD-1"
image_id            = "ocid1.image.oc1.ap-tokyo-1.aaaaaaaa...."

補足

  • 各OCIDの確認方法
    OCIコンソールの各サービスページ、またはプロファイルから確認できます。
  • その他設定項目
    • fingerprint はAPIキー作成時に取得できます。
    • image_id はOCI CLIコマンドで取得できます。

docs.oracle.com

docs.oracle.com

リソース・マネージャ(OCI Resource Manager)でのスタック作成

リソース・マネージャは、Terraformを使ったリソース管理をOCIコンソール上で行うことができるサービスです。
Terraformのコードをアップロードし、コンソール上からでterraform planterraform applyを実行できます。

  • terraform plan
    • 定義内容をチェックし、作成、変更、削除されるリソース等を確認することができます。
  • terraform plan
    • terraform plan で出力された内容でリソースが作成、変更、削除されます。

docs.oracle.com

  1. TerraformファイルをZIP化

    • 作成したmain.tfvariables.tfterraform.tfvarsなどのファイルを同一フォルダにまとめ、zip形式に圧縮しておきます。
  2. リソース・マネージャの画面へ移動

    • OCIコンソールにログイン -「リソース・マネージャ」内の「スタック」から「スタックの作成」をクリック
  3. スタック情報の入力

    • スタック名や説明を入力します。
    • マイ構成を選択し、「Terraform構成ソース」では「ZIPファイルのアップロード」を選択、作成したzipファイルをアップロードします。
    • スタックを作成するコンパートメントを指定します。
    • 必要に応じてタグも付けると後々管理が楽になるかと思います。
  4. 変数の指定(オプション)

    • terraform.tfvarsに含まれない値がある場合、スタックの画面上で入力できます。
    • terraform.tfvarsに必要な値が全て入っていれば、追加での指定は不要です。
  5. 作成

    • 「スタックの作成」をクリックすると、スタックが作成されます。
  6. Terraform Plan (プラン) の実行

    • スタック画面から「計画」をクリック。
    • オプションが指定できますが、今回はデフォルトのまま実行します。
    • 実行ログが表示され、スタックでどのようなリソースが作成/変更/削除されるかが表示されます。定義に問題がある場合はこの時点でエラーが出力されます。
  7. Terraform Apply (適用) の実行

    • スタック画面から「適用」をクリック。 実際にOCI上でリソース作成が始まります。
    • Apply complete! と出力されれば正常終了です。
  8. 作成されたリソースの確認

    • 適用を行ったジョブ内の「ジョブ・リソース」から、作成されたリソースの一覧が確認できます。

まとめ

Terraformもリソース・マネージャもほぼ初めて使用してみましたが、OCIリソースをコード上で管理することができ、リソース・マネージャを使えば、GUI操作で簡単にリソースを作成することができました!
リソース・マネージャを使用したCI/CDもいずれは試してみたいと思います。

おわりに

私達クラウド事業部はクラウド技術を活用したSI/SESのご支援をしております。

www.ap-com.co.jp

また、一緒に働いていただける仲間も募集中です! ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp