狠狠撸

狠狠撸Share a Scribd company logo
Amazon ECSの開発環境を動的に?
管理するツールを作ってみました
株式会社サイバーエージェント 技術本部 サービスリライアビリティグループ
クラウド技術アドバイザ
Torgayev Tamirlan (@prog )
??紹介
? 2018年 サイバーエージェント新卒?社
? Cloud Technologies Advisor =
(SA+SRE+DevOps+Infra) /
? AWA、REQU、タップル誕?、?
CROSSMEなど担当
? 好きなもの: Terraform、Python、
Elasticsearch、Serverless ?
? 好きなAWSのサービス: ECSTorgayev Tamirlan
@prog
よく?る流れの话をします
贰颁厂を导?します
ECSを導?
? ECS簡単じゃん、楽じゃん、最?
? 導?してみよう
? ええ感じやし、このままオンプレからAWSに移設しよう!
? わーい\(镑辞镑)∕
わーい\(镑辞镑)∕
移设します
移设が终わります
ECSでの本格的な?
チーム開発が始まります
チーム開発
? localでfeature作った!
? リアルなDBとか周辺サービスとつなぎこんで、?
AWS上でどう動くかマージする前に確認したい
? x ?
? さらにiOS/Androidのdevアプリで動き?たい
でも开発环境は1つだけ!
どうすれば複数の開発タスクを?
同時に進めるんだよ ?
理想
? A/B testing (Feature Flags)、microservices、、etc.
? ?きなアーキテクチャ変更...
? いきなり導?するの難しい ?
現実:devxx?式
? オンプレ、VPS、EC などではよくみるアレ
? 同じdev環境を複数?意
? dev , dev , ..., devxx
? これを「devxx?式」と私が勝?に呼んでます
开発レーンが増える
「あっ、dev は私が使ってるから
触らないで」
诲别惫环境がまた増える
诲别惫环境がまた増える
眠れない夜
疲労
涙
割り当て表管理
原始的コミュニケーション
コンフリクト残業
?動デプロイ
汗
prodまでのlead time延?
诲别惫环境がまた増える
イライラ
Apply Failed
dev環境10以上
誰も知らないエンドポイント
腐る環境
余分なコスト
Toil
設定差分
Build Failed
※イメージです
∕(镑辞镑)\
Problem
? 移設したのはいいが、?
クラウドとアプリケーションの?
稼働プラットフォームが変わっただけで、?
チームとメンバーの意識や開発スタイルは何?つ変わっていない
devxx ?式について考える ?
devxx ?式のメリット
? オンプレ、VPS、物理サーバ運?経験者にとって学習コスト低い
? 横に全く同じサーバを?時的に増やして、Ansible的なのを流してDNS設定するだけ
? 使ってないサーバはシャットダウンしておくなど
? 使ってない環境のサーバはシャットダウンしてあればコストがかからない
? 導?コスト低
? Feature Flagなどではないので環境を横でつくるだけ
? コードの修正もいらない
? ?つ?つの環境が完全に分離されている
devxx ?式のデメリット
? 「あっ、dev は私が使ってるから触らないで」のような?
原始的コミュニケーション
? チャットベースなどの管理
? 「dev環境全部割り当て表」
? 環境増減is?動
? 1環境 = ALB + ECS Service + Route レコード
? 特にALBは、作成に時間もかかり、いるだけでprovisioningで課?される
? 増減作業の?間
? お?がかかる
? サーバシャットダウン忘れ、だるいからあえてシャットダウンしないなど
? サーバ以外のリソース(LB、etc.)
よし、?动化しよう
devxx ?式の?動化を考える
? CloudFormation/Terraform/CDK
? ?動で今これでやっている
? IaaCのソース?体がGit管理で、?動コミットとか?動apply怖い、やりたくない
? ?前ツール
? dev環境の増減するところをあえてIaaCで管理しないスタイル
? さぁどうつくる
動的devxx(仮)
? devxx?式のメリットを活かしつつ、デメリットを解消
= コスト最適化しつつ、?動化する
= ALB使い回し、それ以外はええ感じに?動化
? 1 環境 ( = environment) のライフサイクルを考える
= featureの追加、修正は1つのPRで完結する場合が多いので、環境とPRは1:1の関係
= PRが作成されたら環境を作成、クローズorマージされたら削除
Introducing eden
ECS Dynamic Environment Manager
eden概要
? create/deleteの2コマンドのみ
? 既存の環境へのcreateはTask De?nitionの作成とdeployのみ
? REST? APIとCLIがあります
? REST? != RESTful
? Reference (参照)となるECS Serviceを指定するとそれをパクってくれる
? dev 的reference serviceはIaaC(Terraformなど)で管理想定
? 環境を作成するたびにDescribeを?う
? dev を変更すれば、それ以降に作成された動的環境が新しい設定で作成される
? 既存の環境を更新したければ、?旦delete
edenがつくるもの
. ECS Task De?nition
. ALB Target Group
. ECS Service
. ALB Listener Rule(共通ALBにHostHeaderルール追加のみ)
. Route CNAME record(共通ALBを指すだけ)
. Con?gファイルの更新(後述)
(環境削除は逆順)
Con?gファイル is 何
? 開発アプリケーション(Web or Native)に、?
どんな環境があるかを知らせるためのJSONファイル
? 隠しメニューを出すとJSONから?成された環境?覧が出る
? 環境が切り替えられる
{
"environments": [
{
"env": "dev",
"name": "dev-dynamic-test",
"api_endpoint": "api-test.dev.example.com"
}
]
}
Con?gファイル
{
"environments": [
{
"env": "dev", // 固定、NativeでのAPNS等、外部APIのdev/stg/prd切り替え用
"name": "dev-dynamic-test",
"api_endpoint": "api-test.dev.example.com"
}
]
}
// 同一環境で複数のendpointもできます…
// api_endpointのキー名が変えられます…
Con?gファイル
static?
prefix
branch
name
動的環境専用Zone
branch
name
static?
prefix
Developing with eden
? 実はTwitterでちょろっと言ってた
フォローしたらたまにこう言うのが観測できます?
(有益な情報レア度高め)
タップル诞?で导?してみた
eden導? - CLI
? まずはCLIから
? 環境作成3秒、削除2秒ぐらい
? なお、既存の環境へのcreateはdeployするだけになるのでチョッパヤ
? Task?れ替えはまた別の話…
eden導? - API
? eden REST API をデプロイした
? ALB、Lambda、Python . + Flask、全部で1300?ぐらい
? CIで、ビルドとECRへのpushが終わった直後に条件分岐追加
? commit: GET eden.example.com/v /create?branch=foo&image_uri=xxxxxx
? merge: GET eden.example.com/v /delete?branch=foo
? Native devアプリの環境選択メニュー変更
? Con?gファイルの中?を元に?成するよう変更
? dev (パクり元)/stg/prdはedenで管理されないので、?でCon?gファイルに記述
eden導? - 開発者の声
? 感想
? 「?動デプロイでlead timeが短縮できる」
? 「Terraformのdev 以外のdevが消せる」
? 「利?が終わったdev環境にmaster流し直すとかしなくてもよくなった」
? Feedback
? staleなPRの環境が?動的に削除されてほしい
? どんな環境があるかの?覧がほしい
とある?に?せました
とある?に?せました
いいじゃん
いつOSS化する?
シンプル
ちょうど社内インフラ周り?
OSS化プロジェクトがある
Baikonur Project
? Terraform Moduleや各種ツールの共通化、OSS化プロジェクト
? https://github.com/baikonur-oss/docs
? PR?歓迎!コントリビュータ募集中!
? Terraform Moduleも随時募集中
? 相談やお問い合わせは、?
各レポジトリの Issue か@prog まで
edenつくるの誰か?伝って…
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
年内にedenも、
Baikonurに出します
年内にedenも、
Baikonurに出します
出ました
Baikonur eden
? aws-eden-core
? APIとCLIの共通部分
? aws-eden-cli
? CLIツール
? pip install aws-eden-cliでインストールできる
? インストール後 eden で実?できる
? eden API
? Lambda + Terraform module
開発ロードマップ
サービス側からのFBで出た要望を元に、改善して完成度を上げていく
? 作成された環境のstateを持つ
? DynamoDBで管理
? 「Target group name cannot be longer than ' ' characters」回避?branch名略称登録
? stale environment auto-cleaner
? 放置されてそうなブランチのenvを消すやつ
? e.g. ?以上デプロイがない開発環境を削除
? remote-ls
? 環境?覧出すやつ
開発ロードマップ (cont.)
? ここまでできたら、他のサービスへの導?ができる
? 導?サービス増やしていく
? そしてまたFBもらって開発を回す
まとめ
? ECS Serviceとか環境?式を(literally)秒で作成、削除できるツール作った
? かなり反響がよかった
? 管理コスト、リソースコストが削減可能
? OSS化しました
? が、ハッカソンのノリで作った?を綺麗に作り直さないといけない
? 設計を考え直して、コードを清書したい
? ?伝ってくれるニキいないかな?
おしまい
Ad

Recommended

同じサービスを ECSとOpsWorksで 運用してみた
同じサービスを ECSとOpsWorksで 運用してみた
Jun Ichikawa
?
re:invent 2016 新サービスで変わる AWS運用
re:invent 2016 新サービスで変わる AWS運用
Shuji Kikuchi
?
CloudWatch Eventsを使った ECSのAutoScaling
CloudWatch Eventsを使った ECSのAutoScaling
淳 千葉
?
Amazon ECS事始め
Amazon ECS事始め
じゅん なかざ
?
AWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
AWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
Amazon Web Services Japan
?
Application Deployment on AWS
Application Deployment on AWS
Eiji Shinohara
?
AWSで始めるサーバレスな RESTful API システム
AWSで始めるサーバレスな RESTful API システム
Masayuki Kato
?
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
Amazon Web Services Japan
?
華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築
Takehito Tanabe
?
惭测厂蚕尝→础耻谤辞谤补移行セミナー
惭测厂蚕尝→础耻谤辞谤补移行セミナー
真吾 吉田
?
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
Amazon Web Services Japan
?
罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话
罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话
Satoshi Hirayama
?
础奥厂をコート?て?定义する
础奥厂をコート?て?定义する
Sugawara Genki
?
[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk
Amazon Web Services Japan
?
AWS Black Belt Techシリーズ AWS Lambda
AWS Black Belt Techシリーズ AWS Lambda
Amazon Web Services Japan
?
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
崇之 清水
?
SolrCloud on Amazon ECS
SolrCloud on Amazon ECS
Eiji Shinohara
?
Aws 分散負荷テストツールを使ってapp runnerをスケールさせる(デモ動画削除)
Aws 分散負荷テストツールを使ってapp runnerをスケールさせる(デモ動画削除)
ShinodaYukihiro
?
Leap MotionとLambdaで「第九」を鳴らしてみる
Leap MotionとLambdaで「第九」を鳴らしてみる
Tsuyoshi Seino
?
Amazon ECSアップデート
Amazon ECSアップデート
Amazon Web Services Japan
?
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
akitsukada
?
AWS Batch Fargate対応は何をもたらすか
AWS Batch Fargate対応は何をもたらすか
Shun Fukazawa
?
AWS Elastic BeanstalkとAWS Lambdaのご紹介
AWS Elastic BeanstalkとAWS Lambdaのご紹介
Akio Katayama
?
Serverless Ninja Warriors [panel]
Serverless Ninja Warriors [panel]
真吾 吉田
?
AWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API Gateway
Shinpei Ohtani
?
CloudWatch Logsについて
CloudWatch Logsについて
Sugawara Genki
?
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
Amazon Web Services Japan
?
サーバーレスの今とこれから
サーバーレスの今とこれから
真吾 吉田
?

More Related Content

What's hot (20)

AWSで始めるサーバレスな RESTful API システム
AWSで始めるサーバレスな RESTful API システム
Masayuki Kato
?
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
Amazon Web Services Japan
?
華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築
Takehito Tanabe
?
惭测厂蚕尝→础耻谤辞谤补移行セミナー
惭测厂蚕尝→础耻谤辞谤补移行セミナー
真吾 吉田
?
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
Amazon Web Services Japan
?
罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话
罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话
Satoshi Hirayama
?
础奥厂をコート?て?定义する
础奥厂をコート?て?定义する
Sugawara Genki
?
[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk
Amazon Web Services Japan
?
AWS Black Belt Techシリーズ AWS Lambda
AWS Black Belt Techシリーズ AWS Lambda
Amazon Web Services Japan
?
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
崇之 清水
?
SolrCloud on Amazon ECS
SolrCloud on Amazon ECS
Eiji Shinohara
?
Aws 分散負荷テストツールを使ってapp runnerをスケールさせる(デモ動画削除)
Aws 分散負荷テストツールを使ってapp runnerをスケールさせる(デモ動画削除)
ShinodaYukihiro
?
Leap MotionとLambdaで「第九」を鳴らしてみる
Leap MotionとLambdaで「第九」を鳴らしてみる
Tsuyoshi Seino
?
Amazon ECSアップデート
Amazon ECSアップデート
Amazon Web Services Japan
?
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
akitsukada
?
AWS Batch Fargate対応は何をもたらすか
AWS Batch Fargate対応は何をもたらすか
Shun Fukazawa
?
AWS Elastic BeanstalkとAWS Lambdaのご紹介
AWS Elastic BeanstalkとAWS Lambdaのご紹介
Akio Katayama
?
Serverless Ninja Warriors [panel]
Serverless Ninja Warriors [panel]
真吾 吉田
?
AWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API Gateway
Shinpei Ohtani
?
CloudWatch Logsについて
CloudWatch Logsについて
Sugawara Genki
?
AWSで始めるサーバレスな RESTful API システム
AWSで始めるサーバレスな RESTful API システム
Masayuki Kato
?
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
Amazon Web Services Japan
?
華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築
Takehito Tanabe
?
惭测厂蚕尝→础耻谤辞谤补移行セミナー
惭测厂蚕尝→础耻谤辞谤补移行セミナー
真吾 吉田
?
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
Amazon Web Services Japan
?
罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话
罢别谤谤补蹿辞谤尘て?贰颁厂+贰颁搁する话
Satoshi Hirayama
?
础奥厂をコート?て?定义する
础奥厂をコート?て?定义する
Sugawara Genki
?
[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk
Amazon Web Services Japan
?
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
崇之 清水
?
Aws 分散負荷テストツールを使ってapp runnerをスケールさせる(デモ動画削除)
Aws 分散負荷テストツールを使ってapp runnerをスケールさせる(デモ動画削除)
ShinodaYukihiro
?
Leap MotionとLambdaで「第九」を鳴らしてみる
Leap MotionとLambdaで「第九」を鳴らしてみる
Tsuyoshi Seino
?
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
akitsukada
?
AWS Batch Fargate対応は何をもたらすか
AWS Batch Fargate対応は何をもたらすか
Shun Fukazawa
?
AWS Elastic BeanstalkとAWS Lambdaのご紹介
AWS Elastic BeanstalkとAWS Lambdaのご紹介
Akio Katayama
?
Serverless Ninja Warriors [panel]
Serverless Ninja Warriors [panel]
真吾 吉田
?
AWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API Gateway
Shinpei Ohtani
?
CloudWatch Logsについて
CloudWatch Logsについて
Sugawara Genki
?

Similar to JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました (20)

AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
Amazon Web Services Japan
?
サーバーレスの今とこれから
サーバーレスの今とこれから
真吾 吉田
?
Amazon Simple Workflow Service (SWF)
Amazon Simple Workflow Service (SWF)
Amazon Web Services Japan
?
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
Amazon Web Services Japan
?
Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013
Yasuhiro Horiuchi
?
Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012
Akio Katayama
?
Jenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdi
昌桓 李
?
プロビジョニングの今 ーフルマネージド?サービスを目指してー #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド?サービスを目指してー #cmdevio2016 #E
Shuji Watanabe
?
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)
Akio Katayama
?
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
Amazon Web Services Japan
?
Startup JavaScript
Startup JavaScript
Akinari Tsugo
?
Jenkins cicdテンプレートazure版の利用方法解説
Jenkins cicdテンプレートazure版の利用方法解説
Changhwan Lee
?
JAWS-UG Meets Windows (JAWS Days 2017)
JAWS-UG Meets Windows (JAWS Days 2017)
Amazon Web Services Japan
?
AWSマイスターシリーズ(Elastic Beanstalk)
AWSマイスターシリーズ(Elastic Beanstalk)
Akio Katayama
?
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
SORACOM, INC
?
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターン
seiichi arai
?
Eight meets AWS
Eight meets AWS
Tetsuya Mase
?
クラウド环境向け窜补产产颈虫カスタマイズ绍介(第5回窜补产产颈虫勉强会)
クラウド环境向け窜补产产颈虫カスタマイズ绍介(第5回窜补产产颈虫勉强会)
Daisuke Ikeda
?
础苍蝉颈产濒别入门
础苍蝉颈产濒别入门
Daiki Hayakawa
?
サーバ構築?デプロイが簡単に!Elastic beanstalk
サーバ構築?デプロイが簡単に!Elastic beanstalk
Hirokazu Ouchi
?
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
Amazon Web Services Japan
?
サーバーレスの今とこれから
サーバーレスの今とこれから
真吾 吉田
?
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
Amazon Web Services Japan
?
Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013
Yasuhiro Horiuchi
?
Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012
Akio Katayama
?
Jenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdi
昌桓 李
?
プロビジョニングの今 ーフルマネージド?サービスを目指してー #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド?サービスを目指してー #cmdevio2016 #E
Shuji Watanabe
?
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)
Akio Katayama
?
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
Amazon Web Services Japan
?
Jenkins cicdテンプレートazure版の利用方法解説
Jenkins cicdテンプレートazure版の利用方法解説
Changhwan Lee
?
AWSマイスターシリーズ(Elastic Beanstalk)
AWSマイスターシリーズ(Elastic Beanstalk)
Akio Katayama
?
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
SORACOM, INC
?
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターン
seiichi arai
?
クラウド环境向け窜补产产颈虫カスタマイズ绍介(第5回窜补产产颈虫勉强会)
クラウド环境向け窜补产产颈虫カスタマイズ绍介(第5回窜补产产颈虫勉强会)
Daisuke Ikeda
?
础苍蝉颈产濒别入门
础苍蝉颈产濒别入门
Daiki Hayakawa
?
サーバ構築?デプロイが簡単に!Elastic beanstalk
サーバ構築?デプロイが簡単に!Elastic beanstalk
Hirokazu Ouchi
?
Ad

JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました