CloudWatch Logs から別のアカウントの VPC ベースの Amazon Elasticsearch Service クラスターにデータをストリーミングするにはどうすればよいですか?

最終更新日: 2020 年 6 月 16 日

別のアカウントの仮想プライベートクラウド (VPC) を使用して、Amazon CloudWatch Logs から Amazon Elasticsearch Service (Amazon ES) クラスターにデータをストリーミングしようとしています。ただし、「有効な Amazon Elasticsearch Service のエンドポイントを入力してください」というエラーメッセージが表示されます。どうすればこのエラーを解決できますか?

簡単な説明

CloudWatch Logs から別のアカウントの Elasticsearch クラスターにデータをストリーミングするには、以下の手順を実行します。

1.    アカウント A で CloudWatch Logs をセットアップします。

2.    アカウント A で AWS Lambda を設定します。

3.    アカウント間の VPC ピアリングを設定します。

解決方法

アカウント A で CloudWatch Logs をセットアップする

1.    アカウント A で CloudWatch Logs コンソールを開き、ロググループを選択します。

2.    [Amazon Elasticsearch Service へのストリーム] アクションを選択します。

3.    [アカウントの選択] オプションで、[このアカウント] を選択します。

4.    [Elasticsearch クラスター] のドロップダウンで、アカウント A の既存のクラスターを選択します。

5.    選択した Elasticsearch クラスターを呼び出すためのアクセス許可を持つ Lambda IAM 実行ロールを選択します。

6.    AWSLambdaVPCAccessExecutionRole ポリシーをロールにアタッチし、[次へ] をクリックします。

7.    [ログの形式] と [サブスクリプションフィルターのパターン] を選択します。

8.    [次へ] を選択します。

9.    [Lambda 関数の名前] を入力し、[ストリーミングの開始] をクリックします。ストリーミングの詳細については、CloudWatch Logs データの Amazon Elasticsearch Service へのストリーミングを参照してください。

アカウント A で Lambda を設定する

1.    アカウント A で、Lambda コンソールを開きます。

2.    Lambda 関数を選択します。

3.    関数コードで、アカウント B の Elasticsearch クラスターのエンドポイント変数を更新します。この更新により、Lambda 関数はアカウント B の Amazon ES ドメインにデータを送信できるようになります。

注意: アカウント B のパブリック DNS 名を貼り付けることができます。URL エンドポイントから「https://」を削除してください。

4.    [カスタム VPC] を選択します。

5.    [保存] をクリックします。この選択により、Lambda 関数が VPC 内で実行され、VPC ルーティングを使用して Amazon ES ドメインにデータを送り返します。Amazon Virtual Private Cloud (Amazon VPC) の設定の詳細については、VPC 内のリソースにアクセスするための Lambda 関数の設定を参照してください。

アカウント間の VPC ピアリングを設定する

1.    アカウント A とアカウント B で Amazon VPC コンソールを開きます。

注意: VPC に CIDR ブロックが重複していないことを確認してください。

2.    2 つのカスタム VPC (Lambda と Amazon ES) 間に VPC ピアリングのセッションを作成します。この VPC ピアリングのセッションでは、Lambda が Amazon ES ドメインにデータを送信できます。VPC ピアリング接続の詳細については、VPC ピアリング接続の作成と使用を参照してください。

3.     両方の VPC のルートテーブルを更新します。ルートテーブルの詳細については、VPC ピアリング接続のルートテーブルを更新するを参照してください。

4.    アカウント A で、[セキュリティグループ] に移動します。

5.    Lambda がセットアップされているサブネットに割り当てられたセキュリティグループを選択します。

6.    Amazon ES サブネットからのトラフィックを許可するインバウンドルールを追加します。

7.    アカウント B で、Amazon ES がセットアップされているサブネットに割り当てられたセキュリティグループを選択します。

8.    Lambda サブネットからのトラフィックを許可するインバウンドルールを追加します。

9.    アカウント B で、Amazon ES コンソール を開きます。

10.    [アクション] をクリックします。

11.    [アクセスポリシーの変更] を選択し、次のポリシーを追加します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
       
    "AWS": "arn:aws:iam::<AWS Account A>:role/<Lambda Execution Role>"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1: ::<AWS
    Account B>:domain/<ES Domain Name>/*"
    }
  ]
}

このポリシーは、Amazon ES が Lambda 関数の実行ロールから呼び出しを行うことを許可します。

12.Lambda コンソールで [エラー数及び成功率] のメトリクスを確認します。このメトリクスは、ログが Amazon ES に正常に配信されたかどうかを確認します。

13.Amazon ES の [インデックス作成率] メトリクスをチェックして、データが送信されたかどうかを確認します。CloudWatch Logs は、Amazon VPC の両方のアカウントでストリーミングされるようになりました。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合