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

Preview:

DESCRIPTION

 

Citation preview

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

Recommended