27
Infrastructure as Codeから Full Reproducible Infrastructureへ 都元ダイスケ 2013-12-10 #cmdevio

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

Infrastructure as CodeからFull Reproducible Infrastructureへ

都元ダイスケ 2013-12-10

#cmdevio

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

自己紹介

• 都元ダイスケ

• @daisuke_m

Javaオブジェクト指向

Eclipse恭ライセンス

Mahout

Spring XMLDDD

OSGi

Haskell

Scala

AWS酒

Gradle

JIRA

#cmdevio

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

works

#cmdevio

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

自己紹介 (業務用)

• 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

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

works(業務用)

✦ AWSインフラの

✦ コンサル

✦ 設計

✦ 構築

✦ 人間CloudFormer

✦ お客様向けアプリケーションの DevOps

本日のお話は この辺の経験に基いて。

#cmdevio

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

Do you know?

• Infrastructure as Code

• Code = コンピュータが解釈して実行できる記述

• Immutable Infrastructure

• Full Reproducible Infrastructure

#cmdevio

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

AWS ひとり DevOpsが考えたこと

#cmdevio

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

そうだ、昔話をしよう

#cmdevio

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

Jiemamy✦Relational Database Modeling Tool

✦スキーマ変更履歴の管理

✦マイグレーション

✦プロジェクトをcheckoutした後、コマンド一発でDB構築ができるべき

#cmdevio

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

‒ 都元ダイスケ (2009~2011年頃)

“プロジェクトをcheckoutした後、コマンド一発でDB構築ができるべき”

#cmdevio

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

環境と戦う• アプリは環境の中で動く

• アプリの制御下にない前提条件 • オペレーションシステム(OS) • 環境変数 • Javaランタイム • DBサーバ・APサーバ

• 自動化(automated)または文書化(documented)重要#cmdevio

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

よくある風景• チェックアウト

• (コンパイル と パッケージング)

• デプロイして起動(localhost辺りに)

• ブラウザからアクセスして操作

!

• エラーorz#cmdevio

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

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

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

ときにAWSでは…

#cmdevio

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

XXXのインストール• AWSアカウントの取得

• S3バケットの作成

• RDS作って

• 初期化SQL流して

• DynamoDB作成して

• EC2インスタンス起動

• SSHでサーバに入って

• アプリインストール

• アプリ設定

• ELB設定

• CDNかぶせて

• …その話長い?#cmdevio

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

• Jiemamy...

• あの頃のオレたちは視野が狭かった。

• コマンド一発でDB構築ができるべき?

• 甘い。

• コマンド一発でインフラ含む環境構築が全て自動で出来るべき!

#cmdevio

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

• プロジェクトのcheckout!

• (アクセスキーや秘密鍵等、 個人に依存する少々の設定)

• デプロイコマンド実行

• アプリケーションにアクセス

• CloudFormation

• DNS設定

• DBの初期化

• ビルド

• デプロイ

#cmdevio

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

‒ D-chan

“SSHしたら負けかなと思っている。”

※ あくまでも心意気の話ですが

#cmdevio

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

環境依存リソースを極限まで排除

• privateなAMI

• AWS Account ID付きARN

• 避けづらいものはパラメータにする

• AWSアカウントの AccessKey / SecretKey

• EC2キーペア

• DNS Hosted zone #cmdevio

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

Gradle AWS Plugin• OSS from Classmethod

• v0.5 公開済み(だけどDocument無いorz)

!

!

• 鋭意Document整備中#cmdevioの鋭気を養い

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

Elastic Beanstalkconfiguration template

#cmdevio

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

DevOps

• 一発デプロイを妨げる壁を一緒に乗り越える

!

• DBのホスト名等はどうやって受け渡す?

• S3のバケット名やSNSトピック名は?

#cmdevio

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

./gradlew awsFullDeploy

#cmdevio

ちなみに撤収も awsFullUndeploy で一発です。

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

つまり あらゆるAWSアカウント環境に対して

システムの展開が可能

#cmdevio

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

• git push

• Jenkins: awsFullDeploy

• Selenium: integration test

• Jenkins: awsFullUndeploy

#cmdevio

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

Full reproducible Infrastructure

#cmdevio