geek.conf.2

あるインフラエンジニアの備忘録

AWS re:Invent 2017参加の所感

こんばんは。AWS re:Invent 2017に参加しています。ラスベガスからのお便りです。

f:id:tsubauaaa:20171130144126j:plain

f:id:tsubauaaa:20171130144147j:plain

本日11月29日AMにラスベガスにてAWS CEOのAndy Jassyから様々な新しいAWSサービスが発表されました。それぞれのサービスについては他の記事にお任せします。

発表されたサービスのうち、以下のサービスに衝撃を受けたのでブログを書いた次第です。

 

f:id:tsubauaaa:20171130144302j:plain

簡単に言うと、EC2サービスは仮想サーバをオンデマンドに起動するサービスですが、Fargateは仮想サーバをコンテナに置き換えたサービスになります。

Fargateがなかった時にはAWSでコンテナを扱う際の最良はECSを使うことでした。

ECSもすごく好きなサービスなのですが、大きな課題があると思います。それは

コンテナをホストするECSインスタンスの運用コストです。

具体的には以下のような課題があると思っています。

     ・ECSインスタンスのOSの管理

        → ECS-Agent / OSチューニング / ログ / 監視と管理項目はいっぱい出てきます

     ・ECSインスタンスのAutoScaling設定

        → さらにコンテナのApp AutoScalingと帳尻合わせする必要もあります

     ・ECSインスタンスのOSの更新

        → サービスに影響なくECSインスタンスを更新する必要があります

 

などなど。まぁ一つの機能を持ったサーバー群の管理ってやることたくさんある上にサービスを提供するコンテナをホストしているのでさらに複雑になりますよね。

今回のre:InventでECSの開発に携わるAWSの社員の方に直接フィードバックできる機会があり、上記の課題の解消を相談しようとしていました。

 

そして、Fargateが発表され、Fargateを採用すれば、上記のECSインスタンスの課題は全てなくなりました。

これは現在一緒にサービス開発に取り組んでいるチームにとってもサービスにとっても良いことなんですが、同時に恐怖も感じました。

私は主にAWS、ネットワークといったいわゆるインフラ(もう言わないかもしれませんが)を得意としてチームに参加しています。

そのこともあり、上記ECSインスタンスの課題に取り組んで、解消するために改善に努めてきました。

例えば、AnsibleでOS設定をコード化したり、Packerでゴールデンイメージを作ったり、新しいAMIが設定されたLaunchConfigurationをAutoScalingGroupに適用して手動でローリング更新したり、といった頑張った自動化をやっていたのです。

しかし、もうFargateがあれば不要です。

いや、もちろん、サービス、チーム、会社にとって朗報です。なのでFargateにします。

 

何が言いたいかというと、私自身の得意分野の価値がFargateによって下落してしまったことが怖いなと思います。

このようなFargateによる現象って私以外にも起こり得ると思います。

例えばEC2インスタンスといった仮想サーバを管理する機会が今後減ってくるとすると運用部隊の価値も減ります。

SSH/WinRMでサーバにログインからのコマンドによる調査、操作も不要。

仮想サーバよりもコンテナの方が、スケーリングを組みやすいですし、起動/停止も早く柔軟なので、コンテナが一個停止したからといって一次対応者に即コール即対応なんて不要。

Fargateに限らず、技術進歩によって今価値がある役割がどんどん減っていくことになりますよね。エンジニアとしてこれから得るものをちゃんとしっかり考えたいです。

f:id:tsubauaaa:20171201032715j:plain

 

 

改めて言います。不要な仕事、やらなくて良い作業がなくなることは大正義です。なのでFargateに大変期待しています!

 

f:id:tsubauaaa:20171130164152j:plain

 

 

 

 

情報処理安全確保支援士試験 (H29 春)

IPAの安全確保支援士に受かりましたのでご報告いたします。

●情報処理安全確保支援士試験 (H29 春)
サイバー攻撃の急激な増加により、企業などにおけるサイバーセキュリティ対策の重要性が高まる一方、サイバーセキュリティ対策を担う実践的な能力を有する人材は不足しています。そこで、サイバーセキュリティに関する実践的な知識・技能を有する専門人材の育成と確保を目指して、国家資格「情報処理安全確保支援士」制度が創設されました。
「情報処理安全確保支援士(以下、登録セキスペ)」はサイバーセキュリティに関する専門的な知識・技能を活用して企業や組織における安全な情報システムの企画・設計・開発・運用を支援し、サイバーセキュリティ対策の調査・分析・評価やその結果に基づく指導・助言を行います。とのこと。

午前も午後I、午後IIも60%以上で合格です。

合格日:2017/06/21
点数:午前I:70% 午前II: 80% 午後I:75% 午後II:60%(このくらいだったと思われ)
勉強期間:62日(2017/02/13 - 2017/04/15)
利用した参考書:

IPA資格を受ける時は必ずやってます。パーフェクトラーニング。まず午前はこれだけをひたすらやって覚えます。午後ももちろんやります。午後の解説も理解します。
午後の仕上げは重点対策でジャンルごとの午後問題に慣れます。

時間があれば翔泳社の情報処理教科書も読んでおくこと。

支援士の登録ですが、会社の援助もあり、登録します。士業ってかっこいいじゃないですか!

RedHat 認定エンジニア RHCE (RHEL7)

割と前ですが、RedHat 認定エンジニア 以下RHCEに合格しましたので
報告しますね。

RHCEとは、
・nmcliコマンドによる静的経路、パケットフィルタリング、ネットワークアドレス変換、チーミングの設定
・firewallコマンドによるネットワークポートのセキュリティ設定
・systemctlコマンドによるサービス/デーモンの制御
iSCSI イニシエーターの設定
・自動化のためのシェルスクリプト
・HTTP/HTTPSサーバ
NFS/SMBサーバ
SMTPサーバ
・NTP/DNS(unbound)サーバ
といったRHEL7の主要機能を一通り、実装することができるエンジニアとしてRedHatから認めてもらえる資格です。

本資格の取得にはRedHat認定システム管理者(RHCSA)を取得していることが必要条件です。

合格日:2017/03/31
点数:点数は伏せますがギリギリでした
勉強期間:2017/03/27 - 2017/03/30 (トレーニング受講期間)
勉強方法:
RedHat認定エンジニアトレーニングを受けて、その内容を全て理解します。

感想:
・試験時間は3.5時間あって全て実技試験です。
・資格取得にはトレーニングを受講した方が良いです。
・3.5時間て長いと思いますが、時間足りません。内容モリモリです。
・4日間のトレーニングは終わった後も毎日、復習を行いました。
・復習はVagrantで環境を整えて、何度も練習できるようにしました。
・RHEL7に未だ慣れていなかったのですが、慣れないと受かりません。
・なのでトレーニング受講の前にRHEL7に慣れておくことをオススメします。
・特にsystemctl、firewall、nmcliは押さえておくと良いと思います。

もう数年前から取りたかった資格の1つです。
Linuxを扱う人だったら取っておいた方が良いです。実技試験なのでLinuxサーバの構築はこの資格を持っているだけである程度証明されます。しかし難しかった。

Zabbixの日本語文字化けを解消する方法

ザビザビしてますか?僕です。

ZabbixのデータベースにMySQLを使っているのですが、ホスト名やトリガー名、ログ監視メッセージに日本語を使っていたら????????になっておりました。 Zabbix画面上では、メディアスクリプトに渡すアクションに登録した"メッセージ"も????????だし、ログ監視で抽出したログ内のログメッセージも????????となります。

これdefault character setがUTF8じゃないことからよく起こりうるので注意が必要です。特にAWSのRDSではlatin1がdefault character setなのでパラメータグループにてUTF8に適切に設定しましょう。 また、zabbix データベースを作成する際にはcharacter set utf8しましょう。

mysql> create database zabbix character set utf8;

んで、もうすでにlatin1で作ってしまった場合、これをUTF8に直す方法をこれから書きます。

まず、

mysql> show variables like 'char%';

mysql> show create table テーブル名;

でCharacter系パラメータがutf8じゃないことを確認します。utf8じゃなかったらまず今回の現象である可能性が高いです。 データベースやテーブルは以下のようにUTF8に変更しておきます。

mysql> alter database zabbix default character set utf8;
mysql> alter table テーブル名 ENGINE=MyISAM DEFAULT CHARSET=utf8;

ここからがUTF8に直す手順です。

  • zabbix serverの停止
# systemctl stop zabbix-server
  • mysqldump実行
# mysqldump -uroot -p -h RDSエンドポイント zabbix > zabbix.dump
# perl -pi -e 's/latin1/utf8/' zabbix.db
  • リストア実行
# mysql -uroot -p -h RDSエンドポイント zabbix < zabbix.dump
  • zabbix server起動
# systemctl start zabbix-server

これでOK。ちなみにあらかじめalter文でdatabaseもtableもutf8にしておけばリストア時にdrop databaseしなくても直ります。

Zabbix 3.0 認定プロフェッショナル

チェベックス! 僕です。
先日にZabbix 3.0 認定プロフェッショナルに合格したので以下にご報告いたします。

Zabbix 3.0 認定プロフェッショナルとは、Zabbixプロキシサーバーを使った分散監視や、仮想環境の監視、Zabbixサーバーの内部的な動作、ローレベルディスカバリー、パフォーマンスチューニングなど高度なZabbix技術について習得していることをZabbixに認定される資格です。
今回、本資格を取得するにあたり、Zabbix認定プロフェッショナルトレーニングを受講しました。トレーニング中に認定試験を受験します。

合格日:2016/12/09 
点数:88.57%
勉強期間:2016/12/08 - 2016/12/09 (トレーニング受講期間)
勉強方法:
Zabbix認定プロフェッショナルトレーニングを受けて、その内容を全て理解します。

トレーニングの情報を示します。

講師:福島さん
場所:NTTコム ソリューションズ
感想:
■ Day1

・ zabbixのyumインストールから。Linuxを操作できる人って希少なんですかね。
 アプリケーションはアイテムをグルーピングする。
 アイテム設定内の例外設定と定期設定について
 例外設定は更新間隔という設定値の例外の間隔で監視したり、しなかったりしたいときに利用する。
 定期設定はcron的に月、日、曜日を含める詳細なスケジューリング実行をしたいときに利用する。
 JMX監視の設定方法を教わる。現場では、UserParameterを使って、Javaメトリクスを取得するスクリプトを対象インスタンスで実行させていたりしている。
 isqlコマンド、、知らなんだ。
 ローダブルモジュールかぁ。なにか1個作ってみたい。
 ローレベルディスカバリは対象の種類も豊富で理解するには複雑なので、復習しましょう。
 VMwareにとても力を入れていたんですね。時代ですね。今後はDockerコンテナに力を入れてください。

 ■ Day2

 障害検知のフラッピングは運用あるあるなのでヒステリシスは効果的と思いまーす。

 forecastはまずはディスク監視で使ってみようかしら。
 zabbix Proxyも奥が深いっす。大規模NW環境のシステムだったら必要になるんでしょうね。
 インターネット経由の監視情報送付は割と議論になりやすかったので暗号化でFAとしたい。

 

試験はスペシャリストに比べるとやや簡単な印象でした。

 

zabbixは機能が本当に豊富ですね。分散監視とかVMware監視とか歴史情緒を感じます。そしてエンタープライズですね。痒いところに届きます。

なんだかんだでzabbixって色々な業種、会社で使われていて、ここいらで一発認定トレーニングを受けて知識を得るか、と思いスペシャリストからプロフェッショナルまでを受講しました。受講してみてzabbixデーモンが何をやっているかがわかりましたし、様々な運用監視のシーンでzabbix機能を使ったソリューションを提案、実装できるようになったと思います!

 認定スペシャリストを受講するともらえるポロシャツ

f:id:tsubauaaa:20161218002650j:plain width=

 

そして証書

f:id:tsubauaaa:20161218012821j:plain

 

 

 

 

Zabbix 3.0 認定スペシャリスト

色々と日々を過ごしている僕です。 はい。先日にZabbix 3.0 認定スペシャリストに合格したのでこちらにご報告いたします。

Zabbix 3.0 認定スペシャリストとは、Zabbix 3.0のすべての機能を網羅的に理解し、Zabbixの構築や運用に必要となるスキルを効率よく身につけていることをZabbixに認定される資格です。 今回、本資格を取得するにあたり、Zabbix認定スペシャリストトレーニングを受講しました。その情報も合わせて展開させてください。そのトレーニング中に認定試験を受験します。

合格日:2016/12/07
点数:90%
勉強期間:2016/12/05 - 2016/12/07 (トレーニング受講期間)
勉強方法:
Zabbix認定スペシャリストトレーニングを受けます。とにかく受けます。試験内容は言えませんが、思ったより難しかったです。
トレーニングの内容は以下に。

講師:福島さん
場所:NTTコム ソリューションズ
感想:
■ Day1

  • 喫煙所あり、トイレ個室2個、綺麗
  • 初っ端の演習zabbixのインストールは一度やったことある人だと退屈かも。
  • 福島さんがちょいちょい挿むzabbix情報の小ネタ、プライスレス。
  • zabbixのホスト作成、アイテム作成、を講師と一緒にやってみようのコーナー。
  • それぞれの設定パラメータの細かい仕様、Tipsを教えてくれる。これは本トレーニングじゃないと知りえないと思う。
  • パッシブ/アクティブチェックの違いとメリデメを理解できた。これデカい。
  • 3日目に認定試験があるが、Zabbix社のポリシー上、講師は試験についてアドバイスを言えないらしい。ただし、本トレーニングをすべて理解すれば合格するものとなっている。

■ Day2

  • zabbixはUIの操作性に癖があるが、効率的な操作を学んだ。
  • やはり細かい仕様、Tipsを紹介いただく。これらは実際に設定するケースを想定したアドバイスなのでとてもありがたい。
  • zabbixはきめ細かい監視ができることを実感。
  • zabbixで監視できる種類は豊富であることを実感。
  • これまでZabbixの70%も使えていなかったと感じる。

■ Day3

  • 権限とグループの紐付きについて理解。
  • グラフィカル3兄弟(カスタムグラフ/マップ/スクリーン)も丁寧に解説いただく。
  • ネットワークディスカバリはAWSインスタンスの削除時に利用するといいかも、と思った。今だとホスト上でOS停止時にAPIで無効化してたり、一定時間ホストが無効ならDeleted Groupに移動するスクリプトcronとかやってたりする。
  • 初めて触るITサービスなどw

Continue to Certified Professionals

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の構文を見てくれます。

f:id:tsubauaaa:20160613160849p:plain ※この例ではダブルクォーテよりもシングルクォーテの方が好き、と言われています。

Foodcritic(料理評論家)はChefの構文に特化して評論してくれます。

f:id:tsubauaaa:20160613161229p:plain ※評論の内容はこちらにあります↓

http://www.foodcritic.io/

このように静的解析を行いながら開発することで質と開発スピードを両立することができます。

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とし、テストします。

これを実行するとこんな感じです。
$ chef exec rspec default_spec.rb f:id:tsubauaaa:20160613164810p:plain

レシピを作る前に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レベルを定義しています。

  • windows.json
    run_listを定義しています。

f:id:tsubauaaa:20160613192949p:plain

例では、C:/tempフォルダにSQL Server インストールファイルをあらかじめダウンロードしていますので、30分ほどで完了しました。 f:id:tsubauaaa:20160613200150p:plain

InSpecでインテグレーションテスト

InSpecでインテグレーションテストを行います。InSpecはInfrastructure Specificationの略のようです。 InSpecはSSHだったりWinRMだったりDockerだったりに対してリモートに実行することも可能ですが、今回はWindows Server 2012R2ローカルで実行します。

WindowsでInSpecを実行する準備

  • rubyのインストール
  • ruby Development Kitのインストール
    • c:/devkitにruby Development Kitを解凍
    • c:/devkit/config.ymlに- C:\Ruby22-x64を追記(これはRubyのインストール先)
    • cd c:/devkit
    • ruby dk.rb init
    • ruby dk.rb install
  • InSpecのインストール
    • gem install inspec

InSpecファイルの説明

以下にInSpecファイルを貼ります。

inspec file of sqlserver chef cookbook

主にインストールされたであろうサービスを確認しています。簡単に説明しますね。

  • impact
    InSpecはチームでテスト結果を共有することを強調しています。まぁ優先度ですね。

  • title and desc(ription
    こちらもチーム共有のための付帯情報です。

まとめ

FoodcriticやChefSpecは以前から気になっていました。InSpecはde:code 2016で知りました。
一連のChefレシピ開発を推進するツールは十分揃っていてWindowsでも"使える"ことが確認できました。

Windowsと自動化ってまだまだ色眼鏡で見られがちですが、MicrosoftOSS活動と同様に自動化ツール界隈も加速しています。
Windows as a Codeに乗り遅れるな!!

コードと参考文献

紹介したコードはこちらにございます。

github.com

そしてSQL Server 2014のレシピを作成するにあたり、こちらの記事を参考にさせていただきました。

www.systemcentercentral.com