リソース検出の使用

Oracle Cloud Infrastructure (OCI) Terraformプロバイダのリソース検出機能では、HashiCorpのterraform-execを使用して、検出されたOCIリソースをTerraform構成ファイルおよび状態ファイルにインポートします。

前提条件

terraform-execを使用するには、システムにTerraform CLIが存在する必要があります。インストールの詳細は、Terraformのダウンロードとインストールを参照してください。

ノート

Terraformバージョンv0.11を使用している場合、このツールでは状態ファイルを生成できません。v0.11では構成のみがサポートされています。デフォルトでは、構成はv0.12で生成されます。

Terraform CLIのv0.13.*を使用する場合は、バージョンがv0.12の構文と互換性があることを確認してください。

また、OCI Terraformプロバイダをダウンロードしてインストールしておく必要があります。ダウンロードの手順は、プロバイダのダウンロードとインストールを参照してください。

パスへのツールの追加

OCI Terraformプロバイダを実行可能ファイルとして実行し、リソース検出を使用するには、次を行います:

  • terraform-provider-ociをシステム・パスに追加します。
  • プロバイダをその配置されているディレクトリから実行します。
  • リソース検出コマンドの実行時に、プロバイダへのフルパスを指定します。

リソース検出コマンドではterraform-execを使用してTerraformをコールするため、システムでは次のいずれかの方法を使用してTerraform CLIの場所を指定する必要があります:

  • terraform_bin_path環境変数を使用して、Terraform CLIの名前を含むフルパスを指定します。変数の設定の詳細は、環境変数を参照してください。
  • Terraform CLIをシステム・パスに追加します。

認証

コンパートメント内のリソースを検出するには、OCI Terraformプロバイダに、リソースの検出に使用するユーザー、テナンシおよびリージョンに関する認証情報が必要です。検出するリソースを検査して読み取るためのアクセス権を持つユーザーを指定することをお薦めします。

APIキー認証および環境変数またはインスタンス・プリンシパル認可を使用して、必要な情報を指定できます。

リソースのエクスポート

Terraform CLIの場所と認証設定を指定したら、次のいずれかのコマンドを使用してコンパートメントのリソースをエクスポートできます:

terraform-provider-oci -command=export -compartment_name=<compartment_name> -output_path=<output_path>
terraform-provider-oci -command=export -compartment_id=<compartment_OCID> -output_path=<output_path>

これらのコマンドは、コンパートメント内でサポートされているすべてのリソースを検出し、提供されたoutput_pathにTerraform構成ファイルを生成します。生成された.tfファイルには、コマンドによって検出されたリソースを保持するTerraform構成が含まれます。

注意

リソース検出を実行する前に、output_pathが空であることを確認してください。
ノート

インスタンス・プリンシパル認可を使用する場合、compartment_idパラメータは必須です。

次の共通パラメータの組合せは、説明されているリソースをエクスポートします。

  • compartment_id=<empty_or_tenancy_OCID> services=<empty_or_not_specified> - すべてのテナンシおよびコンパートメント・スコープのリソース。
  • compartment_id=<empty_or_tenancy_OCID> services=<comma_seperated_list> - 指定したサービスのテナンシおよびコンパートメント・スコープのリソース。
  • compartment_id=<non-root_OCID> services=<empty_or_not_specified> - すべてのコンパートメント・スコープのリソース。
  • compartment_id=<non-root_OCID> services=<comma_seperated_list> - 指定したサービスのコンパートメント・スコープのリソース。このようなリソースを持つサービスが指定されている場合でも、テナンシ・スコープのリソースは検出されません。
ノート

コンパートメント・リソースのエクスポートでは、ターゲット・コンパートメントのみがサポートされます。子コンパートメントのリソースは検出されません。

パラメータ

次のパラメータを使用して、リソース検出ツールの動作を制御できます。

パラメータ 詳細
command 実行するコマンド。次のようなコマンドがサポートされます:
  • export - コンパートメント内のOCIリソースを検出し、そのためのTerraform構成ファイルを生成します
  • list_export_resources - exportコマンドで検出されたTerraform OCIリソース・タイプをリストします
  • list_export_services - サービス引数に使用可能な値をJSONフォーマットのスコープとともにリストします
compartment_id エクスポートするコンパートメントのOCID。compartment_idまたはcompartment_nameが指定されていない場合は、ルート・コンパートメントが使用されます。インスタンス・プリンシパル認可を使用する場合は必須です。
compartmet_name エクスポートするコンパートメントの名前。compartment_idまたはcompartment_nameが指定されていない場合は、ルート・コンパートメントが使用されます。
exclude_services エクスポートから除外するサービス・リソースのカンマ区切りリスト。services引数とexclude_services引数の両方に存在するサービスは除外されます。
filter 検出されたリソースを、指定した基準でフィルタします。詳細は、リソースのフィルタリングを参照してください。
generate_state Terraform構成ファイルに加え、検出されたリソースを状態ファイルにインポートするには、このフラグを指定します。
ids エクスポートするリソースのタプル<resource_type:resource_ID> (oci_core_instance:ocid.....など)のカンマ区切りのリスト。IDは、OCIDまたはTerraformインポートIDのいずれかです。デフォルトでは、すべてのリソースがエクスポートされます。
list_export_services_path サポートされるサービスのリストの出力(JSONフォーマット)として使用するファイル名を含むフルパス。
output_path エクスポートされたコンパートメントの生成された構成ファイルと状態ファイルを出力する絶対パス。
parallelism リソースをパラレルで検出するスレッドの数。デフォルト値は1です。
retry_timeout APIコールが待機し、APIエラーの場合に操作を再試行する期間(秒)。デフォルトでは、再試行タイムアウト時間は15秒です。
services エクスポートするサービス・リソースのカンマ区切りのリスト。指定しない場合、指定されたコンパートメント内のすべてのリソース(IAMリソースを除く)がエクスポートされます。

使用可能な値はサポートされているサービスを、関連情報はアイデンティティ・リソースのエクスポートを参照してください。

tf_version 構成ファイルの生成時に使用するTerraform構文のバージョン。デフォルトはv0.12です。次の値を使用できます:
  • 0.11
  • 0.12

構文バージョンとして0.11を指定する場合は、Terraform CLIのv0.11を使用してリソースを検出します。

Terraform CLI v0.13以上を使用してリソースを検出する場合は、バージョンがv0.12構文と互換性があることを確認してください。

状態ファイルは、リソースの検出に使用されたTerraform CLIのバージョンと一致するTerraform構文で生成されます。tf_versionパラメータは、状態ファイルには適用されません。
variables_global_level

attribute1,attribute2というフォーマットに従って、変数としてエクスポートする最上位レベルの属性をリストします。リソースレベルの属性(variables_resource_level)はこのリストから除外されます。

variables_resource_level

resourceType.attributeというフォーマットに従って、変数としてエクスポートするリソースレベルの属性をリストします。最上位レベルの属性(variables_global_level)はこのリストから除外されます。

リソースのフィルタリング

指定した基準で検出されたリソースをフィルタします:

  • リソース・タイプ・フィルタ: Type<operator><provider-resource-type>

    <operator>は、= (等しい)または!= (等しくない)です

  • 属性フィルタ: AttrName=<attribute-name>;Value<operator><value>一致する属性および値を持つすべてのリソースを検索します
  • 最大10個のフィルタ(リソースがすべてを満たす必要があります)
リソース・タイプ・フィルタ: VCNのみ
--filter="Type=oci_core_vcn"
リソース・タイプ・フィルタ: VCN以外のすべてのもの
--filter="Type!=oci_core_vcn"
属性フィルタ: 定義済タグ値
--filter="AttrName=defined_tags.example-namespace.example-key;Value=example-value"
複数のフィルタ: VCNのみ。テストするにはdns_label属性を設定する必要があります
--filter="Type=oci_core_vcn" --filter="AttrName=dns_label;Value=test"

検出されたリソースのフィルタリングの詳細は、「リソース検出で検出されたリソースのフィルタリング」を参照してください。

冗長なロギング

プロバイダの実行時に詳細なコンソール出力を取得するには、リソース検出コマンドの前にTF_LOGまたはOCI_TF_LOGフラグを付けます。例:

TF_LOG=DEBUG terraform-provider-oci -command=export -compartment_name=<compartment_name> -output_path=<output_path>
OCI_TF_LOG=DEBUG terraform-provider-oci -command=export -compartment_name=<compartment_name> -output_path=<output_path>

TF_LOGレベルおよびOCI_TF_LOGフラグは、環境変数としても設定できます。

冗長なコンソール出力をログ・ファイルにリダイレクトするには、OCI_TF_LOG_PATH環境変数を設定し、パスを指定します。

終了ステータス

リソースの検出中にOCI APIまたはサービス使用不可に関連するエラーの場合、ツールは次のリソースを探します。検出が完了すると、発生したすべてのエラーが表示されます。

  • 終了コード0 - 成功。
  • 終了コード1 - 不適切な環境変数、引数、構成などのエラーが原因の失敗。
  • 終了コード64 - 部分的成功。サービス障害のため、リソース検出では一部のリソースを検出できませんでした。

アイデンティティ・リソースのエクスポート

アイデンティティ・リソースなどの一部のリソースは、テナンシ・レベルでのみ存在し、特定のコンパートメント内では検出できません。このようなリソースを検出するには、コンパートメント・パラメータを省略した次のコマンドを使用します:
terraform-provider-oci -command=export -output_path=<output_path> -services=identity
ノート

アイデンティティ・リソースをエクスポートする場合、compartment_id値が指定されていても無視されます。

別のコンパートメントへのリソースのエクスポート

生成されたTerraform構成ファイルを確認して必要な変更を行ったら、その構成をTerraformで使用できます。このようなユースケースの1つは、Terraformを使用した新しいコンパートメントまたはテナンシへのこれらのリソースの再デプロイです。

これを行うには、次の環境変数を指定します:

export TF_VAR_tenancy_ocid=<target_tenancy_OCID>
export TF_VAR_compartment_ocid=<target_compartment_OCID>

その後、次のコマンドを実行します:

terraform apply

Terraform状態ファイルの生成

注意

状態ファイルには、構成ファイルの一部として指定されたすべてのリソース属性が含まれます。Terraformで、データベースやユーザーのパスワード、インスタンスの秘密キーなどの機密データを管理する場合は、その状態ファイル自体を機密データとして扱う必要があります。詳細は、機密データの格納を参照してください。

検出されたリソースを管理するためにTerraform状態ファイルを生成することもできます。これを行うには、-generate_stateフラグを含む次のコマンドを実行します:

terraform-provider-oci -command=export -compartment_id=<compartment_OCID> -output_path=<output_path> -generate_state

このコマンドの結果は、Terraform構成を表す.tfファイルと、状態を表すterraform.tfstateファイルの両方になります。詳細は、状態を参照してください。

ノート

このコマンドで生成されるTerraform状態ファイルは、Terraform v0.12.4以上とのみ互換性があります。