Open13

AWS Chatbotで遊ぶ

ピン留めされたアイテム
inomotoinomoto

slack -> AWS

aws apiが割と使えるようなので、スニペットさえ用意すれば色々捗るんじゃないだろうか。ちょっとわからんが。
ここのユースケースは深堀りしていない。

AWS -> slack

純粋にAWSサービスにより発生した事象の通知には使えそうな気がする。cloudwatchのalertとかcodeシリーズの失敗とか。
ただそれ以外に使うようなカスタマイズは不可のよう。想定されないイベントは単に無視されるもよう。

通常の通知に使う場合、SNSトピックにメールなど別のルートを仕込んでおかないと通知自体がエラーしたときに気付けないと思われるので、多少うるさくてもそこは必須か。

inomotoinomoto

通知とかに使えるか?使えるならどんな感じか?

inomotoinomoto

chatbotのページから新規クライアントとしてslackを選び進むと、slack側の連携画面に進み、設定済クライアントが追加される。
追加されたらchannel設定を追加する。これをしないと何もできないようだ。
(channel入れない状態で@awsにメンションしたりしたが、何も起きなかった)

channel設定の追加にはSNSのトピックが必要。スタンダードで適当に生やす。
トピックを指定しつつchannel設定を作ると、トピック側のサブスクリプションが生えてくる。

inomotoinomoto

channel(chatbot側の設定)を作ったら、slack側のchannelに@awsを招待しておく。
そしてchatbot画面からテストメッセージを飛ばすと、なんか飛んでくる。

inomotoinomoto

ちなみにSNSトピック側に適当なメッセージを送っても何も起こらない。chatbotが発火するのは特定のサービスからのイベントだけのようだ。
https://aws.amazon.com/jp/chatbot/faqs/

Q: AWS Chatbot を使用して任意の通知を受け取ることができますか?
いいえ、AWS Chatbot はドキュメントに記載されているサービスからの通知のみをサポートしています。> サポート対象外のソースからのイベントはチャットルームに配信されません。

とはいえEventBridgeが対応しているっぽいので、割と任意に近いものが送信できるのではないだろうか。

inomotoinomoto

EventBridgeでルールを生やす。

なんかしら疎通テストしたいのでまずは1分ごとのルールで作る。んでSNSトピックに投げるようにする。

はい。確認できたので止める。

inomotoinomoto

次はカスタムイベントを飛ばす。
lambdaのテスト発火用のイベントみたいにできたら良いのだけど、そういうのは無いのでlambdaを生やす。

適当に関数を作り、生成されたIAMロールに AmazonEventBridgeFullAccess を付与しておく。テストなので雑に。

inomotoinomoto

と思ったけどイベントバスに対して手動で発行できそうな感じがある。試す。

inomotoinomoto

ルールのイベントパターンに

{
  "source": ["test.event"]
}

とかいれて試したが、どうもchatbotはこれだと反応しないようだ。
ルールの宛先にcloudwatch eventsを追加した上でテストイベントを雑に投げたが、logsにはデータが来たがchatにはこなかった。

inomotoinomoto

試しにstep functionsから送信してみたけど同様だった。

inomotoinomoto

通知側ではなく、slack側からアクションを起こすのも試してみる。
設定したチャンネルにてhelpしてみる。

長いので全文をテキストで貼っておく

@cumet04 Hello! I am the AWS Chatbot.

I can run most read-only commands for you as defined by the AWS-Managed ReadOnlyAccess policy, invoke Lambda functions, and create Support cases.

You can use standard AWS CLI syntax:

@aws service operation --parameter-1 foo --parameter-2 bar

For example, you can type:

@aws cloudwatch describe-alarms --state-value ALARM

Or enter values one parameter at a time by first providing an operation. For example, if you type:

@aws support create-case

I will prompt you for subject, and then you type:

@aws subject Can't ssh to EC2 instance

and then I will prompt for the next value:

@aws communication-body I created an EC2 instance and can't ssh to it. Please help.

until all required parameters are fulfilled.

You can get help for a service or operation by including --help.

  • Service help:
@aws ec2 --help
  • Operation help:
@aws lambda invoke --help

To see a list of available AWS services, enter

@aws help services

To see a list of AWS accounts configured for this channel, enter

@aws set default-account

You can provide feedback to AWS Chatbot by using below syntax

@aws feedback <text>
inomotoinomoto

試しに @aws s3 ls としたがコマンドが解釈されなかった。awscliの記法というかapiコマンドが動くっぽい。

ちゃんと権限で怒られているということはAPI発行できたのであろう。

inomotoinomoto

ナマのコマンドを打てというのは実用上どうというか、覚えてなくない?とは思うが、適切に権限を設定した上でコマンドスニペットをslackのカスタムレスポンスにでも突っ込んでおけば便利かもしれない。