担当PJのCIに
SERVERLESS
FRAMEWORKを
導入した話
1
自己紹介
株式会社シーエー・アドバンス
技術統括本部
多和田 真也(たわた まさや)
CSアプリの開発(サーバサイド ~ フロントエンド)
2
今までのCI
3
4
各ツールに必要なプラグイン等
Slack
Integration App
Hubot
Hubotとの連携するのに必要なTokenが
取得できる
Incoming WebHooks
特定のチャンネルにメッセージを
送るためのWebhook URLが取得できる
5
各ツールに必要なプラグイン等
Hubot
hubot-slack
HubotとSlackを連携するために必要
Jenkins
Slack Notification Plugin
ジョブの実行結果をSlackに通知できる
成否しか通知しないので、
ログ等の通知は、
Slackの「Incoming WebHooks」を利用
6
ある日、ある開発要望が
上がりました。
7
そこで、機能の一部を外部に公開する
APIの作成が必要になりました。
というわけで、ざっくりと下記の構成で
作りたいと考えました。
8
思った問題点
インフラ構築の経験が浅いので、
AWSの操作じたいが怖い・・・
なので、構築した環境も
しっかりチームにレビューして頂きたい・・・
(修正の度にAWSの管理画面を見て頂くのは大変)
開発環境は、チーム内で必要に応じて
立ち上げているので、その環境に
アクセスできるように自動化する必要がある
9
というわけで
10
11
SERVERLESS FRAMEWORKとは
サーバレスなアプリを効率よく
開発できるフレームワーク
AWSとIBM OpenWhiskに対応しています
※OpenWhiskは使ったことないです・・・
各リソースの設定のコード化ができる
コマンドからデプロイ、削除、ロールバック等
ができる
12
作成したソースにそってCloudFormationを
実行してくれる
CloudFormationとは、AWS全体のリソースを
自動構築してくれるサービス
13
導入方法
aws cliインストール&設定
aws cliとは、AWSサービスをコマンドから
実行できるツール
AWSの各サービスにアクセスできる権限を
持ったアクセスキーを設定
Serverless Frameworkインストール
sudo pip install awscli 
aws configure 
AWS Access Key ID [None]: xxxxxxxx 
AWS Secret Access Key [None]: xxxxxxxx 
Default region name [None]: ap­northeast­1 
Default output format [None]: json 
npm install serverless ­g 
14
使い方
サービス作成
serverless create ­­template aws­nodejs ­­path service­name 
cd service­name 
$ tree 
. 
├── handler.js 
└── serverless.yml 
15
serverless.yml
システム全体の設定を書く。
# serverless.yml 
service: service­name 
provider: 
  name: aws 
  runtime: nodejs4.3 
functions: 
  hello: 
    handler: handler.hello 
16
handler.js
lambda functionを定義する。
// handler.js 
'use strict'; 
module.exports.hello = (event, context, callback) => { 
  const response = { 
    statusCode: 200, 
    body: JSON.stringify({ 
      message: 'Go Serverless v1.0! Your function executed successf
      input: event, 
    }), 
  }; 
  callback(null, response); 
}; 
17
デプロイ
$ serverless deploy 
service: service­name 
stage: dev 
region: us­east­1 
api keys: 
  None 
endpoints: 
  None 
functions: 
  service­name­dev­hello: arn:aws:lambda:us­east­1:xxxxxxxxxxxx:
18
CloudFormation
Lambda
19
削除
$ serverless remove 
20
CIに導入
21
22
結果
Slackから「slsdeploy app=アプリ名」のコマンド
でアプリを実行できるAPIの構築ができるように
なりました。
23
まとめ
サーバレス側の機能も
インフラのコード化によってレビューを
しっかりして頂けるようになりました。
必要なときにサーバレスアプリの開発環境が
立ち上げ可能になりました。
簡単なサービスであれば、サーバレスで
さくっとリリースできるようになりました。
24

担当Pjのciにserverless frameworkを導入した話