SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
LIFULL HOME'S ネイティブアプリ用API
のデプロイを自動化する
株式会社LIFULL 衛藤 剛史
@doramusukotake
Jan 28, 2020 @ LTech #10
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。2
自己紹介
衛藤 剛史(えとう たけし)
@doramusukotake
● Android Developer
● Backend Developer
● Machine Learning
● Group Manager 執筆活動
Google Cloud AutoML Vision 入門
(2019/9/10 発売)
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。3
Agenda
● 現状の構成・仕組み
● 自動化の方針
● SAM (Serverless Application Model)
● Parameter Store
● CodeDeploy
● CodePipeline
● 自動化後の効果
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。4
Agenda
● 現状の構成・仕組み
● 自動化の方針
● SAM (Serverless Application Model)
● Parameter Store
● CodeDeploy
● CodePipeline
● 自動化後の効果
の予定でしたが、失敗したので変更します
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。5
なにが起こったか
*******************************************
のちほど
LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化しようとして失敗した話
株式会社LIFULL 衛藤 剛史
@doramusukotake
Jan 28, 2020 @ LTech #10
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。7
Agenda2
● 現状の構成・仕組み
● 解消したい課題
● 自動化の方針
● 遭遇した壁1
● 遭遇した壁2
● 遭遇した壁3
● 乗り越えられなかった最後の壁
● 結局
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。8
現状の構成・仕組み
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。9
簡易図
AWS Cloud
VPC
AWS LambdaAmazon API Gateway
VPC
Amazon EC2
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。10
1APIG / 複数 Lambda 運用
● Lambda用ソースコード
● swagger (API path 定義)
● Lambda用ソースコード
● swagger (API path 定義)
● Lambda用ソースコード
● swagger (API path 定義)
● Lambda 用ソースコード
● swagger (API path 定義)
1 RestAPI ID → 各 Lambda Function
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。11
APIGとLambdaはstage/alias運用
AWS LambdaAmazon API Gateway
stage1 lambda-function:alias1
stage2 lambda-function:alias2
${stageVariables.alias}
stage変数により切り分け
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。12
抱えている課題
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。13
現在のデプロイフロー
git pull deploy command
--- profile {dev | prod}
Unit Tests Lint Check
deploy
スクリプトで自動デプロイ
ただし実行は個人のPCから
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。14
{
"production": {
"env1": "hoge-prod",
"env2": "poge-prod"
},
"development": {
"env1": "hoge-dev",
"env2": "poge-dev"
}
}
課題1 .envファイル
env情報を.gitignoreして個人管理
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。15
課題2 deploy用スクリプトの複雑化
複雑なスクリプト 高いメンテ難易度
メンテナンスが大変
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。16
課題3 環境依存(今のデプロイ方法)
個人PCから 直接アップロード
個人環境依存が強い
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。17
自動化の方針
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。18
各種AWSサービスを組み合わせて完全自動化
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。19
Auto Rollback・Canaryリリースの実現
HelloDeployFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: HelloDeployFunction
AutoPublishAlias: dev1
Runtime: nodejs10.x
Handler: index.handler
Environment:
Variables:
NODE_ENV: test
CodeUri: ./
DeploymentPreference:
Type: Canary10Percent5Minutes
Alarms:
- !Ref AliasErrorMetricGreaterThanZeroAlarm
- !Ref LatestVersionErrorMetricGreaterThanZeroAlarm
Hooks:
PreTraffic: !Ref PreTrafficLambdaFunction
PostTraffic: !Ref PostTrafficLambdaFunction
MemorySize: 128
Canary10Percent30Minutes
Canary10Percent5Minutes
Canary10Percent10Minutes
Canary10Percent15Minutes
Linear10PercentEvery10Minutes
Linear10PercentEvery1Minutes
Linear10PercentEvery2Minutes
Linear10PercentEvery3Minutes
AllOtOnce
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。20
Auto Rollback・Canaryリリースの実現
HelloDeployFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: HelloDeployFunction
AutoPublishAlias: dev1
Runtime: nodejs10.x
Handler: index.handler
Environment:
Variables:
NODE_ENV: test
CodeUri: ./
DeploymentPreference:
Type: Canary10Percent5Minutes
Alarms:
- !Ref AliasErrorMetricGreaterThanZeroAlarm
- !Ref LatestVersionErrorMetricGreaterThanZeroAlarm
Hooks:
PreTraffic: !Ref PreTrafficLambdaFunction
PostTraffic: !Ref PostTrafficLambdaFunction
MemorySize: 128
Canary10Percent30Minutes
Canary10Percent5Minutes
Canary10Percent10Minutes
Canary10Percent15Minutes
Linear10PercentEvery10Minutes
Linear10PercentEvery1Minutes
Linear10PercentEvery2Minutes
Linear10PercentEvery3Minutes
AllOtOnce
この記述のみで Auto Rollback / Canary Release が実現
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。21
Auto Rollback・Canaryリリースの実現
Canary Release の様子
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。22
遭遇した壁1
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。23
Parameter Store の制限と速度
.envからの読み出しと比較すると確実に時間がかかる
→ Lambdaのグローバル変数として保持しておきたい
Latency
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。24
Parameter Store 取得処理
// load params from parameter store
(async function () {
await getParameters();
})();
async function handler(event, context) {
// lambdaエントリーポイント
}
async function getParameters() {
const ssm = new AWS.SSM(credentials);
// パラメータストアから取得
const result = await ssm.getParametersByPath(request).promise();
// 後続処理
}
hander() の外で実行により
● Lambda コンテナ立上時のみ実行
ただし以下の問題がある
● handler() の処理待ち合わせが必要
● handler() の処理が終わるとコールバッ
クが来ない
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。25
Parameter Store 取得処理
// load params from parameter store
(async function () {
await getParameters();
})();
async function handler(event, context) {
// lambdaエントリーポイント
context.callbackWaitsForEmptyEventLoop = true
// 後続処理
}
async function getParameters() {
const ssm = new AWS.SSM(credentials);
// パラメータストアから取得
const result = await ssm.getParametersByPath(request).promise();
// 後続処理
}
Event loop が空になるまで待たせるひつ
ようがある
(取得処理が間に合わない問題はある)
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。26
Parameter Store 取得処理
// load params from parameter store
(async function () {
await getParameters();
})();
async function handler(event, context) {
// lambdaエントリーポイント
const testKey = process.env.TEST_KEY || null;
if (testKey === null) {
await getParameters();
} else {
console.log('env is already set');
}
// 後続処理
}
async function getParameters() {
const ssm = new AWS.SSM(credentials);
// パラメータストアから取得
const result = await ssm.getParametersByPath(request).promise();
// 後続処理
}
Lambda のインスタンス立ち上がり後
1回のみ取得するように
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。27
遭遇した壁2
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。28
同じAPI Gateway ID がたくさんできる
気づいたら同じ名前の API がたくさんできている
→ Stack name と openapi.yaml の info を統一して解消
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。29
遭遇した壁3
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。30
Lambda alias / API Gateway stage が上書きされてしまう
SAM
Template
stage1
stage2
alias1
alias2
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。31
Lambda alias / API Gateway stage が上書きされてしまう
SAM
Template
stage1
stage2
alias1
alias2
Deleted !
同じテンプレートで複数 stage / aliasはできない(既存のものが
Delete される)
→ SAM ではなく CloudFormation の記述で回避(次項)
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。32
CloudFormationの記述で回避 - API Gateway -
HelloDeployApiGateway:
Type: AWS::Serverless::Api
Properties:
StageName: stage1
DefinitionUri: ./openapi.yaml
Variables:
alias: "stage1"
Stage2:
Type: AWS::ApiGateway::Stage
Properties:
RestApiId: !Ref HelloDeployApiGateway
DeploymentId: !Ref HelloDeployApiGateway.Deployment
StageName: stage2
Variables:
alias: :stage2
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。33
CloudFormationの記述で回避 - Lambda -
HelloDeployFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: HelloDeployFunction
AutoPublishAlias: dev1
// 略
LambdaAlias:
Type: AWS::Lambda::Alias
Properties:
FunctionName: !Ref HelloDeployFunction
FunctionVersion: !Select [7, !Split [":", !Ref HelloDeployFunction.Version]]
Name: dev2
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。34
乗り越えられなかった最後の壁
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。35
API複数リポジトリ運用の罠
極力APIごとの依存関係を消し去りたいため、
● Lambda Function ごとに github repository
● 共有なものはライブラリ化として package.json に記述
● そのため、SAM template をそれぞれ独立させておく必要がある
● Lambda用ソースコード
● swagger (API path 定義)
● Lambda用ソースコード
● swagger (API path 定義)
● Lambda用ソースコード
● swagger (API path 定義)
● Lambda用ソースコード
● swagger (API path 定義)
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。36
API複数リポジトリ運用の罠
既存 Path を一度 remove しないと
違う Template からデプロイできない・・・!
複数リポジトリ運用しているため、Template を分割する必要があ
るが、制限があり実現できなかった
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。37
aaaaa
構成の実現が難しい状況であることがわかりました。
構成の実現が難しい状況であることがわかりました。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。38
結果
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。39
Github Actions 使う
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。40
各種AWSサービスを組み合わせて完全自動化
AWS のサービスだけで自動化できなかった部分
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。41
まとめ
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。42
まとめ
● SAMは便利なので対応可能であればやるべき
○ CodeBuild / CodePipelineと組み合わせてより強力な自動化
● SAMにも限界があることを知っておく
● 限界あるからといって諦めない
● Github Actionsという他の選択肢もある
END
We are hiring engineers!!
エンジニア積極採用中
LIFULL 採用 検索

Mais conteúdo relacionado

Mais procurados

.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform信之 岩永
 
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったRuby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったtakanori suzuki
 
Visual studio 14 CTP2 概要
Visual studio 14 CTP2 概要Visual studio 14 CTP2 概要
Visual studio 14 CTP2 概要Yoshihisa Ozaki
 
インフラ自動化とHashicorp tools
インフラ自動化とHashicorp toolsインフラ自動化とHashicorp tools
インフラ自動化とHashicorp toolsUchio Kondo
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
LaravelとテストについてTakeo Noda
 
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかJavaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかYoshitaka Kawashima
 
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
覚醒JavaScript  -ES6で作るIsomophicアプリケーション-覚醒JavaScript  -ES6で作るIsomophicアプリケーション-
覚醒JavaScript -ES6で作るIsomophicアプリケーション-Oonishi Keitarou
 
AsyncTask アンチパターン
AsyncTask アンチパターンAsyncTask アンチパターン
AsyncTask アンチパターンHiroshi Kurokawa
 
活動報告9 laravel5入門-
活動報告9  laravel5入門-活動報告9  laravel5入門-
活動報告9 laravel5入門-vx-pc-club
 
プログラマブルクラウドの薦め
プログラマブルクラウドの薦めプログラマブルクラウドの薦め
プログラマブルクラウドの薦めShinpei Ohtani
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Nextdynamis
 
俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがないSeiichiro Ishida
 
Al mininum 47redmine-2nd
Al mininum 47redmine-2ndAl mininum 47redmine-2nd
Al mininum 47redmine-2ndmikoto20000
 
ご注文は監視自動化ですか?
ご注文は監視自動化ですか?ご注文は監視自動化ですか?
ご注文は監視自動化ですか?Masahito Zembutsu
 
元気玉的 分散テスト 実行システム TestStreamer
元気玉的 分散テスト 実行システム TestStreamer元気玉的 分散テスト 実行システム TestStreamer
元気玉的 分散テスト 実行システム TestStreamerYoshitaka Kawashima
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術Kiyokuni Kawachiya
 

Mais procurados (20)

.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったRuby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
 
vFabricを触ろう
vFabricを触ろうvFabricを触ろう
vFabricを触ろう
 
Visual studio 14 CTP2 概要
Visual studio 14 CTP2 概要Visual studio 14 CTP2 概要
Visual studio 14 CTP2 概要
 
インフラ自動化とHashicorp tools
インフラ自動化とHashicorp toolsインフラ自動化とHashicorp tools
インフラ自動化とHashicorp tools
 
Flex's DI Container
Flex's DI ContainerFlex's DI Container
Flex's DI Container
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
Laravelとテストについて
 
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかJavaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
 
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
覚醒JavaScript  -ES6で作るIsomophicアプリケーション-覚醒JavaScript  -ES6で作るIsomophicアプリケーション-
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
 
AsyncTask アンチパターン
AsyncTask アンチパターンAsyncTask アンチパターン
AsyncTask アンチパターン
 
活動報告9 laravel5入門-
活動報告9  laravel5入門-活動報告9  laravel5入門-
活動報告9 laravel5入門-
 
AlibabaCloudではじめるKubernetes
AlibabaCloudではじめるKubernetesAlibabaCloudではじめるKubernetes
AlibabaCloudではじめるKubernetes
 
プログラマブルクラウドの薦め
プログラマブルクラウドの薦めプログラマブルクラウドの薦め
プログラマブルクラウドの薦め
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない
 
Al mininum 47redmine-2nd
Al mininum 47redmine-2ndAl mininum 47redmine-2nd
Al mininum 47redmine-2nd
 
ご注文は監視自動化ですか?
ご注文は監視自動化ですか?ご注文は監視自動化ですか?
ご注文は監視自動化ですか?
 
Study Swift
Study Swift Study Swift
Study Swift
 
元気玉的 分散テスト 実行システム TestStreamer
元気玉的 分散テスト 実行システム TestStreamer元気玉的 分散テスト 実行システム TestStreamer
元気玉的 分散テスト 実行システム TestStreamer
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 

Semelhante a 【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する

クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)Daisuke Ikeda
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
Azureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流についてAzureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流について真吾 吉田
 
LLVM overview 20110122
LLVM overview 20110122LLVM overview 20110122
LLVM overview 20110122nothingcosmos
 
ソースコードの共通化
ソースコードの共通化ソースコードの共通化
ソースコードの共通化Jun Hosokawa
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しAkira Nagata
 
[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic BeanstalkAmazon Web Services Japan
 
Japan Container Day 2018
Japan Container Day 2018Japan Container Day 2018
Japan Container Day 2018Yoshio Terada
 
cndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmaltcndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmaltcapsmalt
 
20121217 jawsug-yokohama
20121217 jawsug-yokohama20121217 jawsug-yokohama
20121217 jawsug-yokohamaTetsuya Chiba
 
フレームワーク品評会 Ruby on Rails #crossjp
フレームワーク品評会 Ruby on Rails #crossjpフレームワーク品評会 Ruby on Rails #crossjp
フレームワーク品評会 Ruby on Rails #crossjpShiro Fukuda
 
A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020
A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020
A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020SORACOM,INC
 
coma - creator’s talk session: Code - openFrameworks
coma - creator’s talk session: Code - openFrameworkscoma - creator’s talk session: Code - openFrameworks
coma - creator’s talk session: Code - openFrameworksAtsushi Tadokoro
 
【AWS Summit Tokyo 2017】Amazon ECS と SpotFleet を活用した低コストでスケーラブルなジョブワーカーシステム
【AWS Summit Tokyo 2017】Amazon ECS と SpotFleet を活用した低コストでスケーラブルなジョブワーカーシステム【AWS Summit Tokyo 2017】Amazon ECS と SpotFleet を活用した低コストでスケーラブルなジョブワーカーシステム
【AWS Summit Tokyo 2017】Amazon ECS と SpotFleet を活用した低コストでスケーラブルなジョブワーカーシステムKazuki Matsuda
 
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013晃 遠山
 
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Taiji Miyabe
 

Semelhante a 【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する (20)

クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
Spring3.1概要x di
Spring3.1概要x diSpring3.1概要x di
Spring3.1概要x di
 
Azureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流についてAzureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流について
 
Lithium Labo #1
Lithium Labo #1Lithium Labo #1
Lithium Labo #1
 
LLVM overview 20110122
LLVM overview 20110122LLVM overview 20110122
LLVM overview 20110122
 
ソースコードの共通化
ソースコードの共通化ソースコードの共通化
ソースコードの共通化
 
Elastic beanstalk docker_support
Elastic beanstalk docker_supportElastic beanstalk docker_support
Elastic beanstalk docker_support
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
Serverless時代のJavaについて
Serverless時代のJavaについてServerless時代のJavaについて
Serverless時代のJavaについて
 
[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk
 
Japan Container Day 2018
Japan Container Day 2018Japan Container Day 2018
Japan Container Day 2018
 
cndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmaltcndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmalt
 
20121217 jawsug-yokohama
20121217 jawsug-yokohama20121217 jawsug-yokohama
20121217 jawsug-yokohama
 
フレームワーク品評会 Ruby on Rails #crossjp
フレームワーク品評会 Ruby on Rails #crossjpフレームワーク品評会 Ruby on Rails #crossjp
フレームワーク品評会 Ruby on Rails #crossjp
 
A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020
A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020
A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020
 
coma - creator’s talk session: Code - openFrameworks
coma - creator’s talk session: Code - openFrameworkscoma - creator’s talk session: Code - openFrameworks
coma - creator’s talk session: Code - openFrameworks
 
【AWS Summit Tokyo 2017】Amazon ECS と SpotFleet を活用した低コストでスケーラブルなジョブワーカーシステム
【AWS Summit Tokyo 2017】Amazon ECS と SpotFleet を活用した低コストでスケーラブルなジョブワーカーシステム【AWS Summit Tokyo 2017】Amazon ECS と SpotFleet を活用した低コストでスケーラブルなジョブワーカーシステム
【AWS Summit Tokyo 2017】Amazon ECS と SpotFleet を活用した低コストでスケーラブルなジョブワーカーシステム
 
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
 
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
 

Mais de LIFULL Co., Ltd.

20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
20220319_新卒から活躍し続けるエンジニアが大切にしている5つのことLIFULL Co., Ltd.
 
趣味と仕事の違い、現場で求められるアプリケーションの可観測性
趣味と仕事の違い、現場で求められるアプリケーションの可観測性趣味と仕事の違い、現場で求められるアプリケーションの可観測性
趣味と仕事の違い、現場で求められるアプリケーションの可観測性LIFULL Co., Ltd.
 
Kubernetesセキュリティの歩き方
Kubernetesセキュリティの歩き方Kubernetesセキュリティの歩き方
Kubernetesセキュリティの歩き方LIFULL Co., Ltd.
 
LIFULLの全社アプリケーション実行基盤 KEEL について
LIFULLの全社アプリケーション実行基盤 KEEL についてLIFULLの全社アプリケーション実行基盤 KEEL について
LIFULLの全社アプリケーション実行基盤 KEEL についてLIFULL Co., Ltd.
 
Kubernetesクラスタバージョンアップを支える技術
Kubernetesクラスタバージョンアップを支える技術Kubernetesクラスタバージョンアップを支える技術
Kubernetesクラスタバージョンアップを支える技術LIFULL Co., Ltd.
 
LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷LIFULL Co., Ltd.
 
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっているLIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっているLIFULL Co., Ltd.
 
SaPID を導入するまでとそれから
SaPID を導入するまでとそれからSaPID を導入するまでとそれから
SaPID を導入するまでとそれからLIFULL Co., Ltd.
 
3D間取りを支える技術
3D間取りを支える技術3D間取りを支える技術
3D間取りを支える技術LIFULL Co., Ltd.
 
LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発LIFULL Co., Ltd.
 
大企業でアジャイル開発を推進できる条件とその心構え
大企業でアジャイル開発を推進できる条件とその心構え大企業でアジャイル開発を推進できる条件とその心構え
大企業でアジャイル開発を推進できる条件とその心構えLIFULL Co., Ltd.
 
スクラムを利用したアジャイルオフショア開発のとりくみ
スクラムを利用したアジャイルオフショア開発のとりくみスクラムを利用したアジャイルオフショア開発のとりくみ
スクラムを利用したアジャイルオフショア開発のとりくみLIFULL Co., Ltd.
 
実践 マーケティングテクノロジーエンジニア
実践 マーケティングテクノロジーエンジニア実践 マーケティングテクノロジーエンジニア
実践 マーケティングテクノロジーエンジニアLIFULL Co., Ltd.
 
エンジニア × マーケティングテクノロジー が必要な理由
エンジニア × マーケティングテクノロジー が必要な理由エンジニア × マーケティングテクノロジー が必要な理由
エンジニア × マーケティングテクノロジー が必要な理由LIFULL Co., Ltd.
 
「空飛ぶホームズくん」を実現するVR技術
「空飛ぶホームズくん」を実現するVR技術「空飛ぶホームズくん」を実現するVR技術
「空飛ぶホームズくん」を実現するVR技術LIFULL Co., Ltd.
 
ニオイセンサで思索する街の新たな指標
ニオイセンサで思索する街の新たな指標ニオイセンサで思索する街の新たな指標
ニオイセンサで思索する街の新たな指標LIFULL Co., Ltd.
 
Well-beingを測る「LIFE WILL」開発の舞台裏
Well-beingを測る「LIFE WILL」開発の舞台裏Well-beingを測る「LIFE WILL」開発の舞台裏
Well-beingを測る「LIFE WILL」開発の舞台裏LIFULL Co., Ltd.
 
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったことLIFULL Co., Ltd.
 
ウェブアクセシビリティ推進活動はじめました
ウェブアクセシビリティ推進活動はじめましたウェブアクセシビリティ推進活動はじめました
ウェブアクセシビリティ推進活動はじめましたLIFULL Co., Ltd.
 
大きめレガシープロジェクトのフロント行く末
大きめレガシープロジェクトのフロント行く末大きめレガシープロジェクトのフロント行く末
大きめレガシープロジェクトのフロント行く末LIFULL Co., Ltd.
 

Mais de LIFULL Co., Ltd. (20)

20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
 
趣味と仕事の違い、現場で求められるアプリケーションの可観測性
趣味と仕事の違い、現場で求められるアプリケーションの可観測性趣味と仕事の違い、現場で求められるアプリケーションの可観測性
趣味と仕事の違い、現場で求められるアプリケーションの可観測性
 
Kubernetesセキュリティの歩き方
Kubernetesセキュリティの歩き方Kubernetesセキュリティの歩き方
Kubernetesセキュリティの歩き方
 
LIFULLの全社アプリケーション実行基盤 KEEL について
LIFULLの全社アプリケーション実行基盤 KEEL についてLIFULLの全社アプリケーション実行基盤 KEEL について
LIFULLの全社アプリケーション実行基盤 KEEL について
 
Kubernetesクラスタバージョンアップを支える技術
Kubernetesクラスタバージョンアップを支える技術Kubernetesクラスタバージョンアップを支える技術
Kubernetesクラスタバージョンアップを支える技術
 
LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷
 
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっているLIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
 
SaPID を導入するまでとそれから
SaPID を導入するまでとそれからSaPID を導入するまでとそれから
SaPID を導入するまでとそれから
 
3D間取りを支える技術
3D間取りを支える技術3D間取りを支える技術
3D間取りを支える技術
 
LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発
 
大企業でアジャイル開発を推進できる条件とその心構え
大企業でアジャイル開発を推進できる条件とその心構え大企業でアジャイル開発を推進できる条件とその心構え
大企業でアジャイル開発を推進できる条件とその心構え
 
スクラムを利用したアジャイルオフショア開発のとりくみ
スクラムを利用したアジャイルオフショア開発のとりくみスクラムを利用したアジャイルオフショア開発のとりくみ
スクラムを利用したアジャイルオフショア開発のとりくみ
 
実践 マーケティングテクノロジーエンジニア
実践 マーケティングテクノロジーエンジニア実践 マーケティングテクノロジーエンジニア
実践 マーケティングテクノロジーエンジニア
 
エンジニア × マーケティングテクノロジー が必要な理由
エンジニア × マーケティングテクノロジー が必要な理由エンジニア × マーケティングテクノロジー が必要な理由
エンジニア × マーケティングテクノロジー が必要な理由
 
「空飛ぶホームズくん」を実現するVR技術
「空飛ぶホームズくん」を実現するVR技術「空飛ぶホームズくん」を実現するVR技術
「空飛ぶホームズくん」を実現するVR技術
 
ニオイセンサで思索する街の新たな指標
ニオイセンサで思索する街の新たな指標ニオイセンサで思索する街の新たな指標
ニオイセンサで思索する街の新たな指標
 
Well-beingを測る「LIFE WILL」開発の舞台裏
Well-beingを測る「LIFE WILL」開発の舞台裏Well-beingを測る「LIFE WILL」開発の舞台裏
Well-beingを測る「LIFE WILL」開発の舞台裏
 
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
 
ウェブアクセシビリティ推進活動はじめました
ウェブアクセシビリティ推進活動はじめましたウェブアクセシビリティ推進活動はじめました
ウェブアクセシビリティ推進活動はじめました
 
大きめレガシープロジェクトのフロント行く末
大きめレガシープロジェクトのフロント行く末大きめレガシープロジェクトのフロント行く末
大きめレガシープロジェクトのフロント行く末
 

Último

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Último (10)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する

  • 2. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。2 自己紹介 衛藤 剛史(えとう たけし) @doramusukotake ● Android Developer ● Backend Developer ● Machine Learning ● Group Manager 執筆活動 Google Cloud AutoML Vision 入門 (2019/9/10 発売)
  • 3. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。3 Agenda ● 現状の構成・仕組み ● 自動化の方針 ● SAM (Serverless Application Model) ● Parameter Store ● CodeDeploy ● CodePipeline ● 自動化後の効果
  • 4. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。4 Agenda ● 現状の構成・仕組み ● 自動化の方針 ● SAM (Serverless Application Model) ● Parameter Store ● CodeDeploy ● CodePipeline ● 自動化後の効果 の予定でしたが、失敗したので変更します
  • 5. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。5 なにが起こったか ******************************************* のちほど
  • 7. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。7 Agenda2 ● 現状の構成・仕組み ● 解消したい課題 ● 自動化の方針 ● 遭遇した壁1 ● 遭遇した壁2 ● 遭遇した壁3 ● 乗り越えられなかった最後の壁 ● 結局
  • 8. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。8 現状の構成・仕組み
  • 9. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。9 簡易図 AWS Cloud VPC AWS LambdaAmazon API Gateway VPC Amazon EC2
  • 10. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。10 1APIG / 複数 Lambda 運用 ● Lambda用ソースコード ● swagger (API path 定義) ● Lambda用ソースコード ● swagger (API path 定義) ● Lambda用ソースコード ● swagger (API path 定義) ● Lambda 用ソースコード ● swagger (API path 定義) 1 RestAPI ID → 各 Lambda Function
  • 11. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。11 APIGとLambdaはstage/alias運用 AWS LambdaAmazon API Gateway stage1 lambda-function:alias1 stage2 lambda-function:alias2 ${stageVariables.alias} stage変数により切り分け
  • 12. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。12 抱えている課題
  • 13. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。13 現在のデプロイフロー git pull deploy command --- profile {dev | prod} Unit Tests Lint Check deploy スクリプトで自動デプロイ ただし実行は個人のPCから
  • 14. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。14 { "production": { "env1": "hoge-prod", "env2": "poge-prod" }, "development": { "env1": "hoge-dev", "env2": "poge-dev" } } 課題1 .envファイル env情報を.gitignoreして個人管理
  • 15. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。15 課題2 deploy用スクリプトの複雑化 複雑なスクリプト 高いメンテ難易度 メンテナンスが大変
  • 16. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。16 課題3 環境依存(今のデプロイ方法) 個人PCから 直接アップロード 個人環境依存が強い
  • 17. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。17 自動化の方針
  • 18. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。18 各種AWSサービスを組み合わせて完全自動化
  • 19. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。19 Auto Rollback・Canaryリリースの実現 HelloDeployFunction: Type: AWS::Serverless::Function Properties: FunctionName: HelloDeployFunction AutoPublishAlias: dev1 Runtime: nodejs10.x Handler: index.handler Environment: Variables: NODE_ENV: test CodeUri: ./ DeploymentPreference: Type: Canary10Percent5Minutes Alarms: - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction MemorySize: 128 Canary10Percent30Minutes Canary10Percent5Minutes Canary10Percent10Minutes Canary10Percent15Minutes Linear10PercentEvery10Minutes Linear10PercentEvery1Minutes Linear10PercentEvery2Minutes Linear10PercentEvery3Minutes AllOtOnce
  • 20. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。20 Auto Rollback・Canaryリリースの実現 HelloDeployFunction: Type: AWS::Serverless::Function Properties: FunctionName: HelloDeployFunction AutoPublishAlias: dev1 Runtime: nodejs10.x Handler: index.handler Environment: Variables: NODE_ENV: test CodeUri: ./ DeploymentPreference: Type: Canary10Percent5Minutes Alarms: - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction MemorySize: 128 Canary10Percent30Minutes Canary10Percent5Minutes Canary10Percent10Minutes Canary10Percent15Minutes Linear10PercentEvery10Minutes Linear10PercentEvery1Minutes Linear10PercentEvery2Minutes Linear10PercentEvery3Minutes AllOtOnce この記述のみで Auto Rollback / Canary Release が実現
  • 21. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。21 Auto Rollback・Canaryリリースの実現 Canary Release の様子
  • 22. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。22 遭遇した壁1
  • 23. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。23 Parameter Store の制限と速度 .envからの読み出しと比較すると確実に時間がかかる → Lambdaのグローバル変数として保持しておきたい Latency
  • 24. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。24 Parameter Store 取得処理 // load params from parameter store (async function () { await getParameters(); })(); async function handler(event, context) { // lambdaエントリーポイント } async function getParameters() { const ssm = new AWS.SSM(credentials); // パラメータストアから取得 const result = await ssm.getParametersByPath(request).promise(); // 後続処理 } hander() の外で実行により ● Lambda コンテナ立上時のみ実行 ただし以下の問題がある ● handler() の処理待ち合わせが必要 ● handler() の処理が終わるとコールバッ クが来ない
  • 25. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。25 Parameter Store 取得処理 // load params from parameter store (async function () { await getParameters(); })(); async function handler(event, context) { // lambdaエントリーポイント context.callbackWaitsForEmptyEventLoop = true // 後続処理 } async function getParameters() { const ssm = new AWS.SSM(credentials); // パラメータストアから取得 const result = await ssm.getParametersByPath(request).promise(); // 後続処理 } Event loop が空になるまで待たせるひつ ようがある (取得処理が間に合わない問題はある)
  • 26. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。26 Parameter Store 取得処理 // load params from parameter store (async function () { await getParameters(); })(); async function handler(event, context) { // lambdaエントリーポイント const testKey = process.env.TEST_KEY || null; if (testKey === null) { await getParameters(); } else { console.log('env is already set'); } // 後続処理 } async function getParameters() { const ssm = new AWS.SSM(credentials); // パラメータストアから取得 const result = await ssm.getParametersByPath(request).promise(); // 後続処理 } Lambda のインスタンス立ち上がり後 1回のみ取得するように
  • 27. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。27 遭遇した壁2
  • 28. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。28 同じAPI Gateway ID がたくさんできる 気づいたら同じ名前の API がたくさんできている → Stack name と openapi.yaml の info を統一して解消
  • 29. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。29 遭遇した壁3
  • 30. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。30 Lambda alias / API Gateway stage が上書きされてしまう SAM Template stage1 stage2 alias1 alias2
  • 31. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。31 Lambda alias / API Gateway stage が上書きされてしまう SAM Template stage1 stage2 alias1 alias2 Deleted ! 同じテンプレートで複数 stage / aliasはできない(既存のものが Delete される) → SAM ではなく CloudFormation の記述で回避(次項)
  • 32. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。32 CloudFormationの記述で回避 - API Gateway - HelloDeployApiGateway: Type: AWS::Serverless::Api Properties: StageName: stage1 DefinitionUri: ./openapi.yaml Variables: alias: "stage1" Stage2: Type: AWS::ApiGateway::Stage Properties: RestApiId: !Ref HelloDeployApiGateway DeploymentId: !Ref HelloDeployApiGateway.Deployment StageName: stage2 Variables: alias: :stage2
  • 33. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。33 CloudFormationの記述で回避 - Lambda - HelloDeployFunction: Type: AWS::Serverless::Function Properties: FunctionName: HelloDeployFunction AutoPublishAlias: dev1 // 略 LambdaAlias: Type: AWS::Lambda::Alias Properties: FunctionName: !Ref HelloDeployFunction FunctionVersion: !Select [7, !Split [":", !Ref HelloDeployFunction.Version]] Name: dev2
  • 34. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。34 乗り越えられなかった最後の壁
  • 35. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。35 API複数リポジトリ運用の罠 極力APIごとの依存関係を消し去りたいため、 ● Lambda Function ごとに github repository ● 共有なものはライブラリ化として package.json に記述 ● そのため、SAM template をそれぞれ独立させておく必要がある ● Lambda用ソースコード ● swagger (API path 定義) ● Lambda用ソースコード ● swagger (API path 定義) ● Lambda用ソースコード ● swagger (API path 定義) ● Lambda用ソースコード ● swagger (API path 定義)
  • 36. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。36 API複数リポジトリ運用の罠 既存 Path を一度 remove しないと 違う Template からデプロイできない・・・! 複数リポジトリ運用しているため、Template を分割する必要があ るが、制限があり実現できなかった
  • 37. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。37 aaaaa 構成の実現が難しい状況であることがわかりました。 構成の実現が難しい状況であることがわかりました。
  • 38. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。38 結果
  • 39. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。39 Github Actions 使う
  • 40. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。40 各種AWSサービスを組み合わせて完全自動化 AWS のサービスだけで自動化できなかった部分
  • 41. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。41 まとめ
  • 42. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。42 まとめ ● SAMは便利なので対応可能であればやるべき ○ CodeBuild / CodePipelineと組み合わせてより強力な自動化 ● SAMにも限界があることを知っておく ● 限界あるからといって諦めない ● Github Actionsという他の選択肢もある
  • 43. END
  • 44. We are hiring engineers!! エンジニア積極採用中 LIFULL 採用 検索