【手順】terraformでVCN作成

作業環境

VM.Standard2.1 Oracle Linux 7.9

事前準備と作業概要

VCN(tera_vcn)、パブリックサブネット(public_subnet)、VMインスタンス(tera_vm)を作成し、ssh接続しておく。 terraformでは、新たなVCN(ExampleVCN)を作成する。

作業手順

  1. terraformのインストール
  2. プロバイダのインストール
  3. OCI CLIのインストール
  4. terraformでVCN作成

1. terraformのインストール

1-1. terraformのDL

VMインスタンス(tera_vm)に接続し、terraform用のディレクトリを作成。作成したディレクトリに移動し、wgetコマンドでアーキテクチャに沿ったterraformのzipを落とす。

$ mkdir ~/terraform
$ cd ~/terraform
$ wget https://releases.hashicorp.com/terraform/1.0.7/terraform_1.0.7_linux_amd64.zip
$ unzip terraform_0.11.13_linux_amd64.zip
1-2. 生成されたバイナリファイルをPATHに追加

unzipで生成されたバイナリファイル(terraformファイル)をPATHに追加。

$ cd
$ vi .bash_profile
  追記
  export PATH=/home/opc/terraform:$PATH
$ source ~/.bash_profile
1-3. コマンドが使えることを確認
$ terraform -h



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

2-1. フォルダ作成

どこでもいいので(たぶん) terraform.d/plunins フォルダを作成する。このディレクトリ名じゃないとダメなのかと思っていましたが、ディレクトリ名をリネームしてもエラーにはなりませんでした。

$ mkdir /home/opc/terraform/terraform.d/plugins
$ cd /home/opc/terraform/terraform.d/plugins
2-2. Terraformプラグインインストール

下記URLから環境に合わせたOCI向けのTerraformプラグインをインストールする。 https://github.com/terraform-providers/terraform-provider-oci/releases Souce code(zip)をダウンロード

ローカルにダウンロードされるので、SCPコマンドでVMインスタンスに転送する。

$ scp -i <鍵パス> <さっき落としたzipのパス> opc@<VMインスタンスのパブリックIP>:/home/opc
$ cd
$ mv terraform-provider-oci-4.44.0.zip /home/opc/terraform/terraform.d/plugins
2-3. zip解凍
$ cd /home/opc/terraform/terraform.d/plugins
$ unzip terraform-provider-oci-4.44.0.zip



3. OCI CLIの利用準備

3-1. pythonインストール

Oracle Linuxにはデフォルトでインストールされていました。下記コマンドでバージョンを確認すると2.7.5と古めでしたが気にせず進みます。(本筋じゃないところでつまずきたくないだけです)

$ python -V
3-2. OCI CLIインストール & バージョン確認

CLIのバージョンは3.0.5でした。

$ bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
$ oci -v
3-3. 利用前の事前設定
3-3-1. OCIDの確認

コンソール画面から、OCI接続に利用するユーザのOCIDと、テナンシのOCIDを確認しておきます。 ユーザのOCIDは、アイデンティティ > ユーザー > 該当ユーザー詳細画面f:id:meisou-tsuru:20210918145520p:plain

テナンシのOCIDは、アカウント管理 > テナンシ詳細画面f:id:meisou-tsuru:20210918145517p:plain

3-3-2. CLIのセットアップ

ユーザOCID、テナンシOCID、リージョン(ap-tokyo-1)は入力し、あとはそのままEnter。 configファイルは /home/opc/.oci/config、APIキーは /home/opc/.oci に作成されます。

$ oci setup config


3-3-3. コンソールにAPIキー登録

先ほど生成したAPIキーの公開鍵の方を、コンソール画面で登録します。あらかじめ公開鍵の中身をコピーしておきます。

$ cd /home/opc/.oci
$ cat oci_api_key_public.pem


コンソール画面に戻り、APIキーを登録します。 アイデンティティ > ユーザー > 該当ユーザー詳細画面 > APIキーf:id:meisou-tsuru:20210918151014p:plain 公開鍵の貼り付けを選択してテキストエリアに貼り付け。f:id:meisou-tsuru:20210918151212p:plain

3-3-4. CLIコマンドが利用できるか確認

以下のコマンドで、リージョンのリストを取得してみます。

$ oci iam region list --output table



4. terraformでVCN作成

4-1. tfファイル作成

プロバイダの指定と、VCN作成だけの簡単なファイルを作成します。拡張子が.tfであればファイル名は何でも構いません。

provider "oci" {
  region = "ap-tokyo-1"
}

resource "oci_core_virtual_network" "ExampleVCN" {
  cidr_block = "10.1.0.0/16"
  compartment_id = "xxxxxxxxxxxxxx"
  display_name = "TFExampleVCN"
}

コンパートメントのOCIDは、アイデンティティ > コンパートメント詳細画面f:id:meisou-tsuru:20210918153008p:plain

4-2. dry run

次のコマンドでterraformを実行する前にドライランを行うことができます。が、その前にterraform initというものを実行しないとエラーとなったので、それも忘れずに。

$ terraform init
$ terraform plan

terraform plan を実行すると、こんな実行計画が取れました。

# oci_core_virtual_network.ExampleVCN will be created
+ resource "oci_core_virtual_network" "ExampleVCN" {
    + cidr_block               = "10.1.0.0/16"
    + cidr_blocks              = (known after apply)
    + compartment_id           = "xxxxxxxxxxxxxx"
    + default_dhcp_options_id  = (known after apply)
    + default_route_table_id   = (known after apply)
    + default_security_list_id = (known after apply)
    + defined_tags             = (known after apply)
    + display_name             = "TFExampleVCN"
    + dns_label                = (known after apply)
    + freeform_tags            = (known after apply)
    + id                       = (known after apply)
    + ipv6cidr_blocks          = (known after apply)
    + is_ipv6enabled           = (known after apply)
    + state                    = (known after apply)
    + time_created             = (known after apply)
    + vcn_domain_name          = (known after apply)
  }

頭についている+マークが、「新規に作成しますよ」の印らしいです。削除の場合は-マーク、削除&再作成の場合は-/+マークとなるようです。

4-3. いざ実行
$ terraform apply

コンソール画面に行って確認してみます。f:id:meisou-tsuru:20210918153030p:plain 指定したCIDRと表示名で新たにExampleVCNが作成されました!

おまけ(できなかったこと)

この後調子に乗ってインスタンスの作成もやってみようとしたのですが、できませんでした。このとき作成したtfファイルは以下のような感じです。
↓ main.tf

# プロバイダの指定部分
provider "oci" {
  region = "${var.region}"
}

# インスタンス作成部分
resource "oci_core_instance" "TFInstance" {
  count = "1"
  compartment_id = "${var.compartment_ocid}"
  display_name = "TFInstance${count.index}"
  shape = "VM.Standard2.1"
  availability_domain = "AD-1"

  create_vnic_details {
    subnet_id = "xxxxxxxxxx"
  }

  source_details {
    source_type = "image"
    source_id = "${var.instance1_image_ocid}"
  }

  metadata = {
    ssh_authorized_keys = "${var.ssh_public_key}"
  }
}

変数は、 variables.tf ファイルに別出ししています。

variable "region" {
  default = "ap-tokyo-1"
}

variable "compartment_ocid" {
  default = "xxxxxxxxxx"
}

variable "vcn_ocid" {
  default = "xxxxxxxxxx"
}

variable "ssh_public_key" {
  default = "xxxxxxxxxx"
}

variable "instance1_image_ocid" {
  default = "xxxxxxxxxx"
}

変数を使っている箇所と、ベタ書きしている箇所が混在していますが、問題はきっとそんなことではありません。ADの指定がおかしいようなのですが、OCIのterraformリファレンスを見ても東京リージョンのADをどう書けばいいのか分かりません。AD-1じゃないということは確かなようです。

そしてここをクリアしたとしても、鍵の指定方法に疑問が残っています。 ssh-keygenで生成した鍵をssh_public_key変数に入れているのですが、ここは公開鍵の中身をペタッと貼り付けておけば良いのでしょうか??

コードでインフラを作れれば楽だと聞いていたのですが、私にはまだ分からないことばかりです。インスタンスも作りたかったなぁ。

/*** Original ***/