リソース検出の使用
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が空であることを確認してください。次の一般的なパラメータの組合せで、説明されているリソースがエクスポートされます:
-
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以上とのみ互換性があります。