リソース検出の使用
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=<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 |
実行するコマンド。次のようなコマンドがサポートされます:
|
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です。次の値を使用できます:
構文バージョンとして Terraform CLI v0.13以上を使用してリソースを検出する場合は、バージョンがv0.12構文と互換性があることを確認してください。 状態ファイルは、リソースの検出に使用されたTerraform CLIのバージョンと一致するTerraform構文で生成されます。tf_version パラメータは、状態ファイルには適用されません。 |
variables_global_level |
|
variables_resource_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以上とのみ互換性があります。