2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCI上のVMリソース構成情報をTerraformでローカルPCに保存・クラウドに復元してみる その1 初期設定

Last updated at Posted at 2024-05-09

OCI上のVMリソース構成情報をTerraformでローカルPCに保存・クラウドに復元してみる その1 初期設定

はじめに

Windows 11 上の WSLWindows Subsystem for Linux)上で動作する Oracle LinuxTerraformをインストールしてみました。

目的は、OCIでのリソース構成情報を管理し、システム全体の構築または再構築、削除です。

自分で作ったクラウド上のVMやネットワーク、ストレージなど様々なリソースの構成を保存しておき、必要になったときは復元したい場合などがあるのではないでしょうか。

テストや検証用に同じような環境を作成したい場合、毎回手で一から環境を作成していると時間もかかりますし、間違ったり、思わぬところで躓く事もありますね:laughing:

このような構成管理を行う仕組みは是非使いこなせるようになりたいものです。

今回も複数記事の構成に分けて進めていきます。
この記事では terraform の設定と初期化までを行います。

terraform利用前提となる環境

terraform をインストールする環境は

OS: Windows 11 + WSL2 + Oracle Linux 9

また、接続先のクラウドは

接続先クラウドサービス: OCI

です。

です。こちらの記事でも紹介しているように、 Windows 10 や 11 の場合は WSL2 上で動くOracle Linux をインストールして使うのがお勧めです。

リモートのVMでも手元のPCでも同じLinuxディストリビューションで統一できるのはメリット有ですしレスポンスもよいので使い勝手が良いです。未だの方は是非。

Terraformの設定

Terraform: OCI Terraformの設定
https://docs.oracle.com/ja-jp/iaas/developer-tutorials/tutorials/tf-provider/01-summary.htm

辺りを一通り眺めてみます。

の必要がありそう。Terraformプロバイダ って何だろうね??
Oracle Cloud Infrastructure もリストにあるみたい。

どうやらプロバイダを設定するといろいろなクラウドベンダ上にあるリソースを管理できるっぽい:smiley:

image.png

Terraformインストール

上記マニュアルページに "1.準備" をそのままやってみましょう。

1. 準備
https://docs.oracle.com/ja-jp/iaas/developer-tutorials/tutorials/tf-provider/01-summary.htm#prepare

Terraform インストールの有無チェック

+Terraformのインストール
1.使用している環境で、Terraformのバージョンを確認します。

とありますので、 terraform -v やってみます。

$ terraform -v
-bash: terraform: command not found

Terraformさん、まだインストールされてない😢

Terraform ダウンロード

2.ブラウザから、Terraformリリースに移動します。

と書いてありますので
https://releases.hashicorp.com/terraform/
辺りに行き、最新バージョンを見つけましょう。

試した時点では 1.7.5 が最新らしい。
PCのWSL上にインストールなのでamd64を選びます。

image.png

$ mkdir temp
$ cd temp
$ wget https://releases.hashicorp.com/terraform/1.7.5/terraform_1.7.5_linux_amd64.zip

unzipコマンドインストール

unzip コマンドがないときは upnzip もあらかじめインストールしましょう。

$ unzip
-bash: unzip: command not found

$ sudo dnf install unzip
Oracle Linux 9 BaseOS Latest  (x86_64)                                    2.6 MB/s |  22 MB     00:08
Oracle Linux 9 Application Stream Packages (x86_64)                       596 kB/s |  30 MB     00:50
Last metadata expiration check: 0:00:02 ago on xxx 20xx 10:06:34 xx JST.
Dependencies resolved.
==========================================================================================================
 Package            Architecture        Version                      Repository                      Size
==========================================================================================================
Installing:
 unzip              x86_64              6.0-56.0.1.el9               ol9_baseos_latest              195 k

Transaction Summary
==========================================================================================================
Install  1 Package

Total download size: 195 k
Installed size: 392 k
Is this ok [y/N]: y

Terraform を unzip

ダウンロードした terraform unzip を unzip

[t@sjsur ~]$ unzip terraform_1.7.5_linux_amd64.zip
Archive:  terraform_1.7.5_linux_amd64.zip
  inflating: terraform

$ ls
terraform  terraform_1.7.5_linux_amd64.zip

Terraform をコマンドとして動作するよう /usr/local/bin に移動

8.解凍したフォルダを、インストールするサード・パーティ・アプリケーションのバイナリを含むフォルダに移動します。たとえば、Oracle Linuxの場合、サポートされていないフォルダを/usr/local/binに移動します。

とあるので、そのままコピペして実行します。

$ sudo mv terraform /usr/local/bin

インストール後の確認

改めてバージョンチェック。
はい、Terrraformがインストールできました。

$ terraform -v
Terraform v1.7.5
on linux_amd64

APIサインイン用RSAキーの作成

Oracle Cloud InfrastructureアカウントへのAPIサインイン用のRSAキーを作成します。
このキーを使って認証を取り、terraform から OCI上での操作を行います。

ホームディレクトリに .oci フォルダを作成

mkdir \<your-home-directory\>/.oci

と書いてあるので $ mkdir ~/.oci で .oci フォルダを作ります。$ mkdir ~ 等で .oci フォルダ(ディレクトリ)の存在を確認します。

$ mkdir ~/.oci
$ ls -a ~
.   .bash_history  .bash_profile  .oci  temp          .viminfo
..  .bash_logout   .bashrc        .ssh  .terraform.d  .wget-hsts

キー生成

openssl genrsa -out <your-home-directory>/.oci/<your-rsa-key-name>.pem 2048

とコマンドをたたいて、キー(このコマンドで生成されるのは秘密キー)を生成するそうですので、例えば以下のようなコマンド実行をして、キーを生成、キーが作られたことを確認します。

$ openssl genrsa -out ~/.oci/my-rsa-key-is-here.pem 2048
$ ls .oci

image.png

権限変更

chmod 600 <your-home-directory>/.oci/<your-rsa-key-name>.pem

$ chmod 600 ~/.oci/my-rsa-key-is-here.pem

image.png

公開キー生成

先程作成した秘密鍵から公開鍵を作ります。

コマンドシンタックスは

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

このようになっているので、

秘密鍵: my-rsa-key-is-here.pem
公開鍵: my-rsa-key-is-here_public.pem

とする場合は

$ openssl rsa -pubout -in ~/.oci/my-rsa-key-is-here.pem -out ~/.oci/my-rsa-key-is-here_public.pem

としてみます。

$ openssl rsa -pubout -in ~/.oci/my-rsa-key-is-here.pem -out ~/.oci/my-rsa-key-is-here_public.pem
writing RSA key

ls でファイル確認してみましょう。

ls -al .oci

image.png

ちゃんとファイルはできていそうです。

RSAキーの登録

次は、生成したRSAの公開鍵をOCIに登録します。

ユーザのAPIキーとしてこのRSA公開鍵を登録することによりリモートからterraformでの操作が可能となります。

OCI コンソールの右上の人型のアイコンをクリック 「ユーザー設定」 または 「自分のプロファイル」 を選びます。

image.png

image.png

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

image.png

APIキーの追加ダイアログでは 「公開キー・ファイルの選択」 のチェックボックスを選択します。

次に、ファイルをドロップするか1つを選択の 1つを選択 リンクをクリックし、APIキーとして、作成したRSAキーを登録します。

※ ここで登録するのは、公開鍵(パブリックキー)です。間違って秘密鍵を登録しないようにしましょう。

この例では先程作成した my-rsa-key-is-here_public.pem ファイルを登録しています。

image.png

WLS2 の Oracle Linux 9では、WindowsエクスプローラーでLinux側のホームディレクトリを見ることができますのでRSAキー指定しやすいかと思います。

image.png

RSAキー登録完了とフィンガープリント確認

RSAキーが登録出来たらOCIコンソール上にフィンガープリントが表示されます。

このフィンガープリントは後ほど、認証のためにプロバイダファイルに記述が必要になる情報ですので、メモ帳などに控えておきましょう。

image.png

このRSAキーの生成と登録の一連の動作に関してのマニュアルは以下のリンクにありますので参考にしてください。

キーの登録がうまくいかなかったり、terraform apply 等の実行時に authentication エラーとなる場合は、

  • キーのパスやファイル名が間違っている
  • フィンガープリントが正しくない
  • キー生成の時にオプションや引数が間違ったままキーが生成されている

などの可能性があります。

もう一度キーを生成しなおしたり、登録しなおしたり、パスやファイル名の確認をしてみましょう。

参考ドキュメント
RSAキーの生成
https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/apiigningkey.htm#two

Oracle® Linux証明書と公開キー・インフラストラクチャの管理
第2章 Oracle LinuxでのOpenSSLの使用
https://docs.oracle.com/cd/F22978_01/certmanage/openssl.html#%E7%AC%AC2%E7%AB%A0-Oracle-Linux%E3%81%A7%E3%81%AEOpenSSL%E3%81%AE%E4%BD%BF%E7%94%A8

ポリシーの設定

ポリシーの設定はユーザが管理者グループに属している場合は不要です。
念のため下記に記しておきます。

 allow group <the-group-your-username-belongs> to read all-resources in tenancy

プロバイダファイルの作成

terraformでOCIに接続するには先ほど生成したRSAキー情報の他にもいくつかの情報が必要になります。認証に必要な情報は provider.tf というファイル (プロバイダファイル) にまとめて記述しておくと便利です。

profile.tf を作成するために必要な情報を集めます。

必要な情報の収集

terraform をリモートから利用するには下記の情報を用意する必要があります。

  • テナンシOCID
  • ユーザ OCID
  • プライベートキーのパス
  • フィンガープリント
  • リージョン

OCID はOCIの各リソースに紐づく数値と記号の並び(ID)です。
プライベートキーのパスは、先ほど作成したSSLローカルマシン上のプライベートキー(秘密鍵)のパスです。

テナンシOCID取得

上部のナビゲーション・バーで、「プロファイル」メニュー(右上の人の形のアイコン)をクリックし、テナンシ: に移動してテナンシ情報TABにある OCIDをコピーします。

image.png

テナンシ情報TABにある OCIDの右隣りの「コピー」を押すとクリップボードにOCIDがコピーされペースト可能になります。
もしくは「表示」を押してOCIDをコピーします。

image.png

provider.tf に記述が必要となりますので
コピーした OCID はメモ帳などに一旦ペースト等しておいてください。
これがテナンシOCIDとなります。

ユーザOCID取得

「プロファイル」メニューから、「ユーザ設定」もしくは「自分のプロファイル」をクリック、に移動してOCIDをコピーします。

image.png

image.png

ユーザーの詳細が表示されたら、OCID を探し、「コピー」を押してユーザOCIDをコピーします。

image.png

provider.tf に記述が必要となりますので
コピーした OCID はメモ帳などに一旦ペースト等しておいてください。
これがユーザOCIDとなります。

プライベートキーのパス取得

先程 RSAキーの作成にて作成したキー(秘密鍵)のフルパスを記述する必要があります。

ユーザ名が your_username とすると、パスは

/home/your_username/.oci/my-rsa-key-is-here.pem

などという形になります。

フィンガープリント取得

これは先ほど登録したRSAキー(APIキー)のフィンガープリントです。

例えばこのような形の16進数の並びになります。

42:54:a9:7d:43:06:3c:da:c7:3e:48:2e:ff:b1:0d:44

※ このままコピー・ペーストしても動きません。ご自分で取得されたフィンガープリントをご利用ください。

リージョン情報取得

上部のナビゲーション・バーをみればすぐにリージョンがわかります。
リージョンおよび可用性ドメイン の表から、リージョン識別子(region-identifier) を見つけてメモします。

東京は ap-tokyo-1
大阪は ap-osaka-1

ですね。ここでは 東京は ap-tokyo-1 を利用します。

全ての情報が揃ったら、次は provider.tf の作成を行います。

スクリプトの作成

provider.tfファイル作成

OCIの自分のテナントに接続するために provider.tf ファイルを用意します。

terraform はカレントディレクトリの .tf ファイルを読みに行きますので .tf の拡張子であれば名前はどのようなものでも構いませんが便宜上 provider.tf というファイルにプロバイダ接続情報を記述することとします。

先程取得した情報

  • テナンシOCID
  • ユーザ OCID
  • プライベートキーのパス
  • フィンガープリント
  • リージョン

をこのような形でテキストファイルにまとめます。

  tenancy_ocid = "ocid1.tenancy.oc1..aaaaaaaa3mb7wrcy2xxxx3jxxxoaxx5tkguca"
  user_ocid = "ocid1.user.oc1..aaaaaa6bzv2ghv25inunzaym35ckxxxxxwhxxybxxr2e6a"
  private_key_path = "/home/your_username/.oci/my-rsa-key-is-here.pem"
  fingerprint = "42:54:a9:7d:43:06:3c:da:c7:3e:48:2e:ff:b1:0d:44"
  region = "ap-tokyo-1"

このテキストファイルからprovider.tf ファイルを作ります。
テキストファイルを

provider "oci" { 

}

でくくるだけですね。
下記に provider.tf ファイルの記述例を示します。

provider.tf の例

provider "oci" {
  tenancy_ocid = "ocid1.tenancy.oc1..aaaaaaaa3mb7wrcy2xxxx3jxxxoaxx5tkguca"
  user_ocid = "ocid1.user.oc1..aaaaaa6bzv2ghv25inunzaym35ckxxxxxwhxxybxxr2e6a"
  private_key_path = "/home/your_username/.oci/my-rsa-key-is-here.pem"
  fingerprint = "42:54:a9:7d:43:06:3c:da:c7:3e:48:2e:ff:b1:0d:44"
  region = "ap-tokyo-1"
}

Terraform 初期化

tf-provider というディレクトリ内で terraform を動作させてみます。

provider.tf をカレントディレクトリに配置する

tf-provider という名前でディレクトリを作り、その配下に先程作成した provider.tf を用意します。

mkdir ~/tf-provider
cp ./provider.tf ~/tf-provider
cd ~/tf-provider
ls

image.png

provider.tf を確認しました。

terraform init 実行

provider.tf があるディレクトリで

terraform init

を実行します。

初期化完了確認

image.png

正しくプロバイダ情報が設定されており、OCI用のプロバイダプラグインがインストールされ初期化が正常に完了すると

Terraform has been successfully initialized!

と表示され初期化が完了します。

ここまで完了すればおおよそ準備完了となります。

次回の記事

OCI上のVMリソース構成情報をTerraformでローカルPCに保存・クラウドに復元してみる その2 構成の保存

に乞うご期待

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?