More Related Content
Similar to プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E (20)
More from Shuji Watanabe (20)
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
- 6. プロビジョニングとは?
• リソース調達
• サーバ(EC2), ロードバランサ(ELB)
• インフラセットアップ
• ネットワーク, ファイヤウォール
• サーバ・プロビジョニング
• OSの設定, ミドルウェアのインストール・設定
• サービス・プロビジョニング
• アプリケーションのデプロイなど
6Ⓒ Classmethod, Inc.
サービスを利用可能にするまでの行程
- 10. プロビジョニング自動化のステップ
10Ⓒ Classmethod, Inc.
レベル0 すべてを調べながら、手作業で行っている
レベル1 セットアップ手順などがドキュメントにまとまっている
レベル2
手順の一部が、スクリプト化またはプロビジョニングツー
ルで記述されている
レベル3
手順のほとんどがスクリプト化またはプロビジョニングツ
ールで記述されており、何時でも環境を即時に作成できる
レベル4
手順のほとんどが自動化されており、環境の変更時にはバ
ージョン管理されたスクリプトや設定ファイルを更新する
フローが確率されている
レベル5 運用を踏まえた自動化の仕組みが完備されている
- 11. 自動化のゴールは運用
• 開発者の自己満足にしない
• 新しいツールは使ってみたくなる
• 自動化は楽しいため陥りがち
• 長期運用を前提とする
• メンテ不能な秘伝のレシピを作らない
• メンテしない前提で使い切り(ワンショット)も検討
• スキルの底上げが必要な場合もある
• 学習コスト < メンテコストを見極める
• バージョン管理システムが使えない場合は危機感を持つ
• 自分たちで運用すると考えよう
11Ⓒ Classmethod, Inc.
- 13. CloudFormationとは?
• AWSが提供するサービスのひとつ
• AWSリソースを設定ファイルで定義(JSON形式)
• VPCの作成からEC2の作成までカバー
• アップデートによる成長するインフラ
13Ⓒ Classmethod, Inc.
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Resources" : {
"EC2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"InstanceType" : { "Ref" : "InstanceType" },
"SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ],
"KeyName" : { "Ref" : "KeyName" },
"ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },
{ "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }
} } } }
- 14. テンプレートのパターン
• サービス・テンプレート
• 特定サービス(例: WordPress)環境をワンクリックで構築
• ビッグバン・テンプレート http://dev.classmethod.jp/series/ac2013-aws/
• フルスタック・テンプレート
• 全AWSリソースの管理をCloudFormationで行う
• クイックスタート・テンプレート
• ネットワーク(VPC)などの基本部分のみを作成
• 構築後は手動でリソースを追加
• スニペット・テンプレート
• 特定用途のIAMロールやセキュリティグループの作成
14Ⓒ Classmethod, Inc.
- 21. Ansibleとは?
• サーバの構成管理ツール
• OSやミドルウェアの設定をファイル定義(YAML)
• OSユーザの作成からミドルウェアの設定までカバー
• SSH接続で実行(エージェントレス)
• サーバの冪等性を保つ
21Ⓒ Classmethod, Inc.
- hosts: webservers
tasks:
- name: ensure apache is at the latest version
yum: name=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
- 23. 冪等性
• 設定ファイルがサーバの状態を定義
• 設定ファイルを変更しなければサーバの状態も変更されない
• ok → 状態が変わっていない
• changed → 状態が変わった
• 冪等性を保つ運用がキモ
23Ⓒ Classmethod, Inc.
- hosts: webservers
tasks:
- name: ensure apache is at the latest version
yum: name=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
- 33. リビジョンのアップロード
• リビジョン=アプリケーションのアーカイブ
• S3にアップロード
• バージョンや日付を付けて作成
• v1.0, v1.2, 20160223
• 本番環境・検証環境などで異なる設定はここで吸収
• appspec.yml に配備時の設定を記述
33Ⓒ Classmethod, Inc.
aws deploy push
--application-name WordPress_App
--description "This is a revision for the application WordPress_App"
--ignore-hidden-files
--s3-location s3://codedeploydemobucket/WordPressApp.zip
--source .
- 34. デプロイ
• AWS CLIまたはコンソールからデプロイ
• フックスクリプト
• インストール前に停止、インストール後に起動など
• ファイルの配置/パーミッション
34Ⓒ Classmethod, Inc.
version: 0.0
os: operating-system-name
files:
source-destination-files-mappings
permissions:
permissions-specifications
hooks:
deployment-lifecycle-event-mappings
- 38. フルマネージドを目指して
• リリース後の運用を考える
• 監視
• 障害対応
• バックアップ
• 可能な限りお任せなシステムが理想
• RDSのようなフルマネージド・サービス
• 稀に発生するトラブルのみに対応したい
• Elastic Beanstalkは敷居が高い…
38Ⓒ Classmethod, Inc.
AutoScaling + CodeDeploy
- 45. Blue Green Deployment
• 本番環境のリリースのダウンタイム無し
• デプロイメントグループをふたつ用意する
• EC2であれば2系統用意(片系は通常は停止)
• AutoScalingであれば希望インスタンス数で調整
• バッチ処理などは注意すること
• RDSのスキーマ変更時は、ダウンタイムを許容
• 許容できない場合はスキーマ変更による互換性(高コスト)
45Ⓒ Classmethod, Inc.