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

3,610 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,610
On SlideShare
0
From Embeds
0
Number of Embeds
2,025
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. Infrastructure as Codeから Full Reproducible Infrastructureへ 都元ダイスケ 2013-12-10 #cmdevio
  2. 2. 自己紹介 • 都元ダイスケ • @daisuke_m Java オブジェクト指向 Eclipse恭 ライセンス 薬 Mahout Spring XML DDD OSGi Haskell Scala AWS 酒 Gradle JIRA #cmdevio
  3. 3. works #cmdevio
  4. 4. 自己紹介 (業務用) • 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
  5. 5. works(業務用) ✦ AWSインフラの ✦ コンサル ✦ 設計 ✦ 構築 ✦ 人間CloudFormer ✦ お客様向けアプリケーションの DevOps 本日のお話は この辺の経験に基いて。 #cmdevio
  6. 6. Do you know? • Infrastructure as Code • Code = コンピュータが解釈して実行できる記述 • Immutable Infrastructure • Full Reproducible Infrastructure #cmdevio
  7. 7. AWS ひとり DevOps が考えたこと #cmdevio
  8. 8. そうだ、昔話をしよう #cmdevio
  9. 9. Jiemamy ✦ Relational Database Modeling Tool ✦ スキーマ変更履歴の管理 ✦ マイグレーション ✦ プロジェクトをcheckoutした後、
 コマンド一発でDB構築ができるべき #cmdevio
  10. 10. ‒ 都元ダイスケ (2009∼2011年頃) プロジェクトをcheckoutした後、
 コマンド一発でDB構築ができるべき #cmdevio
  11. 11. 環境と戦う • アプリは環境の中で動く • アプリの制御下にない前提条件 • オペレーションシステム(OS) • 環境変数 • Javaランタイム • DBサーバ・APサーバ • 自動化(automated)または文書化(documented)重要 #cmdevio
  12. 12. よくある風景 • チェックアウト • (コンパイル と パッケージング) • デプロイして起動(localhost辺りに) • ブラウザからアクセスして操作 • エラーorz #cmdevio
  13. 13. 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
  14. 14. ときにAWSでは… #cmdevio
  15. 15. XXXのインストール • AWSアカウントの取得 • S3バケットの作成 • RDS作って • 初期化SQL流して • DynamoDB作成して • EC2インスタンス起動 • SSHでサーバに入って • アプリインストール • アプリ設定 • ELB設定 • CDNかぶせて • …その話長い? #cmdevio
  16. 16. • Jiemamy... • あの頃のオレたちは視野が狭かった。 • コマンド一発でDB構築ができるべき? • 甘い。 • コマンド一発でインフラ含む環境構築が
 全て自動で出来るべき! #cmdevio
  17. 17. • プロジェクトのcheckout! • (アクセスキーや秘密 等、
  個人に依存する少々の設定) • デプロイコマンド実行 • アプリケーションにアクセス • CloudFormation • DNS設定 • DBの初期化 • ビルド • デプロイ #cmdevio
  18. 18. ‒ D-chan SSHしたら負けかなと思っている。 ※ あくまでも心意気の話ですが #cmdevio
  19. 19. 環境依存リソースを極限まで 排除 • privateなAMI • AWS Account ID付きARN • 避けづらいものはパラメータにする • AWSアカウントの AccessKey / SecretKey • EC2キーペア • DNS Hosted zone #cmdevio
  20. 20. Gradle AWS Plugin • OSS from Classmethod • v0.5 公開済み(だけどDocument無いorz) • 鋭意Document整備中 #cmdevioの鋭気を養い
  21. 21. Elastic Beanstalk configuration template #cmdevio
  22. 22. DevOps • 一発デプロイを妨げる壁を一緒に乗り越える • DBのホスト名等はどうやって受け渡す? • S3のバケット名やSNSトピック名は? #cmdevio
  23. 23. ./gradlew awsFullDeploy #cmdevio ちなみに撤収も awsFullUndeploy で一発です。
  24. 24. つまり あらゆるAWSアカウント環境に対して システムの展開が可能 #cmdevio
  25. 25. • git push • Jenkins: awsFullDeploy • Selenium: integration test • Jenkins: awsFullUndeploy #cmdevio
  26. 26. Full reproducible Infrastructure #cmdevio

×