SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
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を導⼊
• ECS簡単じゃん、楽じゃん、最⾼
• 導⼊してみよう
• ええ感じやし、このままオンプレからAWSに移設しよう!
• わーい\(^o^)∕
わーい\(^o^)∕
移設します
移設が終わります
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 は私が使ってるから
触らないで」
dev環境がまた増える
dev環境がまた増える
眠れない夜
疲労
涙
割り当て表管理
原始的コミュニケーション
コンフリクト残業
⼿動デプロイ
汗
prodまでのlead time延⻑
dev環境がまた増える
イライラ
Apply Failed
dev環境10以上
誰も知らないエンドポイント
腐る環境
余分なコスト
Toil
設定差分
Build Failed
※イメージです
∕(^o^)\
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 Definitionの作成とdeployのみ
• REST⾵ APIとCLIがあります
• REST⾵ != RESTful
• Reference (参照)となるECS Serviceを指定するとそれをパクってくれる
• dev 的reference serviceはIaaC(Terraformなど)で管理想定
• 環境を作成するたびにDescribeを⾏う
• dev を変更すれば、それ以降に作成された動的環境が新しい設定で作成される
• 既存の環境を更新したければ、⼀旦delete
edenがつくるもの
. ECS Task Definition
. ALB Target Group
. ECS Service
. ALB Listener Rule(共通ALBにHostHeaderルール追加のみ)
. Route CNAME record(共通ALBを指すだけ)
. Configファイルの更新(後述)
(環境削除は逆順)
Configファイル is 何
• 開発アプリケーション(Web or Native)に、

どんな環境があるかを知らせるためのJSONファイル
• 隠しメニューを出すとJSONから⽣成された環境⼀覧が出る
• 環境が切り替えられる
{
"environments": [
{
"env": "dev",
"name": "dev-dynamic-test",
"api_endpoint": "api-test.dev.example.com"
}
]
}
Configファイル
{
"environments": [
{
"env": "dev", // 固定、NativeでのAPNS等、外部APIのdev/stg/prd切り替え用
"name": "dev-dynamic-test",
"api_endpoint": "api-test.dev.example.com"
}
]
}
// 同一環境で複数のendpointもできます…
// api_endpointのキー名が変えられます…
Configファイル
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アプリの環境選択メニュー変更
• Configファイルの中⾝を元に⽣成するよう変更
• dev (パクり元)/stg/prdはedenで管理されないので、⼿でConfigファイルに記述
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つくるの誰か⼿伝って…
年内に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化しました
• が、ハッカソンのノリで作った💩を綺麗に作り直さないといけない
• 設計を考え直して、コードを清書したい
• ⼿伝ってくれるニキいないかな👀
おしまい

Mais conteúdo relacionado

Mais procurados

AWSをコードで定義する
AWSをコードで定義するAWSをコードで定義する
AWSをコードで定義する
Sugawara Genki
 
[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk
Amazon Web Services Japan
 
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
崇之 清水
 

Mais procurados (20)

AWSで始めるサーバレスな RESTful API システム
AWSで始めるサーバレスな RESTful API システムAWSで始めるサーバレスな RESTful API システム
AWSで始めるサーバレスな RESTful API システム
 
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic BeanstalkAWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
 
華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築
 
MySQL→Aurora移行セミナー
MySQL→Aurora移行セミナーMySQL→Aurora移行セミナー
MySQL→Aurora移行セミナー
 
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
AWS Black Belt Techシリーズ  AWS  Elastic  BeanstalkAWS Black Belt Techシリーズ  AWS  Elastic  Beanstalk
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
 
TerraformでECS+ECRする話
TerraformでECS+ECRする話TerraformでECS+ECRする話
TerraformでECS+ECRする話
 
AWSをコードで定義する
AWSをコードで定義するAWSをコードで定義する
AWSをコードで定義する
 
[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk
 
AWS Black Belt Techシリーズ AWS Lambda
AWS Black Belt Techシリーズ AWS LambdaAWS Black Belt Techシリーズ AWS Lambda
AWS Black Belt Techシリーズ AWS Lambda
 
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
 
SolrCloud on Amazon ECS
SolrCloud on Amazon ECSSolrCloud on Amazon ECS
SolrCloud on Amazon ECS
 
Aws 分散負荷テストツールを使ってapp runnerをスケールさせる(デモ動画削除)
Aws 分散負荷テストツールを使ってapp runnerをスケールさせる(デモ動画削除)Aws 分散負荷テストツールを使ってapp runnerをスケールさせる(デモ動画削除)
Aws 分散負荷テストツールを使ってapp runnerをスケールさせる(デモ動画削除)
 
Leap MotionとLambdaで「第九」を鳴らしてみる
Leap MotionとLambdaで「第九」を鳴らしてみるLeap MotionとLambdaで「第九」を鳴らしてみる
Leap MotionとLambdaで「第九」を鳴らしてみる
 
Amazon ECSアップデート
Amazon ECSアップデートAmazon ECSアップデート
Amazon ECSアップデート
 
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
 
AWS Batch Fargate対応は何をもたらすか
AWS Batch Fargate対応は何をもたらすかAWS Batch Fargate対応は何をもたらすか
AWS Batch Fargate対応は何をもたらすか
 
AWS Elastic BeanstalkとAWS Lambdaのご紹介
AWS Elastic BeanstalkとAWS Lambdaのご紹介AWS Elastic BeanstalkとAWS Lambdaのご紹介
AWS Elastic BeanstalkとAWS Lambdaのご紹介
 
Serverless Ninja Warriors [panel]
Serverless Ninja Warriors [panel]Serverless Ninja Warriors [panel]
Serverless Ninja Warriors [panel]
 
AWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API GatewayAWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API Gateway
 
CloudWatch Logsについて
CloudWatch LogsについてCloudWatch Logsについて
CloudWatch Logsについて
 

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

AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~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
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)
Akio Katayama
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
Amazon Web Services Japan
 
AWSマイスターシリーズ(Elastic Beanstalk)
AWSマイスターシリーズ(Elastic Beanstalk)AWSマイスターシリーズ(Elastic Beanstalk)
AWSマイスターシリーズ(Elastic Beanstalk)
Akio Katayama
 
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
SORACOM, INC
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Daisuke Ikeda
 
サーバ構築・デプロイが簡単に!Elastic beanstalk
サーバ構築・デプロイが簡単に!Elastic beanstalkサーバ構築・デプロイが簡単に!Elastic beanstalk
サーバ構築・デプロイが簡単に!Elastic beanstalk
Hirokazu Ouchi
 

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

AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic BeanstalkAWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
Amazon Simple Workflow Service (SWF)
Amazon Simple Workflow Service (SWF)Amazon Simple Workflow Service (SWF)
Amazon Simple Workflow Service (SWF)
 
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
 
Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013
 
Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012
 
Jenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdiJenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdi
 
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド・サービスを目指してー  #cmdevio2016 #Eプロビジョニングの今 ーフルマネージド・サービスを目指してー  #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
 
Startup JavaScript
Startup JavaScriptStartup JavaScript
Startup JavaScript
 
Jenkins cicdテンプレートazure版の利用方法解説
Jenkins cicdテンプレートazure版の利用方法解説Jenkins cicdテンプレートazure版の利用方法解説
Jenkins cicdテンプレートazure版の利用方法解説
 
JAWS-UG Meets Windows (JAWS Days 2017)
JAWS-UG Meets Windows (JAWS Days 2017)JAWS-UG Meets Windows (JAWS Days 2017)
JAWS-UG Meets Windows (JAWS Days 2017)
 
AWSマイスターシリーズ(Elastic Beanstalk)
AWSマイスターシリーズ(Elastic Beanstalk)AWSマイスターシリーズ(Elastic Beanstalk)
AWSマイスターシリーズ(Elastic Beanstalk)
 
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターン
 
Eight meets AWS
Eight meets AWSEight meets AWS
Eight meets AWS
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
サーバ構築・デプロイが簡単に!Elastic beanstalk
サーバ構築・デプロイが簡単に!Elastic beanstalkサーバ構築・デプロイが簡単に!Elastic beanstalk
サーバ構築・デプロイが簡単に!Elastic beanstalk
 

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