Typetalk(タイプトーク)

アプリをデプロイするためのTypetalkボットの作り方

Typetalkボット デプロイ

仕様や画面は現行バージョンと異なる可能性があります。
Typetalkの最新版についてはこちらからご確認ください。

アプリをデプロイする際に、考慮すべきことはたくさんあります。Typetalkボットを使って、デプロイ作業をシンプルに、もっとわかりやすくしてみませんか?

このチュートリアルではTypetalkボットにメンションを送ることで、チームメンバーへデプロイを知らせると同時にデプロイを実行させる方法をご紹介します。

アプリをデプロイするためのTypetalkボットの作り方

このチュートリアルでは以下のWebサービスを使用します。

構成はこちらを想定しています。

Typetalkのデプロイボットの構成図

以下の手順で進めていきます。

  1. Lambda 関数を作成
  2. API Gateway を設定
  3. SNS のトピックを設定
  4. Typetalk ボットを作成
  5. アプリケーションをデプロイ

1. Lambda 関数を作成

はじめにAWS Lambdaで2つの関数を作成します

関数その1

AWS Lambdaに作成した関数その1

この関数はAPI Gatewayから受け取ったリクエストをパースし、CodeDeployで設定されたアプリケーションのデプロイを実行します。

var AWS = require('aws-sdk');
var codedeploy = new AWS.CodeDeploy({ region: process.env.YOUR_CODEDEPLOY_REGION });

exports.handler = function(event, context, callback) {
  var params = {
    applicationName: process.env.YOUR_CODEDEPLOY_APPLICATION_NAME,
    deploymentGroupName: process.env.YOUR_CODEDEPLOY_DEPLOYMENT_GROUP_NAME,
    revision: {
      revisionType: "S3",
      s3Location: {
        bucket: process.env.YOUR_BUCKET,
        bundleType: process.env.YOUR_BUNDLE_TYPE,
        eTag: process.env.YOUR_BUCKET_ETAG,
        key: process.env.YOUR_BUCKET_KEY,
        version: process.env.YOUR_BUCKET_VERSION
      }
    }
  };

  codedeploy.createDeployment(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else console.log(data);                 // successful response
  });

  var body = JSON.parse(event.body);
  var id = body.post.id;

  var responseBody = {
    "message": "Deployment has been started...",
    "replyTo": id
  };
 
  var response = {
    "statusCode": 200,
    "headers": {},
    "body": JSON.stringify(responseBody),
    "isBase64Encoded": false
  }

  callback(null, response);
}

関数その2

AWS Lambdaに作成した関数その2

この関数はTypetalkへメッセージを投稿します。

var exec = require('child_process').exec;

exports.handler = (event, context, callback) => {
  var url = "'https://typetalk.com/api/v1/topics/" + process.env.YOUR_TOPIC_ID + "?typetalkToken=" + process.env.YOUR_TYPETALK_TOKEN + "'";
  var cmd = "curl --data-urlencode 'message=Deployment has been finished!' " + url;
  exec(cmd, function(err, stdout, stderr){
    console.log(stdout);
  });

  callback(null, 'Message has been posted');
};

2. API Gateway を設定

次に、TypetalkからのWebhookを受け取るAPI Gatewayを作成します。メソッドにはPOSTを使用し、手順1で作成したLambda関数の「その1」につなげてください。

作成したAPI Gatewayをデプロイした後に「Invoke URL」に記載されたURLを控えておきましょう。TypetalkのWebhookを設定するときに使います。

 

3. SNSのトピックを設定

SNSトピックを作成し、CodeDeployアプリケーションと手順1で作成したLambda関数「その2」を接続します。

SNSトピックを作成したらCodeDeployアプリケーションと接続します。

 

4. Typetalkボットを作成

次に、Typetalk上でボットを作成します。このデプロイ用のボットはメッセージの投稿とWebhookの送信を行います。そのため、APIスコープの「topic.post」と「Use Webhook」にチェックを入れます。

さらに、Webhookの送信先URLを設定します。 送信先URLには手順2で作成したAPI Gateway のエンドポイントのURLを指定します。

Typetalkでデプロイボットを作成する手順

 

5. アプリケーションをデプロイ

デプロイの準備ができました。デプロイ用のボットにメンションを送って、デプロイを実行させましょう。メンションを送るとボットが返信してくれます。

Typetalkデプロイボットがデプロイを通知する様子

ボットはメンションに返信するとともにデプロイを実行します。

デプロイの完了後、ボットは再びメッセージを投稿します。

トピックにいるメンバーはボットからのメッセージでデプロイの状況を知ることができます。

Typetalkデプロイボットがデプロイを通知する様子

デプロイ時の管理画面を操作しながら自分でチームメンバーにデプロイ状況を伝える、という複数の手順を、Typetalkボットのメンションを送るというひとつの手順にまとめましょう。

TypetalkのWebhook機能を用いて外部API利用をすることで、デプロイ作業をよりシンプルに効率化できます。ぜひチームメンバーと他の用途にも応用してみてください。

Typetalkボットの活用事例はこちら