ワークスペースのドリフトの検出

IBM Cloud® Schematics を使用すると、ユーザーは、 declarative Infrastructure as Code (IaC) の概念を使用して、Terraform ベースのワークスペースでインフラストラクチャー・リソースをデプロイ、管理、および操作できます。 ただし、Terraform 構成がデプロイされ、リソースが作成されても、リソースが構成によって宣言されたままであることを意味するものではありません。 インフラストラクチャーの状態の変更は、 drift と呼ばれます。 これは、デプロイされたインフラストラクチャーが、テンプレート構成によって定義された必要な (宣言的な) 状態と異なる場合に発生します。

ドリフトはさまざまな理由で発生する可能性があります。 最も頻繁に発生する原因は、Terraform 自動化の外部で手動でインフラストラクチャーに加えられた変更です。 これにより、デプロイされたワークスペースの Terraform 状態ファイルは、デプロイされたインフラストラクチャー・リソースと同期されなくなり、ワークスペースはドリフト状態にあると見なされます。

構成のコンテキスト内では、さまざまな理由でドリフトが発生する可能性があります。

  • 変更を適用せずに、テンプレート構成のリソースを追加または削除します。
  • テンプレート・リソース定義を変更しています。
  • テンプレートの設定とは別に、手動で変更を加えた場合にドリフトが発生します。 例えば、クラウド・リソースに対するコマンド・ライン操作から、またはクラウド・コンソールを介して変更します。
  • 他の自動化ツールによって発生する可能性があります。

ドリフト・シナリオの例

VSIインスタンスは、 IBM Cloud Schematics と構成テンプレートを使用してプロビジョニングされます。 DevOps クラウドのユーザーは、クラウドコンソールにログインし、インスタンスのブートボリュームを変更したり、イーサネットインターフェースを追加したりすることで、プロビジョニング済みのVSI構成を変更できます。 これらの変更により、 drift でのインフラストラクチャーのデプロイメントが行われます。

IBM Cloud Schematics は、Terraform を使用してインフラストラクチャーの リソース・ライフサイクルの管理 を予測できるようにします。 ドリフトは、インフラストラクチャの実態が、Terraformテンプレート設定で定義された状態と異なる場合に発生します。

Terraform は、Terraform を使用して管理または構成されていないリソースおよび属性のドリフトを検出できません。 例えば、Terraform は、アプリケーションをローカルにインストールした結果、または ChefAnsible などの構成管理ツールを使用した結果として生じる仮想マシンの変更を検出できません。

IBM Cloud でのドリフト検出

Terraform 自動化ワークスペースのドリフト検出は、IBM Cloud Schematics で行うことができます。 ドリフト検出を確認するには、以下の 3 つの方法を使用できます。

UI を使用したドリフト検出

Schematics のワークスペースジョブページから、ワークスペースのドリフト検出を開始できます。 ワークスペースおよびそのデプロイ済みリソースのドリフトを検出するためのジョブを開始します。 実行中、ドリフト検出ジョブは in progress であり、完了時には failure または success になります。 ドリフトジョブの詳細を確認するには、ドリフトジョブのログでドリフトの状態を確認する必要があります。

UI を使用したドリフト検出ログの表示

ドリフト・ジョブ・ログを表示するには、以下の手順を使用します。

  1. ワークスペース・ダッシュボードから、ドリフトを確認するワークスペースを選択します。

  2. ワークスペースを選択して開きます。

  3. [ アクション ] ドロップダウンリストを選択します。

  4. 「ドリフトの検出」 オプションを選択して、ドリフト検出ジョブを開始します。

  5. 実行中は、完了時に in progress success またはジョブへの移動 failure 状況が表示されます。

  6. ドリフト状況は、ジョブが success 状態のときにジョブ・ログオンの出力を確認することによって判別できます。 ドリフトが検出された成功ジョブ実行の例が、画面キャプチャーに示されています。

    成功ジョブ・ログを確認して、ドリフトの詳細を識別します。

    2022/04/19 10:10:44 -----  Terraform DRIFT  -----
    2022/04/19 10:10:44 Starting command: terraform-drift-cli drift
    2022/04/19 10:10:44 Terraform Drift | configuration drift identfied
    2022/04/19 10:10:44 Terraform Drift | resource         operation   attribute   drift value
    2022/04/19 10:10:44 Terraform Drift | ibm_is_vpc.vpc   +           tags        schematics:us-east.workspace.myworkspace-drift-demo.bfdd0e2d
    2022/04/19 10:10:44 Terraform Drift | ibm_is_vpc.vpc   +           tags        tag:new1
    2022/04/19 10:10:44 Terraform Drift | ibm_is_vpc.vpc   +           tags        tag:new2
    2022/04/19 10:10:44 Terraform Drift |
    2022/04/19 10:10:44 Command finished successfully.
    2022/04/19 10:10:52 Done with the workspace action
    

    ジョブが失敗した場合は、ログで失敗の原因を確認し、ジョブを再実行してエラー状態を修正してください。

    障害のジョブ・ログ例は、ドリフト・ジョブの失敗の原因を識別します。

    2022/04/13 13:05:46 -----  Terraform Commands  -----
    2022/04/13 13:05:46 Could not execute job: Error : Drift cannot be executed since state file doesn't exist. Please run terraform apply to generate state file.
    

CLI を使用したドリフト検出

「workspacesの作成」コマンドから、ドリフトの検出を開始することができます。 ドリフト検出機能は、ワークスペースおよびその特定のリソースについてドリフトを検出するためのジョブを開始します。 ドリフト検出ジョブは、適切な状況 (failuresuccess など) の in progress または completed です。 その代わりに、ドリフトジョブの詳細を確認するには、ドリフトジョブのログをチェックして、ドリフトの状態を確認する必要があります。 以下のコマンドを使用して、検出ドリフトを表示します。

CLI を使用したドリフト検出ログの作成および表示

以下の手順に従うことで、CLI を使用して Schematics のワークスペースにおけるドリフトを検出できます。

  1. Schematics ワークスペースを作成します

  2. ワークスペース ID の取得

  3. ibmcloud schematics plan を実行します。

  4. ibmcloud schematics job logsを取り出します。

  5. ibmcloud schematics apply を実行します。

  6. ibmcloud schematics job run を実行して、 Schematics ワークスペースにジョブを作成します。

    ibmcloud schematics job run --command-object workspace --command-object-id <workspace_id> --command-name drift
    
  7. ibmcloud schematics workspace action を実行して、ワークスペースのすべてのアクティビティーを取得します。

    ibmcloud schematics workspace action --id <workspace_id>
    
  8. ibmcloud schematics job logs を実行して、ドリフトの詳細を表示するジョブの詳細ログを取得します。

    ibmcloud schematics logs --id <workspace_id> --act-id <Job_id>
    

API を使用した検出ドリフトの作成と表示

CURL コマンドを確認して、API を使用してドリフトを作成および表示します。

  1. IBM Cloud Schematics で認証するために、IAM アクセス権限 ステップ を取得します。

  2. ワークスペースの作成. ペイロードの一部として、以下のドリフト構成を追加する必要があります。

    {
        commands: [
            {
            command: 'drift',
            command_name: 'drift command',
            command_desc: 'command to detect drift in workspace resources',
            },
        ],
        operation_name: 'drift',
        description: 'command to detect drift in workspace resources',
        }
    
  3. ワークスペースの詳細の取得.

  4. Schematics 作業標準 を実行します。

  5. ibmcloud schematics job logsを取り出します。

  6. ibmcloud schematics apply を実行します。

  7. ibmcloud schematics job run を実行して、ワークスペース用のジョブを作成します。

  8. ibmcloud schematics workspace action を実行して、ワークスペースのすべてのアクティビティーを取得します。

  9. ibmcloud schematics job logsを取り出します。