OCI Terraformの設定
Terraformレジストリに記載されているOracle Cloud InfrastructureのTerraformプロバイダ・スクリプトを設定して、OCIアカウントに接続します。テナンシから情報をフェッチして設定を確認します。
主なタスクは:
- RSAキーを作成します。
- Oracle Cloud Infrastructure Terraformプロバイダ・スクリプトを設定します:
- Terraformスクリプトを認証します。
- テナンシ内の可用性ドメインに関する情報を取得します。

詳細は、次を参照してください:
開始前
このチュートリアルを正常に実行するには、次が必要です:
- Oracle Cloud Infrastructureアカウント。無料Oracle Cloudプロモーションのリクエストおよび管理を参照してください。
- MacOS、LinuxまたはWindows環境:
- MacOS
- Linux (任意のディストリビューション)
- Always Freeコンピュート・シェイプのLinux VMをOracle Cloud Infrastructureにインストールできます:
- Oracle Cloud Infrastructure Cloud Shell:
- WSLを使用して Windowsに Linuxをインストールする方法 (WSL)
- Linux VMにアクセスするためのGit for Windows。
このチュートリアルでは、その例としてAMDシェイプを使用したOracle Linux VM環境を使用しますが、この項で説明する任意の環境を使用できます。
1. 準備
Terraformスクリプトを認証および実行するための環境を準備します。また、アカウントがスクリプトの認証に必要な情報を収集します。
次の場合は、RSAキーの作成をスキップします:
- Cloud ShellまたはResource Managerを使用しています。Oracle Cloudコンソールにサインインすると、すでに認証されています。
- チュートリアル「リソース検出の設定」のRSAキーはすでに作成されています。
これで、OCIアカウントに接続するためのRSAキーが設定されました。
- リファレンス
- API署名キーを生成する方法
ユーザー名がAdministrators
グループ内にある場合は、この項をスキップしてください。それ以外の場合は、テナンシに次のポリシーを追加するよう管理者に依頼してください:
allow group <a-group-that-your-username-belongs-to> to read all-resources in tenancy
この権限を持つユーザーは、テナンシ内のすべてのリソースをリストできます。
- Oracle Cloudコンソールにサインインします。
- ナビゲーション・メニューで、「プロファイル」メニュー
を選択し、表示されるオプションに応じて「ユーザー設定」または「自分のプロファイル」を選択します。
- 表示されるオプションに応じて、「グループ」または「自分のグループ」を選択します。
- メモ帳で、ユーザー名が属するグループの名前をコピーします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」を選択します。「アイデンティティ」にある「ポリシー」を選択します。
- コンパートメントを選択します:
<your-tenancy>(root)
- 「ポリシーの作成」を選択します。
- 「ポリシーの作成」ページで、次の値を入力します:
- 名前:
list-resources
- 説明:
Allow the group <a-group-that-your-username-belongs-to> to list the resources in this tenancy.
- コンパートメント:
<your-tenancy>(ルート)
- 名前:
- 「ポリシー・ビルダー」で、「手動エディタの表示」を選択します。
- 次のポリシーを貼り付けます:
allow group <a-group-that-your-username-belongs-to> to read all-resources in tenancy
- 「作成」を選択します。
参照: 共通ポリシー
Terraformスクリプトの認証に必要な情報を準備し、情報をノートパッドにコピーします。
2. スクリプトの作成
認証用のスクリプトを作成し、アカウントからデータをフェッチして出力を出力します。
required_providers
ブロックを含むバージョン・スクリプトを追加して、必要なプロバイダ・バージョンを宣言します。APIキー・ベースの認証には次の変数を使用します:
tenancy_ocid
user_ocid
private_key_path
fingerprint
region
プロバイダをインストールする必要はありません。このチュートリアルのスクリプトを実行すると、プロバイダがダウンロードされます。
provider.tf
スクリプトを認証し、アカウントから情報を取得することを確認します。Terraformでデータをフェッチするには、データ・ソースを使用します。データ・ソースからのデータのフェッチは、REST APIのGETメソッドに似ています。
- Oracle Cloud Infrastructureプロバイダに移動します。
- 左上の「フィルタ」ボックスに、
availability domains
と入力します。 - 「アイデンティティ」で、「データ・ソース」に移動し、oci_identity_availability_domainsを選択します。
ページのタイトルはリソース・タイプです:
oci_identity_availability_domains
- ページのタイトルからデータ・ソース名を検索します:
- データソース:
- 引数リファレンスの項で、(必須)というラベルの付いたすべての引数(入力)を見つけます:
- compartment_id
- データ・ソース・ブロックを作成します:
- キーワード
data
を使用してデータ・ソースを宣言します。 - データ・ソース名
"oci_identity_availability_domains"
のラベルを追加します - ローカル名の任意のラベルを追加します:
- ラベルには、文字、数字、アンダースコア(
_
)およびハイフン(-
)を含めることができます。最初の文字は数字にできません。 - このチュートリアルでは、ローカル名
"ads"
を使用してdata "oci_identity_availability_domains" "ads"
を構成します。
- ラベルには、文字、数字、アンダースコア(
- コード・ブロック内で、必要なすべての引数の値を指定します。
- 例:
compartment_id = "<some-compartment-ocid>"
- 例:
- オプションの引数には、フェッチ結果を絞り込むための値を指定します。一部のデータ・ソースにのみオプションの引数があります。
- キーワード
データ・ソースoci_identity_availability_domains
は、可用性ドメインのリストをフェッチします。この項では、フェッチされた情報を印刷する出力ブロックを宣言します。
- 属性リファレンス(oci_identity_availability_domains)に移動します。ノート
属性は、oci_identity_availability_domains
データ・ソースに対して返すことができる出力です。 - 属性を検索します:
- 属性:
availability_domains:
- 可用性ドメインのリスト
availability_domains:
を出力すると、リスト内の可用性ドメインごとに、3つの属性が表示されます:- compartment_id
- id
- 名前
- 属性:
- データ・ソース出力ブロックを作成します:
- キーワード
output
を使用して出力ブロックを宣言します - 出力結果とともに印刷するラベルを追加します:
- ラベルには、文字、数字、アンダースコア(
_
)およびハイフン(-
)を含めることができます。最初の文字は数字にできません。 - 例:
"all-availability-domains-in-your-tenancy"
- ラベルには、文字、数字、アンダースコア(
- コード・ブロック内で、次の式を使用してデータ・ソース出力の値を入力します:
value = data.<data-source-name>.<local-name-for-data-source>.<attribute>
- 例:
value = data.oci_identity_availability_domains.ads.availability_domains
- キーワード
3. スクリプトの実行
Terraformスクリプトを実行します。アカウントがスクリプトを認証した後、Terraformはテナンシの可用性ドメインをフェッチします。
tf-provider
ディレクトリの作業ディレクトリを初期化します。これで、oci
プロバイダのプラグインを含む.terraform
というフォルダが作成されました。
plan
コマンドを実行します。
terraform plan
出力例:
data.oci_identity_availability_domains.ads: Reading...
data.oci_identity_availability_domains.ads: Read complete after 1s [id=xxx]
Changes to Outputs:
+ all-availability-domains-in-your-tenancy = [
+ {
+ compartment_id = "ocid1.tenancy.oc1..xxx"
+ id = "ocid1.availabilitydomain.xxx"
+ name = "QnsC:US-ASHBURN-AD-1"
},
+ {
+ compartment_id = "ocid1.tenancy.oc1..xxx"
+ id = "ocid1.availabilitydomain.yyy"
+ name = "QnsC:US-ASHBURN-AD-2"
},
+ {
+ compartment_id = "ocid1.tenancy.oc1..xxx"
+ id = "ocid1.availabilitydomain.zzz"
+ name = "QnsC:US-ASHBURN-AD-3"
},
]
You can apply this plan to save these new output values to the Terraform state, without changing any real
infrastructure.
- データをフェッチしているため、出力のみを追加していることが計画に示されます。リソースの追加、変更または破棄はしていません。
-out
オプションのかわりにoutput.tf
ファイルを使用しているため、次のメッセージは無視できます。Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
完了!これで、Oracle Cloud Infrastructureアカウントは、Oracle Cloud Infrastructure Terraformプロバイダ・スクリプトを認証できます。
参照:
Terraformスクリプトの実行中に次のエラー・メッセージが表示される場合があります。
401エラー- (Service error:NotAuthenticated)
次の変数のいずれかの値が正しくありません:
- テナンシOCID
- ユーザーOCID
- フィンガープリント
- RSA秘密キー(パスまたはキー)
クライアントを作成できません。構成が不正です: 秘密キーの適切な構成が見つかりませんでした
TerraformスクリプトでRSA秘密キーが見つかりません。
そのようなホストはありません
リージョン識別子の値が正しくありません。
使用可能なプロバイダ・パッケージの問合せに失敗しました
VPNを使用している場合は、プロキシ設定を確認してください。
次の処理
次のTerraform: スタート・ガイド・チュートリアルを参照してください:
Oracle製品を使用した開発の詳細を確認するには、次のサイトを参照してください: