Infrastructure as Codeから
Full Reproducible
Infrastructureへ
都元ダイスケ
2013-12-10
#cmdevio
自己紹介
• 都元ダイスケ
• @daisuke_m
Java
オブジェクト指向
Eclipse恭
ライセンス
薬
Mahout
Spring XML
DDD
OSGi
Haskell
Scala
AWS
酒
Gradle
JIRA
#cmdevio
works
#cmdevio
自己紹介 (業務用)
• Webアプリ屋

出身のAWS屋
• Classmethod所属
• AWS歴 2.5年
CloudFormation
EC2S3
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 Beanstalk
configuration 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

20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastructure へ