View a markdown version of this page

Terraform を使用して AWS Organizations でのソフトウェアパッケージの配布を一元化する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Terraform を使用して AWS Organizations でのソフトウェアパッケージの配布を一元化する

Amazon Web Services、Pradip kumar Pandey、Chintamani Aphale、T.V.R.L.Phani Kumar Dadi、Pratap Kumar Nanda、Aarti Rajput、Mayuri Shinde

概要

多くの場合、ワークロード間に強力な分離障壁を構築 AWS リージョン するために、企業は複数の にまた AWS アカウント がる複数の を維持します。管理チームはセキュリティとコンプライアンスを維持するために、セキュリティスキャン用には CrowdStrikeSentinelOneTrendMicro ツールなどのエージェントベースのツール、モニタリング用には Amazon CloudWatch エージェントDatadog エージェント、または AppDynamics エージェントをインストールします。こうした大規模な環境全体で、ソフトウェアパッケージの管理と配布を一元的に自動化しようとする場合、管理チームはしばしば課題に直面します。

AWS Systems Manager の一機能である Distributor は、単一の簡素化されたインターフェイスを通じて、クラウドおよびオンプレミスサーバー全体のマネージド Microsoft Windows および Linux インスタンスに対し、ソフトウェアをパッケージ化して公開するプロセスを自動化します。このパターンは、Terraform を使用してソフトウェアのインストールの管理プロセスをさらに簡素化し、最小限の労力 AWS Organizations で 内の多数のインスタンスとメンバーアカウントでスクリプトを実行する方法を示しています。

このソリューションは、Systems Manager によって管理される Amazon、Linux、および Windows インスタンスで機能します。

前提条件と制限事項

アーキテクチャ

リソースの詳細

このパターンでは、Account Factory for Terraform (AFT) を使用してすべての必要な AWS リソースを作成し、コードパイプラインを使用してデプロイアカウントにリソースをデプロイします。コードパイプラインは、次の 2 つのリポジトリで実行されます。

  • グローバルカスタマイズは、AFT に登録されているすべてのアカウントで実行される Terraform コードを対象とします。

  • アカウントのカスタマイズには、デプロイアカウントで実行される Terraform コードが含まれます。

アカウントカスタマイズフォルダで Terraform コマンドを実行することで、AFT を使用せずにこのソリューションをデプロイすることもできます。

Terraform コードにより、次のリソースがデプロイされます。

  • AWS Identity and Access Management (IAM) ロールとポリシー

  • パッケージの圧縮ファイルと manifest.json

    • Systems Manager では、1 つのパッケージに、ソフトウェアまたはインストール可能なアセットの .zip ファイルが 1 つ以上含まれます。

    • JSON マニフェストには、パッケージコードファイルへのポインタが含まれます。

  • S3 バケット

    • 組織全体で共有されている分散パッケージは、Amazon S3 バケットに安全に保存されます。

  • AWS Systems Manager ドキュメント (SSM ドキュメント)

    • DistributeSoftwarePackage には、メンバーアカウントのすべてのターゲットインスタンスにソフトウェアパッケージを配布するためのロジックが含まれています。

    • AddSoftwarePackageToDistributor には、インストール可能なソフトウェアアセットをパッケージ化し、その機能である Automation に追加するロジックが含まれています AWS Systems Manager。

  • Systems Manager の関連付け

    • Systems Manager の関連付けは、ソリューションのデプロイに使用されます。

アーキテクチャとワークフロー

AWS Organizations でソフトウェアパッケージの配布を一元化するためのアーキテクチャ図

この図は、以下のステップを示しています。

  1. 一元化されたアカウントからソリューションを実行するために、デプロイステップに従って、パッケージまたはソフトウェアを S3 バケットにアップロードします。

  2. カスタマイズされたパッケージは、Systems Manager コンソールの [自分が所有] タブの[ドキュメント] セクションから利用可能になります。

  3. Systems Manager の一機能であるステートマネージャーは、組織全体でパッケージの関連付けを作成、スケジュール、実行します。関連付けを行うことで、ソフトウェアパッケージをマネージドノードにインストールして実行してからでないと、このパッケージをターゲットノードにインストールできなくなります。

  4. 関連付けにより、Systems Manager はターゲットノードにパッケージをインストールするように指示されます。

  5. これ以降にインストールまたは変更を行う場合、ユーザーは同じ関連付けを 1 つの場所から定期的に、または手動で実行することで、アカウント間でデプロイを実行できます。

  6. メンバーアカウントでは、Automation がデプロイコマンドを Distributor に送信します。

  7. Distributor は、インスタンス間にソフトウェアパッケージを配布します。

このソリューションでは、 内の管理アカウントを使用しますが AWS Organizations、組織に代わってこれを管理するためのアカウント (委任管理者) を指定することもできます。

ツール

AWS サービス

  • Amazon Simple Storage Service (Amazon S3) は、量にかかわらず、データを保存、保護、取得するのに役立つクラウドベースのオブジェクトストレージサービスです。このパターンでは、Amazon S3 を使用して分散パッケージを一元化し、安全に保存します。

  • AWS Systems Manager は、 AWS クラウドで実行されるアプリケーションとインフラストラクチャの管理に役立ちます。これにより、アプリケーションとリソースの管理が簡素化され、運用上の問題を検出して解決する時間を短縮し、 AWS リソースを大規模に安全に管理できます。このパターンでは、次の Systems Manager 機能を使用します。

    • Distributor は、ソフトウェアをパッケージ化して、Systems Manager のマネージドインスタンスに公開するのに役立ちます。

    • 自動化により、多くの AWS サービスの一般的なメンテナンス、デプロイ、修復タスクが簡素化されます。

    • Documents は、組織とアカウント全体で、Systems Manager のマネージドインスタンスに対するアクションを実行します。

  • AWS Organizations は、作成して一元管理する組織に複数の AWS アカウントを統合するのに役立つアカウント管理サービスです。

その他のツール

  • Terraform は HashiCorp の infrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。

コードリポジトリ

このパターンの手順とコードは、GitHub Centralized Package Distribution リポジトリで入手できます。

ベストプラクティス

  • 関連付けにタグを割り当てるには、AWS Command Line Interface (AWS CLI) または AWS Tools for PowerShell を使用します。Systems Manager コンソールを使用して関連付けにタグを追加することはできません。詳細については、Systems Manager ドキュメントの「Tagging Systems Manager resources」を参照してください。

  • 別のアカウントから共有されたドキュメントの新しいバージョンを使用して関連付けを実行する場合は、ドキュメントバージョンを default に設定する必要があります。

  • ターゲットノードにのみタグを付けるには、1 つのタグキーを使用します。複数のタグキーを使用してノードをターゲットにするには、リソースグループオプションを使用します。

エピック

タスク説明必要なスキル

リポジトリのクローンを作成

  1. GitHub Centralized package distribution リポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/aws-organization-centralised-package-distribution
  2. Terraform コードリポジトリには、AFT によって管理される 2 つのカスタマイズフォルダが必要です。リポジトリのローカルコピーに、次のフォルダが含まれていることを確認します。

    $ cd centralised-package-distribution $ ls global-customization account-customization
DevOps エンジニア

グローバル変数を更新

global-customization/variables.tf ファイルで、以下の入力パラメータを更新します。これらの変数は、AFT によって作成および管理されるすべてのアカウントに適用されます。

  • account_id: Distributor ソリューションをデプロイするアカウントの ID。

  • aws_region: 関連付けがデプロイされる AWS リージョン 場所。

DevOps エンジニア

アカウント変数を更新

account-customization/variables.tf ファイルで、以下の入力パラメータを更新します。これらの変数は、AFT によって作成および管理される特定のアカウントにのみ適用されます。

  • package_bucket_name: パッケージ配布ファイルを含む S3 バケットの名前。

  • package_name: パッケージ配布ファイルの名前。

  • package_version: インストーラのパッケージバージョン。

DevOps エンジニア
タスク説明必要なスキル

ステートマネージャーの関連付けの入力パラメータを更新

account-customization/association.tf ファイル内の次の入力パラメータを更新して、インスタンスで維持する状態を定義します。ユースケースに対応している場合は、デフォルトのパラメータ値をそのまま使用できます。

  • targetAccounts: ディストリビューションのターゲットインスタンスを持つアカウントを表す AWS Organizations 内の組織単位 (OU) ID。OU ID は「ou」で始まります。

  • targetRegions: ターゲットインスタンスが実行されている AWS リージョン (たとえば、「us-east-1」または「ap-southeast-2」)。

  • action: パッケージのインストール / アンインストールを指定します。

  • installationType: 次のいずれかのインストールタイプとなります。

    • uninstall: パッケージはアンインストールされます。

    • reinstall: 再インストールプロセスが完了するまで、アプリケーションはオフラインになります。

    • In-place update: 新規または更新されたファイルがインストールに追加されている間も、アプリケーションを使用できます。

  • name: インストールまたはアンインストールするパッケージの名前。

  • version: インストールまたはアンインストールするパッケージのバージョン。パッケージのいずれのバージョンもインストールされていない場合、システムはエラーを返します。

  • bucketName: パッケージがデプロイされた S3 バケット名。このバケットは、パッケージとマニフェストファイルのみで構成される必要があります。

  • bucketPrefix: パッケージアセットが保存される S3 プレフィックス。

  • AutomationAssumeRole: SystemsManager-AutomationAdministrationRole の Amazon リソースネーム (ARN)。

DevOps エンジニア

圧縮ファイルと manifest.json ファイルをパッケージ用に準備する

このパターンでは、PowerShell のインストール可能ファイル (Windows の場合は .msi、Linux の場合は .rpm) のサンプルと、インストールおよびアンインストールスクリプトが account-customization/package フォルダに提供されています。

  1. PowerShell のインストール可能ファイルを独自のファイルに置き換えるか、または任意のインストール可能ファイル、インストールおよびアンインストールスクリプト、マニフェストファイルを提供して、アカウントの account-customization フォルダにパッケージを作成します。

  2. Terraform によって account-customization フォルダ内に生成されたデフォルトの manifest.json ファイルを、要件に応じてカスタマイズします。

DevOps エンジニア
タスク説明必要なスキル

Terraform の設定を初期化する

AFT を使用してソリューションを自動的にデプロイするには、コードを AWS CodeCommitにプッシュします。

$ git add * $ git commit -m "message" $ git push

account-customization フォルダから Terraform コマンドを実行して、AFT を使用せずにこのソリューションをデプロイすることもできます。Terraform ファイルを含む作業ディレクトリを初期化するには、以下を実行します。

$ terraform init
DevOps エンジニア

変更のプレビュー

Terraform がインフラストラクチャに加える変更をプレビューするには、次のコマンドを実行します。

$ terraform plan

このコマンドは、Terraform 設定を評価して、宣言されたリソースの望ましい状態を決定します。また、ワークスペース内でプロビジョニングする実際のインフラストラクチャを、その望ましい状態と比較します。

DevOps エンジニア

変更を適用

次のコマンドを実行して、variables.tf ファイルに加えた変更を実装します。

$ terraform apply
DevOps エンジニア
タスク説明必要なスキル

SSM ドキュメントの作成を検証する

  1. AWS Systems Manager コンソールで、左側のナビゲーションペインで [ドキュメント] を選択します。

  2. [自分で所有] タブを選択します。

DistributeSoftwarePackage および AddSoftwarePackageToDistributor パッケージが表示されます。

DevOps エンジニア

オートメーションのデプロイが成功したことを検証する

  1. Systems Manager コンソールの左側のナビゲーションペインで、[オートメーション] を選択します。

  2. [オートメーションの実行] リストには、最新の DistributeSoftwarePackage および AddSoftwarePackageToDistributor デプロイが表示されます。

  3. [実行 ID] を選択して、正常に完了したことを確認します。

DevOps エンジニア

パッケージがターゲットのメンバーアカウントインスタンスにデプロイされたことを確認する

  1. Systems Manager コンソールのナビゲーションペインで、[コマンドを実行] を選択します。

  2. [コマンド履歴] には、各呼び出しとそのステータスが表示されます。

  3. いずれかの [コマンド ID] を選択すると、各ターゲットインスタンスのデプロイ履歴が表示されます。

  4. [インスタンス ID] を選択し、ディストリビューションの [出力] セクションを確認します。

DevOps エンジニア

トラブルシューティング

問題ソリューション

ステートマネージャーの関連付けが失敗しているか、保留中のステータスのままになっています。

AWS ナレッジセンターのトラブルシューティング情報を参照してください。

スケジュールされた関連付けの実行に失敗しました。

スケジュール仕様が無効である可能性があります。現在、ステートマネージャーでは、関連付けの cron 式での月の指定はサポートされていません。cron 式または rate 式を使用してスケジュールを確認してください。

関連リソース