geek.conf.2

あるエンジニアの備忘録

Mackerel Meetup #6 Tokyo #mackerelioでLTさせていただきました。

こんばんは。そーですね。最近、読書したいけど積んでる僕です。

こちらのイベントにてLTしてきたのでブログ書きます。

mackerelio.connpass.com

 

軽くレポリたいと思います。

・「Upcoming features in 2016」 はてなCTO 田中慎司さん

もっとも期待していたお話。特にMackerelの新機能とこれからの開発ロードマップのお話が聞けてこの時点で大満足。

 

・「ゼロからはじめるサービス監視の山と谷」 アニメイトラボCTO 小芝敏明さん

インフラ開発の内製化に至ったエピソードなど開発から運用までのリアルに絡めたお話にうなづきました。

 

・「eureka monitoring solution 〜Mackerel導入までの軌跡〜」 エウレカ 山下権人さん

Zabbix、DataDogとMackerelの競合プロダクトとMackerel選定の経緯のお話が聞けて勉強になりました。

 

さて、私は懇親会中のLTに登壇させていただきました。

資料はこちらです。

 MackerelのWebhookでSphero社のbb-8を動かすっていう感じです。

Cylon.jsとかsinatraのコードは、こちらです。

github.com

 

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 パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド

 

 これ、意外に知らなかったことが載ってたり、それなりに読んで意味ありました。

・模擬試験の正解を80%以上理解する

・あとは、以下のre:Inventまとめが参考になりました

dev.classmethod.jp

dev.classmethod.jp

クラスメソッドさんに感謝です。

 

もちろん、実際に、AWSをシステムに採用し、設計することが一番意味あります。あとは、様々なシステム要件をAWSで実現した場合を、妄想することも大事です。

 

僕もそれなりに、様々なシステムを見た経験を持っていると思ってましたが、今回の試験に取り組む中で、まだまだと感じられて、良かったです。

2015年、ベストアウトプットです。お疲れさまでした。

MCPC2級

もりっす。寝不足でした、僕です。

MCPCモバイルシステム技術検定2級とやらに受かったので、ログを記します。

通称MCPC2級ですが、ITスキルとしては、 基本情報技術者初級システムアドミニストレータ取得者相当、モバイルシステムについて顧客の要求(または提案)について理解し、ヒヤリングが可能でシステム構築の概要が判るレベルを認定してもらえます。

 

合格日:2015/11/25

受験日:2015/11/07
点数:未公表
勉強期間:27日(2015/10/11 - 2015/11/06)
勉強方法:
・モバイルシステム技術テキスト第6版

これをひたすら読む。今回は、3周して、4周目は、8章まで読みました。

その他、感想:

モバイルシステム技術テキスト第6版から、満遍なく出題され、その順番は、テキストの章ごとの順ですた。通信方式、速度、変調方式、周波数といった、頑張って、覚えたものが、思ったよりも出題されなかったです。選択肢の文章のうち、一部は合っていて、一部は間違っているような引っ掛けが数問ありましたが、基本的に、ストレートな問題でした。計算は、一問くらい出たよ。基本情報技術者相当らしいのですが、問題の量、質を比較しても、基本情報技術者より簡単と思います。ちな基本情報技術者は持っていません。

                                         f:id:tsubauaaa:20151126200200j:plain

 

 

モバイルシステム技術テキスト 第6版 ?MCPCモバイルシステム技術検定試験2級対応?

モバイルシステム技術テキスト 第6版 ?MCPCモバイルシステム技術検定試験2級対応?

 

 

Test Kitchen Windows でテストしよう Vagrantでね

はい。僕です。
最近、WindowsでChefってできるのかな、と思い、Test Kitchenしてみたので、共有します。
ほぼ、こちらのサイトを参考にしています↓
pinter.org

Test KitchenをWindowsに対してVagrantで行う準備

vagrant plugin install vagrant-winrm

これ↑しないとこうなります。

-----> Starting Kitchen (v1.4.2)
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::UserError
>>>>>> Message: WinRM Transport requires the vagrant-winrm Vagrant plugin to properly communicate with this Vagrant VM. Please install this plugin with: `vagrant plugin install vagrant-winrm' and try again.
>>>>>> ----------------------
>>>>>> Please see .kitchen/logs/kitchen.log for more details
>>>>>> Also try running `kitchen diagnose --all` for configuration

WinRMをトランスポートする場合、

gem install winrm-transport

これ↑しないとこうなります。

!!!!!! The `winrm-transport' gem is missing and must be installed or cannot be properly activated. Run `gem install winrm-transport --version '~> 1.0'` or add the following to your Gemfile if you are using Bundler: `gem 'winrm-transport', '~> 1.0'`.
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::UserError
>>>>>> Message: Could not load or activate WinRM::Transport (Could not find 'winrm-transport' (~> 1.0) among 98 total gem(s)
Checked in 'GEM_PATH=/Users/tsubauaaa/.gem/ruby/2.2.0:/Users/tsubauaaa/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0', execute `gem env` for more information)
>>>>>> ----------------------
>>>>>> Please see .kitchen/logs/kitchen.log for more details
>>>>>> Also try running `kitchen diagnose --all` for configuration

次に、.kitchen.ymlですが、こんな具合ので、ご利用ください。

---
driver:
  name: vagrant
  synced_folders:
    - ["./", "/vagrant"]

provisioner:
  name: chef_solo

platforms:
  - name: win2012r2
    driver_config:
      communicator: winrm
    transport:
      name: winrm

suites:
  - name: default
    run_list:
      - recipe[iis::default]
    attributes:

Vagrant boxファイルの作成

さて肝心のWindowsのboxファイルですが、
Boxcutter · GitHub
さんが様々なWindowsのboxファイルを提供していますので、こちらを利用させていただきます。
Packerを使ってboxファイルを作成しているので、Packer 0.8.2以上をインストールしましょう。
ちなみにこちらで利用するOSイメージは、評価版のWindows、boxはVirtualboxのでーす。

git clone https://github.com/boxcutter/windows.git
cd windows
make virtualbox/eval-win2012r2-standard

boxをvmwareとしたければ、

make vmware/eval-win2012r2-standard

ですな。
OSイメージをDLして、Virtualboxで起動して、boxファイルが作成されるので、時間がかかります。
boxファイルが作成されたら、

vagrant box add win2012r2 ./box/virtualbox/eval-win2012r2-standard-nocm-1.0.4.box

として、Vagrant Boxとして利用します。
てな感じで。



ハッピーウィンドウズテスツ!!

ある文字列が含まれていたら、これに対応して、分類する@Excel

 

ちす。

今日は、Excelで、ある文字列が、含まれていたら、その文字列に応じて、分類を行うセルを実現する関数を紹介します。

 

つまり、こちらの画像で説明するとですね。

・シート[Sheet1]

f:id:tsubauaaa:20151104184036p:plain

シート[Sheet1]に検索ワードと色の対応表を作成します。

・シート[string_category]

f:id:tsubauaaa:20151104183727p:plain

シート[string_category]のB列(分類対象)にシート[Sheet1]のA列(検索対象)内の文字列

が含まれていた場合に、その隣のB列(色)の値をシート[string_category]のA列に返す。

といったことを実現します。

シート[string_category]の2行目を例にすると、分類対象列に、"リンゴが美味しい"とあり、シート[Sheet1]の2行めは"リンゴ"と"赤"を対応表として定義しています。

この場合、シート[string_category]の2行目のC列には、色分類結果として、"赤"が自動判別され、シート[string_category]の2行目A列は、[=C2]としている、という訳です。なので、シート[string_category]のC列は、非表示にしても良いかもです。

さて、シート[string_category]のC列に、以上を実現する関数が入力されています。

その関数は、これ↓です。

If that contain the string , classified into each ...

 

分解して、説明すると、まず、FIND関数内で、分類対象(B2)に、検索ワード(Sheet1!$A$2:$A$8)が含まれている場合の、左端から数えた検索ワード位置を取得します。さらにLOOKUP(0,0/FIND(Sheet1!$A$2:$A$8,B2),Sheet1!$A$2:$A$8)とあります。これは、検索ワード位置がある場合は、0/[数字] = 0となり、LOOKUP関数は、TRUEを返し、対応範囲である、検索ワードを返します。

※ちなみに検索ワード位置がない場合は、0/0 = #DIV/0!となり、エラーとなります。

そして、VLOOKUP(LOOKUP(0,0/FIND(Sheet1!$A$2:$A$8,B2),Sheet1!$A$2:$A$8),Sheet1!$A$2:$B$100,2,0)は、VLOOKUP("検索ワード","対応表",2,0)

※2は列番号、0は完全一致検索型

となり、検索ワードに対応した、色を返す、という動きになります。

 最後に、IFERRORで、エラー時には、"N/A"を返すようにします。

※LOOKUP関数内で定義するシート[Sheet1]の対応表は、値が入っている行番号までをきちんと指定しないと期待通りに、動かないので、注意です。

という感じで終わります。

rubyでlistVMSnapshot@CloudStack APIを打ちたい

コンチワ。
CloudStack APIrubyで操作してごにょごにょしてます。その際に、cloudstack_ruby_clientを使っているのですが、これ、listVMSnapshotが利用できないんですね。なので、自分でRest API応答をこさえました。その時に、苦労したことがあるので、展開します。

CloudStack APIを叩く時にPortを8080を使う場合、URIに含める署名を作成する必要があります。その署名の作成方法を今日は紹介します。
その前に、CloudStack APIを叩く際のURIを構成する部品を整理します。

URI:http://YOUR_SERVER_NAME:8080/client/api?command=listVMSnapshot&response=json&apikey=YOUR_CLOUDSTACK_API_KEY&signature=YOUR_CLOUDSTACK_SIGNATURE
コマンドパラメータ:command=listVMSnapshot&response=json&apikey=YOUR_CLOUDSTACK_API_KEY
署名:signature=YOUR_CLOUDSTACK_SIGNATURE
秘密鍵YOUR_CLOUDSTACK_SECRET_KEY
はい。それでは、上記の署名を作成する方法です。ちなみにCloudStack 4.3ですね。バージョンは。

1. コマンドパラメータの要素を並べ替え
コマンドパラメータ内の&で区切りられた要素の要素名(apikeyとかcommandとか)をアルファベット順に並べ替えます。
コマンドパラメータ2:apikey=YOUR_CLOUDSTACK_API_KEY&command=listVMSnapshot&listall=true&response=json

2.コマンドパラメータ2をURLエンコード
並べ替えたコマンドパラメータ2をURLエンコードします。(コマンドパラメータ3とする)

3. コマンドパラメータ3を小文字化
URLエンコードしたコマンドパラメータ3のアルファベットを全て小文字にします。(コマンドパラメータ4とする)

4.コマンドパラメータ4をHMAC SHA-1でハッシュ化し、Base64エンコード
小文字化したコマンドパラメータ4をハッシュアルゴリズムHMAC SHA-1でハッシュ化します。さらにBase64エンコーディングし、UTF-8にします。(署名0とする)

5.署名0をURLエンコード
コマンドパラメータ4をハッシュ化してBase64エンコードした署名0をさらにURLエンコードします。(署名とする)

署名の出来上がりです。

これをrubyでこさえるとこんな感じです。※サーバURLやapikeyは外部ファイルから取っています。

command_param = "apikey=#{config['APIKEY']}&command=listVMSnapshot&listall=true&response=json"
urlenc_command_param =  URI.escape(command_param)
data = urlenc_command_param.downcase
base64_sig = Base64.encode64(OpenSSL::HMAC.digest( OpenSSL::Digest.new('sha1'), config['SECKEY'], data)).strip
enc_sig = CGI.escape(base64_sig)
access_uri = URI.parse("#{config['URL']}/client/api?#{command_param}&apikey=#{config['APIKEY']}&signature=#{enc_sig}")

そして、listVMSnapshotを実行して、作成されて1日経過しているものの個数を出力するコードはこんな感じになります。

rubyでCloudStack APIエンドポイントURIの署名作成方法ってあまり、なかったので書いてみました。
おしまい。