リソース検出の使用

Terraformプロバイダを使用して、デプロイされたOCIリソースを検出します。

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が空であることを確認してください。
ノート

Instance Principal認可を使用する場合は、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以上とのみ互換性があります。