Chefとテストフレームワーク
こんにちは、誕生した僕です。 5月に催されましたMicrosoftのイベントde:code 2016に参加してきまして、そこでなんとChef社のVP ジェームズ・ケーシーさんにChefSpecやInSpecといったChefを開発、運用するために必要なテストフレームワークについて教授いただきました。(2日目のセッションでね
ちょっとこの経験を僕なりに出力すべく、本ブログを書きたいと思います。 SQL Server 2014のChef レシピを作成し、InSpecで試験する、なんて方法を書きます。
レシピの説明
作成したSQL Server 2014のChefレシピを以下に貼ります。動作環境はWindows Server 2012 R2でございます。前提条件がありまして、.NET Framework 3.5が入っていて、WindowsファイアウォールがSQL Serverアクセス許可されていることとなります。
recipe of sqlserver chef cookbook
以下、各リソースごと説明いたします。
powershell_script 'delete-install-directory'
SQL Serverをインストールする前にインストール先のディレクトリが存在するとインストールに失敗するため、存在する場合は、Remove-Itemコマンドで削除します。directory 'C:/temp/'
workフォルダとでも言いましょうか。こちらを作成します。template 'C:/temp/ConfigurationFile.ini'
SQL ServerはConfigurationFileを指定してインストールできます。ConfigurationFileをtempフォルダに置きます。powershell_script 'download-sqlserver-iso'
SQL Server インストールファイルをtempフォルダにダウンロードします。powershell_script 'mount-iso-file'
ダウンロードしたSQL Server インストールファイルを指定してISOマウントします。powershell_script 'install-sqlserver'
マウントした場合のボリューム名をattributesに登録しておき、そのボリューム名をマウントするドライブレターを取得します。 そのドライブレターに移動し、インストールします。インストールにはattributesに登録された、SQL ServerサービスアカウントのパスワードとSQL Server システムAdminアカウントのパスワードとConfigurationFileを指定し、ライセンスアグリーメントのため/IACCEPTSQLSERVERLICENSETERMSを有効にしてインストールを実行します。powershell_script 'dismount-iso-file'
インストール完了後、ISOマウントしたディスクをアンマウントします。powershell_script 'delete-iso-file'
最後にSQL Server インストールファイルをインスタンスから削除します。
RubocopとFoodcriticで静的解析
このレシピやテストコードを作成するにあたり、RubocopやFoodcriticを利用しています。 具体的には、Atom editorのプラグインで利用しています。 RubocopはChefというよりかはrubyの構文を見てくれます。
※この例ではダブルクォーテよりもシングルクォーテの方が好き、と言われています。
Foodcritic(料理評論家)はChefの構文に特化して評論してくれます。
※評論の内容はこちらにあります↓
このように静的解析を行いながら開発することで質と開発スピードを両立することができます。
ChefSpecでユニットテスト
ChefSpecでChefレシピをユニットテストします。以下に作成したレシピをテストするspecファイルを貼りますね。
spec file of sqlserver chef cookbook
以下、簡単に説明します。
describe 'sqlserver::default'
レシピsqlserver::defaultの各リソースすべてについてテストします。before
テスト実施前の前提条件をここで設定しています。ここでは、レシピ内で使用するnot_ifのコマンド結果をfalseと設定しています。it ' **** '
各リソースごとit内にテストを記述します。- allow(File).to receive(:exist?).and_return(true)
リソース内にonly_ifがある場合、その条件をtrueとし、テストします。
- allow(File).to receive(:exist?).and_return(true)
これを実行するとこんな感じです。
$ chef exec rspec default_spec.rb
レシピを作る前にspecファイルを作ってテストがパスするようにレシピを作るとテスト駆動でCookbookを開発できますね。
レシピ実行
レシピを実行します。@WIndows Server 2012 R2
PS > chef-client -z -c client.rb -j windows.json
localモード(-z)
Cookbook、client.rb、windows.jsonを用意して、localモードで実行します。client.rb
Cache、Cookbook、logレベルを定義しています。
例では、C:/tempフォルダにSQL Server インストールファイルをあらかじめダウンロードしていますので、30分ほどで完了しました。
InSpecでインテグレーションテスト
InSpecでインテグレーションテストを行います。InSpecはInfrastructure Specificationの略のようです。 InSpecはSSHだったりWinRMだったりDockerだったりに対してリモートに実行することも可能ですが、今回はWindows Server 2012R2ローカルで実行します。
WindowsでInSpecを実行する準備
InSpecファイルの説明
以下にInSpecファイルを貼ります。
inspec file of sqlserver chef cookbook
主にインストールされたであろうサービスを確認しています。簡単に説明しますね。
impact
InSpecはチームでテスト結果を共有することを強調しています。まぁ優先度ですね。title and desc(ription
こちらもチーム共有のための付帯情報です。
まとめ
FoodcriticやChefSpecは以前から気になっていました。InSpecはde:code 2016で知りました。
一連のChefレシピ開発を推進するツールは十分揃っていてWindowsでも"使える"ことが確認できました。
Windowsと自動化ってまだまだ色眼鏡で見られがちですが、MicrosoftのOSS活動と同様に自動化ツール界隈も加速しています。
Windows as a Codeに乗り遅れるな!!
コードと参考文献
紹介したコードはこちらにございます。
そしてSQL Server 2014のレシピを作成するにあたり、こちらの記事を参考にさせていただきました。
終
スターティングGo言語を読んで
GW最後の僕です。
本日はこちらの書籍を読んだので感想を書きます。
僕のプログラミング経験はJavaを昔にちょろっとstrutsで業務アプリケーションを開発した程度。あとはPerlでバックアップとかファイルを複数サーバに配布したりするスクリプトを書いていたり、RubyでAWSやCloudStackのAPI操作をしている程度の経験です。
Go言語は約一ヶ月前から勉強していて某監視サービスのプラグインを書いてみたり、その監視サービスのWebhooks先のWebアプリケーションを書いてみたりしている程度です。
さて、それでは感想を以下、箇条書きで。
・Go開発環境の説明あり。まぁサクッと流し読み。
・Go言語はオブジェクト指向でなかったり、クラスがなかったり、継承概念がなかったり、コンパイラが厳格だったり、と他プログラミング言語とは違った特色があります。この特色にはGo言語が主張するメリットがあります。ここら辺について丁寧に解説されていて理解できました。
・演算子、制御構文、変数/関数定義といったプログラミング紹介書籍には必ずあるこれらの説明ですが、本書にももちろんあります。流し読み、そして写経。
・Go言語では構造体とインターフェースが重要な要素となります。本書の購入はこちらの理解をさらに深めたいのが、一番の目的でした。結果、理解を深められましたが、もう少し、深く、量も多く割いていただけると良かったな、と感じます。
・Goパッケージの紹介。実例を基に紹介。こちら写経。
まとめ
僕のようなGo言語初心者は目を通して、写経することでGo言語の理解がさらに深まると思います。また、箇条書きした通り、本書を読んで、Go言語の思想を理解し、Go言語の書き方に対して納得できたと感じます。
それではまた
Oracle 11gを実行するDockerコンテナをRUN
こんばんは。あらかじめ決められた僕です。
Infrastructure as a codeなツールを勉強するときはOracle11gで試す癖があります。
今回は、Oracle11gを実行するDockerコンテナを作りましたので共有します。
いきなり以下にDockerfileを貼ります。
1: OSイメージはOracle Linux 6を使用
4-6:Oracleのユーザグループを作成
7-8:Oracleのユーザ作成とパスワード設定
9-10:Oracleユーザにグループを設定
11-13:ORACLE_HOME、ORACLE_BASE、インベントリー用のディレクトリをmkdr
14:Oracleデータベース用のテンプレートをCOPY
15:Oracle用ディレクトリすべてをOracleユーザの所有に設定
16:Oracle11gに必要なパッケージをyumインストール
17:Oracleに必要なカーネルパラメータが設定されたsysctl.confをCOPY
18:Oracle11gのインストールdisk1とdisk2を解凍して2つとも同じディレクトリに入れたdatabaseディレクトリをCOPY
19-20:databaseディレクトリの所有者をOracleユーザにして実行権限を付与
22-23:Oracleユーザでdatabaseディレクトリに移動
24-26:サイレントモードでrunInstaller
COPYしたdatabaseディレクトリにOracle11gインストール用の応答ファイルdb_install.rspを準備しておく
27-28:rootユーザでroot.shを実行
30:Oracle環境変数をexportするため.bash_profileをOracleユーザのホームディレクトリ直下にCOPY
ADDとCOPYだけど、ADDは解凍機能を持つので、解凍する場合に使う。単なるファイル置くだけならCOPYを使ってます。
31:Listenerとデータベースを設定するためのスクリプトoracle.shをCOPY
32:Oracleユーザのホームディレクトリ以下をOracleユーザ所有に設定
34:Listenerポートを外部に公開
35-36:OracleユーザでOracleホームディレクトリに移動
37:oracle.shを実行
よっしゃ。Dockerfileを作成したらbuildしましょう。
$ docker build -t "tsubauaaa/oracle-docker" .
割と時間かかりますが、buildが完了するとoraclelinuxとtsubauaaa/oracle-dockerの2つイメージが出来上がります。
それではRUNしたいのですが、このイメージを実行するとoracle.shが実行されます。oracle.shでは
- .bash_oracleを読み込んでOracle環境変数をexport
- listener.oraを作成
- Listenerを開始
- dbcaにOracleデータベース用テンプレートdb_create.dbtを指定してデータベース作成
- Alertログをtail
をやります。
$ docker run -p 1521:1521 --ipc=host --name oracle-docker --hostname oracle-docker tsubauaaa/oracle-docker
コンテナを停止するとデータベースのデータは消えます。
こちらにDockerfileとかoracle.shといった関連ファイルを置いています。
こちらのサイトを参考にさせていただきました。
Installing the Oracle database in docker | Frits Hoogland Weblog
おしまい
AWS DevOpsエンジニア プロフェッショナル
いろいろとモヤモヤな僕です。AWS 認定 DevOps プロフェッショナルに合格したので、お話します。
さて、AWS DevOps に合格すると、AWSを用いた継続的なデプロイ手法、高セキュリティとコンプライアンスに準拠した設計、メトリックス取得による監視設計、おなじみの可用性と自己修復なシステム設計における技術的な専門知識をAWSに認定してもらえます。
大事なのことをざっくり言うと、テスト、デプロイの自動化や伸縮性を求めた場合に、起こる課題への解決策、実際のAWS運用を想定したセキュリティ対策をおさえておくことです。
合格日:2016/02/20
勉強期間:2016/01/25 - 2016/02/19
勉強方法:
模擬試験を受けた方が良いです。模擬試験を受けることで、本番試験問題のレベルと自分の知識を見比べることができます。また、試験はそれぞれ分野(自動デプロイとかモニタリングとか)ごとに出題される割合が決まっています。自分の弱点を知ることは、勉強効率を上げることに役立ちます。(なんか真面目です)
そして、BlackBelt資料を読みます。以下に僕がよく読んだBlackBeltを並べます。
・AWS Black Belt Tech Webinar 2015 AWS OpsWorks
・AWS Black Belt Tech Webinar 2015 AWS CloudFormation
・AWS Black Belt Tech Webinar 2015 AWS Elastic Beanstalk
そんでもって今回は、OpsWorksやElastic Beanstalk の経験が乏しかったので、実際に操作しました。以下な感じが触ってみた内容です。(試験問題とこの内容は特に無関係ですよ)
・OpsWorksでアプリケーションをADDしたDockerをRUNするカスタムCookbookをカスタムレイヤーでパブリッシュ
・Gitとローカルで開発したGoアプリケーションをebcliでElastic Beanstalkにデプロイしてパブリッシュ
AWSソリューションアーキテクト プロフェッショナルで勉強した貯金があったので、受かりやすかったかと、思います。AWSデベロッパー アソシエイトさえ取れば、現在までのすべてのAWS資格を制覇することになります。すべて制覇したら、Tシャツとかくれないかな。
終わり
Mackerel Meetup #6 Tokyo #mackerelioでLTさせていただきました。
こんばんは。そーですね。最近、読書したいけど積んでる僕です。
こちらのイベントにてLTしてきたのでブログ書きます。
軽くレポリたいと思います。
・「Upcoming features in 2016」 はてなCTO 田中慎司さん
もっとも期待していたお話。特にMackerelの新機能とこれからの開発ロードマップのお話が聞けてこの時点で大満足。
・「ゼロからはじめるサービス監視の山と谷」 アニメイトラボCTO 小芝敏明さん
インフラ開発の内製化に至ったエピソードなど開発から運用までのリアルに絡めたお話にうなづきました。
・「eureka monitoring solution 〜Mackerel導入までの軌跡〜」 エウレカ 山下権人さん
Zabbix、DataDogとMackerelの競合プロダクトとMackerel選定の経緯のお話が聞けて勉強になりました。
さて、私は懇親会中のLTに登壇させていただきました。
資料はこちらです。
MackerelのWebhookでSphero社のbb-8を動かすっていう感じです。
Cylon.jsとかsinatraのコードは、こちらです。
Mackerelは、はてなのサービスの自社監視から公開されて育ったサービスです。こういう経緯ってエンジニアとしてみると、とてもカッコイイです。自分たちのビジネスに必要だから作りました。そして、このニーズは世界中にもありますよね。それでは、皆様にサービスとして提供します。って理にかなっているし、技術力が高い会社だからできることだし、技術を使って社会に貢献していると思うし、応援したいです。
May the force be with Mackerel.
AWS SysOps アドミニストレーター アソシエイト
2016年初の僕です。AWS 認定システムオペレーション(SysOps)アドミニストレータ アソシエイトに合格したので、展開します。
最近資格ばかり取り組んでいますね。でもここまできたらDevOpsも受けないわけにはいかない感じです。
さて、AWS SysOps に合格すると、AWSでのデプロイ、管理および運用における技術的な専門知識をAWSに認定してもらえます。CloudWatchとか、ELB + AutoScalingの設定とかを実際に運用することを想定することが大事ですね。
合格日:2016/01/17
点数:90%
勉強期間:2016/01/06 - 2016/01/16
勉強方法:
やはり、BlackBelt資料を読むことはマストです。以下に有用と思ったBlackBeltを。
・AWS Black Belt Tech Webinar Amazon CloudWatch & CloudWatch Logs
・AWS Black Belt Tech Webinar 2015 スポットインスタンス & Auto Scaling
・AWS マイスターシリーズ Black belt Amazon Elastic Load Balancing (ELB)
・Amazon CloudWatch & Auto Scaling AWS Black Belt Tech Webinar 2014 (旧マイスターシリーズ)
そして、以下のホワイトペーパーも読みました。
・Amazon Web Services セキュリティプロセスの概要
てな感じで、次回は、資格じゃないことを目標に。
AWS ソリューションアーキテクト プロフェッショナル
おはようございます。2015年最後の僕です。
AWSソリューションアーキテクトプロフェッショナルに合格したので報告します。
AWSソリューションアーキテクトプロフェッショナルとはAWSのサービスを使ってシステムを設計できるよ、とAWSに認定してもらう試験です。
設計と言ってもその中身は、濃密で、AWSの特徴である、可用性、拡張性、伸縮性を高めることに努めたり、事業継続計画や、オンプレミスからAWSへの移行といったケースに対して、最適解を提案します。また、RDB、NoSQLの要件に沿った採用や、オンプレミスとAWSとの専用線、VPNでのネットワーク設計も要求されます。
合格日:2015/12/25
点数:70%
勉強期間:2015/07/27 - 2015/12/24
勉強方法:
・Advanced Architecting on AWS受講
・AWS クラウドサービス活用資料集 | アマゾン ウェブ サービス(AWS 日本語)は全て目を通す
・Amazon Web Services パターン別構築・運用ガイドを読む
Amazon Web Services パターン別構築・運用ガイド
- 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2015/03/25
- メディア: 大型本
- この商品を含むブログ (2件) を見る
これ、意外に知らなかったことが載ってたり、それなりに読んで意味ありました。
・模擬試験の正解を80%以上理解する
・あとは、以下のre:Inventまとめが参考になりました
クラスメソッドさんに感謝です。
もちろん、実際に、AWSをシステムに採用し、設計することが一番意味あります。あとは、様々なシステム要件をAWSで実現した場合を、妄想することも大事です。
僕もそれなりに、様々なシステムを見た経験を持っていると思ってましたが、今回の試験に取り組む中で、まだまだと感じられて、良かったです。
2015年、ベストアウトプットです。お疲れさまでした。