5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Windows端末(PC) に Terraform をインストールして OCI(Oracle Cloud Infrastructure) で動作させるための準備

Last updated at Posted at 2020-05-01

Windows端末(PC) に Terraform をインストールして OCI(Oracle Cloud Infrastructure) で動作させるための準備等をメモしておくやで。
彡(゚)(゚)

1. Terraformのダウンロード&解凍&環境変数(Path)設定

Terraform をダウンロード&適当なディレクトリに解凍します。

Download Terraform
https://www.terraform.io/downloads.html

Windows 64bit版 をダウンロードして適当なディレクトリで解凍、パス(Path)を通しておきます。

01_path.jpg

コマンドプロンプト(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 を作成

細かい手順はすっ飛ばしてスクショを貼っておきます。
05_Compartment.jpg
02_iam_user.jpg
03_iam_group.jpg
04_iam_policy.jpg

作成した 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 が表示されます。

06_API_Fingerprint.jpg

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

必要なキーと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 で環境構築や!彡(゚)(゚)

Appendix. おまけ

(2020/7/30追記) こちらの Terrafrom で確認できる xxxx:PHX-AD-3 の Avilability Domain名の xxxx部分 は、テナント毎に異なります。マジか!
彡(゚)(゚)


image.png

image.png

マニュアル記述は下記

https://docs.cloud.oracle.com/en-us/iaas/Content/General/Concepts/regions.htm
... Oracle Cloud Infrastructure uses tenancy-specific prefixes for the availability domain names.
For example: the availability domains for your tenancy are something like Uocm:PHX-AD-1, Uocm:PHX-AD-2, and so on.

5
7
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
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?