Slide 1

Slide 1 text

Slackからデプロイ Hiroto Fukui @bary822

Slide 2

Slide 2 text

self self.name => Hiroto Fukui self.sns => @bary822 self.titles => [‘app engineer’, ‘data engineer’] self.companies => [‘rakuten’, ‘grooves’] self.likes => [‘dog’, ‘camping’,’SUP‘, ruby’]

Slide 3

Slide 3 text

Osaka Tokyo

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Slackからデプロイしたい

Slide 6

Slide 6 text

?

Slide 7

Slide 7 text

前提 - サービスの静的サイト - Ruby製 - https://www.crowd-agent.com/agent/ - コードはGitHub - S3でホスティング - bundle exec middleman s3_sync -e=production でデプロイ

Slide 8

Slide 8 text

? S3

Slide 9

Slide 9 text

1. /deploy production する 2. 任意のURLにPOSTリクエストを発行 3. レスポンスに応じてメッセージを表示

Slide 10

Slide 10 text

? S3

Slide 11

Slide 11 text

AWS Lambda FaaS(Function as a Service) 1. Lambda関数がリクエストを受け付ける 2. GitHubからコードをダウンロード 3. コマンド実行 4. S3 APIを呼び出してsync(デプロイ)

Slide 12

Slide 12 text

? S3

Slide 13

Slide 13 text

API Gateway Lambda S3

Slide 14

Slide 14 text

API Gateway Lambda S3

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

API Gateway Lambda CircleCI S3

Slide 17

Slide 17 text

API Gateway Lambda CircleCI S3

Slide 18

Slide 18 text

3秒ルール - Slashコマンドは3秒以内に何らかのメッセージを返す必要がある - それを超えるとエラーメッセージが表示される リクエストを受け取ると とりあえず何かを返すのが吉

Slide 19

Slide 19 text

API Gateway Lambda 1st CircleCI Lambda 2nd S3

Slide 20

Slide 20 text

リクエストがLambdaに届いた時にとりあえず返す CircleCI APIから200が返ってきた時に返す

Slide 21

Slide 21 text

よくあるかもしれない質問

Slide 22

Slide 22 text

Slashコマンドが呼ぶAPIの認証方法 - Slashコマンド毎にユニークなトークンがヘッダーに入ってPOSTされる - API Gatewayでそれを検証

Slide 23

Slide 23 text

Lambdaの無料枠内で収まるのでは - 多分収まる - デプロイするのは開発者ではない - マーケティングの人 - デプロイ回数をコントロールできない前提があった

Slide 24

Slide 24 text

CIに入れるとpushする度にデプロイされるのでは - DEPLOY という環境変数を見るようにした - Lambdaから呼び出す時のみ DEPLOY=true を設定 - CircleCI APIではジョブ実行時の環境変数をパラメーターに指定できる