目次
- ■ 事前の検証環境
- ■ CloudWatch エージェントの制約(一部抜粋)
- 1. IAM ロールに許可ポリシーを追加する
- 2. NATゲートウェイ経由でインターネットアクセスを敷設する
- 【ステップ1】パブリックサブネットを作成する
- 【ステップ2】ルートテーブルを作成してサブネットを関連付ける
- 【ステップ3】インターネットゲートウェイを作成する
- 【ステップ4】NATゲートウェイを作成する
- 【ステップ5】ルートテーブルのルーティングを設定する
- 3. CloudWatch エージェントのパッケージをEC2にダウンロードする
- 4. CloudWatch エージェントの設定をEC2に適用しサービスを起動する
- 【ステップ1】CloudWatchエージェント設定 を Parameter Store に定義する
- 【ステップ2】Parameter Store の設定値をEC2インスタンスに適用する+サービス起動する
- 【確認】 CloudWatch Logs でログデータを確認する
- ■ 完成図
こんにちは、株式会社FIXERの村上です。
AWS Systems Manager を使用して、CloudWatch エージェントのパッケージDLからサービス起動まで試してみました。
本ブログでは、Windows Server を使用していますが、他の OS でもほぼ同様の手順となります(一部、エージェント設定を除く)。
■ 事前の検証環境
以下の検証環境をご用意ください。
下記のTechBlogで事前環境の構築手順を紹介しています。
https://tech-blog.cloud-config.jp/2023-05-23-aws-cli-systems-manager-on-ec2
■ CloudWatch エージェントの制約(一部抜粋)
プライベートサブネット上にEC2インスタンスを配置されたことを前提として、下記 4点の制約を必要とします。
- EC2インスタンス はCloudWatch エージェントのパッケージをダウンロードするため、インターネットへの接続が必要である。
- EC2インスタンス と Systems Manager の専用のプライベートネットワークを構成するため、VPCエンドポイントが必要である。
- EC2インスタンス から Systems Manager API にアウトバウンドアクセスを通信するため、セキュリティグループの設定が必要である。
- EC2インスタンス と CloudWatchのサービスにRBACを行うため、インスタンスプロファイルにCloudWatch エージェントを実行する許可ポリシーの追加が必要である。
※ 「事前の検証環境」を用意された皆様は、[2. ]と[3. ]の手順が不要になります。そのため、本ブログでは、[1. ]と[4. ]の設定手順を紹介します。
1. IAM ロールに許可ポリシーを追加する
EC2インスタンスにアタッチされたIAMロールにCloudWatchの実行権限(CloudWatchAgentServerPolicy)を付与します。
【注意点】
既にアタッチ済みのIAMロールに許可ポリシーを追加した場合、すぐには適用されません(AWSの仕様っぽい)。
すぐに反映したい場合は、EC2インスタンスを再起動してください。もし再起動できない場合は、気長に待ってください。
2. NATゲートウェイ経由でインターネットアクセスを敷設する
CloudWatch エージェントのパッケージはインターネット経由でEC2にダウンロードされます。そのため、パブリックサブネットを作成して、NATゲートウェイを配置してインターネット通信経路を敷設します。
【ステップ1】パブリックサブネットを作成する
- VPC コンソール > [サブネット] を選択して、[サブネットを作成] でパブリックサブネット(public-subnet)を作成します。
※ 本ブログでは、10.0.1.0/24 でパブリックサブネットを作成しました。 (プライベートサブネット(private-subnet)は 10.0.0.0/24 で作成済みです)
【設定項目】 | 【設定値】 |
[必須] VPC ID | [EC2インタンスがデプロイされたVPC ID] を選択 |
[オプション] サブネット名 | public-subnet(お好きな名前をつけてください) |
[オプション] アベイラビリティーゾーン | [指定なし] |
[必須] IPv4 CIDR ブロック | 10.0.1.0/24 |
【ステップ2】ルートテーブルを作成してサブネットを関連付ける
プライベートサブネットを関連づけたルートテーブルとは、別のルートテーブルを作成します。
基本的には、サブネット単位でルートテーブルを用意することを推奨します。
VPC コンソール > [ルートテーブル] を選択して、[ルートテーブルを作成] でパブリックサブネット用のルートテーブルを作成します。
【設定項目】 【設定値】 [オプション] 名前 public-rtb(お好きな名前をつけてください) [必須] VPC [EC2インタンスがデプロイされたVPC] を選択 - 作成後、このルートテーブル(public-rtb)にパブリックサブネットを明示的に関連付けてください。
- また同様に、プライベートサブネット用のルートテーブル(private-rtb)にはプライベートサブネットを明示的に関連付けてください。
【ステップ3】インターネットゲートウェイを作成する
VPC コンソール > [インターネットゲートウェイ]を選択して、[インターネットゲートウェイの作成]でインターネットゲートウェイを作成します。
【設定項目】 【設定値】 [必須] 名前 igw(お好きな名前をつけてください) - 作成後の画面右上、[アクション]を選択して、[VPCのアタッチ] にて「EC2インタンスがデプロイされたVPC」を割り当てます。
【ステップ4】NATゲートウェイを作成する
- VPC コンソール > [NATゲートウェイ]を選択して、[NATゲートウェイを作成]でパブリックNATゲートウェイを作成します。
【設定項目】 | 【設定値】 |
[オプション] 名前 | public-ngw(お好きな名前をつけてください) |
[必須] サブネット | [パブリックサブネット ID] を選択 |
[必須] 接続タイプ | [パブリック] を選択 |
[必須] Elastic IP 割り当て ID | [Elastic IP を割り当て]ボタンを押下して、割り当てる |
【ステップ5】ルートテーブルのルーティングを設定する
パブリックサブネット用のルートテーブル
- VPC コンソール > [ルートテーブル] を選択して、パブリックサブネット(public-subnet)にアタッチされたルートテーブル(public-ngw)を選択します。
- 右上の [アクション] を選択して、[ルートの編集] にて インターネットゲートウェイ(igw)を新規追加します。
プライベートサブネット用のルートテーブル
- VPC コンソール > [ルートテーブル] を選択して、プライベートサブネット(private-subnet)にアタッチされたルートテーブル(private-rtb)を選択します。
- 右上の [アクション] を選択して、[ルートの編集] にて NATゲートウェイ(public-ngw)を新規追加します。
【設定項目】 | 【設定値】 |
[必須] 送信先 | 0.0.0.0/0 |
[必須] ターゲット | [先ほど作成したNATゲートウェイ ID] を選択 |
3. CloudWatch エージェントのパッケージをEC2にダウンロードする
Run Command を使用して、EC2インスタンスにCloudWatch エージェントのパッケージをダウンロードします。
- AWS Systems Manager コンソール > [Run Command] を選択して、[AWS-ConfigureAWSPackage] のコマンドドキュメントを指定します。
- コマンドのパラメータにはこちらの設定を行います。
【設定項目】 | 【設定値】 |
[必須] Actions | Install |
[オプション] Installation Type | Uninstall and reinstall |
[必須] Name | AmazonCloudWatchAgent |
[オプション] Version | latest |
[オプション] Additional Arguments | {} |
- [ターゲット] では、対象のインスタンスを選択します。
- (任意)[出力オプション]では、[S3 バケットへの書き込みを有効化する]のチェックボックスを外します。
- 実行後、C:\Program Files\Amazon の直下に 統合CloudWatchエージェントのパッケージがダウンロードされました。
4. CloudWatch エージェントの設定をEC2に適用しサービスを起動する
【ステップ1】CloudWatchエージェント設定 を Parameter Store に定義する
- AWS Systems Manager コンソール > [パラメータストア] を選択して、[パラメータの作成]で設定ファイルの定義を行います。
- パラメータの詳細にはこちらの設定を行います。
【設定項目】 | 【設定値】 |
[必須] 名前 | AmazonCloudWatch-sample-config ※ 必ず「AmazonCloudWatch-」から名付けてください! |
[オプション] 説明 | <任意> |
[必須] 利用枠 | 本ブログは[標準]を選択 |
[必須] タイプ | [文字列]を選択 |
[必須] データ型 | [text]を選択 |
「値」には、エージェントの設定値を記載します。下記にサンプルを紹介します。
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "C:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log",
"log_group_name": "CloudWatchAgent",
"log_stream_name": "{instance_id}"
}
]
},
"windows_events": {
"collect_list": [
{
"event_format": "xml",
"event_levels": [
"WARNING",
"ERROR",
"INFORMATION"
],
"log_group_name": "System",
"log_stream_name": "{instance_id}",
"event_name": "System"
}
]
}
}
}
}
【ステップ2】Parameter Store の設定値をEC2インスタンスに適用する+サービス起動する
- AWS Systems Manager コンソール > [Run Command] を選択して、[AmazonCloudWatch-ManageAgent] のコマンドドキュメントを指定します。
- パラメータの詳細にはこちらの設定を行います。
【設定項目】 | 【設定値】 |
[必須] Actions | [configure]を選択 |
[必須] Mode | [ec2]を選択 |
[必須] Optional Configuration Source | [ssm]を選択 |
[必須] Optional Configuration Location | [AmazonCloudWatch-sample-config]を入力 |
[必須] Optional Restart | [yes]を選択 |
- [ターゲット] では、対象のインスタンスを選択します。
- (任意)[出力オプション]では、[S3 バケットへの書き込みを有効化する]のチェックボックスを外します。
- 実行後、RunCommandの実行ログ上でエージェントの起動成功ログが出力されていることを確認します。
【確認】 CloudWatch Logs でログデータを確認する
- CloudWatch コンソール > [ロググループ] を選択します。
- ロググループの一覧に「CloudWatchAgent」と「System」が表示されており、ログストリームに対象のEC2インスタンスを確認します。
これで、Systems Managerによって CloudWatchエージェントのセットアップ等できました。
■ 完成図
本ブログでは、このような構成図を作成しました。