Windows端末(PC) に Terraform をインストールして OCI(Oracle Cloud Infrastructure) で動作させるための準備
- 1. Terraformのダウンロード&解凍&環境変数(Path)設定
- 2. OpenSSL で API Key用 の キーペア を 作成
- 3. OCI Console から Compartment, IAM User, IAM Group, IAM Policy を作成
- 4. IAM User に 公開鍵をアップロードして APIキー を発行
- 5. Terraform の定義ファイル(*.tf)サンプルのダウンロード
- 6. 変数定義ファイル(vars.tf) の 編集 と 秘密鍵ファイルのコピー
- 7. terraform の実行(init, plan, apply)
- 8. 参考ドキュメント/記事
- 9. まとめ
Windows端末(PC) に Terraform をインストールして OCI(Oracle Cloud Infrastructure) で動作させるための準備等をメモしておくやで。
彡(゚)(゚)
1. Terraformのダウンロード&解凍&環境変数(Path)設定
Terraform をダウンロード&適当なディレクトリに解凍します。
Download Terraform
https://www.terraform.io/downloads.html
Windows 64bit版 をダウンロードして適当なディレクトリで解凍、パス(Path)を通しておきます。
コマンドプロンプト(or PowerShell) で実行してバージョンを出してみます。
> terraform -v Terraform v0.12.24
2. OpenSSL で API Key用 の キーペア を 作成
下記サイト等から openssl の Windows用バイナリをダウンロードしてインストールします。パス(Path)も通しときましょう。
Win32/Win64 OpenSSL
https://slproweb.com/products/Win32OpenSSL.html
コマンドプロンプト(or PowerShell) で 秘密鍵ファイル を作成します。
> openssl genrsa -out oci-terraform.pem 2048 Generating RSA private key, 2048 bit long modulus (2 primes) .......+++++ ...................+++++ e is 65537 (0x010001)
秘密鍵 から 公開鍵 を作成します。
> openssl rsa -pubout -in oci-terraform.pem -out oci-terraform_pub.pem writing RSA key
3. OCI Console から Compartment, IAM User, IAM Group, IAM Policy を作成
細かい手順はすっ飛ばしてスクショを貼っておきます。
作成した Policy に付与した権限(Policy Statement) は以下の通り、Compartmentの管理権限を付与しています。Terraform の実行権限はここのポリシーに依存するので、必要な権限(Policy)を付与して下さい。
ALLOW GROUP ays-iam-group01 TO manage all-resources IN compartment ays-compartment01
4. IAM User に 公開鍵をアップロードして APIキー を発行
下記を実施して IAM User に公開鍵をアップロードします。
OCI Console の Identity ⇒ User ⇒ 上記3. で作成した IAM User ⇒ Add Public Key ⇒ 2. で作成した公開鍵をアップロード
成功すると下記のように APIキーが発行されて 公開鍵 の Fingerprint が表示されます。
5. Terraform の定義ファイル(*.tf)サンプルのダウンロード
下記にTerraform定義ファイル(*.tf)のサンプルをアップロードしています。Avilability Domain の一覧を表示するだけの簡単なサンプルです。任意のディレクトリに git clone するか Download して下さい。
https://github.com/gonsuke777/terraform/tree/master/oci_init
git clone https://github.com/gonsuke777/terraform
6. 変数定義ファイル(vars.tf) の 編集 と 秘密鍵ファイルのコピー
vars.tf に変数を集約しています。下記の通り編集して下さい。
変数名 | 説明 |
---|---|
tenancy_ocid | Tenant の OCID を記述して下さい。OCI Console右上の人型アイコンから遷移して参照できます。 |
iam_user_ocid | 3. で作成した IAM User の OCID を記述して下さい。 |
iam_user_fingerprint | 4. の Fingerprint を記述して下さい。 |
iam_user_private_key_path | 2. で作成した秘密鍵ファイルをコピーして、絶対or相対パスで記述して下さい。 |
bucket_namespace | Object Storage の namespace を記述して下さい。OCI Console右上の人型アイコンから遷移して参照できます。 |
region | Terraform を実行する Region の英語名を記述して下さい。例:ap-tokyo-1, us-ashburn-1, us-phoenix-1 |
compartment_ocid | 3. で作成した Compartment の OCID を記述して下さい。 |
7. terraform の実行(init, plan, apply)
terraform を実行します。下記のコマンドをコマンドプロンプト(or PowerShell)から実行します。
cd <tfファイルを格納したディレクトリ> terraform init terraform plan terraform apply
実行結果は下記の通りです。上手くいったやで彡(^)(^)
> terraform init Initializing the backend... Initializing provider plugins... - Checking for available provider plugins... - Downloading plugin for provider "oci" (hashicorp/oci) 3.73.0... The following providers do not have any version constraints in configuration, so the latest version was installed. To prevent automatic upgrades to new major versions that may contain breaking changes, it is recommended to add version = "..." constraints to the corresponding provider blocks in configuration, with the constraint strings suggested below. * provider.oci: version = "~> 3.73" Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.
> terraform plan Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. data.oci_identity_availability_domains.ads: Refreshing state... ------------------------------------------------------------------------ No changes. Infrastructure is up-to-date. This means that Terraform did not detect any differences between your configuration and real physical resources that exist. As a result, no actions need to be performed.
> terraform apply data.oci_identity_availability_domains.ads: Refreshing state... Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Outputs: show-ads = [ { "compartment_id" = "ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "id" = "ocid1.availabilitydomain.oc1..aaaaaaaaaijs56nfsz2usbwsr6k6t5b3do7hns6ib2day6le5scrvvjpeceq" "name" = "xCoU:AP-TOKYO-1-AD-1" }, ]
3AD の Phoenix Region で apply すると下記のような結果になります。
> terraform apply : Outputs: show-ads = [ { "compartment_id" = "ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "id" = "ocid1.availabilitydomain.oc1..aaaaaaaaupx7ga46w4xbb3fnkoh7rtyumacyb3ek6bw7bt3qff3mgt3mbrlq" "name" = "xCoU:PHX-AD-1" }, { "compartment_id" = "ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "id" = "ocid1.availabilitydomain.oc1..aaaaaaaac7uydq54rcymamzauv5pd23qk2g2vqlrfu5jd3y6i6qxpvvzkf7a" "name" = "xCoU:PHX-AD-2" }, { "compartment_id" = "ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "id" = "ocid1.availabilitydomain.oc1..aaaaaaaakemzo4ywaynz573sk4jpvwuqi7vmcuxajxfv4jjj2pthez3j2hbq" "name" = "xCoU:PHX-AD-3" }, ]
8. 参考ドキュメント/記事
Terraformプロバイダ
https://docs.oracle.com/cd/E97706_01/Content/API/SDKDocs/terraform.htm
Oracle Cloud Infrastructure Provider
https://www.terraform.io/docs/providers/oci/index.html
terraform-provider-oci / examples (GitHub)
https://github.com/terraform-providers/terraform-provider-oci/tree/master/examples
必要なキーとOCID
https://docs.oracle.com/cd/E97706_01/Content/API/Concepts/apisigningkey.htm
【OCI】oracle cloud -Terraformで環境構築-
https://qiita.com/manaki/items/068e15f143d2bdbaae69
Oracle Cloudで始めるTerraform 自動化の真骨頂
https://qiita.com/Brutus/items/ed2ddb74fa8a13369d9f
9. まとめ
本当は前回更新した環境を Terraform で構築するところまで行きたかったんやけど、準備で思いのほか手間が掛かったので独立した記事にしたった。
次回こそ Terraform で環境構築や!彡(゚)(゚)