BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース driftctl:インフラストラクチャのドリフトを検出するツール

driftctl:インフラストラクチャのドリフトを検出するツール

原文(投稿日:2021/01/26)へのリンク

CloudSkiffチームは、driftctlと呼ばれるオープンソースツールをリリースした。driftctlはTerraform管理インフラストラクチャのドリフトを検出するものである。

Infrastructure-as-Code(IAC)ツールを使用すると簡単に、パブリッククラウドとプライベートクラウドにサーバやその他のインフラストラクチャコンポーネントをプロビジョニングできるようになる。これにより、ソフトウェアのデリバリ速度が向上し、複雑な環境の管理が容易になる。一方で、インフラストラクチャ全体のバージョンと構成の違いがゆっくりと現れる可能性がある。Terraformなどのツールを使った場合でも、カバレッジが不完全であったり、プロセスが不完全であったり、インフラストラクチャに対する緊急の変更が直接行われることで、そのような差異につながる可能性がある。これをインフラストラクチャ/構成ドリフトと呼ぶ。ドリフト検出は運用チームにとって重要である。コンポーネントが期待される構成に沿っていることを確実にし、コンプライアンスを確保するためである。

driftctlは、Terraform状態ファイルを読み取り、実際に実行されているインフラストラクチャに対するチェックをする。現在、IACツールとしてTerraformをサポートしており、AWSリソースのサブセット(EC2、S3、IAM、RDS、Lambda)に対してのみ機能する。しかし、GCPとAzureのサポートはロードマップの一部である。driftctlの主なコマンドは、Terraform状態ファイルを解析する「スキャン」である。また、タグでリソースを除外して、避けられない手動の変更を無視したい場合に対処することもできる。スキャンは、同期していないリソースを、期待される状態と共に出力する。出力は、人間が読める形式とプログラムによる解析用のJSON形式の両方である。

InfoQは、CloudSkiffのCTO兼創設者であるStephane Jourdan氏に連絡を取り、driftctlの詳細を学んだ。

ツールの作成者は、インフラストラクチャのドリフトの課題について学ぶために、約200のDevOpsチームと話をした。彼らの調査(PDF)からの重要な学びは、アプリケーションとデプロイによって引き起こされるドリフトが広範囲に及んでおり、セキュリティの問題が主要な懸念事項であるということであった。そして、GitOpsはドリフトを防ぐのに十分ではないということであった。調査したチームの96%は、ドリフトの主な原因としてIACツールのバイパスについて言及した。50%は、アプリケーションとデプロイによって引き起こされるドリフトについて言及した。一部のチームは、cronジョブで「terraform plan」を実行する。これは、Terraformが検出した変更を出力し、コミットされたコードと実行中のインフラストラクチャの違いを示す。Jourdan氏は、driftctlがどのように取り組もうとしているかについて詳しく説明している。

driftctlは、予期しない変更のために、Terraform状態ファイルをクラウドプロバイダーAPIと比較します。しかし、さらに重要なのはその逆(APIからTF状態へのデルタ)です。それによって、私たちは、コンソール/API上の全ての手動変更を見つけることができます。


画像提供:driftctl。許可を得て使用。

アプリケーションによって引き起こされるドリフトは、アプリケーションがインフラストラクチャコンポーネントを直接変更するときに発生する。Jourdan氏は、これがどのように処理されるかについて話している。

それはすべて、変更を追跡し続け、許容範囲内にとどまるようにすることです。Terraformを使用してリソースを作成する場合、一部のアプリケーションによってそのパラメーターの一部を変更する必要がある場合があります(タグ、コンテンツ、値の増減など)。これは、認識して受け入れることができるものです。ただし、それでも、これらの変更のレポートが必要です。さらに重要なことに、これらの変更が設定した境界を超えた場合はアラートが必要です。これらの変更を追跡して、必要なときにいつでも分析できるようにすることが不可欠です。たとえば、VERSIONタグのすべての値を保存し、それらの値の一部(たとえば、VERSION=error)に関する特定のアラートを受信したいことがあるでしょう。

既存のインフラストラクチャに基づいてTerraformコードを生成するterraformerやterraformingなどのツールがある。生成されると、「terraformimport」を使用して、選択した変更をTerraformコードにマージし、バージョン管理にコミットできる。Jourdanは、このコンテキストでのdriftctlのロードマップについて説明している。

これまでのところ、driftctlはインフラストラクチャのドリフトを検出して警告しますが、修正はしません。短期的には、ロードマップは基本的に、AWS以外のクラウドプロバイダー(Azure、GCPなど)を追加し、それぞれのサービスをカバーすることにフォーカスしていきます。ただし、ドリフトイベントの修正を提供することは、プロジェクトの2番目のステップとして計画していることです。この修正の一部は、変更検出に一致するいくつかの追加コードを含むプルリクエストとして提案されます。

一部のパブリッククラウドプロバイダーは、クラウドプラットフォーム固有のプロビジョニングツールと連携して、ドリフトを管理するための統合ツールを備えている。たとえば、AWSには、CloudFormationによって管理されるインフラストラクチャのドリフトを検出できる「cloudformation-stack-drift-detection-check」コマンドがある。同様に、AzureにはAzOpsがある。ドリフト検出を実行する商用ソフトウェアもある。多くの場合、コンプライアンスツールセットの一部としてである。例えば、FugueOpsCompassPulumiAtomistがある。

driftctlはGoで記述されており、Apache 2.0ライセンスの下でGitHubから入手できる

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

BT