はじめに
本記事はサービスの紹介
とハンズオン
の大きく2つの章で構成されています。
手を実際に動かして学んでいただくことを主眼としており、実際に操作して学べることに関してはハンズオンの冒頭をご確認ください。
AWSにより構築されたアプリケーションの健全性を評価するためには、リソースの利用状況とアプリケーションログの監視が必要不可欠となります。
AWSは、これらの運用監視を行うためのサービスを提供しており、これらを適切に活用することで、運用の効率化が可能となります。
本記事では、そのようなサービスの中から、特に代表的なものとして、AWS Systems Manager
とAmazon CloudWatch
を取り上げます。
これらのサービスの概要について説明し、EC2インスタンスをこれらのサービスと連携させる方法を紹介します。
さらに、インスタンスから監視に必要な情報を実際に取得するためのハンズオンを実施します。
このハンズオンを通じて、AWSの運用監視サービスの活用方法とその効果を具体的に理解できます。
注意①
本資料内スクショのAWS管理コンソールのデザインは資料作成当時のものです。
デザインは今後変更される可能性があり、スクショと差異がある場合がありますのでご了承ください。
注意②
今までのハンズオン(前提条件・知識に記載)で実施した手順は基本省略して記載するのでご了承ください。
複雑な手順等は例外として記載する場合があります。
注意③
ハンズオンで作成したリソースについてはハンズオン終了後、各自削除をお願いします。
前提条件・知識
- リージョンは
ap-northeast-1(Tokyo)
ゴール
- Systems Managerの基本的な概念について理解が深まっている
- CloudWatchの基本的な概念について理解が深まっている
- EC2インスタンスとSystems Managerとの間での連携を実現する能力がある
- EC2インスタンスとCloudWatchとの間での連携を実現し、メトリクスとログを送信する能力がある
使用サービス紹介
ハンズオンで触るサービスの概要について説明します。
AWS Systems Manager
AWS Systems ManagerはEC2を中心としたAWS環境の運用を効率化するためのサービスです。
特定の設定(たとえば、エージェントをインストールするなど)を行うことで、オンプレミス環境の運用も監理できます。
Systems Managerは多様な機能を提供しています。
これらの機能は、以下のようなカテゴリ毎に分類されており、それらを適切に活用することで運用の効率化を実現できます。
- アプリケーション管理
- 変更管理
- ノード管理
- オペレーション管理
- Quick Setup
- 共有リソース
今回使用する機能について概要を説明します。
カテゴリ | 機能 | 概要 |
---|---|---|
ノード管理 | フリートマネージャー | マネージドインスタンスをマネジメントコンソールから管理する機能 |
アプリケーション管理 | パラメータストア | CloudFormationやLambdaなどで使用するパラメータを一元管理する機能 |
ノード管理 | Run Command | マネージドインスタンス上でコマンドを実行する機能 |
用語
用語 | 定義 |
---|---|
マネージドインスタンス | Systems Managerのエージェントがインストールされ、Systems Managerの管理対象となったEC2インスタンス(オンプレサーバも含む) |
AWS Systems Managerドキュメント | Systems Managerがマネージドインスタンスに対して実行するアクションを定義したもの |
Amazon CloudWatch
Amazon CloudWatchはAWSリソースやアプリケーションの監視をするためのサービスです。
CloudWatchは多彩な機能を提供しています。
これらの機能は、以下のようなカテゴリ毎に分類されており、それらを適切に活用することで運用の効率化を実現できます。
- 収集
- モニタリング
- アクション
- 分析
- コンプライアンスとセキュリティ
今回使用する機能について概要を説明します。
カテゴリ | 機能 | 概要 |
---|---|---|
収集・モニタリング | CloudWatch Metrics | 監視対象リソースのメトリクスの収集、集計、可視化をする機能 |
収集・モニタリング | CloudWatch Logs | ログの監視、保存、アクセスをする機能 |
用語
用語 | 定義 |
---|---|
メトリクス | システムパフォーマンスを示す時系列の測定値のセット |
ログイベント | CloudWatch Logs構成要素の一つ。モニタリングしているアプリケーションやリソースによって記録されたログデータ |
ログストリーム | CloudWatch Logs構成要素の一つ。モニタリングしているアプリケーションやリソースから送信された順序に従って集約された一連のログイベント |
ロググループ | CloudWatch Logs構成要素の一つ。ログストリームをグルーピングしたもの |
ハンズオン
本ハンズオンでは、次の操作を体験します。
- EC2インスタンスをプロビジョニングし、SSHログインを行う
- EC2インスタンスをSystems Managerが管理できるように、IAMロールを作成し、それをアタッチする
- Systems Managerの機能を利用して、EC2インスタンスにCloudWatchエージェントをインストールし、起動する
- EC2インスタンスからCloudWatchにメトリクスが送信されていることを確認する
- EC2インスタンスからCloudWatchにログが送信されていることを確認する
EC2インスタンス起動
検索窓にec2
と入力し、表示されたEC2
を選択してください。
画面中央にあるインスタンスを起動
ボタンをクリックしてください。
どのようなインスタンスをプロビジョニングするか設定を入力する画面が表示されます。
名前とタグ
セクションではインスタンスの名前、インスタンスを区別するタグを指定できます。
名前
にインスタンスの名前を入力してください。今回は以下の形式で入力しました。
handson-<名前>
概要
セクションでは立ち上げるインスタンス数の指定および設定の概要を確認できます。
インスタンス数
はデフォルトの1
のままにしてください。
アプリケーションおよび OS イメージ (Amazon マシンイメージ)
セクションでは、AMI(インスタンス起動時に必要なソフトウェア設定を含むテンプレート)の選択とアーキテクチャの選択をします。
クイックスタート
ではAmazon Linux
が選択されていること、Amazon マシンイメージ (AMI)
ではAmazon Linux 2023 AMI
が選択されていることを確認してください。
アーキテクチャ
は64 ビット(x86)
が選択されていることを確認してください。
インスタンスタイプ
では、インスタンスのスペックを選択します。
t2.micro
が選択されていることを確認してください。
キーペア (ログイン)
セクションではインスタンスにアクセスする際に使用するSSHキーペアを作るか作らないかを選択します。
キーペアなしで続行(推奨されません)
を選択してください。
ネットワーク設定
セクションではインスタンスがプロビジョニングされるネットワークの設定をします。
すべてデフォルト値でかまいません。
以降の設定は変更不要です。
右下インスタンスを起動
ボタンをクリックしてください。
起動中画面になります。
しばらくすると以下のような表示になります。
右下すべてのインスタンスを表示
ボタンをクリックしてください。
Name
がインスタンス生成時に入力したインスタンス名のものを探してください。
そのインスタンスのインスタンスの状態
列の値が実行中
、ステータスチェック
列の値が2/2 のチェックに合格しました
になっていることを確認してください。
インスタンスのチェックボックスをチェックし、右上にある接続
ボタンをクリックしてください。
EC2インスタンスへの接続方法を選択する画面が表示されます。
EC2 Instance Connect
タブを選択してください。
入力はデフォルト値でかまいません。
右下接続
ボタンをクリックしてください。
ブラウザの新しいタブが自動的に開き、EC2インスタンスのコンソールが表示されることを確認してください。
IAMロールの作成
検索窓にiam
と入力し、表示されたIAM
を選択してください。
左メニューロール
を選択してください。
左上ロールの作成
ボタンをクリックしてください。
信頼されたエンティティタイプ
セクションではAWSのサービス
、ユースケース
セクションのサービスまたはユースケース
はEC2
、ユースケース
はEC2
を選択してください。
右下次へ
ボタンをクリックしてください。
検索窓にCloudWatchAgentAdminPolicy
、AmazonSSMManagedInstanceCore
をそれぞれ入力し、表示された項目のチェックボックスをチェックしてください。
- CloudWatchAgentAdminPolicy:CloudWatchエージェントを使用するためのフルアクセスを持つマネージドポリシー
- AmazonSSMManagedInstanceCore:Systems Managerのコア機能を使用する権限を持つマネージドポリシー
ロールの詳細
セクションでロール名を入力します。
ロール名
は以下の形式で入力してください。
handson-role-<ユーザ名>
それ以降の値はデフォルト値でかまいません。
画面最下部右下ロールを作成
ボタンをクリックしてください。
IAMロールアタッチ
作成したIAMロールをEC2インスタンスにアタッチします。
EC2インスタンスの一覧画面を表示してください。
各自作成したEC2インスタンスをチェックし、右上アクション
、セキュリティ
、IAMロールを変更
を選択してください。
IAMロール
のプルダウンで前工程で作成したIAMロールを選択し、右下IAMロールの更新
をクリックしてください。
IAMロールの更新に成功したら、再度EC2インスタンスをチェックし、右上インスタンスの状態
、インスタンスを再起動
を選択してください。
ダイアログ右下再起動
ボタンをクリックしてください。
EC2一覧上部に再起動に成功した旨のトーストが表示されたらOKです。
Systems ManagerにEC2インスタンスを管理させる
検索窓にsystems
と入力し、表示されたSystems Manager
を選択してください。
左メニューフリートマネージャー
を選択してください。
一覧に自分が生成したEC2インスタンスが表示されていることを確認してください。
また、エージェントのバージョン
列の番号を確認してください。(ハンズオン作成時は3.2.2303.0
でした)
EC2インスタンスにAmazonSSMManagedInstanceCore
を付与し、Systems Managerのエージェント(SSMエージェント)をインストールすることで、インスタンスはSystems Managerによって管理されます。
管理されているインスタンスは、フリートマネージャーで一覧表示されます。
AMIによっては、SSMエージェントがすでにインストールされている場合があります。
今回選択したAmazon Linux 2023は、SSMエージェントがすでにインストールされているAMIです。
SSMエージェントがプリインストールされているAMIのリストは、下記リンクに記載されています。
また、SSMエージェントが稼働しているか確認するコマンドも記載されているので試してみてください。
たとえば、Amazon Linux 2023の場合、sudo systemctl status amazon-ssm-agent
を実行することで、SSMエージェントの稼働状況を確認できます。
SSMエージェントの自動更新設定
SSMエージェントは常に最新を保つことが推奨されています。
その理由は、最新の状態でなければ、Systems Managerに新たに追加された機能や変更を活用できなくなるからです。
SSMエージェントの自動更新を設定できます。
フリートマネージャー
の右上設定
を選択し、SSMエージェントの自動更新
を選択してください。
SSMエージェントの自動更新
ボタンをクリックすれば、自動更新設定の完了です。
フリートマネージャー
の右上設定
を選択し、すべての設定
を選択してください。
エージェントの自動更新
セクションで更新がいつ実行されたか、自動更新の状況など確認ができます。
設定ステータス
が成功
になっていれば、最初のSSMエージェントのバージョンからアップデートが行われたはずです。
確認してみます。
エージェントのバージョン
列の値が3.2.2303.0
から3.3.131.0
になっており、バージョンアップが自動的に実行されることが確認できました。
CloudWatchエージェントのインストール
EC2インスタンスにCloudWatchエージェントをインストールします。
Systems Managerに管理されているインスタンスであれば、Systems Manager Run Commandという機能で複数インスタンスに一括でコマンドを実行できます。
CloudWatchエージェントをインストールするコマンドを実行し、インスタンスにインストールさせてみます。
Systems Manager左メニューRun Command
を選択してください。
コマンド
タブを選択し、一覧右上のRun Command
ボタンをクリックしてください。
コマンドドキュメント
セクションの検索窓でAWS-ConfigureAWSPackage
と入力し、検索結果をチェックしてください。
コマンドのパラメータ
セクションでは、コマンドドキュメントに付属するパッケージをインストールするかアンインストールするかなどを選択できます。
Action
がInstall
になっていることを確認してください。
Name
にAmazonCloudWatchAgent
と入力してください。
ターゲット
セクションでCloudWatchエージェントをインストールするインスタンスを指定します。
ターゲット
はインスタンスを手動で選択する
を選択し、インスタンス
一覧で自分のインスタンスをチェックしてください。
画面最下部の実行
ボタンをクリックしてください。
ターゲットにインストールコマンドが実行され、CloudWatchエージェントのインストールが開始されます。
ステータスが成功
になればインストール完了です。
CloudWatchエージェントの起動
SSMパラメータストアにCloudWatchエージェントの設定をJson形式で登録します。
Systems Manager左メニューパラメータストア
を選択し、右上パラメータの作成
ボタンをクリックしてください。
パラメータについて入力します。
パラメータ名はAmazonCloudWatch-
から始まるものでなければなりません。
今回はAmazonCloudWatch-Handson-<ユーザ名>
とします。
値は下記Jsonを入力してください。
<ユーザ名>
の部分は各自キャメルケース(記号なし)で入力してください。
右下パラメータの作成
ボタンをクリックしてください。
設定ファイルには以下3つのセクションがあります。
それぞれの概要を説明します。
- agent:CloudWatchエージェントに関する全般的な設定を定義
- metrics:CloudWatch Metricsへ出力するメトリクス情報を定義
- logs:CloudWtch Logsへ出力するログ情報を定義
{
"agent": {
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/home/ec2-user/logs",
"log_group_name": "Handson<ユーザ名>LogGroup",
"log_stream_name": "/home/ec2-user/logs"
}
]
}
}
},
"metrics": {
"metrics_collected": {
"statsd": {
"metrics_aggregation_interval": 60,
"metrics_collection_interval": 10,
"service_address": ":8125"
}
}
}
}
再度コマンドの実行
画面に遷移してください。
コマンドドキュメント
セクションの検索窓でAmazonCloudWatch-ManageAgent
と入力し、検索結果をチェックしてください。
コマンドのパラメータ
セクションでは、Action
がconfigure
になっていることを確認してください。
また、Optional Configuration Source
がssm
になっていることを確認してください。
Optional Configuration Location
に先ほど登録したパラメータ名を入力してください。(AmazonCloudWatch-Handson-<ユーザ名>
)
ターゲット
セクションでCloudWatchエージェントを実行するインスタンスを指定します。
ターゲット
はインスタンスを手動で選択する
を選択し、インスタンス
一覧で自分のインスタンスをチェックしてください。
画面最下部の実行
ボタンをクリックし、ステータスが成功
になれば完了です。
CloudWatch確認
以上の手順により、EC2インスタンスの情報(メトリクス、ログ)がCloudWatchに連携できるようになりました。
CloudWatchエージェントの起動で作成したJsonのfile_path
で指定したファイルをCloudWatchは監視します。
そのファイルに書き込みがあったら内容をCloudWatch Logsに転送します。
file_path
に何か書き込んでみましょう。
EC2インスタンス起動で実施したのと同様にEC2 Instance Connect
でインスタンスにログインしてください。
以下のコマンドを実行し、file_path
に指定しているファイルに書き込みをします。
echo "Hello World" > /home/ec2-user/logs
検索窓にcloudwatch
と入力し、表示されたCloudWatch
を選択してください。
左メニューロググループ
を選択し、検索窓にはCloudWatchエージェントの起動で作成したJsonのlog_group_name
の値を入力してください。
表示されているロググループ名のリンクをクリックしてください。
CloudWatchエージェントの起動で作成したJsonのlog_stream_name
の値と同じログストリームが表示されているのでリンクをクリックしてください。
ログ一覧にLinuxコマンドで書き込んだ文字列が表示されていることを確認してください。
続いて、EC2インスタンスのメトリクスの確認をします。
左メニューすべてのメトリクス
を選択し、プルダウンはTokyo
、検索窓にEC2
と入力し、エンターキーを押してください。
表示されているEC2 > インスタンス別メトリクス
を選択してください。
インスタンス名
毎のEC2メトリクスの情報がこの一覧から閲覧できます。
インスタンス名
が自分のインスタンス、メトリクス名
がCPUUtilization
である行をチェックしてください。
EC2インスタンスのCPU利用率が上部グラフに表示されました。
EC2インスタンスの停止
注意
今回作成したEC2インスタンスは次回以降のハンズオンで使用する予定です。
そのため、EC2インスタンスの「終了」ではなく、「停止」をしています。
もし、今後インスタンスを使用する予定がなければ、インスタンスの「終了」をしてください。
EC2インスタンスは起動している間料金が掛かります。そのため、使用しないときはインスタンスを停止します。
正確に言うと起動時間に対する料金のほか、EC2についているストレージ(EBS)に対する料金、付与されているパブリックIPに対する料金、外部通信に対する料金などがかかります。
EC2インスタンスの一覧画面に遷移してください。
自分のインスタンスをチェックし、インスタンスの状態
、インスタンスの停止
を選択してください。
確認画面が出ます。
停止
ボタンをクリックしてください。
以上の操作でインスタンスが停止されます。
参考
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/what-is-systems-manager.html
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/documents.html
https://aws.amazon.com/jp/cloudwatch/features/
https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html