Typetalk ニュースレターを登録

Typetalk の最新情報、使い方や事例紹介などを毎月配信します。

ニュースレターの登録が完了しました。
ご登録ありがとうございます。

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

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

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

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

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

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

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

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

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

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

1. Lambda 関数を作成

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

関数その1

Typetalkボット デプロイ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

Typetalkボット デプロイ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」につなげてください。

Typetalkボット デプロイ

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

Typetalkボット デプロイ

 

3. SNSのトピックを設定

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

Typetalkボット デプロイ

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

Typetalkボット デプロイ

 

4. Typetalkボットを作成

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

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

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

 

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

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

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

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

Typetalkボット デプロイ

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

Typetalkボット デプロイ

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

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

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

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

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