AWS再入門ブログリレー AWS Chatbot編

『AWS 再入門ブログリレー 2020』の 13 日目の『AWS Chatbot』編です。Cloud Watchの通知連携とaws cliを使用してEC2の情報チェックをテストしています。
2020.08.20

こんにちは、たぬき( @tanuki_tzp )です。
当エントリは弊社コンサルティング部による『AWS 再入門ブログリレー 2020』の 13 日目のエントリです。

このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。
AWS をこれから学ぼう!という方にとっては文字通りの入門記事として、またすでに AWS を活用されている方にとっても AWS サービスの再発見や 2020 年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。
では、さっそくいってみましょう。 13 日目のテーマは『AWS Chatbot』です。

AWS Chatbotとは

概要

今年の4月に一般公開された比較的新しいサービスです。
Developers.IO でも一般公開時に記事を書いています。
ついに来た! AWS Chatbot が一般公開(GA)になりました! Slack連携が捗ります

機能の概要としては、以下となります。
- AWS からのイベント通知を Slack, Amazon Chime に送る設定が簡単にできる
- Slack から AWS のほぼ全サービスに向けて aws cli コマンドを実行することができる
※まだ、Chatbot の公式アイコンはリリースされていません。どのようなアイコンになるのか楽しみです。

料金

また、Chatbot の使用料金は現在、完全無料となっています。
ただし、SNS や CloudWatch 等の他サービスの使用料金は通常通り課金されますのでご注意ください。

※ Amazon Chimeとは

オンラインミーティング用のサービスで、チャット機能があります。
Amazon Chime のチャットルームに Chatbot を招待することでイベント通知をすることができます。
Amazon Chime は現在、2020/9/30まで Pro 機能を無償で利用することができますので、是非 Chatbot と共に試してみてください。

また、以下の記事では、Amazon Chime を使用したオンラインミーティングの様子を YouTube で公開しています。
オンラインミーティングでAmazon Chimeを選択肢に入れてみませんか?

使ってみる

1. Slack に CloudWatchアラームを送る

今回は、EC2インスタンスのCPU使用率のアラートが出た想定で検証しています。

用意するもの

  • 検証用のSlack
  • テスト通知用のEC2インスタンス (※Cloud Watchでテスト通知ができるものなら何でもいいです)

SNSトピックを作成する

CloudWatch から Chatbot へ通知を送るためには、間に SNS が必要です。
なので、SNSトピックから作成します。

Amazon SNS に移動し、トピックの作成を押します。

今回はテスト用なので名前と表示名のみ付けてトピックの作成します。

ChatbotにSlackチャンネルを設定する

Chatbot に紐付ける SNSトピックを作成したので、次はChatbotの設定をします。

現在選べるのは、Slack と Amazon Chime の2種類です。今回は Slack を選択します。

Slackにログインしていれば、Slackとの連携画面に遷移します。紐付けたい Slack のワークスペースにログインして行ってください。
無事承認が済むと、Chatbotにワークスペースが表示されます。次にチャンネルを設定していきます。

チャンネルでは、設定名、通知を投稿したいチャンネル、アクセス許可、通知を設定していきます。
今回は、Cloud Watch から通知を受け取り、Slackのチャンネルに投稿するため、アクセス許可は"通知のアクセス許可"、SNSトピックは先ほど作成したトピックを設定しています。

デフォルトで Cloud Watch へのアクセス許可設定が設定されていますが、Lambda へのアクセス許可やサービスへのReadOnlyを設定できるテンプレートがあります。

Slack チャンネルにアプリをインストールする

Slack への通知手順が整ったように見えますが、Slack側にAWSのbotを招待する必要があります。

※"表示する"は"追加する"に読み替えてください。スクショを撮り忘れてしまいました、すみません……。

アラートを出してテスト通知を行う

準備が整ったので、テストアラートを出すEC2インスタンスにテスト閾値を設定します。

通知先の SNSトピックは今回作成したものを指定し、閾値がNGになるように設定してください。
今回は CPU使用率が10%以下になったら NG になるように設定しています。

アラートが発生して少し経つと、Slack にグラフ付きのアラート通知が投稿されます。

2. Slack から EC2 の状態を確認する

"1. Slack に SNS から通知を送る" の続きから、aws cliを使用してEC2の状態を確認します。

用意するもの

  • 検証用のSlack
  • テスト用のEC2インスタンス (※手順内でRead権限を付与したがあるサービスなら何でもいいです)

IAM ロールを修正する

"1. Slack に SNS から通知を送る" で作成した IAM ロールのポリシーを修正します。
Slack から EC2 の状態を取得するために、
- ReadOnlyAccess - AWS-Chatbot-ReadonlyCommands-Policy-xxxx をアタッチします。

"AWS-Chatbot-ReadonlyCommands-Policy-xxxx" は IAM や STS など重要なサービスへのアクセス制御ポリシーとなっていますので、サービスを絞っていない場合、必ずReadOnlyと一緒にアタッチしてください。
"AWS-Chatbot-ReadonlyCommands-Policy-xxxx"のポリシーの内容は以下です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "iam:*",
                "s3:GetBucketPolicy",
                "ssm:*",
                "sts:*",
                "kms:*",
                "cognito-idp:GetSigningCertificate",
                "ec2:GetPasswordData",
                "ecr:GetAuthorizationToken",
                "gamelift:RequestUploadCredentials",
                "gamelift:GetInstanceAccess",
                "lightsail:DownloadDefaultKeyPair",
                "lightsail:GetInstanceAccessDetails",
                "lightsail:GetKeyPair",
                "lightsail:GetKeyPairs",
                "redshift:GetClusterCredentials",
                "storagegateway:DescribeChapCredentials"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

Slack から aws cli コマンドを実行する

IAM の修正が終わったら、Slack からaws cliコマンドを実行します。
"@aws" 宛にコマンドを送信するだけです。

# AWS Chatbotコマンドの構文
@aws service command --options
# help
@aws help

# 東京リージョンのステータスがrunningのEC2インスタンスを表示させる
@aws ec2 describe-instances --region ap-northeast-1 --filters "Name=instance-state-name,Values=running"


念のため、対象になるEC2が存在していないus-east-1に対してもコマンドを打ってみましたが、ちゃんと対象無しで返ってきました。
以上で、検証終了となります。

おわりに

いかがでしたでしょうか?
AWS Chatbotはまだまだ新しいサービスですので、今後連携するサービスが増えたり機能が追加されたりすると思っています。
是非一度この手軽さを体感していただきたいです。

以上、『AWS 再入門ブログリレー 2020』の 13 日目のエントリ『AWS Chatbot』編でした。(ぎりぎり今日に間に合って良かったです)
明日 (8/21) もたぬきの「Amazon Translate」の予定です。お楽しみに!!