終劇 CPU 100%

ビールは食べ物

AWS のサービスを知る #2

f:id:higaKtoT:20140729183647j:plain

 「AWS のサービスを知る #1 」に続き、今回はデータベースとネットワーキングのサービスを調べたいと思います。

データベース

 データベースとそれをサポートするミドルウェア類のサービスぽいですね。具体的に見ていきましょう。

 

アマゾン ウェブ サービスは、フルマネージド型リレーショナル NoSQL データベースサービスと、フルマネージドサービスとしてのインメモリキャッシュ、フルマネージドのペタバイト規模のデータウェアハウスサービスを提供しています。また、Amazon EC2 および Amazon EBS のクラウドで独自のデータベースを操作することもできます。 http://aws.amazon.com/jp/products/

AWS の製品とサービスというページのデータベースサービスの説明文ですが、正直なにを言っているのかさっぱりわかりません。まず、「フルマネージド型」って言葉が意味不明です。

フルマネージド型とは

直訳すれば、”すべて管理された型”という言う意味になる。データベースサービス以外の管理はすべて AWS が行うという事だと思う。具体的には、電源の供給からハードウェアの管理、ミドルウェアの管理などがそれにあたると思う。利用者はデータベースの接続情報の提供をうけてすぐにデータベースを利用できる状態の事だと思われる。

NoSQLとは

この NoSQL も分からないので調べてみた。一見、SQL を使用しないデータベースなのかなと思うが、そういうわけじゃないみたい。

NoSQL(一般に”Not only SQL”と解釈される)とは、リレーショナルデータベース管理システム (RDBMS) 以外のデータベース管理システムを指すおおまかな分類語である。リレーショナルデータベースをやみくもに使用してきた長い歴史を打破し、それ以外のデータベースの利用・発展を促進させようとする運動の標語としての意味合いを持つ。関係モデルではないデータストアの特徴として、固定されたスキーマに縛られないこと、関係モデルの結合操作を利用しないこと(場合によっては単にそのような機能が欠落しているだけ)、水平スケーラビリティが確保しやすい事が多いこと、トランザクションを利用できないものが多いことなどが挙げられる。学術的な世界では、この種のデータベースのことを構造型ストレージ (英: structured storage) と呼ぶことが多い http://ja.wikipedia.org/wiki/NoSQL

RDBMS 以外のデータベースってあるんだね。それ知らなかった。

インメモリキャッシュとは

たぶん、I/O の早いメモリにデータベースを展開してくれるサービスだと思う。調べてみたらインメモリデータベースというのを見かけたが、それとは違うと思う。インメモリデータベースはディスク上にデータベースを展開するのではなく、すべてのコンポーネントをメモリ上に展開するデータベースの事らしい。

ZDNet Japan に以下記述があった。データベースをスケールアウトするよりは、データ I/O をメモリにキャッシュする拡張をした方が運用の手間が省けるよねっていう。

もちろんRDBMSでもスケールアウトできるような技術が導入されているが、処理ノードを追加する度に、例えばデータベースの分割作業が必要となることから運用負荷が高いとされている。

 だったら、メモリにキャッシュするインメモリキャッシュでパフォーマンスを上げましょうという動きも出てきている。メモリにアクセスするので、高速なアクセスができるからだ。 http://japan.zdnet.com/business-application/analysis/35019420/

なので、I/O を高速にしてくれるサービスなんだろうと思う。

データウェアハウスサービス

このワードもよく見聞きするが分からなかったが調べたら単純だった。以下、「e-Word」より引用。

時系列に蓄積された大量の業務データの中から、各項目間の関連性を分析するシステム。
http://e-words.jp/w/E38387E383BCE382BFE382A6E382A7E382A2E3838FE382A6E382B9.html

春に行われた IT Week Japan で AWS の社長がスシローのビックデータ解析の事例を紹介していたがこのサービスを使ったかもしれない。

とまぁ、分からない言葉をざっと調べてみました。以下からサービスの内容を調べていきたいと思います。

Amazon DynamoDB

DynamoDB は、拡張性の高いフルマネージド型の NoSQL データベースサービスです。シームレスなスループットとストレージのスケーリング、自動の 3 種類のレプリケーションによって、時間がかかるデータベース管理タスクから解放され、アプリケーションとビジネスに集中できます。

DynamoDB は NoSQL (RDBMSじゃない) データベースサービスのようです。NoSQL が未経験なので具体的にシステムをどう実装していくのかは不明。NoSQL の詳細については別の機会でやるとして、DynamoDB の特徴だけをサラっとまとめたいと思います。

  • 管理が楽

サービス開始してすぐにテーブル作成できるようです。データベース容量の設計やらは不要です。

  • オートスケール

データベース容量は自動で増えます。

  • はやい

SSD を使用しているようです。あらかじめスループットしきい値を決めておき、しきい値を超えた場合、自動でスケールアップする設定にしておけば速度は維持されますね。データベースが大規模になっても数ミリ秒でデータにアクセスできるようです。

  • 冗長性

データは自動で複数の AZ にコピーされるそうです。データセンター規模の障害にも耐えうる冗長性が担保されています。

Amazon RDS

Amazon RDS(Relational Database Service)を利用すると、クラウドでの MySQLOracleSQL Server、または PostgreSQL データベースの設定、操作、スケーリングが簡単になります。これにより、費用対効果が高く、サイズ変更が容易なデータベース容量が得られるとともに、時間のかかるデータベース管理タスクが処理されます。

はい、これはもう、おなじみ使い慣れた RDS ソフトウェアのサービスですね。具体的には、MySQLOracleMicrosoft SQL ServerPostgreSQL になります。目立った特徴は、データベースソフトウェアのパッチ当が自動で行われる事と、高パフォーマンスを提供するプロビジョンド IOPS ストレージを選択できる事ですね。

  • 管理のしやすさ

  • その他

アプリケーションの要件にあわせて API もしくはウェブコンソールから容易にスケーリングできたり、ファイアーウォールを用いてアクセスコントロールができたり、自動バックアップ、DB スナップショット、ホストの自動交換、マルチ AZ 配置など従来のクラウドサービスの操作性を利便性を当たり前に備えており使いやすくなってます。

Amazon Redshift

Amazon Redshift はフルマネージド型で簡単に拡大縮小できるペタバイト規模のデータウェアハウスサービスです。

前述したデータウェアハウスサービスです。データウェアハウスサービスにうとい筆者でしたが、 AWS のサービス紹介動画を見るのが分かりやすいと思います。

Amazon Redshift (ペタバイト級の データウェアハウス サービス) | アマゾン ウェブ サービス(AWS 日本語)

Amazon ElastiCache

Amazon ElastiCache は、クラウドでのメモリ内キャッシュのデプロイ、運用、および縮小/拡張を容易にするウェブサービスです。

ディスクベースのデータベースのデータ I/O を高速 I/O のメモリ上に展開するサービスです。ElastiCache を利用する事でアプリケーションのパフォーマンスが向上されます。

ネットワーキング と CDN

アマゾン ウェブ サービスは幅広いネットワーキングサービスを提供しており、論理的に分離されたネットワークを作成して定義し、AWS クラウドに対するプライベートネットワーク接続を確立し、高い可用性でスケーラブルな DNS サービスを使用して、低レイテンシーで高速なデータ転送のコンテンツ配信ウェブサービスをエンドユーザーに提供できます。

上記は AWS のサービス一覧にある「ネットワーキングと CDN 」からの引用です。ネットワークの作成、DNSサービス、VPNサービスなどのサービスを提供しているという事ですね。ただ、分からない単語がありましたので調べてみました。

CDN とは、

コンテンツデリバリーネットワークの略だそうです。 CloudFront の事を指しているようです。

レイテンシーとは

端末がデータ転送を要求してその結果が届くまでの遅延時間の事だそうです。低レイテンシーとは遅延時間が低いという事ですね。

Amazon VPC

VPC」は Virtual Private Cloud の略です。VPN だけのサービスの事かと思ってましたが、AWS で利用するネットワーク機能全般の事らしいですね。 VPN サービスは業界標準で暗号化された IPsec ハードウェア VPN でローカル、あるいは契約のデータセンターとを接続するそうです。

まあ、サッと読んだ感じでは普通のネットワークサービスの様です。ただ、料金は気を付けたい部分があります。
料金説明ページには

Amazon Virtual Private Cloud の使用には、通常の Amazon EC2 の使用料以外には、追加料金はかかりません。

とあります。EC2 で使用する分は無料ですが、「VPN 接続 1 時間当たり 0.048 USD(東京リージョンへの接続)」と記載されてますので、VPN を使用すると1時間あたり 5 円の料金なので気にしなくていい額ですが。

Amazon Route 53

Amazon Route 53 は、可用性と拡張性に優れたドメインネームシステム(DNSウェブサービスです。

まんまです。DNSサービスですね。ちょっと変わってるのはドメインの購入もできるところでしょうか。それくらいかなぁ。

Amazon CloudFront

Amazon CloudFront はコンテンツ配信ネットワークです。これは他のアマゾン ウェブ サービスを統合し、開発者や事業主に、長期契約の必要なく、短い待ち時間と高速なデータ転送速度でエンドユーザーにコンテンツを配信する簡単な方法を提供します。

んー、おそらくリバースプロキシのようなものを想像していますが。どうなんでしょう。

静的コンテンツのコピーを閲覧者の近くにキャッシュし、オブジェクトをダウンロードする際のレイテンシーを低減

たとえば、東京リージョンにある Web サーバのコンテンツをヨーロッパに配信しようとすると、ヨーロッパの CloudFront がコンテンツをキャッシュしてレイテンシーを低減するという事だと思います。

動的、静的、ストリーミング、およびインタラクティブなコンテンツを含む、ウェブサイト全体を配信できます。

静的コンテンツ以外も配信できるんですね。ほほう!

POST、PUT などの HTTP メソッドをサポート

ダウンロードだけではなく、アップロードも高速化されるそうです。

実際に配信されたコンテンツの量に応じてお支払いいただくだけです。

課金は配信したコンテンツの量に応じるようですね。

AWS Direct Connect

AWS Direct Connect は、AWS クラウドサービスを利用するのにインターネットを使用する代わりの方法を提供するネットワークサービスです。

VPN 接続ではなく専用線接続のサービスですね。

Vagrant+Puppet+Serverspec を使って Windows Server をテスト駆動開発する

インフラ構築・運用をコーディングで行うことは珍しい事ではなくなってきていますが、Windows Server の開発記事はあまり見受けられません。しかし、現場では Windows Server を使っている人も多いと思います。私の職場でも Windows Server の案件が多いです。

そこで3連休を利用して、 Vagrant , Puppet , Serverspec を使った Windows Server のテスト駆動開発環境を作ってみましたのでシェアします。

開発マシンは Mac OSX です。開発マシンの内容は以下の通りです。事前に VirtualBoxVagrant ,Serverspec が使えるようにしておいて下さい。

ソフト バージョン
開発OS OS X 10.9.4
ゲストOS Windows Server 2012
Vagrant 1.6.5
Vagrant Plugin puppet(3.7.0) / vagrant-windows (1.6.0)
Serverspec 1.16.0
VirtualBox 4.3.12
Microsoft Remote Desktop Connection for Mac 2.3.6
winrm (gem) 1.2.0

作業の流れ

本稿の流れを以下にまとめます。

順番 内容
1 Vagrant で操作できる Windows Server の Box を作成する
2 Vagrant の設定をする
3 Serverspec でテストを先に実行する
4 Puppet を実行する
5 再びテストを実行する

1.Vagrant で操作できる Windows Server の Box を作成する

開発で使用する Vagrant Box を作成します。manifest 開発中はこの Box を使って何度も Windows Server を壊したりしますので作っておくと楽ですね。

Windows Server の設定をする

設定はこちらのサイトを参考に行いました。

[Vagrant] WindowsServer2012R2のBoxを自作する #Vagrant - NAVER まとめ

まずは Vagrant から Windows Server を操作できるように Windows Server を設定します。VirtualBoxWindows Server 2012 インスタンスを普通にインストールします。

f:id:higaKtoT:20140914220116p:plain

リモートディスプレイのサーバを有効化する

開発マシンからリモートデスクトップ(RDP)できるようにリモートディスプレイのサーバを有効にします。インストールした仮想インスタンスを右クリックし設定を開きます。

[ディスプレイ] を選択し中央ペインの [リモートディスプレイ(R)] を選択します。[サーバを有効化する] にチェックを入れます。

f:id:higaKtoT:20140914221542p:plain

パスワードの複雑性を無効化

インストールした Windows Server にログインし PowerShell を管理者権限で実行します。参考のサイトに習って以降の設定はすべて PowerShell で行います。

パスワードの設定ポリシーをファイルにエクスポートします。エクスポートしたファイルの値をノートパッドで開き以下のように修正し再びポリシーを適用します。(Import LocalSecurityPolicy.cfg after changing)

  MaximumPasswordAge = -1
  PasswordComplexity = 0

vagrant ユーザを作る

Vagrant は 仮想インスタンスへアクセスする際、vagrant ユーザでログインします。なので vagrant Box には予め vagrant ユーザを作成しておきます。

vagrant ユーザを Administrator グループに追加する

リモート管理(WinRM)を有効化する

テストツールの Serverspec は WinRM を使って Windows Server に PowerShell を実行しテストを行います。 WinRM が使えるように設定しておきます。その他、開発マシンから Windows Server にアクセスできるよう設定しておきます。

Firewall のルールを設定する

全ての端末から WinRM ポートにアクセスできるよう設定します。

Puppet のインストール

f:id:higaKtoT:20140915000501p:plain

Puppet Lab から Windows 用の Puppet をダウンロードしインストールします。Windows 用 Puppet はこちらからダウンロードできます。

https://downloads.puppetlabs.com/windows/

今回は puppet-3.7.0-x64.msi をダウンロードしました。

インストールは簡単です。全てデフォルトのままで [ Next ] 連打でOKです。ちなみにコマンドを使えばサイレントインストールも出来ます。サイレントインストールのやり方は公式ページに記載されています。

自動ログインを有効にします

インスタンスを起動した際、自動で vagrant ユーザがログインできるようにしておきます。

VirtualBox Guest Addtionsのインストール

こちらも忘れずにインストールしておきましょう。

設定した Windows Server の Box を作成する

ここまでの設定で Vagrant から操作できる Windows Server が出来上がっています。設定した Windows Server を用途に合わせて柔軟に使えるように VirtualBox からエクスポートし Vagrant Box にしたいと思います。

Box 用のディレクトリを作成する

Windows Server をシャットダウンしておきます。VirtualBox から Windows Server をエクスポートしておくためのフォルダを用意します。フォルダは任意です。

$ mkdir -p vagrant-boxfiles/windows2012

VirtualBox からエクスポートする

作成したフォルダに VirtualBox からエクスポートしたファイルを保存します。

$ vagrant package --base "windows-for-vagrantbox_default_1410696984773_58536" --output /Users/[User]/Documents/vagrant-boxfiles/windows-for-vagrant.box

--base windows-for-vagrantbox_default_1410696984773_58536 は先ほど設定した Windows Server のインスタンス名を入れて下さい。 --output にエクスポート用に作成したフォルダパスと box 名を指定します。box ファイルの名前は任意です。分かりやすい名前をつけましょう。

Vagrant に登録する

エクスポートした box を vagrant に登録します。

$vagrant box add "windows2012-puppet" /Users/[User]/Documents/vagrant-boxfiles/windows-for-vagrant.box

add のあとは Box の論理名です。エクスポートしたファイル名と同じじゃなくても OK です。こちらも分かりやすい名前をつけるといいでしょう。ちなみに、私は " puppet が使える Windows Server 2012 " なので " windows2012-puppet "という Box 名前にしました。

2.Vagrant の設定をする

vagrant から Windows Server にアクセスできるように Vagrantfile を作成します。まずは、作業用のフォルダを用意しましょう。任意の場所にフォルダを作成します。

$ mkdir -p /Users/[User]/Documents/vagrant/windows-puppet

Vagrantfile を作成する

先ほど作成したフォルダに移動します。

$ cd /Users/[User]/Documents/vagrant/windows-puppet

移動したフォルダで以下のコマンドで Vagrantfile のひな形を作成します。

$ vagrant init

すると Vagrantfile が生成されます。 Windows Server インスタンスにアクセスできるように Vagrantfile を以下の内容に変更します。

RDP で接続する

ここまで設定が完了すると Vagrant から Windows Server を操作する事が可能になってます。vagrant up コマンドで Windows Server を起動し、RDP でアクセスしてみましょう。

$ vagrant up
WARNING: Could not load IOV methods. Check your GSSAPI C library for an update
WARNING: Could not load AEAD methods. Check your GSSAPI C library for an update
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 3389 => 3389 (adapter 1)
    default: 5985 => 5985 (adapter 1)
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
==> default: Machine booted and ready!
Sorry, don't know how to check guest version of Virtualbox Guest Additions on this platform. Stopping installation.
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => /Users/[User]/Documents/Vagrant/windows-for-vagrantbox
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: to force provisioning. Provisioners marked to run always will still run.

共有フォルダも作成されています。Vagrant から Windows Server をうまく起動出来ました!早速アクセスしてみましょう。

ちなみに Vagrant 1.6 から Windows Guests を正式にサポートしたそうです。vagrant rdp コマンドで直接 rdp クライアントを起動できるようになりました。

$ vagrant rdp

と実行してみてください。RDP が起動します。

f:id:higaKtoT:20140915132821p:plain

ここまで出来たら、puppet も Serverspec も動きます。

3.Serverspec でテストを先に実行する

テスト駆動 Windows をやってみたいと思います。今回は簡単に「 C ドライブの直下にファイルを作成する」お題でテスト駆動してみたいと思います。

要件
Puppet を使って Cドライブ直下に test.txt を配置する

マニフェストを書く前に先にテストを書きます。 C ドライブ直下に test.txt が存在している事をテストに書いて実行し、わざと失敗します。

Serverspec の環境を整える

Vagrantfile を作成したフォルダで serverspec-init を実行しテストのひな形を生成します。

$ serverspec-init

設定内容を対話形式で聞かれるので答えていきます。

Select OS type:

  1) UN*X
  2) Windows

Select number: 2

Select a backend type:

  1) WinRM
  2) Cmd (local)

Select number: 1

 + spec/
 + spec/localhost/
 + spec/localhost/httpd_spec.rb
 + spec/spec_helper.rb
 + Rakefile

最初の質問には、対象は Windows OS なので 2 を。次の質問は WinRM で接続するので 1 を回答します。 すると spec フォルダが生成されます。spec フォルダ直下の spec_helper.rb の編集を行います。spec_helper.rb は接続先の情報が記載されています。

以下の内容で編集して下さい。

require 'serverspec'
require 'winrm'

include SpecInfra::Helper::WinRM
include SpecInfra::Helper::Windows

RSpec.configure do |c|
  user = "vagrant"
  pass = "vagrant"
  endpoint = "http://127.0.0.1:5985/wsman"

  c.winrm = ::WinRM::WinRMWebService.new(endpoint, :ssl, :user => user, :pass => pass, :basic_auth_only => true)
  c.winrm.set_timeout 300 # 5 minutes max timeout for any operation
end

Serverspec は Windows Server へ WinRM で接続します。 gem ライブラリの winrm をインストールしておいて下さい。

gem install winrm

テストを書く

serverspec-init を実行した時点でテストファイルがすでに生成されています。

spec/localhost/httpd_spec.rb

httpd 用のテストファイルです。必要ありませんので削除しておきましょう。

rm -rf spec/localhost/httpd_spec.rb

代わりに httpd_spec.rb のあった場所に filecheck_spec.rb というテストファイルを作成します。要件に沿って「C:¥test.txt が存在している事」と記述します。

ちなみに、テストファイルの命名規則spec.rb です。ファイル名の語尾に spec.rb とあると Serverspec がテストファイルと認識できます。

require 'spec_helper'

describe file('C:/test.txt') do
  it { should be_file }
end

早速実行してみましょう。

rake spec

当然、結果はエラーになりました。

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby -S rspec spec/localhost/filecheck_spec.rb
WARNING: Could not load IOV methods. Check your GSSAPI C library for an update
WARNING: Could not load AEAD methods. Check your GSSAPI C library for an update
F

Failures:

  1) File "c:/test.txt" should be file
     On host ``
     Failure/Error: it { should be_file }
       $exitCode = 1
$ProgressPreference = "SilentlyContinue"
try {
  
  $success = (((Get-Item -Path "c:/test.txt" -Force).attributes.ToString() -Split ', ') -contains 'Archive')
  if ($success -is [Boolean] -and $success) { $exitCode = 0 }
} catch {
  Write-Output $_.Exception.Message
}
Write-Output "Exiting with code: $exitCode"
exit $exitCode
       You cannot call a method on a null-valued expression.
Exiting with code: 1
#< CLIXML
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04"><S S="Error">Get-Item : Cannot find path 'C:\test.txt' because it does not exist._x000D__x000A_</S><S S="Error">At line:5 char:17_x000D__x000A_</S><S S="Error">+   $success = (((Get-Item -Path "c:/test.txt" -Force).attributes.ToString() -S_x000D__x000A_</S><S S="Error">pli ..._x000D__x000A_</S><S S="Error">+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_x000D__x000A_</S><S S="Error">    + CategoryInfo          : ObjectNotFound: (C:\test.txt:String) [Get-Item], _x000D__x000A_</S><S S="Error">    ItemNotFoundException_x000D__x000A_</S><S S="Error">    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetIt _x000D__x000A_</S><S S="Error">   emCommand_x000D__x000A_</S><S S="Error"> _x000D__x000A_</S></Objs>
       expected file? to return true, got false
     # ./spec/localhost/filecheck_spec.rb:4:in `block (2 levels) in <top (required)>'

Finished in 0.54846 seconds
1 example, 1 failure

Failed examples:

Cドライブ直下に test.txt を配置するマニフェストを書きたいと思います。

4.Puppet を実行する

テストを通すために Puppet を実行できる環境にします。Puppet は Vagrant と同じタイミングで実行されるようにします。例えば、 vagrant up 、vagrant provision した時、仮想インスタンスが起動したあと自動で Puppet が実行されるようにします。

Vagrantfile を修正する

vagrant provision が使えるように Vagrantfile に以下の内容を追記します。「 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 」セクションの中に書きます。

  config.vm.define :windows do |c| 
    c.vm.provision "puppet" do |puppet|
      puppet.manifest_file = "default.pp"
    end
  end

※ Vagrantfile 全体

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "Windows2012-puppet"
  config.vm.guest = :windows
  config.vm.communicator = "winrm"
  config.vm.network :forwarded_port, guest: 3389, host: 3389
  config.vm.network :forwarded_port, guest: 5985, host: 5985, id: "winrm", auto_correct: true

  config.vm.define :windows do |c|
    c.vm.provision "puppet" do |puppet|
      puppet.manifest_file = "default.pp"
    end
  end

end

マニフェストを書く

マニフェストを格納するフォルダを作成しマニフェスト( default.pp )を作成します。マニフェストを格納するフォルダは必ず「 manifests 」にします。

mkdir manifests

マニフェストファイルを作成します。マニフェストファイル名は任意ですが Vagrantfile の記述と同じにします。

vi manifests/default.pp

Cドライブ直下に test.txt を生成するマニフェストを書きます。

file { "C:\\text.txt":
  content => "aaaa"
}

マニフェストを実行します。

vagrant provision
WARNING: Could not load IOV methods. Check your GSSAPI C library for an update
WARNING: Could not load AEAD methods. Check your GSSAPI C library for an update
==> windows: Running provisioner: puppet...
Running Puppet with /tmp/vagrant-puppet-2/manifests/default.pp...
Notice: Compiled catalog for win-r2elstmlcu3 in environment production in 0.25 seconds
Notice: Finished catalog run in 0.02 seconds

無事、マニフェストが実行されました。 vagrant rdp で Windws Server にログインし、 test.txt ファイルが生成されている事を確認します。

f:id:higaKtoT:20140915145631p:plain

生成されていますね!!やった!

5.再びテストを実行する

ファイルが生成されたのでもう1度テストを実行します。

rake spec
Finished in 0.62373 seconds
1 example, 1 failure

Failed examples:

失敗しました。なんでだろう。もう1度マニフェストを確認してみます。

file { "C:\\text.txt":
  content => "aaaa"
}

なるほど。text.txt と誤植してしまってました。test.txt に修正してもう1度 vagrant provision します。その後、rake spec します。

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby -S rspec spec/localhost/filecheck_spec.rb
WARNING: Could not load IOV methods. Check your GSSAPI C library for an update
WARNING: Could not load AEAD methods. Check your GSSAPI C library for an update
.

Finished in 0.41336 seconds
1 example, 0 failures

テスト通りました!やった。

※これ演出ではなく、本当に誤植してました。早速、テスト駆動開発の大切さを実感しました。

最後に

このように Windows Server でもテスト駆動開発ができる事を確認できました。あとは現場でどう運用していくかだと思います。本当に Puppet , Chef を使った Infrastructure as Code が現場のスタイルに合っているのか見極めていきたいと思います。

感謝

この記事を沢山の方がリツートしていただきました。ありがとうございます。

最高の電源カフェ見つけた!- インターネットカフェ 「よなくる」-

Mac book Air を買ってから家の外で Mac を立ち上げることが多くなりました。 なにか作業をやる時、家より外の方が集中してできるんですよね。

書きためていたブログを整理しようと3連休の初日から MBA もって外にでました。この日は愛車を車検に出す予定もあり、ディーラーの近くで適当にお店探そうと思ってました。 いつもの「電源カフェ」アプリで検索すると1件見つかりました。

インターネットカフェ 「よなくる」

f:id:higaKtoT:20140913144720j:plain

まず一言。とってもいいんです!いろいろいいんです! たまたま訪れたカフェですが素敵なカフェに出会えましたYO!

住所 〒9011302 沖縄県 島尻郡与那原町字上与那原335-1アーバンハイム新垣101号室
電話番号 098-917-090
営業時間 10:00 - 22:00
メールアドレス info@yonakuru.jp
ウェブサイト http://yonakuru.jp
Facebook https://www.facebook.com/yonakuru/

オーナーさんもカフェが好きらしいのですが、Wi-Fi や 電源があるカフェは那覇に集中していて南部にはない。それならとはじめたのがインターネットカフェ「よなくる」だそうです。

Wi-Fi 完備、壁電源豊富、延長ケーブル貸出OK!

店内は心地よいジャズが流れ、オシャレな椅子、ソファーがあり完璧リラックスできるスペース! 初めて訪れた私にも気さくに声をかけて下さり、オーナーさんもとてもイイ雰囲気の方でした。

時間料金制

料金はインターネットカフェらしく時間制というシステム。ただ、店内は従来のインターネットカフェの様子ではないのでちょっと不思議な感じです。

1時間 300 円。1時間以上3時間未満であれば 600 円。3時間以上は 1 時間ごとに 100 円の追加料金がかかります。

4時間こもっても 700 円ですよ!安い!

f:id:higaKtoT:20140913150313j:plain

フリードリンク

ドリンクはセルフサービスで、なんと!無料です!店内の奥の方にドリンクバーがあります。エンジニアも大好き無限コーヒーを味わえます。

f:id:higaKtoT:20140913150824j:plain

手前に見えるのがドリンクメーカーです。バーの上にはフレーバーのボトルが置かれてます。奥に見える冷蔵庫も利用して良いそうです。氷とか入ってると言ってました。ひょっとしてレンジも使っていいのかな?

f:id:higaKtoT:20140913151205j:plain

コーヒーに紅茶にコンソメスープまでありますね!すばらしい。

f:id:higaKtoT:20140913151731j:plain

こちらはフレーバーボトル。フレーバーとお茶の組み合わせが書かれてて分かりやすいですね。一度、ファミマのフレーバーを適当に入れて失敗した経験があるので凄く助かりました。

軽食持ち込みOK!

f:id:higaKtoT:20140913152644j:plain

よなくるさんではお食事を提供していないので、軽食・お弁当の持ち込みOKだそうです。あと、麦屋和さんのパンを販売してます。パンだけを買いに来られる方もいましたよ。

あと、かわいい雑貨類も販売してました。たぶん、常連さんが持ち込みで置いてるのかも。

会議スペース

f:id:higaKtoT:20140913153039p:plain

店の奥の方に青い壁で仕切られたスペースがあります。利用されている方がいらしたので写真は取らなかったのですが、壁にカウンターがありヘッドフォンも置かれていました。完全に引き篭もりたい時はいいですね!

あと、このスペースを貸し出すサービスもやっているそうです。 1時間あたり500円 + 利用者一人あたり 100 円の格安料金!プロジェクターの貸出や、iPad も 2 台までなら貸出しているそうです!

おもしろ企画

f:id:higaKtoT:20140913153617j:plain

自由な発想のオーナーさんだからこその企画だと思います。オーナーさん曰く、「本好きの人の本棚って興味ありますよね?どんな本が並んでるんだろうって。なので沖縄県出身の力士”琉鵬”ご本人さんに本棚を作ってもらいました」

なんと”琉鵬”ご本人さんに作ってもらったそうです!凄いですね!

確かに本好きの方の本棚って気になる!面白い〜!

とにかく引きこもるのにピッタリ

原稿を仕上げる、プログラムを書く、集中して読書をする、など、引き篭もりにはピッタリなお店です!自宅からは少々遠いですが、那覇のカフェに行くよりは「よなくる」さんでゆったりのんびりが性に合ってます。

また利用します!

駐車場

駐車場は店舗敷地の隣の砂利のスペースにありますよ!5台停めれます。また、おとなりの病院が休みの時は病院の駐車場も利用できるそうですよ。那覇だと駐車スペースも気にしないといけないのでいいですね。

f:id:higaKtoT:20140913155921p:plain

Puppet on Windows やってみた

f:id:higaKtoT:20140907165524j:plain

Puppet を使って Linux サーバの設定はやったことあるのですが、 Windows Server を設定したことはありませんでした。でも、職場では Windows Server を使うことが多く、そろそろ Puppet で Windows Server の設定もやってみたいと思ってました。

ネット上には Puppet on Windows の情報が少なく苦労しましたが、Puppet labs のドキュメントを見ながら実際にやってみたら意外と簡単でした。

Windows on Puppet の構成

構成は以下の通りです。

手順

手順は以下のとおりです。

  1. AWS 上に Windows Server 2008 R2 を作る

  2. Puppet をダウンロードする

  3. Puppet をインストールする

  4. manifest を書く

  5. Puppet を実行する

1. AWS 上に Windows Server 2008 R2 を作る

AWS 上の Windows Server 2008 R2 の作成は簡単なので割愛します。

f:id:higaKtoT:20140907172040p:plain

2. Puppet をダウンロードする

作成した Windows Server に RDP します。Internet Explorer を起動しここにアクセスし Puppet 3.7.0 x64 をダウンロードします。

f:id:higaKtoT:20140907172810p:plain

3. Puppet をインストールする

ダウンロードした puppet-3.7.0-x64.msi をダブルクリックでインストール実行します。 インストールは簡単です。すべてデフォルトで進めて下さい。今回 Puppet サーバは使用しないので Puppet Server の部分はそのままにしてインストールを進めます。

インストール終了後、Puppet コマンドを実行できることを確認してみましょう。コマンドプロンプトを起動して、Puppet help と打ってみてください。

C:¥Users¥Administrator>puppet help

f:id:higaKtoT:20140907173712p:plain

ヘルプ内容が表示されたらインストールは成功です。

4. manifest を書く

あとは manifest を書いて実行するだけです。今回は簡単に C ドライブ直下にテストファイルを作成する manifest を実行したいと思います。

manifest を保存するフォルダを作成します。

C:¥Users¥Administrator>cd Document
C:¥Users¥Administrator¥Document>mkdir puppet
C:¥Users¥Administrator¥Document>cd puppet
C:¥Users¥Administrator¥Document¥puppet>mkdir manifests
C:¥Users¥Administrator¥Document¥puppet>cd manifests
C:¥Users¥Administrator¥Document¥puppet¥manifests>

C:¥Users¥Administrator¥Document¥puppet¥manifests で manifest を以下の内容で作成し test.pp として保存します。

file { "c:¥¥test.txt":
content => "aaaa",
}

ファイルパスの ¥ はエスケープされるので 2 つ記入してください。

f:id:higaKtoT:20140907174221p:plain

5. Puppet を実行する

書いた manifest を実行します。

C:¥Users¥Administrator¥Document¥puppet¥manifests> puppet apply test.pp

f:id:higaKtoT:20140907210736p:plain

C ドライブ直下に test.txt ができていることを確認する事ができると思います。

f:id:higaKtoT:20140907211123p:plain

まとめ

Puppet on Windows は情報も少なく難しいのかと思ってましたが、意外と簡単に出来て拍子抜けしました。 次は Vagrant との連携をやってみたいと思います。

キャリアセミナーに参加して分かった沖縄のIT企業の現状

エンジニアとしての今の自分の市場価値ってどれくらいだろう?そう思ったことはありませんか?

転職を経験している人ならなんとなく自分の適正な市場価値(年収)ってのを分かっているかもしれませんが、私の場合、一度も転職をしていないので今の自分のスキルが今の年収と合っているのか分かりません。

自分の市場価値がいったいどれくらいなのか。

本日開催された「県内システムエンジニアの市場価値とキャリアを考えるセミナー」に参加して来ました。

f:id:higaKtoT:20140906175102j:plain

セミナーは「株式会社インテリジェンスビジネスソリューション沖縄」さんのオフィスで行われました。清潔感のあるオフィスでとてもいい感じでした。

セミナー講師の方は東京にいて、スライドと音声を東京から配信される形で行われました。セミナーの内容は以下の通りです。

  • 自己スキルチェック

  • 転職後の年収事例

  • 年代別スキルセット

  • 沖縄のIT事情

年収を高めていくために必要なこととは

f:id:higaKtoT:20140906175330j:plain

自分のスキルが市場が求めるスキルとマッチしているのか。スキルシートでスキルチェックを行いました。

スキル項目は8つあり、それぞれを5段階で評価します。

f:id:higaKtoT:20140906175357j:plain

スキル レベル1 レベル2 レベル3 レベル4 レベル5
マネジメント メンバー 後輩育成 サブリーダ/チームリーダー PL(決裁権なし) PM(予算管理)
自己研鑚 基本情報,sun-java,語学 オラクル(シルバー) 応用情報 応用情報以上の資格を複数 PMP
法人格 その他 2次 1.5次 1次
インフラ 1年以上 2年以上 3年以上 4年以上 5年以上
開発技術 COBOL,VB,汎用機言語 オープン系言語、1つの言語を1年以上 オープン系言語、1つの言語を2年以上 オープン系言語、1つの言語を3年以上 Java3年以上
担当工程 開発 詳細設計 基本設計 基本設計(社内情報シスと直接やり取り 要件定義(顧客、担当者とやり取り)
業務知識 1年以上 2年以上 3年以上 4年以上 5年以上
業界知識 1年以上 2年以上 3年以上 4年以上 5年以上

表の法人格というのは、在籍している会社の開発スタイルをさしています。2次受けの開発が主であれば、レベル3になります。

自己研鑚に関して、表の内容以外の資格をもっている人は別紙の資格一覧を参照してレベルを決めました。

f:id:higaKtoT:20140906175416j:plain

転職者のスキルと転職後の年収の事例

続いて実際に転職した人のスキルシートと転職後の年収を紹介してもらいました。転職した人のスキルシートと自分のスキルシートを見比べることで自分のおおよその年収(市場価値)が分かるというわけです。

事例 転職後の年収
28歳。担当工数を要件定義まで経験。マネジメントはチームリーダーを経験者。 470万
35歳。SI3社経験。業務知識は5年以上。ただし担当工数は基本設計まで。自己研鑚もレベル1 640万
42歳。SI4社経験。マネジメント経験はサブリーダーまで。 420万
43歳。SI3社経験。マネジメントはプロジェクトマネージャーまで経験。自己研鑚はレベル5。担当工数は要件定義。業務知識も豊富 765万

続いて企業が求めるスキルセットを年代別で紹介してました。

年代 スキルセット
20代 開発力・業務知識・リーダーシップ。向上心、ポテンシャルを元にした成長、仕事に対する意識の高さ、あるべきスタンス、仕事の目的・本質を考えられる視点、惜しみない自己研鑚、現状に満足しない変革の意識、PDCAサイクルの回し方、相手の意図をくみとる力など。
30代 プロジェクト予算の管理・システム全体をみる力・顧客に対して課題解決提案力。次世代コアメンバー・リーダー候補としての役割、自信の成功体験を体系化する応用する力、複雑性の高い事象に対する力、周囲を巻き込む仕事推進力、自分の強みとその使い方
40代 高い専門性・ビジネスの総出力・組織マネジメント。リーダー、マネージャー、幹部としての事業推進、 組織上戦略上の課題を解決できる能力、事業フェーズと親和性の高い経験と能力、自己の干渉領域に対するコミットメント、ビジネス拡大に貢献する意識、後輩を育成する力、自己成長と企業成長を重ねることができる

逆に淘汰される人に共通するスタンスも紹介していました。

  • 与えられた仕事しかしない

  • 環境を含めた他責傾向が強い

  • 成長・カイゼン意識が薄い

この3つのマインドを持たないよう意識したいですね。

年収を高めていくためには各年代で求められているスキルを身につけて、自分のスキルを評価してくれる、あるいは足りないスキルセットを経験させてくれる企業に転職する事でしょう。 8つのスキルをうまく伸ばしていきたいですね。

沖縄のIT市場とスキルの現状

沖縄は本土とくらべ 人件費が安く、沖縄の企業の多くは、東京の案件を請け負い開発するニアショア開発を行っています。2次・3次受けの案件が多く、上流工程を経験できる事ができず、結果、マネジメントスキルの向上、上位工程の経験ができません。よって沖縄の SE は経年に比例してスキルが上がることは少ないそうです。県外企業よりレベルが低くプロジェクトリーダーも育ちにくい環境だそうです。沖縄の人材は市場価値を高めることが出来ないのです。

以上がセミナーで解説された内容です。 セミナー内容を踏まえ、どのようにして沖縄の SIer の価値を高めるかまでの突っ込んだ話はありませんでした。自身でキャリアパスを設計し企業を選びスキルを伸ばしていく事以外ないのではと思います。

感じたこと

県内で転職を目指すならニアショア案件を主としていない企業を選んだほうがいいと思いました。自社でサービス・製品を開発、販売している会社に転職する方が賢明ですね。キャリアパスも多少は意識して日々の仕事に取り組みたいと思いました。

AWS のサービスを知る #1

f:id:higaKtoT:20140729183647j:plain

AWS 認定ソリューションアーキテクトアソシエイトレベルの合格を目指しているヒガシです。 合格するためには AWS にどんなサービスがあるのか知っておく必要あるよね?って事でAWS のサービス一覧を整理したいと思います。

今回は、コンピューティングサービスとストレージサービスをまとめてみました。

コンピューティング

コンピューティングインスタンスロードバランサー、デスクトップサービスなどがコンピューティングサービスの分類です。

Amazon EC2

EC2 は仮想ゲストサーバサービスです。筆者も無料枠で利用したことがあります。ウェブ画面で簡単にサーバを作る事が可能です。

Auto Scaling

あらかじめ定義された条件に従って EC2 を自動で拡大、または縮小するサービスです。たとえば、インスタンスの CPU 負荷が 80% を超えたらインスタンスを自動で 3 つ増やすとか。

Elastic Load Balancing

ELB って言われてるサービスです。ロードバランサーです。しかも、複数の AZ に分散することも可能だそうです。また、異常のあるインスタンスを検知して、正常なインスタンストラフィックを自動で流すそうです。

ストレージ

ストレージに関するサービスです。堅牢性と可用性を備えた低コストのデータストレージを提供しています、とのこと。

Amazon S3

Amazon S3 ( Simple Storage Service ) 。完全冗長化されたストレージで、ウェブ上のどの場所からでも容量に関係なくデータの格納・取り出しが可能です。また、 2つの S3 で冗長構成を組む ( RSS ) ことも可能です。

Amazon Glacier

Amazon Glacier は極めて低いコストのストレージサービス。コストがむちゃくちゃ安いです。 1G の保存料が 1ヶ月 1円です。笑っちゃいます。ただし、保存したデータを取り出すのには時間がかかります。取り出す料金は全体のデータの 5% までは1ヶ月は無料です。つまり全てのデータを無料で取り出すには 20 ヶ月必要です。完全にアーカイブ用ですね。 データ復旧などを考えると2次バックアップ先としての利用が有用ですね。

Amazon Storage Gateway

AWS Storage Gateway は、オンプレミスのソフトウェアアプライアンスクラウドベースのストレージとを接続するサービスです。組織のオンプレミス IT 環境と AWS のストレージインフラストラクチャとをシームレスに、セキュリティを維持しながら統合します。」 だそうです。オンプレのソフトウェアがシームレスに AWS のストレージにアクセスできるようにするサービスですね。iSCSI ボリュームとして利用できるようです。利用方法は、データは S3 に保存し、頻繁にアクセスするデータをゲートウェイにキャッシュする『ゲートウェイキャッシュ型』と、逆にデータをゲートウェイに保存し、バックアップを S3 に保存する『ゲートウェイ保存型』、さらに、ストレージゲートウェイをバックアップ用の仮想テープドライブとして利用する『ゲートウェイ仮想テープライブラリ型』があります。 仮想テープライブラリは、利用中のバックアップソフトウェアからすぐに利用可能との事だそうです。

Amazon EBS

Amazon EBS(Elastic Block Store) は EC2 インスタンスがストレージボリュームとして利用できるものです。 EC2 のディスク領域はエフェメラルディスクとなっており、 EC2 を停止するとそこの保存したデータも消えてしまいます。なので、永続させたいデータは EBS を EC2 でマウントし EBS に保存します。

参考: 「はじめてのAWS、"つまずきポイント"はココだ!」

AWS Import/Export

転送用のポータブル記憶装置を用いて AWS 内外に大量データを転送するサービスです。S3, EBS, Glacier へのデータ転送、あるいはデータ取り出しを DVD などポータブルな記憶装置で行うサービスです。使い方は初めて AWS でシステムを運用する際、大量のデータを AWS 上に送る必要がある場合、または、これまで顧客と記憶媒体のやりとりでデータを受渡ししていた場合など。大量のデータをネットワークでアップするより早くてコストも安いですよね。でも、東京リージョンでのサービスはまだのようです。

AWS 認定 ソリューションアーキテクト アソシエイトレベルに合格するまでやること

f:id:higaKtoT:20140711135626j:plain

【はじめに】ソリューションアーキテクトアソシエイトレベルを知る

まずは、試験の内容について知らないといけないですね。 AWS のソリューションアーキテクト アソシエイトレベルについて情報をまとめてみました。

ちなみに、筆者は AWS を業務で使用したこともなく、個人でもインスタンスを数個立ち上げた程度の知識レベルです。

無謀かもしれませんが頑張って挑戦してみたいと思います。

試験内容について AWS のサイトに PDF があります。こちらからダウンロードできます。

以下、AWS 認定ソリューションアーキテクト - アソシエイトレベル試験要覧 から抜粋して紹介します。

AWS 認定ソリューションアーキテクト - アソシエイトレベル試験要覧

出題範囲分野と全体に占める割合

分野 試験に占める割合
1.0 高可用性、コスト効率、対障害性、スケーラブルなシステムの設計 60%
2.0 実装/デプロイ 10%
3.0 データセキュリティ 20%
4.0 トラブルシューティング 10%

AWS を使って基本的な設計する内容が6割占めてますね。

以下、各分野の内容を見ていきます。

分野 1.0 高可用性、コスト効率、対障害性、スケーラブルなシステムの設計

クラウドアーキテクチャーで考慮すべき事項を知っておくことがこの分野の内容のようです。具体的には以下の通りです。

  • クラウドサービスの設計方法
  • 企画および設計
  • モニタリング
  • 価格/コストを含む顧客要件に応じた開発(例 : オンデマンド/リザーブド/スポットの選択、RTO & RPO DR デザイン)
  • アーキテクチャー上のトレードオフ判断(高可用性対コスト、RDS 対 EC2 への DB インストール)
  • 既存の開発環境との統合およびスケーラブルなアーキテクチャーの構築
  • 伸縮自在性およびスケーラビリティ

個人的に、この分野で気になるのが「コストに応じた開発」です。まだお金を出して AWS を使った事がないのでピンとこないですね。 ( AWS は新規アカウント作成から1年間は無償で利用できます。※条件付)

分野 2.0 実装/デプロイ

この分野の内容は Amazon EC2 および Amazon S3、Elastic Beanstalk および CloudFormation、VPC および IAM を利用 したクラウドソリューションのコーディングおよび実装するうえで、適切な技術や手法を見きわめる。」ことだそうです。

コーディングとありますが、内容にコーディングのワードが見当たりませんね。知ってる言語は VBPHP くらいです。心配です。

おそらく、 AWSAPI をたたくためにプログラミングが必要なんだと思ってます。

分野 3.0 セキュリティ

セキュリティ分野の内容はクラウドのデプロイおよび保守に最適なセキュア手順の見極めと実装危機的災害からの復旧技術およびそれらの実装に関する知識 ことだそうです。出題範囲はかなり多いです。以下、出題範囲です。

この分野はインフラエンジニアであれば身につけているシステム構成力、セキュリティに関する知識、およびシステム復旧の知識に加えて、AWS のセキュリティに関するサービスが合わさった感じがします。1番力を試される分野かなと思います。

分野 4.0 トラブルシューティング

ここは応用力でしょうね。現場での障害対応を経験したエンジニアなら大丈夫かと思ってます。出題範囲も、

  • 一般的なトラブルシューティングに関する知識

としか書いてません。

まとめ

出題範囲を中心に見ていきましたが正直まだピンときません。セキュリティに関する分野は広いものの、試験に占める割合は 20% しかないのが救いかなと思いました。割合の多い『分野 1.0 高可用性、コスト効率、対障害性、スケーラブルなシステムの設計』で得点を稼げるよう、まずは AWS のサービスを暗記するところから始めたいと思います。

次回は、AWS のサービスを調べていきたいと思います。