20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastructure へ
-
Upload
daisuke-miyamoto -
Category
Technology
-
view
2.500 -
download
1
description
Transcript of 20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastructure へ
Infrastructure as CodeからFull Reproducible Infrastructureへ
都元ダイスケ 2013-12-10
#cmdevio
自己紹介
• 都元ダイスケ
• @daisuke_m
Javaオブジェクト指向
Eclipse恭ライセンス
薬
Mahout
Spring XMLDDD
OSGi
Haskell
Scala
AWS酒
Gradle
JIRA
#cmdevio
works
#cmdevio
自己紹介 (業務用)
• Webアプリ屋出身のAWS屋
• Classmethod所属
• AWS歴 2.5年
CloudFormationEC2S3
Glacier
ElasticMapReduce
AutoScaling ELB
CloudFront
RDS
DynamoDB
ElastiCache RedShift
IAM CloudWatchBeanstalk
Data Pipeline
OpsWorks
CloudHSM
CloudSearch
SWF
SQS
SNSSES
Transcoder
Route53
VPC
DirectConnect
StorageGateway
Mechanical Turk #cmdevio
CloudTrail
works(業務用)
✦ AWSインフラの
✦ コンサル
✦ 設計
✦ 構築
✦ 人間CloudFormer
✦ お客様向けアプリケーションの DevOps
本日のお話は この辺の経験に基いて。
#cmdevio
Do you know?
• Infrastructure as Code
• Code = コンピュータが解釈して実行できる記述
• Immutable Infrastructure
• Full Reproducible Infrastructure
#cmdevio
AWS ひとり DevOpsが考えたこと
#cmdevio
そうだ、昔話をしよう
#cmdevio
Jiemamy✦Relational Database Modeling Tool
✦スキーマ変更履歴の管理
✦マイグレーション
✦プロジェクトをcheckoutした後、コマンド一発でDB構築ができるべき
#cmdevio
‒ 都元ダイスケ (2009~2011年頃)
“プロジェクトをcheckoutした後、コマンド一発でDB構築ができるべき”
#cmdevio
環境と戦う• アプリは環境の中で動く
• アプリの制御下にない前提条件 • オペレーションシステム(OS) • 環境変数 • Javaランタイム • DBサーバ・APサーバ
• 自動化(automated)または文書化(documented)重要#cmdevio
よくある風景• チェックアウト
• (コンパイル と パッケージング)
• デプロイして起動(localhost辺りに)
• ブラウザからアクセスして操作
!
• エラーorz#cmdevio
Not reproducible• DBは別途、このSQLを流してくださいCREATE TABLE T_GROUP ( ID integer NOT NULL, NAME varchar(32) NOT NULL DEFAULT 'default group', STATUS integer NOT NULL, CREATED_DATE DATE DEFAULT now(), UPDATED_DATE DATE DEFAULT now(), DELETED_DATE DATE, PRIMARY KEY (ID) ); CREATE TABLE T_USER ( ID integer NOT NULL, NAME varchar(32) NOT NULL DEFAULT 'default user', STATUS integer NOT NULL, CREATED_DATE DATE DEFAULT now(), (...略...) #cmdevio
ときにAWSでは…
#cmdevio
XXXのインストール• AWSアカウントの取得
• S3バケットの作成
• RDS作って
• 初期化SQL流して
• DynamoDB作成して
• EC2インスタンス起動
• SSHでサーバに入って
• アプリインストール
• アプリ設定
• ELB設定
• CDNかぶせて
• …その話長い?#cmdevio
• Jiemamy...
• あの頃のオレたちは視野が狭かった。
• コマンド一発でDB構築ができるべき?
• 甘い。
• コマンド一発でインフラ含む環境構築が全て自動で出来るべき!
#cmdevio
• プロジェクトのcheckout!
• (アクセスキーや秘密鍵等、 個人に依存する少々の設定)
• デプロイコマンド実行
• アプリケーションにアクセス
• CloudFormation
• DNS設定
• DBの初期化
• ビルド
• デプロイ
#cmdevio
‒ D-chan
“SSHしたら負けかなと思っている。”
※ あくまでも心意気の話ですが
#cmdevio
環境依存リソースを極限まで排除
• privateなAMI
• AWS Account ID付きARN
• 避けづらいものはパラメータにする
• AWSアカウントの AccessKey / SecretKey
• EC2キーペア
• DNS Hosted zone #cmdevio
Gradle AWS Plugin• OSS from Classmethod
• v0.5 公開済み(だけどDocument無いorz)
!
!
• 鋭意Document整備中#cmdevioの鋭気を養い
Elastic Beanstalkconfiguration template
#cmdevio
DevOps
• 一発デプロイを妨げる壁を一緒に乗り越える
!
• DBのホスト名等はどうやって受け渡す?
• S3のバケット名やSNSトピック名は?
#cmdevio
./gradlew awsFullDeploy
#cmdevio
ちなみに撤収も awsFullUndeploy で一発です。
つまり あらゆるAWSアカウント環境に対して
システムの展開が可能
#cmdevio
• git push
• Jenkins: awsFullDeploy
• Selenium: integration test
• Jenkins: awsFullUndeploy
#cmdevio
Full reproducible Infrastructure
#cmdevio