LoginSignup
0
1

More than 5 years have passed since last update.

[ChatOps]Slackを利用して、ChatOps on Alibaba Cloudをやってみました !

Posted at

はじめに

本投稿は SBCloud Engineers' Blog にも投稿しています。SBCloud Engineers' Blogには日中間接続をはじめ、Alibaba Cloud関連のソリューションや技術ネタを記載していますので、よかったら是非一度アクセスみてください。

ChatOpsでECSインスタンスの起動や停止をすこし楽にしたいので、SlackからSlash CommandsでECSインスタンスを操作できるようにしてみました。

アーキテクチャとフロー

image.png

利用する主なサービス

利用フロー

  1. ユーザーは指定されたSlackとSlackのチャンネルにて、/ecs start <instance-id> のようなSlash Commandを実行します。

  2. Slackはユーザーが発行したSlash Commandを指定されたURL(FCのHTTPトリガー)に送信します。

  3. Front FCがSlackから送信された情報を受け取り、正当性確認を行います。確認した後、Slash Commandの情報を設定し、Execution FCを起動します。

  4. Execution FCはFront FCから渡された情報を元に、指定されたECSインスタンスに対して操作し、その操作結果をSlackに送信します。

デモ

YouTubeの動画 ChatOps on Alibaba Cloud (1分18秒)にて、ご確認ください。

アーキテクチャの解説

細かい設定作業は割愛しますが、重要なところだけ説明させていただきます。

Slack

  • Slash CommandsのTimeout時間は3000ms
    一連の処理(特にFCの実行)が少し時間がかかりますので、Slash CommandsがTimeoutしないように、Front FC で一旦Slackからの情報を受け取り、Slackに返信すると同時に、受け取った情報をExecution FC に渡すようにしています。これが2つのFCを利用している理由です。

  • Slackから送信される情報
    以下のような情報がSlackからFCに送られます。

    1. textの内容にspaceが入っている場合,space+ に置き換えられます
    2. response_urlはエンコードされますので、FCでデコードする必要があります
token=3mVXdAC5EFNbsXYGNk0sah3M
team_id=T0001
team_domain=example
channel_id=C2147483705
channel_name=test
user_id=U2147483697
user_name=Steve
command=/weather
text=94070
response_url=https://hooks.slack.com/commands/1234/5678

Function Compute

FCには HTTPトリガー という便利な機能があります。
HTTPトリガーを利用して、発行されたhttpsのURLにリクエストを送れば、FCが起動します。

Slackのタイムアウト時間は3sですので、今回下記2つのFunction Computeを作成しました。

  • Front FC
    • 主な役割としては、Slackからの情報の確認とECSインスタンスを操作するExecution FCの起動です。
    • HTTPトリガーを設定しています。
    • 非同期方式(Async)でExecution FCを呼び出します。
  • Execution FC
    • Front FCにてチェックされたコマンド情報を受け取り、ECSインスタンスを操作してから、その操作結果をSlackの特定のチャンネルに返します。

ソースコードについて

FCのソースコードはGitHubのレポジトリ chatops_on_alibaba_cloud においてあります。あくまでもサンプルコードで、実運用の際にはエラー処理とかも必要ですので、ご注意ください。

  • Front FC

    • ソースコードは front_fc.py になります。
    • 下記Front FCの変数に必要な情報を設定して、FC Functionに渡しています。
      • FUNCTION_COMPUTE_ENDPOINT
        Execution FCを呼び出す際に利用します。Function Computeの管理画面に記載されていて、Internet Endpoint / Intranet Endpoint があります。Intranet Endpointの利用を推奨します。
      • INVOKE_FC
        Execution FCの名前になります。
      • SLACK_CHANNEL
        文字列形式で、正当性確認用の情報で、指定されたSlack ChannelからのみSlash Commandのみ対応します。
      • SLACK_TOKEN
        文字列形式で、正当性確認用の情報で、指定されたSlackからのみSlash Commandのみ対応します。
      • ECS_CMD_CODE
        配列形式で、正当性確認用の情報で、指定されたSlash Commandのみ対応します。
  • Execution FC

    • ソースコードは execution_fc.py になります。
    • 下記、認証情報を変数に設定して、FCに渡しています。
      • ACCESS_KEY_ID
      • ACCESS_KEY_SECRET

RAM

FCはAlibaba Cloudのリソースを操作する権限が必要ですので、FCを作成する際に、予めその権限をFCに付与します。

今回はRoleとAccessKeyを利用します。

  • RAM Role

    • プロダクト単位で設定します。
    • FCが実行される際には、設定されたRAM Roleから一時的な認証情報を取得して利用しています。
  • AccessKey

    • Execution FCが利用するものです。
      元々設定されているRAM Roleからの一時的は認証情報を利用したかったですが、一時的な認証情報を利用したECS clientの作成方法がわからなかったので、一旦AccessKey利用の方式にしました。ちなみに利用しているPythonSDK は aliyun-python-sdk-coreです。

その他

FCを開発する際には、fclifun というツールもありますので、ご興味ある方は是非一度触ってみてください。

最後

今回はAlibaba CLoud上でのChatOpsについて簡単にご紹介させていただきました。ご覧の通り、多少コーディングと利用ルールの整備が必要ですが、SlackとFCを利用すればAlibaba CloudのChatOpsも簡単にできてしまいます。皆さんの開発に少し役に立てると幸いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1