リソースのプロビジョニング、構成および削除

クラウドのリソースを効率的にデプロイ、変更および削除するには、Terraformを使用します。

Terraform状態ファイルについて

Terraformには、管理インフラストラクチャ・リソースを追跡し、デプロイされたリソースを構成にマップし、メタデータを追跡し、大規模なインフラストラクチャ・デプロイメントのパフォーマンスを向上させるために、状態情報が格納されます。

デフォルトでは、terraform.tfstateファイルはローカル・ホストに格納されます。このデフォルトの動作は、複数のユーザーが特定の構成で定義されているリソースを作成および破棄する必要があるIT環境では最適ではありません。マルチ・ユーザー環境でのリソースのデプロイおよび管理を制御するには、Terraform状態ファイルをOracle Cloud Infrastructure Object Storageに格納し、すべてのユーザー間で状態ファイルおよびロック・ファイルを共有します。

「Terraform状態ファイルのオブジェクト・ストアの使用」を参照してください

リソースの作成

terraform.tfvarsファイルで変数を設定した後、Terraform CLIを使用して、Terraform構成で定義されたリソースをデプロイします。

始める前に、ローカル・マシンにインターネット・アクセスがあることを確認します。ローカル・マシンがファイアウォールの内側にある場合は、適切なプロキシを使用してTerraformがインターネットに接続できるようにします。
  1. Terraformをインストールしたコンピュータで、terraform.tfvarsファイルが含まれるディレクトリに移動します。
  2. 次のコマンドを実行して、Terraformを初期化します。
    terraform init
    このコマンドは、ociプロバイダ・プラグインをダウンロードし、Terraformで使用するディレクトリを設定します。
  3. 構成の構文にエラーがないことを確認してください:
    terraform validate
  4. 構文エラーが存在する場合は、エラーを修正して、前のステップを繰り返します。
    問題をデバッグするには、ロギングを構成します。
    • TF_LOG環境変数を使用してログ・レベルを設定します。サポートされるログ・レベルは、TRACEDEBUGINFOWARNまたはERRORです。TRACEレベルは最も詳細です。
    • TF_LOG_PATH環境変数を使用してログ・ファイル・パスを設定します。
  5. 構成内に定義されているリソースをレビューします。
    terraform plan
    出力には、この構成を適用したときに実行されるすべてのアクションの詳細、および次の例に示すようなサマリーが表示されます。
    Plan: 8 to add, 0 to change, 0 to destroy.

    注意:

    メッセージの8番目は例です。実際の数は、Terraform構成で定義した設定によって異なります。
  6. 変更を行う場合は、構成を編集して検証し、改訂済の計画をレビューします。
  7. リソースを作成します。
    terraform apply
  8. プロンプトDo you want to perform these actions?で、「はい」を入力します。
    Terraformによって各リソースが作成されると、操作のステータスが表示されます。

    すべてのリソースが作成されると、次の例に示すように、メッセージApply completeと、追加、変更および破棄されたリソースの数が表示されます。

Apply complete! Resources: 33 added, 0 changed, 0 destroyed.

Outputs:

admin_private_ip = 10.0.1.10
bastion_public_ip = 203.0.113.101
kubeconfig = export KUBECONFIG=generated/kubeconfig
ocirtoken = <sensitive>
ssh_to_admin = ssh -i /home/joe/.ssh/id_rsa -J opc@203.0.113.101 opc@10.0.1.10
ssh_to_bastion = ssh -i /home/joe/.ssh/id_rsa opc@203.0.113.101
  • kubeconfig出力には、ローカル・ホスト上のKUBECONFIG環境変数の設定に使用できるコマンドが表示されます。ローカルホストからkubectl CLIを使用してKubernetesクラスタを管理する場合は、このコマンドを実行します。このコマンドでは、KUBECONFIGgenerated/kubeconfigファイルに設定します。このファイルは、Terraformによって構成の適用時に作成されます。
  • ssh_to_admin出力には、管理ホストへの接続に使用できるsshコマンドが表示されます。
  • ssh_to_bastion出力には、ベース・ホストへの接続に使用できるsshコマンドが表示されます。

注意:

terraform outputコマンドを実行して、このTerraform出力をいつでも表示できます。
Oracle CloudのKubernetesトポロジの準備ができました。コンテナ化済アプリケーションをデプロイできるようになりました。

管理ホストにリソースの管理を許可

管理ホストがコンパートメント内のリソースを管理できるようにするには、管理ホストをインスタンス・プリンシパルとして指定します。CLIコマンドを実行する場合、または管理ホストからAPIコールを作成してトポロジ内のリソースを管理する場合は、この機能を使用します。

インスタンス・プリンシパルとして指定されているコンピュート・インスタンスは、独自の一意のアイデンティティを取得します。インスタンスに自動的に割り当てられ、作成された証明書を使用して認証できます。証明書は定期的にローテーションされます。資格証明を管理ホストに配布したり、ローテーションする必要はありません。

注意:

SSHを使用してコンピュート・インスタンスに接続できるユーザーは、インスタンスに付与されているインスタンス権限を継承します。管理ホストをインスタンス・プリンシパルとして指定するかどうかを決定する際には、このことを考慮してください。この機能は、管理ホストに影響を及ぼすことなく、いつでもオフまたは有効にできます。
  • 管理ホストをインスタンス・プリンシパルとして指定するには、terraform.tfvarsで次のように設定し、terraform applyを実行します。

    admin_instance_principal = true

    管理ホストは動的グループのメンバーになり、動的グループがコンパートメント内のすべてのリソースを管理できるようにポリシー文が作成されます。

  • 管理ホストからインスタンス・プリンシパル権限を取り消すには、次のようにterraform.tfvarsを設定してからterraform applyを実行します。

    admin_instance_principal = false

Bastionホストでの通知の有効化または無効化

Oracle Cloud Infrastructure通知サービスは、更新が適用されたとき、またはOracle Kspliceが既知の検出を試みたときに、ベース・ホストからステータス・メッセージを受信する際に使用できます。

注意:

このソリューションのTerraformコードは、デフォルトのOracle Autonomous Linuxイメージを使用する場合のみ通知を構成します。
  • ベース・ホストに対して通知を有効にするには、terraform.tfvarsで次の変数を設定します。

    bastion_notification_enabled = true
    bastion_notification_endpoint = "email_address"
    bastion_notification_protocol = "EMAIL"
    bastion_notification_topic = "topic_name"

    次に、通知関連の変数が定義されたterraform.tfvarsの例を示します。

    bastion_notification_enabled = true
    bastion_notification_endpoint = "joe@example.com"
    bastion_notification_protocol = "EMAIL"
    bastion_notification_topic = "bastion"
  • ベース・ホストがすでに作成されており、今すぐ通知を有効にする場合は、これらの変数を設定し、terraform applyを再度実行します。
    • 必要なポリシーは、ベース・ホストが通知を公開できるように定義されます。
    • 通知トピックが作成され、指定したEメール・アドレスがトピックに登録されます。
    • ベース・ホストは通知を送信するように構成されています。

    リソースが作成されると、サブスクリプションの確認を求める電子メールが届きます。

  • 通知を無効化するには、terraform.tfvarsで次のように設定し、terraform applyを実行します。

    bastion_notification_enabled = false
    admin_notification_enabled = false

すべてのリソースの削除

  1. Terraformをインストールしたコンピュータで、terraform.tfvarsファイルが含まれるディレクトリに移動します。
  2. 次のコマンドを入力します。
    terraform destroy
    次の例に示すように、Terraformには、破棄されるリソースの詳細が表示されます。
    Plan: 0 to add, 0 to change, 12 to destroy.
  3. プロンプトDo you really want to destroy all resources?で、「はい」を入力します。
    Terraformによって各リソースが削除されると、操作のステータスが表示されます。
    すべてのリソースが削除されると、次の例に示すように、メッセージDestroy completeと破棄されたリソースの数が表示されます。
    Destroy complete! Resources: 12 destroyed.