28
AWS re:Invent 2015に初参戦 気づいたらOSS二つ作ってた @mumoshu Yusuke KUOKA at CrowdWorks, Inc.

AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

  • Upload
    -

  • View
    6.149

  • Download
    1

Embed Size (px)

Citation preview

Page 1: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

AWS re:Invent 2015に初参戦 →気づいたらOSS二つ作ってた@mumoshu

Yusuke KUOKA at CrowdWorks, Inc.

Page 2: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

We’re hiring!https://www.wantedly.com/projects/34041

Page 3: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

TL;DR;

• クラウドソーシングサービスを運営している

• 株式会社クラウドワークスのエンジニアが、

• AWS最大級のイベントre:Invent 2015@ラスベガスに会社のお金で参加させていただいて感動、

• 気づいたら2つのOSSを作ってた

• サーバレスSlackボット「lambda_bot」

• サーバレス分散ロックサービス「Joumae」

Page 4: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

Fin.

Page 5: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

------ここから------ 延長戦

Page 6: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

アジェンダ

1. AWS re:Invent 2015のはなし

2. サーバレスSlackボットlambda_botのはなし

3. サーバレス分散ロックJoumaeのはなし

Page 7: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

AWS re:Invent 2015のはなし1 / 3

Page 8: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

re:Invent 2015こわくないよ

• 初参戦&クラウドワークスからぼっち参加

• 色々心配

• 旅行会社HISさんのre:Inventツアー利用

• 事前手続き・出国・滞在・帰国まで全てサポートしていただけるので初心者でも安心!

• まじおすすめ

Page 9: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

re:Invent 2015すごいよ

• 開発者向けカンファレンス(印象)

• 数百人参加してそうなよくばりセッション

• AWS中の人のDeep Dive(技術的な深い話)、ユーザによる事例紹介、AWS

利用するサービス・フレームワーク紹介、etc. なんでもある

• 10000人くらい参加してそうなキーノート

• 新サービス・新機能を大々的に発表→エンジニア盛り上がる

• ライブ会場ですか?

Page 10: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

re:Invent 2015体験記• 食料確保

• 広大な会場、人の波をかき分けながら右往左往

• セッション、ブースめぐり

• ネットワーキング

• 受講料無料のハンズオンラボでAWSコンソールいじりながら試験勉強

→現地で試験受けてSolution Architect Asociate認定取得→認定者限定パーティで交流

• 知り合いいなくてコミュ力なくても安心

• レポート「初めてのAWS re:Invent 2015参戦を写真で振り返る」

Page 11: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

アウトプット

• ブログ記事数本

• OSS

• lambda_bot

• Joumae

Page 12: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

lambda_bot のはなし2 / 3

Page 13: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

lambda_botとは

• AWS Lambdaを利用したサーバレスのSlackボット

• re:Invent 2015期間中にLambdaのScheduled

Eventという機能が発表されて「キタ━━━━(゚∀゚)━━━━!!」となってつくった

• …を簡単に実装するためのnpmモジュール

Page 14: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

LambdaのScheduled Event

• 分散cron的なものという認識

• 指定日時または周期でLambda FunctionをInvoke

• 他の選択肢

• EC2インスタンスにcrond立てる or Mesos上にChronos立てる or Unreliable

Town ClockというAWS SNSトピックにsubscribeさせる or etc.

→最終的にLambda Function実行

• あせ?せっかくLambdaでサーバレスにしようと持ったのにサーバいるやん

• →運用めんどい

Page 15: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

サーバレスがいい

• インフラ運用めんどい

• ベンチャーなう

• コア業務はサービス開発・運営

• →ベンチャーにインフラの運用してる時間ない

• 理想

• 運用は限りなくゼロにしてサービス開発したい!

Page 16: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

• Slack Outgoing WebHook↓API Gateway Scheduled Event↓ ↓Lambda Function↓Slack Incoming WebHook

設計

Page 17: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

• Slackボットとして振る舞うLambda Function

Handler(Lambdaが呼び出すNode.jsの関数)

• …を簡単に実装するためのライブラリ

実装

Page 18: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

コード例var LambdaBot = require('lambda_bot'), env = require('node-env-file');

env(__dirname + ‘/.env'); // .envファイルから環境変数読むよ

var bot = new LambdaBot({ iconEmoji: process.env['SLACK_ICON_EMOJI'], userName: process.env['SLACK_USER_NAME'], channelName: process.env['SLACK_CHANNEL_NAME'], slackIncomingWebhookURL: process.env['SLACK_INCOMING_WEBHOOK_URL']});

bot.hear(/foo/, function(res) { return res.send(‘bar'); // 誰かがfooと言ったらbarと言うよ});

bot.respond(/hi/, function(res) { return res.reply(‘hi'); // 誰かがfooと話しかけてきたら、hiと返すよ});

bot.on('10am', function(res) { return res.send("It's 10am.”); // 毎日午前10時に「It’s 10am.」と言うよ});

exports.handler = bot.createHandler();

Page 19: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

詳しくはQiitaで!http://qiita.com/mumoshu/items/8752047a0d0265dada47

Page 20: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

Joumae のはなし3 / 3

Page 21: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

Joumaeとは

• AWS Lambdaを利用したサーバレスの分散ロックサービス

• アプリとインフラそれぞれのBlue-Greenデプロイのクラスタワイドなロックが欲しかった

• re:InventでもセッションがあったJAWSフレームワークつかえそう

• …を簡単に実装するためのJAWSの”AWSモジュール”(npmモジュール)

Page 22: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

クラウドワークスのデプロイ

• アプリの更新はHubot、Rake、Capistrano、AWS SDK for Rubyなどを利用して

• インフラの更新はChefやaws-cliやCapistrano、CodeDeployなどを利用して

• それぞれBlue-Greenデプロイ

Page 23: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

課題

• アプリのデプロイ中に、Chef CookbookをChef

Serverに上げて、各サーバでChef Clientを実行してインフラの更新を初めてしまったり、

• アプリのデプロイ中に、EC2インスタンスの停止・起動してしまったり

• >突然の死<

Page 24: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

Before Joumae

• Slack等で人間が「アプリのデプロイしますので、インフラのデプロイ(の引き金になるChef CookbookのGitHubレポジトリへぷるりマージ)はしばらくしないでください」のように調整をする…

• めんどくさ

Page 25: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

Afer Joumae

• hubotが実行するアプリのデプロイスクリプトで$ joumae run --resource-name $APP-$ENV -- bundle exec cap $ENV deploy

• Werckerで動いているインフラのデプロイスクリプトで$ joumae run --resource-name $APP-$ENV -- scripts/mumo.sh deploy $APP-$ENV

• クラスタを排他的ロック

• 一方が終わる前に一方を実行→エラー→Happy!(^ω^)

Page 26: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

そろそろ時間がなくなるはずhttp://qiita.com/mumoshu/items/3cbe31b315be31f510d0

Page 27: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

謝辞

• いつもワクワクするサービスを提供してくれるAWSさん

• re:Inventの参戦費用を快く出していただいた株式会社クラウドワークスの皆さま

• 留守の間プロジェクトを進めてくれたチームの皆さまありがとうございましたm(_ _)m

Page 28: AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた

ありがとう!