20140930 anything as_code
Upcoming SlideShare
Loading in...5
×
 

20140930 anything as_code

on

  • 803 views

20140930 anything as_code

20140930 anything as_code

Statistics

Views

Total Views
803
Views on SlideShare
275
Embed Views
528

Actions

Likes
4
Downloads
0
Comments
0

4 Embeds 528

http://sechiro.hatenablog.com 510
https://twitter.com 20
http://feedly.com 3
http://news.google.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

20140930 anything as_code 20140930 anything as_code Presentation Transcript

  • Anything(as(Code Genki&Sugawara
  • お前誰よ • 弊社でインフラまわりやってます • twi%er:)@sgwr_dts • github/bitbicket:)winebarrel
  • アジェンダ • Roadworkerの話 • Ridgepoleの話 • Anything3as3Codeの話 View slide
  • Roadworkerの話 View slide
  • Roadworker • github.com/winebarrel/roadworker • Route53の管理ツール • DSLでRoute53を定義する • 冪等性を保証 hosted_zone "winebarrel.jp." do rrset "winebarrel.jp.", "A" do ttl 300 resource_records( "127.0.0.1", "127.0.0.2" ) end
  • Demo
  • ワークフロー
  • DSLを修正
  • プルリク・レビュー
  • マージ・適用
  • Roadworker以前 • ときは2013年 • R53(Foxというツールを使っていました • github.com/cookpad/r53;fox
  • 以前のワークフロー 1. DNSの更新を宣言 2. R53*FoxでRoute53を変更 3. JSONにエクスポートしてgitで保存
  • 問題点 • 事前確認できない • エクスポートを忘れると変更履歴が残らない • 元の状態を復元しにくい(できなくはない)
  • オペミス発生 • MXを消してメールが届かない • 誰がいつ更新したのかよく分からない…
  • 一方その頃… • puppetlabsのリポジトリをあさってい ました • puppetlabs/puppetlabs+dns
  • Puppet的に管理するのも ありかな?
  • Puppet/Chef? • Chefもありました • github.com/hw1cookbooks/route53 • どっちも文法が気に入らない • じゃあ作るか→できた
  • 知見 • 設定ファイル化するとGitで管理できる • GitHubのワークフローに乗せられる • 管理が楽になる
  • いろいろ作った
  • Piculet • github.com/winebarrel/piculet • セキュリティグループの管理ツール ec2 "vpc-XXXXXXXX" do security_group "default" do description "default VPC security group" ingress do permission :tcp, 22..22 do ip_ranges( "0.0.0.0/0", ) end
  • Kelbim • github.com/winebarrel/kelbim • ELBの管理ツール ec2 "vpc-XXXXXXXXX" do load_balancer "my-load-balancer", :internal => true do instances( "nyar", "yog" ) listeners do listener [:tcp, 80] => [:tcp, 80] listener [:https, 443] => [:http, 80] do
  • Radiosonde • github.com/winebarrel/radiosonde • CloudWatch7Alarmの管理ツール alarm "alarm1" do namespace "AWS/EC2" metric_name "CPUUtilization" dimensions "InstanceId"=>"i-XXXXXXXX" period 300 statistic :average threshold ">=", 50.0 evaluation_periods 1 actions_enabled true
  • Meteorlog • github.com/winebarrel/meteorlog • CloudWatch6Logsの管理ツール log_group "/var/log/messages" do log_stream "my-stream" metric_filter "MyAppAccessCount" do metric :name=>"EventCount", :namespace=>"YourNamespace", :value=>"1" end metric_filter "MyAppAccessCount2" do
  • バカの一つ覚えなんですが Code化しておくと いろいろ捗るので…
  • Ridgepoleの話
  • Ridgepole • github.com/winebarrel/ridgepole • DBスキーマの管理ツール • Rails9DSLでスキーマを定義する • 冪等性を保証 • dry9runできる • 弊社ブログでバズった create_table "articles", force: true do |t| t.string "title" t.text "text" t.datetime "created_at" t.datetime "updated_at" end
  • Demo
  • 作成の経緯 • 別プロジェクトで死んでいた • GW最終日「会社行きたくないでござる」 • 現実を忘れるためにコーディング • できた
  • Rails&DSL • SQL::Translator→Perlメンテできない • SQLのパース→絶対メンテできない • RailsのDSLならよいかな…
  • DBまわりのワークフロー
  • 開発環境のデータをできるだけ本番に近づける techlife.cookpad.com/entry/2014/10/03/110806
  • 歴代のスキーマ管理ツール
  • 一代目 • Google'Spreadseat • DDL・記入者・実施日 • DDLを記入して実行以来 • 「クエリを実行してください」「完了 しました」
  • 二代目 • Webツール • 基本はスプレッドシートと同じ • DDL・作成者をポスト • ボタンを押すとステージングに反映 • 本番への適用はインフラ作業 • AWS移行のどさくさで消滅
  • 三代目 • GitHub(Enterprise • mysqldump+Rakeタスク • ステージング環境からスキーマをエク スポート • テーブル定義の差分+ALTER文のDDLを プルリク • レビュー • マージ後、RakeタスクでDDLを適用
  • 三代目以前 • 主要DBのテーブルが増え続けていた • いらないテーブルも多かった • スキーマの情報は$show create table • ステージングと本番には乖離があった
  • 三代目以後 • (一応)GitHubのワークフローには乗せられた • DDLは手書き… • DDLのテストが微妙 • メタ情報を書きにくい • 本番とステージングで別ファイル定義
  • なんかやだ
  • Ridgepoleの導入 • できたので導入したかった"(現実逃避) • Rails"DSLに置き換えただけだとメリットが少ない • 「DDLのCIやるか」
  • DDL#CI
  • 知見 • スキーマ定義もGitで管理すると楽 • DDLのCI便利 • CloudForma1onはCIに使える
  • Anything(as(Codeの話
  • DSL管理のアイデア • Puppet・Chefのパクリ • Puppet+GitHubによるインフラ管理がすごくよかった • なんでもGitHubで管理しよう
  • 仕組み 1. APIで現在の状態を取得→Hashにする 2. DSLの定義をパース→Hashにする 3. Hash化された定義を比較 4. 差分をAPIで実行(dry4runの場合はログ出力)
  • 技術的にたいしたことは やってません しかし…
  • 応用範囲が広い • AWS全般 • LDAP等アカウント管理 • インフラ定義 • サービス定義 • ほにゃらら定義…
  • なにがなんでも!as!Code? 技術的な学びはすくない しかし、何でもコード化したくなる モチベーションは 「無駄をなくしたい」 「労力!>!/dev/nul」の撲滅
  • Nothing(as(Code • 開発者「DNS変更してください」 • インフラ「わかりました」 • 開発者「ポート空けてください」 • インフラ「分かりました」 • 開発者「スキーマ変更してください」 • インフラ「(ry」
  • 問題点 • 権限を適切に分離できない • 全員に強力な権限を与えるのも問題 • 開発者:#めんどくさい • インフラ:#人間バッチ化・無駄なスリル
  • Code化+GitHub • プルリクで手軽・明確に変更を依頼できる • 明確な変更を適切にレビューできる • 自動化により本番適用時の心労が減る _人人人人人人人_ > 突然の幸せ < ‾Y^Y^Y^Y^Y^Y‾
  • まとめ • 便利ツール作ったのでどうぞご利用ください • DSL管理ツール作るのは簡単です • Anything,as,Codeで幸せになりましょう
  • ところでZabbixの DSL管理ツール だれかつくりませんか(泣
  • ご静聴ありがとうございました