SlideShare a Scribd company logo
Anything(as(Code 
Genki&Sugawara
お前誰よ 
• 弊社でインフラまわりやってます 
• twi%er:)@sgwr_dts 
• github/bitbicket:)winebarrel
アジェンダ 
• Roadworkerの話 
• Ridgepoleの話 
• Anything3as3Codeの話
Roadworkerの話
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 
• どっちも文法が気に入らない 
• じゃあ作るか→できた
20140930 anything as_code
知見 
• 設定ファイル化すると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管理ツール 
だれかつくりませんか(泣
ご静聴ありがとうございました

More Related Content

PDF
DynamoDBのまえにキャッシュおく奴
PDF
Lambdaによるクラウド型言語の実装
PDF
SQLによるDynamoDBの操作
PDF
AWSをコードで定義する
PDF
200k/sec
PDF
serverless framework + AWS Lambda with Python
PDF
AWS Lambdaで作るクローラー/スクレイピング
PDF
Kubernetes helm & helmc
DynamoDBのまえにキャッシュおく奴
Lambdaによるクラウド型言語の実装
SQLによるDynamoDBの操作
AWSをコードで定義する
200k/sec
serverless framework + AWS Lambda with Python
AWS Lambdaで作るクローラー/スクレイピング
Kubernetes helm & helmc

What's hot (20)

PPTX
20161208 Classmethod Codenize Tools
PPTX
Aws docker-rails-demo slideshare
PDF
もうちょっと早く知りたかった kubectl
PPTX
サーバーレスアプリケーションの作り方
PDF
Active job meets kubernetes
PDF
Ruby/Rails Benchmarking and Profiling with TDD
PDF
Lambdaのscheduled eventで実現する運用視点のサーバレスパターン
PDF
Serverless frameworkでお手軽lambda運用 at #nseg #93
PPTX
Containerで変わるDevOps
PPTX
はじめての datadog
PPTX
Serverless frameworkを使ってみた話 at #nseg #90
PDF
画像処理をAWS LambdaのPythonで!
PDF
ドカドカDocker on aws
PPTX
プロパティディスクリプタとその拡張ライブラリ
PPTX
はじめてのAWS Lambda
PDF
Spark Streaming on AWS -S3からKinesisへ-
KEY
CMS for Cloud by Ruby
PDF
Spark in small or middle scale data processing with Elasticsearch
PDF
Webサーバの性能測定
PDF
AWS Lambda を使ってみた話 at づや会Vol.3
20161208 Classmethod Codenize Tools
Aws docker-rails-demo slideshare
もうちょっと早く知りたかった kubectl
サーバーレスアプリケーションの作り方
Active job meets kubernetes
Ruby/Rails Benchmarking and Profiling with TDD
Lambdaのscheduled eventで実現する運用視点のサーバレスパターン
Serverless frameworkでお手軽lambda運用 at #nseg #93
Containerで変わるDevOps
はじめての datadog
Serverless frameworkを使ってみた話 at #nseg #90
画像処理をAWS LambdaのPythonで!
ドカドカDocker on aws
プロパティディスクリプタとその拡張ライブラリ
はじめてのAWS Lambda
Spark Streaming on AWS -S3からKinesisへ-
CMS for Cloud by Ruby
Spark in small or middle scale data processing with Elasticsearch
Webサーバの性能測定
AWS Lambda を使ってみた話 at づや会Vol.3
Ad

Viewers also liked (18)

PDF
Talk about Ansible and Infrastructure as Code
PDF
Infrastructure as code LT AWS + Ansibleのお悩み相談
PDF
クックパッドの開発について
KEY
20111012 jaws ug-tokyo勉強会-cookpad-on-aws
PDF
Elixir Meetup #1 Loggerの構造と拡張
PDF
Gitを使ったRoute53の管理
PDF
EC2の天井を超える
PPTX
2014 09-23 Mechanism of Gossip protocol
PDF
ゴシッププロトコルによる冗長化と負荷分散の検証
PDF
EC2でkeepalived+LVS(DSR)
PDF
MHA on AWS+Rails
PPTX
CloudWatch Logsについて
PPTX
ナウなヤングにCloud Formationが流行ってほしい
PDF
AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜
PDF
AnsibleによるInfrastructure as code入門
PPTX
DevOps Practices: Configuration as Code
PDF
ChefとPuppetの比較
PDF
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Talk about Ansible and Infrastructure as Code
Infrastructure as code LT AWS + Ansibleのお悩み相談
クックパッドの開発について
20111012 jaws ug-tokyo勉強会-cookpad-on-aws
Elixir Meetup #1 Loggerの構造と拡張
Gitを使ったRoute53の管理
EC2の天井を超える
2014 09-23 Mechanism of Gossip protocol
ゴシッププロトコルによる冗長化と負荷分散の検証
EC2でkeepalived+LVS(DSR)
MHA on AWS+Rails
CloudWatch Logsについて
ナウなヤングにCloud Formationが流行ってほしい
AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜
AnsibleによるInfrastructure as code入門
DevOps Practices: Configuration as Code
ChefとPuppetの比較
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Ad

Similar to 20140930 anything as_code (20)

KEY
activerecord-turntable
PDF
fluentd を利用した大規模ウェブサービスのロギング
KEY
Chiba pm#1 - ArangoDB for Perl
PDF
レガシーシステムのDBマイグレーションし始めた話
PDF
HashiCorpのNomadを使ったコンテナのスケジューリング手法
PDF
Hyper → Highspeed → Development
PDF
Yesod(at FPM2012)
PDF
本番環境で使える実行コード記録機能
PDF
DXライブラリでMMO作ったよ!
PDF
アカツキはどのようにAWSを活用しているか #jawsug
PPTX
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
PDF
フロントエンド制作向け ビルドツールGruntを PHPバックエンド開発で利用する @M_Ishikawa #phpcon2013
PDF
FluentdとRedshiftの素敵な関係
PDF
成長を加速する minne の技術基盤戦略
PDF
Grails 2.0.0.M1の話
PDF
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
PDF
勉強会20140207
PPT
Drupal8を体験しよう Drupal8 & Docker
PDF
恋に落ちるデプロイツール
activerecord-turntable
fluentd を利用した大規模ウェブサービスのロギング
Chiba pm#1 - ArangoDB for Perl
レガシーシステムのDBマイグレーションし始めた話
HashiCorpのNomadを使ったコンテナのスケジューリング手法
Hyper → Highspeed → Development
Yesod(at FPM2012)
本番環境で使える実行コード記録機能
DXライブラリでMMO作ったよ!
アカツキはどのようにAWSを活用しているか #jawsug
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
フロントエンド制作向け ビルドツールGruntを PHPバックエンド開発で利用する @M_Ishikawa #phpcon2013
FluentdとRedshiftの素敵な関係
成長を加速する minne の技術基盤戦略
Grails 2.0.0.M1の話
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
勉強会20140207
Drupal8を体験しよう Drupal8 & Docker
恋に落ちるデプロイツール

More from Sugawara Genki (6)

PDF
Puppet on AWS
PDF
クックパッドでのVPC移行について
PPTX
AWS移行に向けたクックパッドの取り組み+α
PDF
AWS移行に向けたクックパッドの取り組み
KEY
クックパッドのLVSについて
KEY
サーバー・クライアントの ボトルネック調査と高速化
Puppet on AWS
クックパッドでのVPC移行について
AWS移行に向けたクックパッドの取り組み+α
AWS移行に向けたクックパッドの取り組み
クックパッドのLVSについて
サーバー・クライアントの ボトルネック調査と高速化

20140930 anything as_code