目次
- 目次
- はじめに
- どんなひとに読んで欲しい
- Terraform について
- Terraformでのリソース定義
- リソース・マネージャ(OCI Resource Manager)でのスタック作成
- まとめ
- おわりに
はじめに
こんにちは、クラウド事業部の早房です。
今回は、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." }
補足
type
はstring
、list(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コマンドで取得できます。
リソース・マネージャ(OCI Resource Manager)でのスタック作成
リソース・マネージャは、Terraformを使ったリソース管理をOCIコンソール上で行うことができるサービスです。
Terraformのコードをアップロードし、コンソール上からでterraform plan
とterraform apply
を実行できます。
- terraform plan
- 定義内容をチェックし、作成、変更、削除されるリソース等を確認することができます。
- terraform plan
- terraform plan で出力された内容でリソースが作成、変更、削除されます。
TerraformファイルをZIP化
- 作成した
main.tf
、variables.tf
、terraform.tfvars
などのファイルを同一フォルダにまとめ、zip形式に圧縮しておきます。
- 作成した
リソース・マネージャの画面へ移動
- OCIコンソールにログイン
-「リソース・マネージャ」内の「スタック」から「スタックの作成」をクリック
- OCIコンソールにログイン
-「リソース・マネージャ」内の「スタック」から「スタックの作成」をクリック
スタック情報の入力
- スタック名や説明を入力します。
- マイ構成を選択し、「Terraform構成ソース」では「ZIPファイルのアップロード」を選択、作成したzipファイルをアップロードします。
- スタックを作成するコンパートメントを指定します。
- 必要に応じてタグも付けると後々管理が楽になるかと思います。
変数の指定(オプション)
terraform.tfvars
に含まれない値がある場合、スタックの画面上で入力できます。terraform.tfvars
に必要な値が全て入っていれば、追加での指定は不要です。
作成
- 「スタックの作成」をクリックすると、スタックが作成されます。
- 「スタックの作成」をクリックすると、スタックが作成されます。
Terraform Plan (プラン) の実行
- スタック画面から「計画」をクリック。
- オプションが指定できますが、今回はデフォルトのまま実行します。
- 実行ログが表示され、スタックでどのようなリソースが作成/変更/削除されるかが表示されます。定義に問題がある場合はこの時点でエラーが出力されます。
- スタック画面から「計画」をクリック。
Terraform Apply (適用) の実行
- スタック画面から「適用」をクリック。 実際にOCI上でリソース作成が始まります。
- Apply complete! と出力されれば正常終了です。
- スタック画面から「適用」をクリック。 実際にOCI上でリソース作成が始まります。
作成されたリソースの確認
- 適用を行ったジョブ内の「ジョブ・リソース」から、作成されたリソースの一覧が確認できます。
- 適用を行ったジョブ内の「ジョブ・リソース」から、作成されたリソースの一覧が確認できます。
まとめ
Terraformもリソース・マネージャもほぼ初めて使用してみましたが、OCIリソースをコード上で管理することができ、リソース・マネージャを使えば、GUI操作で簡単にリソースを作成することができました!
リソース・マネージャを使用したCI/CDもいずれは試してみたいと思います。
おわりに
私達クラウド事業部はクラウド技術を活用したSI/SESのご支援をしております。
また、一緒に働いていただける仲間も募集中です! ご興味持っていただけましたらぜひお声がけください。