コードとしてのインフラストラクチャとは

コードとしてのインフラストラクチャ (IaC) は、アプリ開発、設定、ランタイムを簡素化するために手動プロセスを使用する代わりに、コードを使用してインフラストラクチャを動的に管理しプロビジョニングするプロセスです。IaCはコードを利用して、次のことを実行します。

  • インフラストラクチャのプロビジョニング、展開、設定、管理の自動化
  • すべてのインフラストラクチャコンポーネントの運用のオーケストレーション(ハードウェア、ソフトウェア、ネットワーク、仮想マシン、コンテナ、データベース、クラウドインフラストラクチャ要素など)
  • すべてのインフラストラクチャコンポーネントとシステムの設定監視管理

ワークロード、コンテナ、クラウドコンピューティングの広範な導入により、IaCはDevOpsの重要な部分となっており、インテグレーションとテストから提供と展開まで、アプリケーションのライフサイクル全体の自動化と継続的な監視を実現しています。また、アプリケーションコンテナのセキュリティ、および全体的なワークロード保護の重要な側面でもあります。

2023年版クラウドリスクレポート

この新しいレポートをダウンロードして、2023年に最も蔓延しているクラウドセキュリティの脅威について精通し、2024年にはそれらの脅威からの保護を強化してください。

今すぐダウンロード

コードとしてのインフラストラクチャの5つの原則

次の原則は、チームがIaC関連の課題を克服し、IaC戦略からの費用対効果 (ROI) を最大限に高めることができるようにすることを目的にしています。

  1. システムの廃棄容易性:システムは、動的なインフラストラクチャを考慮して構築すると、インフラストラクチャの変化に応じて、リソースを簡単に構築、破棄、アップグレード、サイズ変更、転送できるようになります。これにより、障害が突然発生した場合も、インフラストラクチャを稼働させ続けることができ、ビジネスに影響を及ぼす運用の中断を防ぐことができます。
  2. システムの複製容易性:インフラストラクチャのどの部分でも効率的に簡単に再構築できるため、インフラストラクチャに変更を加える際のさまざまな危険性や懸念をなくすことができます。インフラストラクチャを容易に複製できると、障害にすばやく対処し、新しい環境をシームレスにプロビジョニングできます。
  3. プロセスの再現容易性:あらゆるインフラストラクチャの変更や実施したアクションは再現できる必要があります。このため、インフラストラクチャチームは、可能な限りあらゆるプロセスをスクリプト化する必要があります。中にはスクリプト化することが困難なプロセスがありますが、チームはこれらのプロセスのスクリプト化を支援するツールの使用を検討する必要があります。
  4. 動的設計:開発者は、複雑なインフラストラクチャの変更にコストがかかることを認識しています。この理由により、開発者は将来的にインフラストラクチャがどのように変化することになるか慎重に予測することで、発生した変化に対応するようにインフラストラクチャを設計する必要があります。
  5. システムの一貫性:プロセスが自動化されると、常に問題が発生する可能性があります。この課題を克服するために、インフラストラクチャ開発者は、新たに追加されたすべてのユーザーや加えられた変更が、既存のユーザーや変更と完全に一致することを確認する必要があります。そうでない場合、不整合により自動化が失敗する可能性があります。

IaCの6つのメリット

最新のIT環境では、IaCはIT戦略内で不可欠なコンポーネントであると考える必要があります。比較的単純なインフラストラクチャの要件でも、IaCの原則を利用することで、効率性とコスト効率を高めることができます。

IaCはIT環境内を複雑にする可能性がありますが、採用することのメリットは、一般的に実装と管理のコストを上回ります。

1. 速度

IaCは、アジャイル開発、継続的インテグレーション/継続的デリバリー (CI/CD)、およびDevOpsを実践するための重大な要素です。チームはすべての環境にコード化されたスクリプトを使用してインフラストラクチャをプロビジョニングできるため、クラウドインフラストラクチャコンポーネントのほとんどの手動プロビジョニングと設定が不要になり、速度が大幅に上がります。

2. 精度

コードに依存することで、IaCは設定プロセスでのミスを制限し、1人以上のユーザーが設定を担当する際に発生する不整合を削減します。

3. アカウンタビリティー

バージョン管理されたインフラストラクチャと設定の変更は、他のコードソースファイルと同様にIaCで有効にできます。これにより、設定に加えられた変更に完全なトレーサビリティが提供されるため、必要に応じてユーザーに説明を求めることができます。

4. 効率性

IaCは、クラウドインフラストラクチャコンポーネントを必要に応じて迅速に使用できるようにするため、DevOpsの戦略的に重要な要素です。本質的にモジュラー構造なため、異なるコードを分割して組み合わせて、さまざまなユースケースのニーズに対応できます。これにより、ソフトウェア開発を合理化し、ITチーム内のリソースを最適化します。

5. コスト削減

自動化は一般的にコスト削減につながり、IaCも例外ではありません。制限されたリソース(ハードウェアコスト、人件費、ストレージコストなど)を最適化することで、IaCは全体的なコストを削減し、チームが人による監視と介入を必要とする付加価値の高いタスクに集中できるようにします。全体的な設備投資と運用コストを低く保つことができます。

6. スケーラビリティ

「コードとしてのインフラストラクチャ」を使用すると、自動化により設定ミスを削減し、時間のかかる相互作用がなくなるため、過剰に費用をかけることなくインフラストラクチャ管理を簡単に拡張できます。

可変インフラストラクチャと不変インフラストラクチャ

組織が最初に決定するべきことの1つは、インフラストラクチャを自動化する方法です。一般的に可変インフラストラクチャと不変インフラストラクチャの2つの選択肢があります。

1. 可変インフラストラクチャ

可変インフラストラクチャは、プロビジョニング後も更新または修正することができます。このタイプのインフラストラクチャは、ITチームにサーバーをカスタマイズできる柔軟性を提供し、アプリケーションの要件により厳密に適合できるようにします。ただし、デプロイメントに不一致が生じるため、追跡がより困難になる可能性があります。

2. 不変インフラストラクチャ

一方、不変インフラストラクチャは、プロビジョニング後に修正することはできません。変更できないため、変更が必要な場合は、完全に新しいインフラストラクチャが必要になります。これは実際的ではないようですが、新しいインフラストラクチャはクラウドでシームレスに作成できます。

専門家のヒント

どのようなタイプのインフラストラクチャを選択する必要がありますか?

ニーズは組織ごとに異なりますが、多くの場合、不変インフラストラクチャの方法が選択されます。不変インフラストラクチャは、デプロイメント環境とテスト環境内で一貫性を非常に簡単に保つことができます。また、このタイプのインフラストラクチャを使用すると、以前のインフラストラクチャのバージョンを追跡できるため、それまでのバージョンがより効率的な場合には、そのバージョンに簡単に戻すことができます。

宣言型IaCと命令型IaC

IaCコードを記述するには、主に次の2つの方法があります。

1. 宣言型IaC

IaCへの宣言型アプローチは、ユーザーが将来の状態を定義し、インフラストラクチャ内のすべてのリソースと属性をリストするアプローチです。ただし、ツールやプラットフォームが、将来の状態を実現するための最適なインストール方法と設定方法を決定します。

2. 命令型IaC

命令型アプローチは、宣言型アプローチよりも多くの入力と具体的なプロセスが必要です。この方法では、開発者やITチームは将来の状態を定義し、その状態になるためのプロセスを指定する必要があります。ツールまたはシステムは、プロセス内の手順から逸脱したり、順序を変更したりすることはありません。

詳細

宣言型IaCが推奨される理由

ほどんどの組織では、宣言型IaCを採用する傾向があります。これは、柔軟性が非常に高くさまざまなユースケースを実現できるためです。具体的なメリットは、次のとおりです。

  • シンプル:宣言型IaCは、将来の目的の状態を指定する以外は、開発者からの入力はほとんど必要ありません。
  • 速度と柔軟性:宣言型システムは、環境内のすべてのオブジェクトのインベントリーを自動的にコンパイルします。この記録があることにより、将来必要なときに、インフラストラクチャの変更や逆アセンブルをすばやく簡単に実行できます。
  • 自動化:宣言型アプローチでは、目的の状態内で加えられたすべての変更がIaCプラットフォームにより自動的に適用されます。命令型アプローチでは、環境内の変更を適用するかどうかは開発者が指定します。
  • 最適化:IaCアプローチでは、組織はデプロイメントスクリプトとその他の命令型コードを制限できるため、一定期間の技術的負債を隔離し、削減することができます。

コードとしてのインフラストラクチャのベストプラクティス

長期的にIaCを安全に保つには、次のベストプラクティスに従ってください。

  1. IaCのすべてをコード化して、変更をシームレスかつ安全に展開します。これには、実行中のパイプラインを自動更新し、変更内容を検知して、人の介入を回避することが含まれます。
  2. 潜在的な侵害を回避するために、コードをデプロイするときに認証情報を含めないことで、ハードコードされたシークレットを保護します。機密情報を保護するいくつかの方法には、ハードコードされたシークレットの機密性の高い変数参照への置き換えや、シークレット管理ツールの使用などがあります。
  3. IaCの静的アプリケーションセキュリティテスト (SAST) またはソフトウェアコンポジション解析 (SCA) スキャンツールを使用して設定ミスをスキャンし、インフラストラクチャを攻撃者に対して脆弱にする可能性のある潜在的な設定ミスを特定します。
  4. インフラストラクチャを開発する場合、マイクロサービスアーキテクチャのアプローチに従って、インフラストラクチャをモジュール化します。このアプローチにより、複数のインフラストラクチャコンポーネントを異なるモジュールに分割し、個別に管理できます。
  5. 環境へのアクセスを制限し、ユーザーが「読み取り専用」権限を持つことができるようにします。特定の認証情報を持つユーザーにのみインフラストラクチャを変更する特権アクセスを許可し、すべての変更を暗号化して署名する必要があります。

IaCのプラットフォームとツール

コードのプラットフォームとツールとして最も普及しているインフラストラクチャには次のものがあります。

プラットフォーム/ツール説明
TerraformTerraformは、Amazon Web Services (AWS)、Microsoft Azure、Oracle Cloud、Google Cloud Platform、その他のパブリッククラウドプラットフォームなどのさまざまなプラットフォームでデータセンターインフラストラクチャを定義および提供できるオープンソースのIaCツールです。
PulumiPulumiは、開発者がPython、TypeScript、JavaScript、Go、C#、F# などのさまざまな言語を使用して、任意のクラウドでインフラストラクチャを作成、展開、管理できるようにするオープンソースのIaCソフトウェア開発キット (SDK) です。
AnsibleAnsibleは、IBM Power Systemsクライアントのアプリケーション開発をサポートするIaCツールです。AnsibleはTerraformやPulumiと同様に、プロビジョニング、設定管理、およびアプリケーションの展開を自動化できるオープンソースリソースです。
Chef InfraChef Infraは、PuppetとともにDevOps空間のパイオニアであり、IaCを定義する最初のインフラストラクチャ管理ツールの1つです。
PuppetPuppetは、コードとしてのインフラストラクチャのパイオニアであり、独自の宣言型言語とモデルを使用してシステムを設定するソフトウェア設定管理ツールです。
CFEngineCFEngineは、オープンソースの設定管理システムです。市場では、最も成熟したツールの1つと考えられており、複雑な設定ニーズをサポートすることができます。
AWS CloudFormationAWS CloudFormationは、AWSインフラストラクチャやその他の外部リソースをモデル化、プロビジョニング、管理できるIaCツールです。
Azure Resource ManagerAzure Resource Managerは、JSONを使用してAzure環境内のインフラストラクチャコンポーネントを設定するコードとしてのインフラストラクチャサービスです。
Google Cloud Deployment ManagerGoogle Cloud Deployment Managerは、Google Cloudリソースの作成と管理を自動化するインフラストラクチャデプロイメントサービスです。

IaCと自動化により、アプリケーションの開発、提供、展開が簡素化されます。DevOpsとITは、インフラストラクチャをより効率的に構築、設定、管理できます。セキュリティは、アプリケーションの構築、配信、展開に非常に重要な役割を担っています。クラウドストライクで、セキュリティを考え、構築し、保護してください。

クラウドストライクが問題解消にどう貢献できるか

クラウド環境を管理するためにコードとしてのインフラストラクチャを選択している組織は、依然として脅威に直面し、脆弱性をさらしています。CrowdStrike Falcon®クラウドセキュリティは、攻撃者に関する独自のインサイトを提供し、セキュリティチームの作業の軽減、クラウド侵害の防止、マルチクラウドデプロイメントの最適化を可能にするクラウドネイティブのフルスタックセキュリティを提供できます。

ギリェルメ(Gui)・アルバレンガ(Guilherme(Gui)Alvarenga)は、クラウドストライクのクラウドセキュリティポートフォリオのシニアプロダクトマーケティングマネージャーです。彼は、チェック・ポイント、NEC、シスコシステムズなどの企業向けにクラウド、SaaS、ネットワーク、MLソリューションを推進してきた15年以上の経験を有しています。彼はブラジルのパウリスタ大学で広告とマーケティングの学位を取得し、サンノゼ州立大学でMBAを目指しました。スタンフォード大学で応用コンピューティングを学び、クラウドセキュリティと脅威ハンティングを専門としています。