Oracle Cloud Infrastructureドキュメント

リモート・エグゼクティブの使用

Resource Managerでは、「Terraformリモート実行機能」を使用してリモート・コンピュータ上でスクリプトまたはコマンドを実行できます。 リモート・リソースへのアクセスが必要な他のプロビジョニングにも、この方法を使用できます。

警告

Oracle Cloud Infrastructureコンソール、APIまたはCLIを使用してクラウド・リソースに説明、タグまたはわかりやすい名前を割り当てるときは、機密情報を入力しないでください。

前提条件

  • スクリプトをリモートで実行するロケーションは、パブリックIPを持ち、リモート・ログインをサポートするOracle Cloud Infrastructureリソースである必要があります。
  • Windowsの場合は、WinRMを有効にする必要があります。 LinuxまたはUnixでは、SSHを有効にする必要があります。
  • Oracleにアップロードされた公開キーを使用して、APIリクエストに署名するために使用されるキー・ペア。 キーの生成とアップロードの詳細は、「必要なキーとOCID」を参照してください。

認証中

Key Managementサービスにアクセスできるかどうかに応じて、次のいずれかの方法を使用することをお薦めします。 詳細は、「Key Managementの概要」を参照してください。

Key Managementあり

最初に、Key Managementを使用して秘密キーを暗号化します。 詳細は、「キーの管理」および「キーの使用」を参照してください。

次に、暗号化された秘密キーをResource Managerに提供します。 復号化データ・ソースを使用して復号化できます。

次のコード・サンプルで、このプロセスを示します。

data "oci_kms_decrypted_data" "private_key_decrypted" {
    #Required
    ciphertext = "${file(var.encrypted_private_key_path)}"
    crypto_endpoint = "${var.decrypted_data_crypto_endpoint}"
    key_id = "${var.kms_encryption_key_id}"
}
  
  
resource "oci_core_instance" "TFInstance1" {
  availability_domain = "${lookup(data.oci_identity_availability_domains.ADs.availability_domains[var.availability_domain - 1],"name")}"
  compartment_id      = "${var.compartment_ocid}"
  display_name        = "TFInstance"
  hostname_label      = "instance3"
  shape               = "${var.instance_shape}"
  subnet_id           = "${oci_core_subnet.ExampleSubnet.id}"
  
  source_details {
    source_type = "image"
    source_id   = "${var.instance_image_ocid[var.region]}"
  }
  
  extended_metadata {
    ssh_authorized_keys = "${var.ssh_public_key}"
  }
}
  
resource "null_resource" "remote-exec" {
      connection {
      agent       = false
      timeout     = "30m"
      host        = "${oci_core_instance.TFInstance1.public_ip}"
      user        = "${var.opc_user_name}"
      private_key = "${data.oci_kms_decrypted_data.test_decrypted_data.plaintext}"
    }
  
    inline = [
      "touch ~/IMadeAFile.Right.Here"
    ]
  
  }

Key Managementなし

Key Managementサービスにアクセスできない場合は、キー・ペアを動的に生成し、状態ファイルに格納できます。

  1. TLSリソースを使用してキー・ペアを生成してください。
  2. Computeインスタンスを起動するときに、TLSリソースの公開キーを使用します。
  3. SSH接続を確立するときに、秘密キーを指定します。

警告

安全なロケーションではないため、Terraform構成ファイルに秘密キーを保存しないでください。

次のサンプルは、TLS秘密キー・リソースを使用してコンピュート・インスタンスをプロビジョニングし、そのインスタンス上でリモート実行を実行する方法を示しています。

resource "tls_private_key" "public_private_key_pair" {
  algorithm   = "RSA"
}
  
resource "oci_core_instance" "TFInstance1" {
  availability_domain = "${lookup(data.oci_identity_availability_domains.ADs.availability_domains[var.availability_domain - 1],"name")}"
  compartment_id      = "${var.compartment_ocid}"
  display_name        = "TFInstance"
  hostname_label      = "instance3"
  shape               = "${var.instance_shape}"
  subnet_id           = "${oci_core_subnet.ExampleSubnet.id}"
  
  source_details {
    source_type = "image"
    source_id   = "${var.instance_image_ocid[var.region]}"
  }
  
  extended_metadata {
    ssh_authorized_keys = "${tls_private_key.public_private_key_pair.public_key_openssh}"
  }
}
  
resource "null_resource" "remote-exec" {
  depends_on = ["oci_core_instance.TFInstance1"]
  
  provisioner "remote-exec" {
    connection {
      agent       = false
      timeout     = "30m"
      host        = "${oci_core_instance.TFInstance1.public_ip}"
      user        = "${var.opc_user_name}"
      private_key = "${tls_private_key.public_private_key_pair.private_key_pem}"
    }
  
    inline = [
      "touch ~/IMadeAFile.Right.Here"
    ]
  }
}

接続構文

この例では、remote-execのconnection constructを使用する方法を示します。 Terraformはリソースへの接続時にいくつかのデフォルト値を使用しますが、resource またはprovisionerconnection ブロックを使用してこれらをオーバーライドできます。 詳細は、「プロ・ビジター・コネクション」を参照してください。