こんにちは、ラーニングエクスペリエンス課の小倉です。
先日、AWS Japan が行っている表彰で 2023 Japan AWS Top Engineer に選出されました。ありがとうございます!これからもよろしくお願いいたします。
サーバーワークスでは、自由に勉強会を開催してスキルアップをしています。その中で私は毎週月曜日の朝、「30分AWSハンズオン」という30分でできるAWSハンズオンを2021年9月から継続して開催しています。その内容をブログで定期的に紹介していきます。AWSをご利用のみなさまのスキルアップにお役立ていただければと考えています。
3回目は、「CloudWatchアラームを設定してみよう」をやります。
ハンズオンの内容は、EC2を作成し、CloudWatch アラームの設定をします。アラームの設定内容はCPU使用率が50%を超えたらメールで通知するようにします。今回のハンズオンではCPU使用率としていますが、監視したいリソースのしきい値を設定することで、正常時とは異なる挙動を検知することができます。
使用するAWSサービス
Amazon CloudWatch
CloudWatchは、モニタリングに関する機能を提供するサービスです。メトリクス(いつ、何が、どういう状態だったのかを表す情報)を定期的に収集し、過去のデータをグラフとして確認することができます。CloudWatchは、機能がたくさんあるのですが、今回のハンズオンでは、メトリクスのしきい値を超えたらアクションを実行することができるアラームを使用します。
参考サイト: [AWS Black Belt Online Seminar]Amazon CloudWatch
Amazon SNS
SNSは、フルマネージドの Pub/Sub メッセージングサービスです。パブリッシャーは、サブスクライバと SNS Topic を介して非同期に通信します。クライアントは Lambda 、 SQS、 Email などサポートされているエンドポイントを使用して SNS トピックにサブスクライブし、パブリッシャーが公開したメッセージを受信することができます。
参考サイト: [AWS Black Belt Online Seminar]Amazon Simple Notification Service (SNS)
Amazon EC2
AWS上に仮想サーバーを提供するためのサービスです。インスタンスという単位で仮想サーバーが管理され、マネジメントコンソールから数クリックで、VPCのサブネット内にすぐに作成することができます。
参考サイト: [AWS Black Belt Online Seminar]Amazon EC2
構成図
今回の構成図です。
EC2のCPU使用率が50%になったらメールで通知をするようにします。EC2のCPU使用率はCloudWatchがデフォルトで取得していますので、設定は不要です。CloudWatchアラームの設定でCPU使用率が50%以上になったら、SNSにメッセージを送り、SNSから担当者へメール送信を行います。
ハンズオン手順
1. EC2を作成します
AWSマネジメントコンソールにログインし、画面上の検索窓で「EC2」と入力し、サービスの下に表示された [EC2] をクリックしEC2のコンソール画面を開きます。また今回のハンズオンは東京リージョンで実施しますので、右上のリージョンが東京になっていない場合は東京に変更しておきましょう。
ナビゲーションペイン(左メニュー)の [インスタンス] をクリックしてインスタンス一覧の画面を表示した後、右上の [インスタンスの作成] をクリックします。
インスタンスを起動の画面が表示されますので、どのようなEC2をつくるのかを設定していきます。
名前とタグでインスタンスの名前をつけます。今回は yyyymmdd-handson-ec2 としておきます(yyyymmdd は年月日で、例えば2023年1月24日なら 20230124 となります)。
画面を下にスクロールして、アプリケーションおよび OS イメージ (Amazon マシンイメージ) で、[Amazon Linux] をクリックします。
ここで起動するOSを選択できます。Amazon Linux の最新バージョンは Amazon Linux 2023 なのですが、今回は Amazon Linux 2 に変更します。
画面を下にスクロールして、インスタンスタイプは、t2.micro のままにしておきます。
ここではインスタンスのスペックを指定しています。スペックが低いと価格が安く、スペックが高いと価格も高くなります。インスタンスタイプの中に料金が書かれていますので、間違えて料金の高いインスタンスを作ってしまうと高額請求がきてしまうかもしれませんので、注意しましょう。
画面を下にスクロールして、Key pair (login) でキーペアの指定をします。キーペアの作成手順を記載しますが、すでにキーペアを作成したことのあるかたは、キーペア名をクリックして選択することで、作成済みのキーペアを使用することができます。
[Create new key pair] をクリックしてキーペアを作成します。
キーペアを作成の画面が表示されるので、キーペア名を入力して、[キーペアの作成] をクリックします。クリックすると秘密鍵(<キーペア名>.pem)がダウンロードされます。この秘密鍵はインスタンスにログインするときに使いますので、漏洩しないよう厳重に保管しておきましょう。
作成されたキーペアが選択されていることを確認します。
画面を下にスクロールして、ネットワーク設定の横にある [編集] をクリックします。
ネットワーク設定が編集できようになったら、まず VPC をデフォルトVPCにします。VPCの右に (デフォルト) と記載されていたらOKです。サブネットとパブリックIPの自動割り当ては変更せずそのままにしておきます。
次にセキュリティグループの設定をします。セキュリティグループは仮想ファイアウォールです。ルールに合致する通信のみ許可することができます。
セキュリティグループを作成するを選択し、セキュリティグループ名と説明を入力します(例: yyyymmdd-handson-ec2-sg)。インバウンドセキュリティグループのルールでソースタイプを 自分のIP に変更します。
インバウンドは外からインスタンスへの通信を表しています。自分のIPはみなさんのパソコンがインターネットに接続するときに使っているグローバルIPアドレスを設定しています。ですから、このルールではみなさんのパソコンからインスタンスへSSH通信を許可する設定をしています。
画面を下にスクロールして、ストレージを設定 は変更せずにそのままにしておきます。
ここまで入力できたら画面右か下にある [インスタンスを起動] をクリックします。
クリックするとインスタンスの作成がはじまり、5分程度で利用可能になります。
以下の画面が表示されるので、 [すべてのインスタンスを表示] をクリックし、インスタンス一覧の画面を表示します。
作成したインスタンスのステータスチェックが、2/2のチェックに合格しました と表示されれば起動完了です。作成したEC2インスタンスにチェックを入れ、インスタンスIDとパブリックIPアドレスをコピーして控えておきましょう。
これでEC2の作成が完了しました。
2. CloudWatchアラームを設定します
画面上の検索窓で「CloudWatch」と入力し、サービスの下に表示された [CloudWatch] をクリックし CloudWatch のコンソール画面を開きます。
ナビゲーションペイン(左メニュー)の [すべてのアラーム] をクリックしてアラーム一覧の画面を表示した後、右上の [アラームの作成] をクリックします。
アラームの作成画面が表示されますので、アラームの設定をしていきます。
[メトリクスの選択] をクリックします。ここでアラームのしきい値を設定するメトリクスを選びます。
メトリクスの検索窓に インスタンスID を入力してEnterを押し、[EC2 > インスタンス別メトリクス] をクリックします。
メトリクス名が CPUUtilization にチェックを入れ、右下の [メトリクスの選択] をクリックします。
メトリクスと条件の指定の画面で、メトリクスはCPUUtilizationが選択されていますので、変更せずに下にスクロールします。
条件の設定で、…よりもに 50 と入力して、右下の [次へ] をクリックします。
条件をすべて確認すると CPUUtilization が50% よりも大きい場合となります。
通知の設定で、新規で通知先を設定する場合は 新しいトピックの作成 を選択し、トピック名と通知先のEメールアドレスを入力し、[トピックの作成] をクリックします。トピック名は yyyymmdd-handson-sns としておきます(yyyymmdd は年月日で、例えば2023年5月2日なら 20230502 となります)。ここでSNSの設定も一緒にできます。
すでにトピックを作成済みの場合は、既存のSNSトピックを選択 を選択し、作成済みのトピックを選択します。
下にスクロールして、右下の [次へ] をクリックします。
名前と説明を追加 の画面で、アラーム名を入力し、[次へ] をクリックします。
アラーム名は yyyymmdd-handson-alarm としておきます(yyyymmdd は年月日で、例えば2023年5月2日なら 20230502 となります)。
プレビューと作成 の画面で、設定内容を確認して、右下の [アラームの作成] をクリックします。
SNSで新しく通知先を設定したときは以下の手順を実施しないと通知を受け取ることができませんので、必ず実施しましょう。
SNSで通知先に設定したメールアドレスあてに以下のメールが届いています。メール本文の Confirm subscription をクリックします。
リンクをクリックした後に以下のWebページが表示されればOKです。
これでCloudWatchアラームの作成は終わりです。
3. CloudWatchアラームを検知させる
今回、CPU使用率が50%を超えたらメールを送信するという設定を行いました。この設定が意図した動作をするかどうかを確認します。
まず、EC2にSSHでログインします。MacとWindowsの場合を記載しましたので、お使いのOSの手順を実施してください。
SSHログイン(Macの場合)
ターミナルを起動して、以下のコマンドを実行します。
・秘密鍵の権限を変更します
$ chmod 400 <秘密鍵のパス>
例: chmod 400 /home/ec2-user/for-handson.pem
・SSHでログインします
$ ssh -i <秘密鍵のパス> ec2-user@<パブリックIPアドレス>
The authenticity of host '3.115.13.229 (3.115.13.229)' can't be established.
ECDSA key fingerprint is SHA256:MlWSp3HexBGw7pPzZUa9tifYxD3u0/NNZ3KCXFh4Qj8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
※パブリックIPアドレスは、EC2作成時に控えたIPアドレスです。
※コマンド実行後、yesと入力してEnterを押すとログインできます。このメッセージは初めてログインする時だけ出力されます。
SSHログイン(Windowsの場合)
接続方法はいろいろありますが、今回はTeraTermを使用して接続します。TeraTermはWindowsにインストールして使用します。インストール方法は省略しますが、ダウンロードサイトからteraterm-x.xxx.exe (x.xxxはバージョンで、本記事執筆時の最新は4.106) ファイルをダウンロードし、exeファイルを実行すればインストールできます。
TeraTermを起動して、ホストにパブリックIPアドレスを入力し、[OK] をクリックします。
以下の画面が表示されるので、[続行] をクリックします。この画面は初めてログインする時だけ表示されます。
SSH認証の画面で、ユーザ名に ec2-user 、認証方式に RSA/DSA/ECDSA/ED25519鍵を使う にチェックを入れ、秘密鍵を指定します。右にある … をクリックすると秘密鍵を保管してある場所を探して指定できます。[OK] をクリックするとログインできます。
EC2に負荷をかける
ログインしたあとに以下のコマンドを実行し、EC2に負荷をかけ、CPU使用率を上昇させます。
$ yes > /dev/null
※yes コマンドは引数になにも指定しなければ y をずっと出力するコマンドです。ずっと出力されている y を /dev/null (疑似デバイスの一種で受け取った入力をなにもせず破棄) に送るということをしてEC2インスタンスに負荷をかけています。
CloudWatchのコンソールのナビゲーションペイン(左メニュー)の [すべてのアラーム] をクリックしてアラーム一覧の画面を表示した後、さきほど作成した yyyymmdd-handson-alarm をクリックします。
5~10分経過したら、EC2インスタンスのCPU使用率が50%を超え、アラーム状態となります。
アラーム状態になったときにSNSからアラートメールがSNSから送信されています。以下のメールを受信していることを確認しましょう。
これでアラームの検知は終わりです。
yes コマンドの停止は、Ctrl キー + C を押すと停止します。
4. 後片付け
AWSのリソースは従量課金のため、作ったまま放置しておくとお金がかかってしまいます。そのため、ハンズオンが終わったら不要なリソースは削除しておきましょう。
今回のハンズオンで料金が発生するのはEC2インスタンスだけですが、不要な設定は削除して整理しておきましょう。
EC2インスタンスを削除します。
EC2のコンソール画面を開き、ナビゲーションペイン(左メニュー)の [インスタンス] をクリックしてインスタンス一覧を開きます。今回作成したインスタンスにチェックを入れ、右上の [インスタンスの状態] - [インスタンスの終了] をクリックします。
確認の画面が表示されるので、 [終了] をクリックします。
インスタンスの削除が始まり、数分経つとインスタンスの状態が終了済みに変わり、削除が完了します。
セキュリティグループを削除します。セキュリティグループは無料で使用できるので、削除しなくても影響はありません。ただ、不要な設定を残し続けると、後々使いにくくなりますので、削除しておきましょう。
EC2のコンソール画面で、ナビゲーションペイン(左メニュー)を下にスクロールして、[セキュリティグループ] をクリックします。セキュリティグループ一覧の画面から削除するセキュリティグループにチェックを入れ、上の [アクション] - [セキュリティグループを削除] をクリックします。
確認画面が表示されるので、 [削除] をクリックします。
削除が完了しました。
次は、CloudWatchアラームを削除します。
CloudWatchのコンソール画面を開き、ナビゲーションペイン(左メニュー)の [すべてのアラーム] をクリックしてアラーム一覧を開きます。今回作成したアラーム(yyyymmdd-handson-alarm)にチェックを入れ、右上の [アクション] - [削除] をクリックします。
確認画面が表示されるので、 [削除] をクリックします。
これでCloudWatchアラームの削除が完了しました。
最後にSNSを削除します。
SNSのコンソール画面を開き、ナビゲーションペイン(左メニュー)の [トピック] をクリックしてトピック一覧を開きます。今回作成したトピック(yyyymmdd-handson-sns)をクリックします。
画面下のサブスクリプションで設定したメールアドレスを選択して [削除] をクリックします。
確認画面が表示されるので、 [削除] をクリックします。
サブスクリプションを削除したので、次にトピックの削除をします。
画面右上の [削除] をクリックします。
確認画面が表示されるので、 テキスト入力フィールドに これを削除 と入力して、[削除] をクリックします。
これで今回のハンズオンは以上となります。
まとめ
今回はCloudWatchアラームの設定を行いました。AWSのサービスを組み合わせることで、正常時とは異なる挙動を簡単に検知できることを確認しました。検知の方法はCloudWatchを使わなければいけないわけではなく、他社製品の監視ツールを使うなどいろいろな方法があります。検知を実装するときの選択肢のひとつとして覚えておいてもらえればと考えています。
参考資料
小倉 大(記事一覧)
アプリケーションサービス部エデュケーショナルサービス課 札幌在住
AWSトレーニングの講師をしています。
最近は7歳の息子と遊ぶのが楽しいです!
Twitter: @MasaruOgura