仕様や画面は現行バージョンと異なる可能性があります。
Typetalkの最新版についてはこちらからご確認ください。
アプリをデプロイする際に、考慮すべきことはたくさんあります。Typetalkボットを使って、デプロイ作業をシンプルに、もっとわかりやすくしてみませんか?
このチュートリアルではTypetalkボットにメンションを送ることで、チームメンバーへデプロイを知らせると同時にデプロイを実行させる方法をご紹介します。
アプリをデプロイするためのTypetalkボットの作り方
このチュートリアルでは以下のWebサービスを使用します。
- Typetalk
- Amazon API Gateway
- AWS Lambda
- Amazon S3
- AWS CodeDeploy
- Amazon Simple Notification Service(SNS)
構成はこちらを想定しています。
以下の手順で進めていきます。
- Lambda 関数を作成
- API Gateway を設定
- SNS のトピックを設定
- Typetalk ボットを作成
- アプリケーションをデプロイ
1. Lambda 関数を作成
はじめにAWS Lambdaで2つの関数を作成します
関数その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へメッセージを投稿します。
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を指定します。
5. アプリケーションをデプロイ
デプロイの準備ができました。デプロイ用のボットにメンションを送って、デプロイを実行させましょう。メンションを送るとボットが返信してくれます。
ボットはメンションに返信するとともにデプロイを実行します。
デプロイの完了後、ボットは再びメッセージを投稿します。
トピックにいるメンバーはボットからのメッセージでデプロイの状況を知ることができます。
デプロイ時の管理画面を操作しながら自分でチームメンバーにデプロイ状況を伝える、という複数の手順を、Typetalkボットのメンションを送るというひとつの手順にまとめましょう。
TypetalkのWebhook機能を用いて外部API利用をすることで、デプロイ作業をよりシンプルに効率化できます。ぜひチームメンバーと他の用途にも応用してみてください。