AWS CDK を使用して複数の AWS リージョン、アカウント、および OUs で Amazon DevOps Guru を有効にして運用パフォーマンスを向上させる - AWS 規範ガイダンス

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

AWS CDK を使用して複数の AWS リージョン、アカウント、および OUs で Amazon DevOps Guru を有効にして運用パフォーマンスを向上させる

作成者:Dr. Rahul Sharad Gaikwad (AWS)

コードリポジトリ: Amazon DevOps Guru サンプルコード

環境:PoC またはパイロット

テクノロジー: 管理とガバナンス CloudNative、 DevOps、オペレーション、セキュリティ、アイデンティティ、コンプライアンス、サーバーレス

AWS サービス: Amazon API GatewayAWS CDK、Amazon DevOps Guru、Amazon DynamoDBAWS Organizations

[概要]

このパターンは、 で AWS Cloud Development Kit (AWS CDK) を使用して、複数の Amazon Web Services (AWS) リージョン、アカウント、組織単位 (OUs) で Amazon DevOps Guru サービスを有効にするステップを示しています TypeScript。AWS CDK スタックを使用して、管理者 (プライマリ) AWS アカウント CloudFormation StackSets から AWS をデプロイし、各アカウントにログインしてアカウントごとに DevOps 個別に Guru を有効にする代わりに、複数のアカウントに Amazon Guru DevOps を有効にすることができます。

Amazon DevOps Guru には、アプリケーションの可用性を向上させ、運用上の問題を迅速に解決するのに役立つ人工知能オペレーション (AIOps) 機能が用意されています。 DevOps Guru は、機械学習 (ML) を活用した推奨事項を適用することで、手動作業を削減します。ML の専門知識は必要ありません。 DevOps Guru はリソースと運用データを分析します。異常を検出すると、問題への対処に役立つ指標、イベント、および推奨事項が表示されます。

このパターンでは、Amazon DevOps Guru を有効にするための 3 つのデプロイオプションについて説明します。

  • 複数のアカウントとリージョンですべてのスタックリソース用

  • OU のすべてのスタックリソース用

  • 複数のアカウントとリージョンで特定のスタックリソース用

前提条件と制限

前提条件

製品バージョン

  • AWS CDK ツールキットバージョン 1.107.0 またはそれ以降

  • バージョン 7.9.0 以降

  • Node.js バージョン 15.3.0 以降

アーキテクチャ

テクノロジー

このパターンのアーキテクチャには以下のサービスが含まれます。

AWS CDK スタック

このパターンでは、次の AWS CDK スタックを使用します。 

  • CdkStackSetAdminRole— AWS Identity and Access Management (IAM) 管理者ロールを作成して、管理者とターゲットアカウントの間に信頼関係を確立します。

  • CdkStackSetExecRole— 管理者アカウントを信頼する IAM ロールを作成します。

  • CdkDevopsGuruStackMultiAccReg — すべてのスタックの複数の AWS リージョンとアカウントで DevOps Guru を有効にし、Amazon Simple Notification Service (Amazon SNS) 通知を設定します。

  • CdkDevopsGuruStackMultiAccRegSpecStacks — 特定のスタックの複数の AWS リージョンとアカウントで DevOps Guru を有効にし、Amazon SNS 通知を設定します。

  • CdkDevopsguruStackOrgUnit – OUs 間で DevOps Guru を有効にし、Amazon SNS 通知を設定します。 

  • CdkInfrastructureStack— API ゲートウェイ、Lambda、DynamoDB などのサンプルサーバーレスアプリケーションコンポーネントを管理者アカウントにデプロイして、フォールトインジェクションとインサイト生成を実演します。

サンプルアプリケーションのアーキテクチャ

次の図は、複数のアカウントとリージョンでデプロイされたサンプルサーバーレスアプリケーションのアーキテクチャを示しています。このパターンでは、管理者アカウントを使用してすべての AWS CDK スタックをデプロイします。また、管理者アカウントを Guru をセットアップするためのターゲットアカウントの 1 DevOps つとして使用します。

  1. DevOps Guru を有効にすると、まず各リソースの動作をベースライン化し、次に CloudWatch 提供されたメトリクスから運用データを取り込みます。

  2. 異常を検出すると、 からのイベントと関連付け CloudTrailてインサイトを生成します。

  3. このインサイトでは、相関関係のある一連のイベントと規定された推奨事項が提供されるため、オペレーターは犯人のリソースを特定できます。

  4. Amazon SNS は通知メッセージをオペレータに送信します。

複数のアカウントとリージョンにデプロイされたサンプルサーバーレスアプリケーション。

自動化とスケール

このパターンで提供されるGitHub リポジトリは、AWS CDK をコードとしてのインフラストラクチャ (IaC) ツールとして使用して、このアーキテクチャの設定を作成します。AWS CDK は、リソースをオーケストレーションし、複数の AWS アカウント、リージョン、OUs で DevOps Guru を有効にするのに役立ちます。

ツール

AWS サービス

  • AWS CDK – AWS Cloud Development Kit (AWS CDK) は、、、Python TypeScript、Java JavaScript、C# の 5 つのサポートされているプログラミング言語のいずれかで、クラウドインフラストラクチャをコードとして定義する際に役立ちます。

  • AWS CLI — AWS コマンドラインインターフェイス (AWS CLI) は、AWS のサービスやリソースを操作するための一貫したコマンドラインインターフェイスを提供する統合ツールです。

コード

このパターンのソースコードは GitHub、Amazon DevOps Guru CDK Samples リポジトリの にあります。AWS CDK コードは で記述されます TypeScript。リポジトリを複製して使用するには、次のセクションの指示に従います。

重要:このパターンのストーリーには、UNIX、Linux、macOS向けにフォーマットされたAWS CDKおよびAWS CLI コマンドの例が含まれています。Windows の場合は、各行末のバックスラッシュ (\) Unix 連結文字をキャレット (^) に置き換えてください。

エピック

タスク説明必要なスキル

AWS の名前付きプロファイルを設定します。

マルチアカウント環境にスタックをデプロイするには、以下のように AWS の名前付きプロファイルを設定します。

管理者アカウントの変更

$aws configure --profile administrator AWS Access Key ID [****]: <your-administrator-access-key-ID> AWS Secret Access Key [****]: <your-administrator-secret-access-key> Default region name [None]: <your-administrator-region> Default output format [None]: json

ターゲットアカウントの場合:

$aws configure --profile target AWS Access Key ID [****: <your-target-access-key-ID> AWS Secret Access Key [****]: <your-target-secret-access-key> Default region name [None]: <your-target-region> Default output format [None]: json

詳細については、AWS CLI ドキュメントの「名前を指定されたプロファイルを使用する」を参照してください。

DevOps エンジニア

AWS プロファイル設定を確認します。

(オプション) AWS CLI ドキュメントの「設定の設定と表示」の手順に従って、credentialsおよびconfigファイル内の AWS プロファイル設定を確認できます。

DevOps エンジニア

AWS CDK のバージョンを確認します。

次のコマンドを実行して、AWS CDK Toolkit のバージョンを確認します。

$cdk --version

このパターンには、バージョン 1.107.0 以降が必要です。以前のバージョンの AWS CDK を使用している場合は、「AWS CDK ドキュメント」の指示に従って更新してください。

DevOps エンジニア

プロジェクトコードをクローニングします。

コマンドを使用して、このパターンの GitHub リポジトリをクローンします。

$git clone https://github.com/aws-samples/amazon-devopsguru-cdk-samples.git
DevOps エンジニア

パッケージの依存関係をインストールし、 TypeScript ファイルをコンパイルします。

パッケージの依存関係をインストールし、次のコマンドを実行して TypeScript ファイルをコンパイルします。

$cd amazon-devopsguru-cdk-samples $npm install $npm fund

これらのコマンドは、すべてのパッケージをサンプルリポジトリからインストールします。

重要:パッケージが見つからないというエラーが表示される場合は、以下のいずれかのコマンドを使用してください。

$npm ci

-または-

$npm install -g @aws-cdk/<package-name>

パッケージ名とバージョンのリストは、/amazon-devopsguru-cdk-samples/package.jsonファイルのDependenciesセクションにあります。詳細については、npm ドキュメントの「npm ci」と「npm install」を参照してください。

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

Amazon SNS 通知用の E メールアドレスを設定します。

Amazon SNS 通知用の E メールアドレスを指定するには、次の手順に従います。

  1. ファイル/amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-multi-acc-reg-stack.ts/amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-org-uni-stack.tsを編集します.

  2. DevOpsGuruTopicSubscriptionセクションで、Endpointパラメーターをメールアドレスで更新します。

  3. ファイルを保存して閉じます。

DevOps エンジニア

Go プロジェクトを構築します。

以下のコマンドを実行してプロジェクトコードをビルドし、スタックを合成します。

npm run build && cdk synth

次のような出力が表示されます: 

$npm run build && cdk synth > cdk-devopsguru@0.1.0 build > tsc Successfully synthesized to ~/amazon-devopsguru-cdk-samples/cdk.out Supply a stack id (CdkDevopsGuruStackMultiAccReg,CdkDevopsGuruStackMultiAccRegSpecStacks, CdkDevopsguruStackOrgUnit, CdkInfrastructureStack, CdkStackSetAdminRole, CdkStackSetExecRole) to display its template.

詳細と手順については、AWS CDK ドキュメントの「初めての AWS CDK アプリケーション」を参照してください。

DevOps エンジニア

AWS CDK スタックを一覧表示します。

以下のコマンドを実行して、全てのAWS CDK スタックをリストアップします。

$cdk list

コマンドによって、次のリストが表示されます。

CdkDevopsGuruStackMultiAccReg CdkDevopsGuruStackMultiAccRegSpecStacks CdkDevopsguruStackOrgUnit CdkInfrastructureStack CdkStackSetAdminRole CdkStackSetExecRole
DevOps エンジニア
タスク説明必要なスキル

IAM ロールを作成するための AWS CDK スタックをデプロイします。

このパターンでは、AWS CloudFormation StackSets を使用して複数のアカウントでスタックオペレーションを実行します。初めてスタックセットを作成する場合は、次の IAM ロールを作成して、必要な権限を AWS アカウントに設定する必要があります。

  • AWSCloudFormationStackSetAdministrationRole

  • AWSCloudFormationStackSetExecutionRole

注:ロールにはこれらの正確な名前が必要です。

  1. 次の CLI コマンドを実行して、管理者 (プライマリ) アカウントで IAM AWSCloudFormationStackSetAdministrationRole ロールを作成します。

    $cdk deploy CdkStackSetAdminRole --profile administrator
  2. スタックインスタンスを実行したいすべてのターゲットアカウントに IAM AWSCloudFormationStackSetExecutionRole ロールを作成します。このロールを作成するには、次の CLI コマンドを実行します。

    $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile administrator   $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile target

詳細については、AWS CloudFormation ドキュメントの「セルフマネージド型のアクセス許可を付与する」を参照してください。

DevOps エンジニア

Guru を有効にするための AWS CDK DevOps スタックを複数のアカウントにデプロイします。

AWS CDK CdkDevopsGuruStackMultiAccReg スタックは、複数のアカウントとリージョンにスタックインスタンスをデプロイするためのスタックセットを作成します。スタックをデプロイするには、指定されたパラメータを使用して次の CLI コマンドを実行します。

$cdk deploy CdkDevopsGuruStackMultiAccReg \ --profile administrator \ --parameters AdministratorAccountId=<administrator-account-ID> \ --parameters TargetAccountId=<target-account-ID> \ --parameters RegionIds="<region-1>,<region-2>"

現在、Amazon DevOps Guru は、DevOps 「Guru のよくある質問」に記載されている AWS リージョンで利用できます。

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

OU ID を抽出します。

AWS Organizations コンソールで、 DevOps Gru を有効にする組織単位IDs を特定します。

DevOps エンジニア

OU のサービス管理権限を有効にします。

アカウント管理に AWS Organizations を使用している場合は、サービス管理アクセス許可を付与して DevOps Guru を有効にする必要があります。IAM ロールを手動で作成する代わりに、「組織ベースの信頼できるアクセスとサービスにリンクされたロール (SLR」) を使用してください。

DevOps エンジニア

OU 間で DevOps Guru を有効にするための AWS CDK スタックをデプロイします。 OUs

AWS CDK CdkDevopsguruStackOrgUnitスタックは、OUs 間で DevOps Guru サービスを有効にします。スタックをデプロイするには、指定されたパラメータを使用して次のコマンドを実行します。

$cdk deploy CdkDevopsguruStackOrgUnit \ --profile administrator \ --parameters RegionIds="<region-1>,<region-2>" \ --parameters OrganizationalUnitIds="<OU-1>,<OU-2>"
DevOps エンジニア
タスク説明必要なスキル

IAM ロールを作成するための AWS CDK スタックをデプロイします。

最初のオプションで示した必要な IAM ロールをまだ作成していない場合は、まず作成してください。

  1. 次の CLI コマンドを実行して、管理者 (プライマリ) アカウントで IAM AWSCloudFormationStackSetAdministrationRole ロールを作成します。

    $cdk deploy CdkStackSetAdminRole --profile administrator
  2. スタックインスタンスを実行したいすべてのターゲットアカウントに IAM AWSCloudFormationStackSetExecutionRole ロールを作成します。このロールを作成するには、CLI コマンドを実行します。

    $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile administrator $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile target

詳細については、AWS CloudFormation ドキュメントの「セルフマネージド型のアクセス許可を付与する」を参照してください。

DevOps エンジニア

既存のスタックを削除します。

すべてのスタックリソースに対して DevOps Guru を有効にする最初のオプションを既に使用している場合は、次のコマンドを使用して古いスタックを削除できます。

$cdk destroy CdkDevopsGuruStackMultiAccReg --profile administrator

あるいは、スタックを再デプロイするときに RegionIdsパラメータを変更することで、「スタックはすでに存在している」エラーを回避することができます。

DevOps エンジニア

AWS CDK スタックをスタックリストで更新します。

  1. /amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-multi-acc-reg-spec-stack.ts ファイルを編集します。

  2. ResourcesCloudFormation、 でStackNames、 DevOps Gru を有効にするスタックを一覧表示します。デモ用にパラメータでCdkInfrastructureStackスタックを指定していますが、このエントリは必要に応じて編集できます。

  3. ファイルを保存して閉じます。

  4. 以下を実行して、スタックテンプレートを合成して更新する

     $cdk synth
データエンジニア

AWS CDK スタックをデプロイして、複数のアカウントで特定のスタックリソースに対して DevOps Guru を有効にします。

AWS CDK CdkDevopsGuruStackMultiAccRegSpecStacksスタックは、複数のアカウントにわたる特定のスタックリソースに対して DevOps Guru を有効にします。以下のコマンドを実行して、API をデプロイします。

$cdk deploy CdkDevopsGuruStackMultiAccRegSpecStacks \ --profile administrator \ --parameters AdministratorAccountId=<administrator-account-ID> \ --parameters TargetAccountId=<target-account-ID> \ --parameters RegionIds="<region-1>,<region-2>"

注:以前にオプション 1 でこのスタックをデプロイしたことがある場合は、「スタックがすでに存在している」エラーを回避するためにRegionIdsパラメータを変更してください (必ず「使用可能なリージョン」から選択してください)。

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

サンプルのサーバーレスインフラストラクチャースタックをデプロイします。

AWS CDK CdkInfrastructureStackスタックは、API Gateway、Lambda、DynamoDB テーブルなどのサーバーレスコンポーネントをデプロイして、 DevOps Guru インサイトを示します。以下のコマンドを実行して、API をデプロイします。 

$cdk deploy CdkInfrastructureStack --profile administrator
DevOps エンジニア

DynamoDB にサンプルレコードを挿入します。

次のコマンドを実行して、DynamoDB テーブルにサンプルレコードを設定します。populate-shops-dynamodb-table.jsonスクリプトの正しいパスを指定します。

$aws dynamodb batch-write-item \ --request-items file://scripts/populate-shops-dynamodb-table.json \ --profile administrator

コマンドによって以下の出力が表示されます。

{ "UnprocessedItems": {} }
DevOps エンジニア

DynamoDB に挿入されたレコードを確認します。

DynamoDB テーブルにpopulate-shops-dynamodb-table.jsonファイルのサンプルレコードが含まれていることを確認するには、AWS CDK スタックの出力として公開されている ListRestApiEndpointMonitorOperator API の URL にアクセスします。この URL は、CdkInfrastructureStackスタックの AWS CloudFormation コンソールの出力タブにも表示されます。出力は次の例のようになります:

CdkInfrastructureStack.CreateRestApiMonitorOperatorEndpointD1D00045 = https://oure17c5vob.execute-api.<your-region>.amazonaws.com/prod/ CdkInfrastructureStack.ListRestApiMonitorOperatorEndpointABBDB8D8 = https://cdff8icfrn4.execute-api.<your-region>.amazonaws.com/prod/
DevOps エンジニア

リソースのベースラインが完了するまでお待ちください。

このサーバーレススタックには、いくつかのリソースがあります。2 時間待ってから次のステップを実行することをお勧めします。このスタックを本番環境にデプロイした場合、 DevOps Guru でモニタリングするように選択したリソースの数によっては、ベースライン作成が完了するまでに最大 24 時間かかる場合があります。

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

AWS CDK インフラストラクチャスタックを更新します。

DevOps Guru Insights を試すには、一般的な運用上の問題を再現するためにいくつかの設定変更を加えることができます。

  1. /amazon-devopsguru-cdk-samples/lib/infrastructure-stack.ts ファイルを編集します。

  2. DDB Tableセクションで、DynamoDB テーブルの読み込み容量を 5 から 1 に変更します。

  3. ファイルを保存して閉じます。

  4. 次のコマンドを実行して、更新された AWS CDK インフラストラクチャスタックを合成してデプロイします。

    $cdk synth $cdk deploy CdkInfrastructureStack --profile administrator
DevOps エンジニア

API に HTTP リクエストを注入します。

HTTP リクエストの形式でListRestApiMonitorOperatorEndpointxxxx API にイングレストラフィックを注入します。

  1. Python スクリプト/amazon-devopsguru-cdk-samples/scripts/sendAPIRequest.pyを実行します。

  2. ListRestApiMonitorOperatorEndpointxxxxの API リンクでurl変数を更新します。この URL は、AWS CDK 「デプロイ」コマンドの出力または AWS Cloudformation コンソールのスタックの「出力」タブにあります。

  3. ファイルを保存して閉じます。

  4. 次のコマンドを使用して、Python スクリプトを実行します。

    $python sendAPIRequest.py
  5. 必ず 200 ステータスコードを取得してください。

  6. トラフィックを高速で注入するには、複数の (できれば 4 つの) 端末でスクリプトを実行する必要がある場合があります。

  7. スクリプトがループで約 10 分実行されると、DevOps Gru コンソール に運用上のインサイトが表示されます。

DevOps エンジニア

DevOps Guru インサイトを確認します。

標準条件下では、進行中のインサイトカウンターに DevOps Guru ダッシュボードにゼロが表示されます。異常を検出すると、インサイトという形でアラートが生成されます。ナビゲーションペインで「インサイト」を選択すると、概要、集計指標、関連イベント、推奨事項など、異常の詳細が表示されます。インサイトのレビューの詳細については、「Amazon DevOps Guru を使用して AIOps で運用上のインサイトを取得する」ブログ記事を参照してください。

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

リソースをクリーンアップして削除する。

このパターンを確認したら、追加料金が発生しないように、作成したリソースを削除する必要があります。以下のコマンドを実行します。

$cdk destroy CdkDevopsGuruStackMultiAccReg --profile administrator $cdk destroy CdkDevopsguruStackOrgUnit --profile administrator $cdk destroy CdkDevopsGuruStackMultiAccRegSpecStacks --profile administrator $cdk destroy CdkInfrastructureStack --profile administrator $cdk destroy CdkStackSetAdminRole --profile administrator $cdk destroy CdkStackSetExecRole --profile administrator $cdk destroy CdkStackSetExecRole --profile target
DevOps エンジニア

関連リソース