非同期操作の有効化

Terraform構成で非同期操作を有効にします。

ノート

非同期リソースが完全に作成される前に操作を開始しないようにするには、Terraform構成で非同期リソースに対するリソースの依存関係がコーディングされていないことを確認してください。非同期リソースの場合、Terraformでは、リソースの作成または削除が開始された後に、リソースのステージが確認されることはありません。

Terraformでは複数のスレッドを使用し、操作が並行して実行されますが、どのスレッドでもリソースのライフサイクルの状態が変わるため、操作は同期的に処理する必要があります。デフォルトでは、Terraformでリソースが作成、更新または削除されると、そのリソースが予定されているライフサイクルの状態になるまで処理が待機されます。拡張オプションを使用して、リソースを非同期で作成、更新または削除すると、Terraformの操作中にこの待機ステージをなくすことができます。

この機能を有効にするには、async = trueフラグをリソースに追加します。Terraformでは、creatingまたはdeletingがターゲットのライフサイクル・ステージとみなされます。例:

resource "oci_core_instance" "test_instance" {
  async               = true
  count               = var.num_instances
  availability_domain = data.oci_identity_availability_domain.ad.name
  compartment_id      = var.compartment_ocid
  display_name        = "TestInstance${count.index}"
  shape               = var.instance_shape
}

この機能を使用すると、Terraformのネイティブ動作のオーバーライドと引き換えに、リソースをより速く作成および削除できます。asyncオプションを使用する場合は、次のことに注意してください:

  • リソースがまだ作成されていないため、状態ファイルにはリソースの完全な情報がありません。
  • リソースの作成に失敗したかどうかを含め、完全な情報を取得するには、リソースのステージをリフレッシュする必要があります。
  • Terraformでは、リソースの作成または削除が開始された後に、リソースのステージが再度確認されることはありません。失敗した操作は、次にリソースがリフレッシュされたときに表示されます。
  • 別の操作が開始される前にはリソースが完全に作成されていないため、非同期リソースには依存関係はありません。
重要

TerraformのOCIプロバイダでは現在、oci_core_instanceリソースのasyncフラグがサポートされています。

状態ファイルのリフレッシュ

terraform applyを実行し、新しいリソースでasyncオプションが使用されると、リソースの情報が不完全な状態ファイルが作成されます。次に示すように、状態ファイルの多くの値がnullになり、リソースがPROVISIONING状態になる可能性があります:

...
"async": true,
...
"state": "PROVISIONING",
...
"private_ip": null,
"public_ip": null,
"subnet_id": null,
...

リソースが作成されたら、terraform refreshterraform planまたはterraform applyを実行して、完全なリソース情報で状態ファイルを更新できます。状態ファイルは更新され、次のようになります:

...
"async": true,
...
"state": "RUNNING",
...
"private_ip": "10.255.255.254",
"public_ip": "192.0.2.2",
"subnet_id": "ocid1.subnet.oc1..exampleuniqueID",
...