2012年2月29日

Cloud Days Tokyo 2012 (2日目)



最終日の本日は、昨日(Cloud Days Tokyo 2012 (1日目))にも増してたくさんの方にcloudpackブースに
お越しいただき、誠にありがとうございました。



14時半からAWSブース内プレゼンテーションステージで行われたセッションでは、
cloudpackエバンジェリストの後藤(@kaz_goto)を予定しておりましたが、
急遽、cloudpack CTOの鈴木(@suz_lab)が登壇することになりました。
タイトルは前日同様「cloudpackのサービス紹介」についてでしたが、
本日お越しいただいた方には、鈴木ならではの切り口によるセッションをご清聴いただくことができたかと思います。
cloudpackブース同様、こちらもたくさんの方にお越しいただき、ほぼ満席状態の中、立ち見いただいた
方もいらっしゃいました。



今回のイベントでは、AWSをはじめとするクラウドサービスの普及が高まる中で、
クラウドの導入を検討されている企業様が益々増えているのを感じました。
これからクラウドの導入を検討するという方や導入を始めたが、どのように運用をしていくのが
良いのか等、情報収集に力を入れているようで、今後のさらなる発展を予感させるイベントとなりました。

また、今回ノベルティとして、配布していたEC2やS3のマークが入ったAWSシンプルアイコンガムも大盛況で
たくさんの方に受け取っていただけました。
3月8日(木)、9日(金)に大阪で開催される、Cloud Days Osaka 2012においても配布をいたしますので、
是非、cloudpackブースにお越しいただければと思います。



詳細は、Cloud Days Tokyo 2012より、ご覧ください。

cloudpack、マイニングブラウニー社とパートナーシップを締結し、データマイニングサービスを開始

2月29日、cloudpack(運営:アイレット株式会社 http://www.iret.co.jp/)は、株式会社マイニングブラウニー
(URL:http://www.miningbrownie.co.jp/ 本社所在地: 東京都中央区日本橋浜町 代表取締役 得上 竜一、
以下:マイニングブラウニー社)とパートナーシップを結び、AWS(Amazon Web Services)を活用した
データマイニング(※1)利用のサポートを開始いたしました。

パブリッククラウドのAWSを利用したサーバ運用サービスを展開するcloudpackが、データマイニングの
プロフェッショナル、マイニングブラウニー社とタッグを組み、マイニングブラウニー社独自の
ウェブマーケティングツール「MitsuBachi」を元に、従量課金型のAPIとして提供が開始された
「mitsubachi(※2)」を利用したスピンオフ・サービス「データマイニング職人」の提供を開始いたします。

今後も、開発・運用を通じて蓄積したノウハウをこれまで以上に発揮し、お客様にご満足いただけるよう、
サービスの更なる品質向上を目指して取り組んでまいります。


プレスリリースの詳細は、cloudpack、マイニングブラウニー社とパートナーシップを締結し、
データマイニングサービスを開始
よりどうぞ。

2012年2月28日

Cloud Days Tokyo 2012 (1日目)



cloudpackは、本日(2月28日(火))から2日間、東京国際フォーラムで開催されている、
Cloud Days Tokyo 2012に出展しています。
そして先程、1日目の展示が終了しました。

本日は、たくさんの方にお越しいただき、誠にありがとうございました。



今回のイベントでは、AWSブース内の1コーナーとして出展し、cloudpackが提供するAWSの
導入設計から運用・保守までをトータルでサポートするサービスについて
最新パンフレットの配布やcloudpackの職人による説明を行っています。

さらに、2つのモニタでは、たった3分でAmazon EC2の利用開始までの流れを録画したデモと
cloudpackの導入事例やサービスの紹介をするスライドをご覧いただけます。

尚、今回はノベルティとして、EC2やS3のマークが入ったAWSシンプルアイコンガムを配布しています。





11時からブース内のAWSプレゼンテーションステージで行われたセッションでは、cloudpackエバンジェリストの
@kaz_gotoが登壇し、「cloudpackのサービス紹介」について発表しました。

明日も14時半より登壇しますので、是非、AWSブース内プレゼンテーションステージにお立ち寄りください。
尚、イベント自体は10時より開催しておりますので、お越しいただければと思います。


詳細は、Cloud Days Tokyo 2012より、ご覧ください。

日経BP Cloud Days Tokyo 2012 Conference & EXPOのAWSブース内プレゼンテーションステージに登壇します



本日と明日に開催されるCloud Days Tokyo 2012において、AWSブース内プレゼンテーションステージで
行われるセッションにcloudpackエバンジェリストの後藤が登壇します。

発表内容は、「cloudpackのサービス紹介」と題して、cloudpackが提供するAWSの
導入設計から運用・保守までをトータルでサポートするサービスについて紹介します。

是非、この機会にAWSブースへお越しいただけたらと思います。

【セッション概要】

日時 2月28日(火) 11:00~11:15
2月29日(水) 14:30~14:45
タイトル cloudpackのサービス紹介
会場 AWSブース内プレゼンテーションステージ


詳細につきましては、日経BP Cloud Days Tokyo 2012 Conference & EXPOより、ご確認ください。

2012年2月27日

2012/02/27 週刊cloudpackマガジンを配信しました

本日の配信内容は、下記になります。

[cloudpack更新情報]

◇第5回JAWS-UG札幌勉強会資料(第5回JAWS-UG札幌勉強会 cloudpack監視システムについて)
300に迫るサーバ群を管理するcloudpackの監視システムについてのご紹介

◇日経BP Cloud Days Tokyo 2012 Conference & EXPOのAmazon Data Services
Japan主催パネルディスカッションに参加します
初日の28日17時より「クラウドがもたらすSIの変革」に後藤がパネリスト登壇

◇日経BP Cloud Days Osaka 2012 Conference & EXPOの出展場所を公開しました
ハービスHALL内の展示ホールでの出展場所を公開!お立寄りくださいませ

◇スピンオフ・サービスの『監視職人』をリニューアルしました
専用の管理システムを利用した24時間365日監視を提供するサービス!


[気になるAmazon EC2関連情報]


★AWS技術レビュー

◇SUZ-LAB謹製 CentOS AMI (6.2.1 64bit ap-northeast-1)

◇SUZ-LAB謹製 CentOS AMI (6.2.1 32bit ap-northeast-1)

◇SUZ-LAB CentOS AMIを6.0から6.2に(カーネルも)アップデート

◇Capistranoってなんじゃ?(EC2にインストール編)



★サーバ技術レビュー

◇FuelPHPってなんじゃ?(Git管理編)

◇Gitlabってなんじゃ?(プロジェクト登録編)

◇ApacheをSourceからインストール

◇PostgreSQL(9.1)でレプリケーション

◇Gitlabってなんじゃ?(ユーザー登録編)

◇mod_perlをインストール

◇CentOS(6.2) & PostgreSQL(9.1) & PostGIS(1.5)

◇Perl5.8系をインストール


★cloudpack職人見習いのStudy Note

2月20日の週は更新情報がございません。


毎週お届けする週刊cloudpackマガジンの購読希望の方は、
週刊cloudpackマガジンよりご登録ください。

Apache起動ユーザ変更時にグループ設定を変更する

Apacheのデフォルト起動ユーザは、下記となっています。

user apache
group apache

しかし、下記等に変更する場合があります。

user www
group www

上記の設定を変更した場合、Apacheグループに設定されているディレクトリ・フォルダの権限を
変更する必要があります。

権限は下記コマンドで確認することができます。
find / -group apache
実行結果は下記のようになります。

/var/www/html
/var/cache/mod_proxy
/var/lib/dav
/var/lib/php/session
/usr/sbin/suexec
/var/run/httpd

これらのグループをwwwに変更することで、ワーニング等のエラーを解消できます。

こちらの設定変更は忘れないよう注意が必要です。


こちらの記事はなかの人(be_hase)監修のもと掲載しています。
元記事は、こちら

2012年2月24日

第5回JAWS-UG札幌勉強会資料(第5回JAWS-UG札幌勉強会 cloudpack監視システムについて)

2月14日に開催された第5回JAWS-UG札幌勉強会で、
cloudpackエバンジェリストの後藤(@kaz_goto)が登壇しました。

発表の内容は、cloudpackの導入事例等からはじまり、本題のcloudpackが提供する監視サービスについて
になります。
監視サービスの紹介については、概要をはじめ、独自の追加機能やノウハウ、失敗談や今後やりたいこと等を
説明しており、監視サービスの内容をわかりやすく紹介しています。

尚、cloudpackでは、監視のみを行うスピンオフ・サービスの「監視職人」も用意しています。



使用したドキュメントは、第5回JAWS-UG札幌勉強会 cloudpack監視システムについてよりご確認ください。

FuelPHPってなんじゃ?(Git管理編)

以前、FuelPHPってなんじゃ?(インストール編)にてインストールと簡単なアプリの作成を行いましたが、
今回はFuelPHPを使ったアプリケーションを自分の管理するGitマスターリポジトリに登録してみたいと思います。

前回のGitlabってなんじゃ?(プロジェクト登録編)では、すでにリポジトリに一度pushしました。
このように未取得の変更がマスタリポジトリ上に存在する場合はマージしてからpushする必要がありますが、
その説明は別の機会にするとしまして、今回はリポジトリがまだ空の状態という想定で行います。

はじめにoilコマンドで適宜プロジェクトを作成します。

oil create bookstore
cd bookstore/

oil createコマンドはFuelPHPを含めたアプリケーションひな型をGithubからcloneする為、
Githubのgit管理下にある為、まず.gitから始まるファイルを削除します。
rm -rf .git*
.gitが削除されたのでGithubリポジトリ管理外となりましたので、改めて自分のgit管理下に置く為初期化を行います。
git init
また、FuelPHPのfuel/coreとfuel/packagesのみをGithubのFuelPHPのgit管理下に置き、
このアプリケーションのサブモジュールとして登録します。
git submodule add git://github.com/fuel/core.git fuel/core/
git submodule add git://github.com/fuel/oil.git fuel/packages/oil
git submodule add git://github.com/fuel/auth.git fuel/packages/auth
git submodule add git://github.com/fuel/parser.git fuel/packages/parser
git submodule add git://github.com/fuel/orm.git fuel/packages/orm
git submodule add git://github.com/fuel/email.git fuel/packages/email
上記まで設定を行ったらアプリケーションツリー全体を次回コミットに含めるためステージに上げます。
git add .
今回は、前回のGitlabサーバーをマスターリポジトリとするので、Gitlabのユーザー情報を登録します。
git config --global user.name "miura"
git config --global user.email  "miura@cloudpack.jp"
まずローカルリポジトリにコミットします。
git commit -m 'reinitialize with submoduled'
ここで、Gitlabサーバーのgitリポジトリをoriginという名前でリポジトリ登録します。
この時点でgitサーバー側ではGitlabでプロジェクト登録してあるか、Gitlabを使用していない場合は
gitのベアリポジトリを作成してある必要があります。
git remote add origin git@176.34.51.75:bookstore.git
先程登録したoriginリポジトリのmasterブランチへpushします。
git push -u origin master
反映しているかGitlabで確認してみます。



正しく登録されているようなので、これでFuelPHPを利用したチーム開発もできるようになります。


こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら

2012年2月23日

SUZ-LAB謹製 CentOS AMI (6.2.1 64bit ap-northeast-1)

SUZ-LAB謹製 CentOS AMI (6.0.5 64bit ap-northeast-1)をアップデートしました。

AMIを「suz」で検索してもらえれば、下記のAMIが見つかると思います。

811118151095/suz-lab_ebs_centos-core-x86_64-6.2.1


アップデート内容は下記の32bitのものと同じになります。

SUZ-LAB謹製 CentOS AMI (6.2.1 32bit ap-northeast-1)


こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

日経BP Cloud Days Tokyo 2012 Conference & EXPOのAmazon Data Services Japan主催パネルディスカッションに参加します



2月28日(火)、29日(水)に開催されるCloud Days Tokyo 2012において、Amazon Data Services Japanが
主催するパネルディスカッションにパネリストとしてcloudpackエバンジェリストの後藤が参加します。

モデレータはPublickeyの新野氏、他にも3名のパネリストと、クラウドインテグレーションの最前線で
実際に起きている変化について、パネル形式で鋭く迫ります。

【セミナー概要】

日時 2月28日(火)17:00~17:40
タイトル クラウドがもたらすSIの変革
-エンタープライズクラウド時代を加速するクラウドインタグレーター像とは?-
パネリスト
モデレータ
【パネリスト】
電通国際情報サービス エグゼクティブ・プロジェクト・ディレクター /
クラウドエバンジェリスト
渥美 俊英氏

アイレット cloudpack エバンジェリスト
後藤 和貴氏

サーバーワークス 代表取締役
大石 良氏

【モデレータ】
Publickey 編集長
新野 淳一氏
会場 P会場(B棟 7F)


詳細につきましては、日経BP Cloud Days Tokyo 2012 Conference & EXPOより、ご確認ください。

SUZ-LAB謹製 CentOS AMI (6.2.1 32bit ap-northeast-1)

SUZ-LAB謹製 CentOS AMI (6.0.5 32bit ap-northeast-1)をアップデートしました。

AMIを「suz」で検索していただくと、下記のAMIが見つかると思います。
811118151095/suz-lab_ebs_centos-core-i386-6.2.1
アップデート内容は下記となります。

○カーネルも含めOSのバージョンを6.2にアップデート

SUZ-LAB CentOS AMIを6.0から6.2に(カーネルも)アップデート

○スワップ領域を/mnt/swap/0.imgから/dev/xvde3に変更

/etc/fstabを調整します。
# cd /etc/
# diff fstab.old fstab
1,6c1,6
< /dev/xvde1      /        ext4   defaults       1 1
< none            /proc    proc   defaults       0 0
< none            /sys     sysfs  defaults       0 0
< none            /dev/pts devpts gid=5,mode=620 0 0
< none            /dev/shm tmpfs  defaults       0 0
< /mnt/swap/0.img swap     swap   defaults       0 0
---
> /dev/xvde1 /        ext4   defaults       1 1
> /dev/xvde3 swap     swap   defaults       0 0
> none       /proc    proc   defaults       0 0
> none       /sys     sysfs  defaults       0 0
> none       /dev/pts devpts gid=5,mode=620 0 0
> none       /dev/shm tmpfs  defaults       0 0
スワップをオフにして利用しなくなったスワップ領域用のファイルを削除します。
# swapoff -a
# rm /mnt/swap/0.img
この状態でリブートすると、上記の設定が反映されます。

○nrpeのインストール(通常インストールしてる為)

epelのパッケージをインストールします。
# yum -y install nrpe
○monitの設定ファイル名を変更(アップデートした際に動かなくなった為)

アップデートしたmonitの設定ファイル/etc/monit.conf.rpmnewを/etc/monitrcにリネームします。
(古い設定ファイルmonit.confは削除します)
# cd /etc/
# mv monit.conf.rpmnew monitrc
# rm monit.conf
# /etc/init.d/monit start
Starting monit: Starting monit daemon with http interface at [localhost:2812]
                                                           [  OK  ]

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

SUZ-LAB CentOS AMIを6.0から6.2に(カーネルも)アップデート

以前、カーネルのアップデート(2.6.32-71.29.1 → 2.6.32-220.4.2)を試したのですが
ブートできなくなってしまい、それ以降はできないものと思っていましたが、ブートすることが出来ました。
これは、カーネルをアップデートすると、アタッチしているEBSのデバイスファイルが
/dev/xvda1から/dev/xvde1に変更されていたのが問題でした。

それでは早速、アップデート方法を紹介します。

まずは、アップデート前のカーネルやOSのバージョンの確認です。
# uname -a
Linux ip-10-156-21-210 2.6.32-71.29.1.el6.i686 #1 SMP Mon Jun 27 18:07:00 BST 2011 i686 i686 i386 GNU/Linux
# cat /etc/redhat-release
CentOS Linux release 6.0 (Final)
今までは、上記のことからyumのアップデートからカーネル類を外していたのですが、
今回はyum.confから、そのexclude=kernel*の記述を外し、アップデートします。
# cd /etc/
# diff yum.conf.old yum.conf
13d12
< exclude=kernel*
# yum -y update
新しいカーネルがインストールされていることがわかります。
# ls -1 /boot/
System.map-2.6.32-220.4.2.el6.i686
System.map-2.6.32-71.29.1.el6.i686
config-2.6.32-220.4.2.el6.i686
config-2.6.32-71.29.1.el6.i686
efi
grub
initramfs-2.6.32-220.4.2.el6.i686.img
initramfs-2.6.32-71.29.1.el6.i686.img
symvers-2.6.32-220.4.2.el6.i686.gz
symvers-2.6.32-71.29.1.el6.i686.gz
vmlinuz-2.6.32-220.4.2.el6.i686
vmlinuz-2.6.32-71.29.1.el6.i686
この状態でリブート後、カーネルとOSのバージョンを確認すると、OSは6.2になっていますが、
カーネルはまだ2.6.32-71.29.1のままです。
# uname -a
Linux ip-10-156-21-210 2.6.32-71.29.1.el6.i686 #1 SMP Mon Jun 27 18:07:00 BST 2011 i686 i686 i386 GNU/Linux
# cat /etc/redhat-release
CentOS release 6.2 (Final)
カーネルのバージョンアップを行うには、/boot/grub/menu.lstを新しいカーネルのものに変更する必要があります。
# cd /boot/grub/
# diff menu.lst.old menu.lst
6,7c6,7
<         kernel /boot/vmlinuz-2.6.32-71.29.1.el6.i686 ro root=/dev/xvda1
<         initrd /boot/initramfs-2.6.32-71.29.1.el6.i686.img
---
>         kernel /boot/vmlinuz-2.6.32-220.4.2.el6.i686 ro root=/dev/xvde1
>         initrd /boot/initramfs-2.6.32-220.4.2.el6.i686.img
また最初に述べましたが、ルートディスクのデバイスファイルも/dev/xvda1から/dev/xvde1に変更する
必要があります。
このことから、/etc/fstabのルートデバイスの記述も同様に変更します。
# cd /etc/
# diff fstab.old fstab
1c1
< /dev/xvda1      /        ext4   defaults       1 1
---
> /dev/xvde1      /        ext4   defaults       1 1
この状態でリブート後、カーネルとOSのバージョンを確認すると無事カーネルもアップデートされ、
最新のCentOS 6.2になっていることがわかります。
# uname -a
Linux ip-10-153-59-73 2.6.32-220.4.2.el6.i686 #1 SMP Tue Feb 14 00:24:28 GMT 2012 i686 i686 i386 GNU/Linux
# cat /etc/redhat-release
CentOS release 6.2 (Final)
最後に、もう利用していない古いカーネルを削除します。
# yum erase kernel-2.6.32-71.29.1.el6
SUZ-LAB謹製 CentOS AMI 6.2 Comming Soon! -------- http://www.suz-lab.com


こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

Gitlabってなんじゃ?(プロジェクト登録編)

前回はGitlabってなんじゃ?(ユーザー登録編)を紹介したので、今回はbookstoreという名前のプロジェクトを登録してみます。
はじめは、ダッシュボードにプロジェクトは表示されていないので、右側にある「New Project」ボタンを
クリックし、プロジェクトの登録画面を表示します。



プロジェクト名とリポジトリ内のパスとコードを入力します。
ここではすべてbookstoreとし、説明欄は適宜入力して、「Save」ボタンをクリックします。
この時点でこのサーバーのgitのリポジトリが作成されます。
また、「Save」をc押下すると以下のような説明画面が表示されます。

この画面に表示されている上部の赤い部分は設定不足等のエラーで、下部のグレーの部分はこれから設定を
行う必要のある項目が記載されています。
まず、赤い部分のエラーについて対応します。
最初にSSHキーがないと書いてあるので、これを解消します。



githubと同様に、SSHキーはユーザーがgitリポジトリにアクセスする際に必要で、gitアクセスを行う端末の
SSH公開鍵をgitlabに登録することで、リポジトリへのアクセスを許可する仕組みになっています。

ローカルの端末でSSHキーをrsaで作成し、公開鍵の中身をコピーします。
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub
次に、gitlabのヘッダ右端のアイコンから「My profile」をクリックし、現在ログイン中のアカウントの
情報設定画面を表示します。
ローカルナビゲーションの右端に「Keys」というタブボタンがあるので、それを選択します。
ここにSSHキーを複数登録できるので、「Add New」をクリックして、適宜タイトルを入力し、
先程コピーした公開鍵の中身を貼付けて「Save」ボタンをクリックし、登録します。



ここで改めてbookstoreプロジェクトを表示してみると、先ほどの赤いエラーが
1つ減っていることが確認できます。
次のエラーは、まだリポジトリに何もpushされていない旨のエラーになります。



それではコンテンツを作成し、マスタリポジトリにpushしてみます。
グレーの部分の指示通りに設定します。

下記でユーザーの情報を設定します。
$ git config --global user.name "miura"
$ git config --global user.email  "miura@cloudpack.jp"
そして、bookstoreディレクトリを作成しローカルリポジトリの作成を行います。
$ mkdir bookstore
$ cd bookstore/
$ git init
適当なファイルをローカルリポジトリにコミットします。
$ echo 'Hello World! books' > README.md
$ git add .
$ git commit -m 'initial commit'
先程gitlab上で作成したリモートリポジトリをoriginという名前で登録を行います。
$ git remote add origin git@176.34.51.75:bookstore.git
そしてこのoriginに対して、変更をpushします。
$ git push -u origin master
設定が完了したら再度プロジェクト画面を表示してみます。
そうすると、先程の説明画面ではなく、プロジェクトの情報画面になっていることがわかります。
これですべて正常に登録が完了したことになります。



ローカルナビの「Files」をクリックするとリポジトリのファイルリストが表示され、
先程コミットしたファイルがあるのを確認できます。



また、「Project」内の「Team」タブで登録済みのユーザーをこのプロジェクトへ
参加させることができます。



以上で、ユーザーとプロジェクトを登録することが可能で、gitからの登録も可能となり、プロジェクトで
使用することができるようになりました。


こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら

2012年2月22日

日経BP Cloud Days Osaka 2012 Conference & EXPOの出展場所を公開しました

3月8日(木)、9日(金)に出展するCloud Days Osaka 2011の出展場所を
先日紹介した日経BP Cloud Days Osaka 2012 Conference & EXPOのページに公開しました。

AWSブース内の会場入り口側になりますので、お誘い合わせの上、是非お立ち寄りください。




出展情報につきましては、日経BP Cloud Days Osaka 2012 Conference & EXPOにて、随時公開していきます。

Capistranoってなんじゃ?(EC2にインストール編)

CapistranoはSSH経由でリモートコマンドを実行するためのツールで、端末間でのアプリケーションのデプロイ等に
利用されています。
Ruby on Railsの台頭とともに知名度を上げ、Railsのデプロイメントでは定番のツールになっています。

Capistranoはそれ自体がRuby製で、Rubyの為のツールのようですが、冒頭の通りSSHでリモートコマンド実行を
管理する用途であればどのような状況でも利用できます。

今回試してみるユースケースでは、1台の管理サーバーから2つのサーバー上にファイルを作成してみます。

まず、EC2でAmazon Linuxを3台分マイクロインスタンスで起動します。
ここでは管理サーバーをadmin、リモートの2台をhoge1、hoge2とし、3台にそれぞれEIPを付与します。
仮にそれぞれのEIPは以下の通りとします。
admin: xxx.xxx.xxx.xxx
hoge1: yyy.yyy.yyy.yyy
hoge2: zzz.zzz.zzz.zzz


また、adminからhoge1、hoge2にはsshでアクセスする為、hoge1、hoge2が所属するセキュリティブループに
adminからのSSH接続を許可しておきます。


○インストール

それでは、インストールをしてみます。
Capistranoは管理サーバーにのみインストールを行い、リモート先のサーバーには
インストールする必要はありません。
zlib-develやopenssl-devel等の必要なライブラリはあらかじめインストール済みとします。
尚、今回はrvmをつかってRubyをインストールします。
$ cd ~/
$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
$ source ~/.bash_profile
$ rvm install 1.9.3
$ rvm 1.9.3 --default
Capistranoはgemで提供されているのでgemからインストールし、インストールが成功しているかバージョンを
確認してみます。
$ gem install capistrano
$ cap --version
Capistrano v2.10.0
以上でインストールは完了です。


○SSH設定

管理サーバーであるadminからhoge1、hoge2へSSHアクセスを行う必要があるので、SSHの設定を行います。
まずadmin, hoge1, hoge2で同じユーザーを作成します。

・admin、hoge1、hoge2
# useradd memorycraft
# passwd memorycraft
次にadminで作成したSSH公開鍵をhoge1、hoge2へ登録します。

・admin
# su - memorycraft
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/memorycraft/.ssh/id_rsa):
Created directory '/home/memorycraft/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/memorycraft/.ssh/id_rsa.
Your public key has been saved in /home/memorycraft/.ssh/id_rsa.pub.
The key fingerprint is:
4d:78:29:3a:b1:e2:19:a3:f0:47:fb:53:75:5d:c1:76 memorycraft@ip-10-146-93-65
The key's randomart image is:
+--[ RSA 2048]----+
|              ...|
|         . .   oE|
|      . o +  ....|
|       + =. . .  |
|.   = + S...     |
| o + * ..        |
|  o =  .         |
|   . ..          |
|      ..         |
+-----------------+

$ cd ~/.ssh/
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA7wXX3xR9rT7EoVfT1NI3oZbzAZGJKD45jnm3CR40G37w+MCFpw1x4XlEF5IWNAXUIKWowVsul88i4g3NDpFd7QFDN0X5cgfkmddLh5B7qDGMKZU8/N4T55AYP4go5TkH0XSESrZDMBcdCII6n6/saB1xMLOO0+dqBLQZ48G2LyrJd6ZxEBHEUhP6Ed4MQeQoQw1uonMsbHC8UwPTfggfhhAGgv488GVgYUo6jYzMez/iagXObrpzBE3gM6vMpPRSH+IivGBeFZirIMOm4qrQPxaojy5f6YQoeqMG3MFKwk/575vCT4cjJa2WwIHEqzMRYfWeFrgRGVqUYbtZ3nV0Hw== memorycraft@ip-10-146-93-65
↑これをコピーする
・hoge1, hoge2
# su - memorycraft
$ ssh memorycraft@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 01:b3:bd:1f:ee:85:7f:ce:9a:e9:a0:f0:15:e1:10:ed.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Permission denied (publickey).
$ cd ~/.ssh
$ vi authorized_keys
↑さきほどコピーした内容をペーストする
$ chmod 600 authorized_keys
以上で登録が完了しました。
それでは、接続を確認してみます。

・admin→hoge1
# su - memorycraft
$ ssh memorycraft@yyy.yyy.yyy.yyy
Last login: Mon Feb 20 19:05:05 2012 from xxx.xxx.xxx.xxx

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

See /usr/share/doc/system-release/ for latest release notes.
There are 23 security update(s) out of 32 total update(s) available
・admin→hoge2
# su - memorycraft
$ ssh memorycraft@zzz.zzz.zzz.zzz
Last login: Mon Feb 20 19:05:05 2012 from xxx.xxx.xxx.xxx

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

See /usr/share/doc/system-release/ for latest release notes.
There are 23 security update(s) out of 32 total update(s) available
無事に接続の確認ができました。


○Capistranoのテスト

それでは、Capistranoを使用してhoge1、hoge2にファイルを作成してみます。
Capistranoは、タスクを定義するCapfileという名前のファイルを読み込んで実行します。
まず、adminでCapfileという名前のファイルを作成し、以下のように内容を記述します。

・admin
# su - memorycraft
$ mkdir cap_test
$ cd cap_test
$ vi Capfile
そして、以下のように入力します。

# memorycraftでログインします。
set :user, 'memorycraft' # helloworldという名前でhoge1(yyy.yyy.yyy.yyy), hoge2(zzz.zzz.zzz.zzz)それぞれにリモートコマンドを実行するタスクを定義
task :helloworld, :hosts => "xxx.xxx.xxx.xxx,yyy.yyy.yyy.yyy" do
# /home/memorycraft/footprintというファイルにhelloworld_日付という文字列を追加する
run "echo helloworld_`date` >> /home/memorycraft/footprint"
end

各行の意味はコメントの通りになります。
それでは、Capistranoを実行してみます。
Capistranoの実行はcapコマンドを使用し、タスク名を指定します。
$ cap helloworld
  * executing `helloworld'
  * executing "echo helloworld_`date` >> /home/memorycraft/footprint"
    servers: ["yyy.yyy.yyy.yyy", "zzz.zzz.zzz.zzz"]
    [yyy.yyy.yyy.yyy] executing command
    [yyy.yyy.yyy.yyy] sh -c 'echo helloworld_`date` >> /home/memorycraft/footprint'
    [zzz.zzz.zzz.zzz] executing command
    [zzz.zzz.zzz.zzz] sh -c 'echo helloworld_`date` >> /home/memorycraft/footprint'
    command finished in 39ms
エラーが出なかったので正常に終了したようです。
それでは、hoge1、hoge2でファイルを確認してみましょう。

・hoge1
$ tail -1000f /home/memorycraft/footprint
helloworld_Mon Feb 20 21:12:40 UTC 2012
・hoge2
$ tail -1000f /home/memorycraft/footprint
helloworld_Mon Feb 20 21:12:40 UTC 2012
上記のように、指定した文字が入っています。
Capfileの記述を見ると、シェルで可能なことであれば設定することができる為、
デプロイ以外にも様々な使い道があります。


こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら

ApacheをSourceからインストール

基本的なところになるのですが、今回はApacheのSourceからのインストール方法を紹介します。
最近はyumによるインストールが増えましたが、稀にSourceからのインストールが
求められる時があります。

ダウンロードはThe Apache HTTP Server Projectから可能です。

コンパイルオプションは下記のように行いました。
./configure \
--prefix=/usr/local/a20120222-1-prefork \
--with-mpm=prefork \
--enable-so \
--enable-rewrite \
--enable-ssl \
--disable-userdir \
--with-ssl=/usr/include/openssl
make
make install
/usr/local/a20120222-1-preforkが作成できるので、apache2というシンボリックファイルを作ると便利です。
ln -s /usr/local/a20120222-1-prefork /usr/local/apache2
なぜ、prefixでapache2を指定しないかと言うと、Apacheをアップデートする場合、
新たに下記を作成し、現行のhtdocs confをこれにコピーして
a20120322-1-prefork
下記のシンボリックリンクを作成すれば簡単に、アップデートができるからです。
ln -s /usr/local/a20120322-1-prefork /usr/local/apache2
後は、apachectl httpd.confの下記を次に変更して完了です。
a20120222-1-prefork
apache2


こちらの記事はなかの人(be_hase)監修のもと掲載しています。
元記事は、こちら

PostgreSQL(9.1)でレプリケーション

今回は、PostgreSQL(9.1)でホットスタンバイのDBへのレプリケーションを試してみます。

マスターデータベースとスレーブ(ホットスタンバイ)データベースは、
CentOS(6.2) & PostgreSQL(9.1) & PostGIS(1.5)の記事のようにインストールされているものとします。

【マスターDBでの作業】

まず、PostgreSQLを停止しておきます。
# su - postgres
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop
postgresql.confを調整します。
$ cat postgresql.conf
...
listen_addresses = '*'
#listen_addresses = 'localhost'
...
wal_level = hot_standby
#wal_level = minimal
...
max_wal_senders = 2
#max_wal_senders = 0
...
wal_keep_segments = 8
#wal_keep_segments = 0
...
hot_standby = on
#hot_standby = off
そして、PostgreSQLを起動しておきます。
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/postgresql.log start
レプリケーション用のユーザーを作成します。
$ /usr/local/pgsql/bin/psql
postgres=# CREATE ROLE repluser LOGIN REPLICATION PASSWORD 'replpass';
CREATE ROLE
pg_hba.confを調整します。
$ cat pg_hba.conf
...
host    replication     repluser        10.0.0.0/8            md5
※AWS上から(10.0.0.0/8)からrepluserでアクセスできるようにします。

PostgreSQLを再起動します。
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/postgresql.log restart
【スレーブDBでの作業】

あらかじめPostgreSQLを停止しておきます。
# su - postgres
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop
データベースクラスタを削除します。
$ cd /usr/local/pgsql/data
$ rm -rf *
ベースバックアップを取得します。
$ /usr/local/pgsql/bin/pg_basebackup -D /usr/local/pgsql/data -x -P -h 10.150.117.75 -U repluser
Password:
42536/42536 kB (100%), 1/1 tablespace
$ ls -1
PG_VERSION
backup_label
base
global
pg_clog
pg_hba.conf
pg_ident.conf
pg_multixact
pg_notify
pg_serial
pg_stat_tmp
pg_subtrans
pg_tblspc
pg_twophase
pg_xlog
postgresql.conf
postgresql.log
recovery.confを作成し調整します。
$ cp /usr/local/pgsql/share/recovery.conf.sample recovery.conf
$ cat recovery.conf
...
standby_mode = on
#standby_mode = off
...
primary_conninfo = 'host=10.x.x.x port=5432 user=repluser password=replpass'
#primary_conninfo = ''          # e.g. 'host=localhost port=5432'
...
PostgreSQLを起動します。
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/postgresql.log start
以上で、マスターデータベースの変更がスレーブ(ホットスタンバイ)データベースに
レプリケーションされるようになります。
(スレーブ(ホットスタンバイ)データベースでの読み取りは可能です)


こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

2012年2月21日

Gitlabってなんじゃ?(ユーザー登録編)

前回、Gitlabってなんじゃ?(EC2にインストール編)が終了したので、今回は早速試してみたいと思います。

http://ホスト名/gitlabhq/にアクセスすると、下記のような画面になるので、
Gitlabのインストール終了時に表示されたIDとパスワードを入力し、「Sign in」をクリックします。



そうすると、初期ユーザーのダッシュボードが表示され、ここにはプロジェクトの状況等が表示されます。



ダッシュボードの右カラムに新規プロジェクトの登録ボタン(New Project)と
管理エリア(Visit Admin Area)のボタンがあります。
まずはユーザーを登録するために管理エリアを選択してみます。

そうすると、ユーザーの一覧画面が表示されます。
そこで、右上の「New User」ボタンをクリックすると以下のように登録画面が開きます。



ここに適宜情報を入力します。
ここでは正規の管理者を登録するため、「Administrator」にチェックを入れます。
入力を終え、「Save」ボタンをクリックすると、完了画面が表示されるので、一覧画面に戻ると
以下のようにユーザーが追加されているのが確認できます。



ここで、今登録したばかりのユーザーにログインし直します。
ヘッダの右端のアイコンから「logout」を選択し、一度ログイン画面に戻り、登録したメールアドレスと
パスワードでログインし直します。

また、ここで正規の管理者を登録したので、セキュリティのためにデフォルトのAdministratorは削除するか
パスワードを変更しておきましょう。


こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら

mod_perlをインストール

前回、Perl5.8系をインストールが完了しましたので、今回はmod_perlのインストールを行います。

mod_perlはこちらのmodperlからダウンロードが可能です。
※前提条件としてapache2が/usr/local/apache2にインストールされているとします。

インストールは下記のようになります。
wget http://perl.apache.org/dist/mod_perl-2.0.5.tar.gz

perl Makefile.PL MP_APXS=/usr/local/apache2/bin/apxs
make test
make install
perlのインストール時に下記のオプションを指定しないと、make時に次のようなエラーとなります。
-de -Accflags=’-fPIC’
/usr/bin/ld: /usr/local/perl-5.8/lib/5.8.9/x86_64-linux/CORE/libperl.a(gv.o): relocation R_X86_64_32 against ’.rodata.str1.1’ can not be used when making a shared object; recompile with -fPIC
/usr/local/perl-5.8/lib/5.8.9/x86_64-linux/CORE/libperl.a: could not read symbols: Bad value
collect2: ld はステータス 1 で終了しました
make[1]: *** [mod_perl.so] エラー 1
そして、インストールが完了すると下記にmod_perl.soが生成されます。
/usr/local/apache2/modules/
また、httpd.confには下記を追加します。
LoadModule perl_module modules/mod_perl.so
Files *.cgi
SetHandler perl-script
PerlHandler ModPerl::Registry
PerlSendHeader On
Options +ExecCGI
/Files
mod_perlの確認としては、cgi-bin以下のprintenvをprintenv.cgiに変更して、
ブラウザよりアクセスすると、下記のように表示され、mod_perlとperlの確認ができます。
SERVER_SOFTWARE="Apache/2.2.22 (Unix) mod_ssl/2.2.22 OpenSSL/1.0.0-fips mod_perl/2.0.5 Perl/v5.8.9"


こちらの記事はなかの人(be_hase)監修のもと掲載しています。
元記事は、こちら

2012年2月20日

CentOS(6.2) & PostgreSQL(9.1) & PostGIS(1.5)

CentOS(6.2)にPostgreSQL(9.1.2)をインストールし、PostGIS(1.5.3)も利用できるように調整しました。
尚、CentOS(6.2)は、「SUZ-LAB謹製 CentOS AMI (6.0.5 64bit ap-northeast-1)」になります。

【PostgreSQLのインストール】

・依存パッケージのインストール
# yum -y install readline-devel
・PostgreSQLのインストール
# curl -OL ftp://ftp2.jp.postgresql.org/pub/postgresql/source/v9.1.2/postgresql-9.1.2.tar.gz
# tar xvzf postgresql-9.1.2.tar.gz
# cd postgresql-9.1.2
# ./configure
# make
# make install
・postgresユーザーとデータディレクトリの作成
# adduser postgres
# mkdir /usr/local/pgsql/data
# chown postgres.postgres /usr/local/pgsql/data
・データベースクラスタの作成
# su - postgres
$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
$ ls -1 /usr/local/pgsql/data/
PG_VERSION
base
global
pg_clog
pg_hba.conf
pg_ident.conf
pg_multixact
pg_notify
pg_serial
pg_stat_tmp
pg_subtrans
pg_tblspc
pg_twophase
pg_xlog
postgresql.conf
・PostgreSQLの起動と確認
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data start
server starting
$ /usr/local/pgsql/bin/psql
psql (9.1.2)
【PROJ.4のインストール】
# curl -OL http://download.osgeo.org/proj/proj-4.7.0.tar.gz
# tar xvzf proj-4.7.0.tar.gz
# cd proj-4.7.0
# make
# make install
【GEOSのインストール】
# curl -OL http://download.osgeo.org/geos/geos-3.3.2.tar.bz2
# bunzip2 geos-3.3.2.tar.bz2
# tar xvf geos-3.3.2.tar
# cd geos-3.3.2
# ./configure
# make
# make install
【PostGISのインストール】

・PostGISのインストール
# curl -OL http://postgis.refractions.net/download/postgis-1.5.3.tar.gz
# tar xvzf postgis-1.5.3.tar.gz
# cd postgis-1.5.3
# ./configure --with-pgconfig=/usr/local/pgsql/bin/pg_config
# make
# make install
・共有ライブラリの認識
# /sbin/ldconfig
・PostGISの利用
$ /usr/local/pgsql/bin/createdb sample
$ /usr/local/pgsql/bin/psql -d sample -f /usr/local/src/postgis-1.5.3/postgis/postgis.sql


こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

2012/02/20 週刊cloudpackマガジンを配信しました

本日の配信内容は、下記になります。

[cloudpack更新情報]

◇日経BP Cloud Days Osaka 2012 Conference & EXPOに出展いたします
大阪初出展!Cloud Days Tokyoに続き、cloudpackは大阪にも遠征します!


[気になるAmazon EC2関連情報]


★AWS技術レビュー

◇Gitlabってなんじゃ?(EC2にインストール編)

◇SimpleDBのドメイン内のデータを一覧表示(NextTokenに注意)

◇s3cmd実行時にエラー発生


★サーバ技術レビュー

2月13日の週は更新情報がございません。


★cloudpack職人見習いのStudy Note

◇AWS SDK for PHPでIAMのユーザ一覧を取得する

◇AWS SDK for PHPでインスタンスにタグを追加する

◇AWS SDK for PHPでインスタンスの再起動と削除

◇PHPで外字を含む文字列のエンコードコンバート

◇AWS SDK for PHPでインスタンスのスタートとストップ


毎週お届けする週刊cloudpackマガジンの購読希望の方は、
週刊cloudpackマガジンよりご登録ください。

Perl5.8系をインストール

CentOS6系の場合、Perlのバージョンは5.10系がインストールされており、
5.8系をインストールする場合は、ソースからコンパイルする必要があります。

ソースは、こちらのIndex of /APCのページからダウンロードが可能です。

尚、5.8系の場合は下記のコマンドになります。
rsync -avz rsync://perl5.git.perl.org/APC/perl-5.8.x .
configureは下記のようになります。
./Configure -de -Accflags='-fPIC' -Dprefix=/usr/local/perl-5.8
今回は、mod_perlのインストールを考えているので、下記のオプションを追加します。
-de -Accflags='-fPIC'
このオプションを付与しないと、mod_perlのmake時にエラーが発生します。

その後、下記のコマンドで完了です。
make test
make install

/usr/local/perl-5.8/bin/perl
上記にインストールされるので、後はシンボリックリンクで
下記の設定をしておきます。
ln -s /usr/local/bin/perl /usr/local/perl-5.8/bin/perl


こちらの記事はなかの人(be_hase)監修のもと掲載しています。
元記事は、こちら

スピンオフ・サービスの『監視職人』をリニューアルしました



cloudpackスピンオフ・サービスの『監視職人』をリニューアルし、サービス内容をより詳細に
紹介するよう変更しました。

今回のリニューアルで、各メニューの表示をタブメニューで切り替えるようにしました。
そして、サービス内容には監視の仕組みとして、NagiosとCloudWatchを利用した仕組みを紹介し、
監視項目は基本的な項目の一覧から現在行っている項目の一覧に変更しました。

自社での運用負荷を減らし、本業により集中したいという方は是非、ご検討ください。


詳細については、監視職人よりどうぞ。

2012年2月17日

AWS SDK for PHPでIAMのユーザ一覧を取得する

こんにちは。
見習い職人の櫛田です。


今回は、AWS SDK for PHPでIAMのユーザ一覧を取得してみます。

下記のように、IAMの一覧データを取得しUser Nameを表示します。
<?php
require_once('AWSSDKforPHP/sdk.class.php');

// Instantiate the class
$iam = new AmazonIAM();

$response = $iam->list_users();

foreach ($response->body->ListUsersResult->Users as $user) {
 printf("[USER]".$user->member->UserName);
}
?>
実行結果が下記になります。
自分のアカウントにあるIAMのUser Nameが取得できています。
[USER]kushida



※この記事は、なかの人(KUSSY8077)が書いています。

Gitlabってなんじゃ?(EC2にインストール編)

Gitlabとは、自ホストにGithubのようなリポジトリ管理サイトを構築することができるオープンソースツールで、
Gitlabhqとも呼ばれています。
Gitを使いたいが外部サイトに依存するには抵抗がある場合は、自前のサイトでホストしてプロジェクト管理、
タスク管理、ソース管理できるのでとても有用なプロダクトです。

それでは、早速導入してみます。

GitlabをホストするためのインスタンスをEC2に起動します。
運用時は必要に応じてインスタンスサイズを変えれば良いですが、インストール時は重いコンパイルが実行されるので、
smallインスタンス以上にしておくと待ち時間が少なくなります。

今回は、CentOS(suz-lab_ebs_centos-core-x86_64-6.0.5)にインストールしてみます。
gitアクセスとサイトのブラウジングでSSHとHTTPを使用するため、セキュリティグループ設定で
SSHとHTTPを適宜開放しておきます。

以降はEC2インスタンスが起動し、SSH接続した時点からの手順になります。


○必要なライブラリのインストール

SELinuxが有効な場合は無効に設定します。
# setenforce 0
まず、rootで以下のライブラリをインストールしておきます。
# yum install -y wget gcc gcc-c++ make patch libtool openssl-devel openssh-clients libxml2 libxml2-devel libxslt libxslt-devel readline-devel ncurses-devel gdbm-devel glibc-devel tcl-devel db4-devel byacc curl-devel zlib-devel httpd httpd-devel apr-devel apr-util-devel sqlite-devel libicu-devel pcre-devel git git-core python-setuptools python-devel
また、easy_installでpygmentsもインストールしておきます。
# cd /usr/local/src/
# curl -O http://peak.telecommunity.com/dist/ez_setup.py
# python ez_setup.py
# easy_install pygments
次にredisのインストールと起動を行います。
redisとは高速で永続化可能なインメモリDBで、gitlabhqで利用されています。
# wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz
# tar zxvf redis-2.4.6.tar.gz
# cd redis-2.4.6
# make
# make install
# nohup redis-server &

○ユーザーの追加

ここでgitリポジトリとGitlabを管理するためのユーザーを追加し、グループを共有しておきます。
# useradd git
# useradd gitlabhq
# usermod -a -G git gitlabhq
# passwd gitlabhq
そして、gitlabhqユーザーでSSHの鍵を作成します。
これは、gitlabhqのプロダクトからgitリポジトリにアクセスするために使用します。
作成した公開鍵をgitユーザーのホームディレクトリに置いておきます。
# su - gitlabhq
$ ssh-keygen -t rsa
$ ssh git@localhost
$ exit
# cp /home/gitlabhq/.ssh/id_rsa.pub /home/git/rails.pub
# chown git:git /home/git/rails.pub
# chmod 600  /home/git/rails.pub

○gitoliteのインストール

gitリポジトリそのものの管理やアクセス管理をするためのgitoliteというプロダクトをインストールします。
gitlabhqは間接的にgitoliteを使用してリポジトリを管理します。
# su - git
$ git clone git://github.com/gitlabhq/gitolite /home/git/gitolite
$ /home/git/gitolite/src/gl-system-install
$ sh -c "PATH=/home/git/bin:$PATH; gl-setup ~/rails.pub"
インストールの途中で自動的に設定ファイルが開くので、以下の変更を行います。
//$REPO_UMASK = 0077; $REPO_UMASK = 0007;

変更が完了するとインストールが再開し、まもなく完了します。

次に各ディレクトリのパーミッションを調整します。
$ exit
# chmod 755 /home/gitlabhq/
# chmod 750 /home/git/
# chmod -R g+rwX /home/git/repositories/
# chown -R git:git /home/git/repositories/

○gitlabhqのインストール

gitlab本体はgithubと同じくRailsなので、RubyとRailsをインストールします。
今回は、Apacheで起動するためPassengerもインストールします。
# su - gitlabhq
$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
$ source ~/.bash_profile
$ rvm install 1.9.2
$ rvm 1.9.2 --default
$ gem install rails passenger rake bundler grit
$ passenger-install-apache2-module
次にgitlabhq本体をgitからインストールします。
$ git clone git://github.com/gitlabhq/gitlabhq.git
$ cd gitlabhq
$ bundle install --without development test
$ bundle exec rake db:setup RAILS_ENV=production
$ bundle exec rake db:seed_fu RAILS_ENV=production
$ vi  config/gitlab.yml
   gitlab.ymlのgit_host/host: の欄にこのインスタンスのパブリックIPかパブリックDNS名を入力

○Apacheの設定

次に、gitlabhqをApacheでホストするための設定を行います。
まず、/var/www/htmlにgitlabhqのpublicフォルダへのリンクを貼ります。
$ exit
# cd /var/www/html
# ln -s /home/gitlabhq/gitlabhq/public gitlabhq
次にhttpd.confの設定を行います。
先程、passenger-install-apache2-moduleのインストール完了時に表示されたLoadModuleの設定と
VirtualHostのサンプルを元に、httpd.confの最後尾に以下のように追加します。
# vi /etc/httpd/conf/httpd.conf
-------
LoadModule passenger_module /home/gitlabhq/.rvm/gems/ruby-1.9.2-p290/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
PassengerRoot /home/gitlabhq/.rvm/gems/ruby-1.9.2-p290/gems/passenger-3.0.11
PassengerRuby /home/gitlabhq/.rvm/wrappers/ruby-1.9.2-p290/ruby
RailsEnv production

<VirtualHost *:80>
    ServerName gitlabhq.cloudpack.jp
    DocumentRoot /var/www/html
    ErrorLog logs/gitlabhq_error_log
    CustomLog logs/gitlabhq_access_log common
    RailsBaseURI /gitlabhq
</VirtualHost>
Apacheを起動します。
# /etc/init.d/httpd start
問題なく起動が完了したら、Gitlabの画面を確認してみます。

ブラウザでhttp://ホスト名/gitlabhq/を表示します。



上記のように、問題なく表示され、インストールは成功のようです。


こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら

2012年2月16日

AWS SDK for PHPでインスタンスにタグを追加する

こんにちは。
見習い職人の櫛田です。


今回は、AWS SDK for PHPでEC2インスタンスにタグを追加してみます。


○インスタンスにタグを追加

インスタンスにタグを追加するには、下記のようにcreate_tagsにインスタンスIDを指定し、
追加するタグをKeyとValueの配列で指定します。
<?php
require_once('AWSSDKforPHP/sdk.class.php');
// クラスを定義する
$ec2 = new AmazonEC2();

// インスタンスにタグを追加する
$response = $ec2->create_tags('i-9e******', array(
 array('Key' => 'name2', 'Value' => 'test'),
));

// 結果を確認する
var_dump($response->isOK());
?>
実行結果が下記のようにtrueであれば、インスタンスにタグが追加されています。
# php rebootinstances.php
bool(true)
下記のようにマネージメントコンソールから確認することができます。



※この記事は、なかの人(KUSSY8077)が書いています。

2012年2月15日

AWS SDK for PHPでインスタンスの再起動と削除

こんにちは。
見習い職人の櫛田です。


今回は、AWS SDK for PHPでEC2インスタンスの再起動と削除を行ってみます。


○インスタンスの再起動

インスタンスの再起動を行うには、下記のようにreboot_instancesにインスタンスIDを指定します。
<?php
require_once('AWSSDKforPHP/sdk.class.php');

// クラスを定義する
$ec2 = new AmazonEC2();

// インスタンスを再起動する
$response = $ec2->reboot_instances('i-91b*****');

// 結果を確認する
var_dump($response->isOK());
?>
実行結果が下記のようにtrueであれば、インスタンスが再起動されています。
# php rebootinstances.php
bool(true)

○インスタンスの削除

インスタンスの削除を行うには、下記のようにterminate_instancesにインスタンスIDを指定します。
<?php
require_once('AWSSDKforPHP/sdk.class.php');

// クラスを定義する
$ec2 = new AmazonEC2();
 
// インスタンスを削除する
$response = $ec2->terminate_instances('i-91b*****');
 
// 結果を確認する
var_dump($response->isOK());
?>
実行結果が下記のようにtrueであれば、インスタンスが削除されています。
# php terminateinstances.php
bool(true)
下記のようにマネージメントコンソールから確認することができます。




※この記事は、なかの人(KUSSY8077)が書いています。

SimpleDBのドメイン内のデータを一覧表示(NextTokenに注意)

SimpleDBはRDBのSELECTのようなクエリーを発行することができるので、
条件に該当するデータを取得することができます。

しかしながら、一回のAPIリクエストで取得できるデータ数は100件までとなっており、
それ以降のデータを取得するには、「NextToken」というものを利用して、
再度同様のクエリーをAPIでリクエストする必要があります。

具体例としては、100件以上該当データがある場合、レスポンスにNextTokenが含まれ、
そのNextTokenを指定して、再度同様のクエリーをリクエストする形になります。
当然、次の100件でもデータが取得しきれない場合は、レスポンスに同様の
NextTokenが含まれるので、それを指定して再度リクエストすることになります。

上記を考慮すると、すべてのデータを取得するには、NextTokenがあるかぎり、
複数のリクエストを行う必要があります。

ということで、PHPで簡単に作ってみました。
 SDB_KEY_ACCESS, "secret" => SDB_KEY_SECRET)
);
$sdb->set_region(AmazonSDB::REGION_APAC_NE1);
 
$query = "SELECT * FROM log WHERE uid >= '0' ORDER BY uid DESC";
$option = array();
do {
    $response = $sdb->select($query, $option);
    foreach($response->body->SelectResult->Item as $item) {
        print($item->Name . "\t");
        foreach($item->Attribute as $attribute) {
            print($attribute->Name  . ":");
            print($attribute->Value . "\t");
        }
        print("\n");
    }
    if(isset($response->body->SelectResult->NextToken)) {
        $option["NextToken"] = $response->body->SelectResult->NextToken;
    } else {
        $option["NextToken"] = null;
    }
} while($option["NextToken"] != null);
 
exit(0);
?>
実行結果は、下記のようになります。
# php list-data.php
4f3b67cf5396d8.04566676 uid:1 timestamp:1329293263 action:1
4f3b65774e50c6.59284865 uid:1 timestamp:1329292663 action:1
4f3b64ab8239a8.32909808 uid:1 timestamp:1329292459 action:1
4f3b649b3a3cd1.62613728 uid:1 timestamp:1329292443 action:1
4f3b625e9e17f1.40124430 uid:1 timestamp:1329291870 action:1
4f3b58032f0737.20329909 uid:1 timestamp:1329289219 action:1
...
こちらを応用すれば、SipmleDBのバックアップも簡単に作れるかもしれません。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

PHPで外字を含む文字列のエンコードコンバート

こんにちは。
職人見習いの高嶋です。


最近のWebコンテンツはUTF-8で作成される事が多くなり、別の文字コードにコンバートするケースが
徐々に減ってきています。
しかし、それでもコンテンツ内のメール配信時にはまだまだUTF-8のまま送信するのは、
配信先メーラーが対応しているかという点で抵抗があるので、ISO-2022-JPにコンバートする必要があります。

その際にどうしても問題となってくるのが外字です。
『﨑』『髙』等、氏名や組織名に使われている事も多く、『崎』『高』に替えたいところですが
名前は命という事でこういう対処法は時として受け容れてもらえない事もあります。

文字コードがUTF-8で一貫していれば、最近のPCやスマホでは表示することができますが、
メール送信時に下記のようにしてISO-2022-JPに変換すると文字化けしてしまいます。
$str = mb_convert_encoding( $str, 'ISO-2022-JP');
しかし、PHP V5.2.1以降では『iso-2022-jp-ms』というエンコーディングが追加され、
このエンコーディングでサポートされている文字も変換する事が可能になりました。
$str = mb_convert_encoding( $str, 'ISO-2022-JP-MS');
これにより、$strに(サポートされている)外字が含まれていても、正常にコンバートすることが出来ます。


但し、文字エンコードを正しくコンバート出来る事と、端末で外字を表示出来る事はイコールではありません。

いくら正常にコンバートしても、表示先の端末にその外字がサポートされていなければ表示されません。

そこで、以下のテストを行ってみました。
$str = '髙嶋裕明';
$str = mb_convert_encoding( $str, 'ISO-2022-JP-MS');
これを以下の条件で表示してみると以下の結果になりました。

Windows + Thunderbird 正常に表示
Windows + Outlook 正常に表示
Mac + Mail 正常に表示
iPhone + Gmail 正常に表示
iPhone + SMS 『髙』が抜けて表示
携帯端末Mail 『髙』が抜けて表示

因みに、昔の携帯端末のWeb画面の場合、Shift_JISに変換しなければなりませんが、
この文字コードもコンバートは正常に変換出来ても、端末自体に文字が対応していないので
表示されないという結果になりました。

以上のことから、人名や組織名を扱うプログラムを組む際は、事前にクライアントに対して
外字の対応を決めておく必要があります。

対応としては、下記の2択になるかと思います。
  • 一部端末が非表示を承知の上で外字OKとするか。
  • 全端末で見えないと問題なので簡易漢字に変換もしくは外字入力を受け付けないようにするか。

※この記事は、なかの人(piro556)が書いています。

2012年2月14日

AWS SDK for PHPでインスタンスのスタートとストップ

こんにちは。
見習い職人の櫛田です。

今回は、AWS SDK for PHPでEC2インスタンスのスタートとストップを実行してみます。

○インスタンスのストップ

まず、起動しているEC2インスタンスをストップするには、下記のようにインスタンスIDを指定し、
stop_instancesを実行します。
<?php
require_once('AWSSDKforPHP/sdk.class.php');

// クラスを定義する
$ec2 = new AmazonEC2();

// インスタンスをストップする
$response = $ec2->stop_instances('インスタンスID');
 
// 結果を確認する
var_dump($response->isOK());

?>
実行結果が下記のようにtrueであれば、インスタンスがストップされているのが、
マネージメントコンソールから確認することができます。
# php stopinstances.php
bool(true)

○インスタンスのスタート

そして、再度EC2インスタンスをスタートするには、下記のようにインスタンスIDを指定し、
start_instancesを実行します。
<?php
require_once('AWSSDKforPHP/sdk.class.php');

// クラスを定義する
$ec2 = new AmazonEC2();

// インスタンスをスタートする
$response = $ec2->start_instances('インスタンスID');
 
// 結果を確認する
var_dump($response->isOK());

?>
実行結果が下記のようにtrueであれば、インスタンスがスタートされているのが、
マネージメントコンソールから確認することができます。
# php startinstances.php
bool(true)

※この記事は、なかの人(KUSSY8077)が書いています。

2012年2月13日

日経BP Cloud Days Osaka 2012 Conference & EXPOに出展いたします



cloudpackはこの度、Cloud Days Tokyo 2012に引き続き、日経BP Cloud Days Osaka 2012 Conference & EXPO
に出展いたします。
東京開催同様に、Amazon Web Servicesブース内への出展となります。

開催概要は、下記になります。

名 称 日経BP Cloud Days Osaka 2012 Conference & EXPO
日 時 2012年3月8日(木)~3月9日(金)10:00~18:00
会 場 ハービスHALL(大阪市北区梅田2-5-25 ハービスOSAKA B2F)
主 催 日経BP社
入場料 3,000円 (消費税込、事前登録により無料)
出展分野 SaaS、PaaS、HaaS/IaaS、DaaS/デスクトップ仮想化、
パブリッククラウド導入支援サービス、プライベートクラウド構築支援サービス、
サーバ/ストレージ/ネットワーク仮想化、データセンター、
クラウド対応セキュリティソリューション、ソフトウエア開発、
クラウド向け運用管理、データバックアップ、その他関連製品・サービス


出展情報につきましては、日経BP Cloud Days Osaka 2012 Conference & EXPOにて、随時公開していきます。

s3cmd実行時にエラー発生

s3cmdを利用することで、S3バケットへのファイルのアップロード・ダウンロードが可能となります。

しかし、s3cmd実行時に下記のようなエラーに遭遇しました。

The difference between the
request time and the current time is too large.

原因を調査したところ、s3cmdコマンドを実行している、
Linuxサーバの時刻設定に若干のずれがありました。
Linuxの時刻設定を行ったところ、正常にアップロードができました。

やはり、NTPは入れた方がいいようです。


こちらの記事はなかの人(be_hase)監修のもと掲載しています。
元記事は、こちら

2012/02/13 週刊cloudpackマガジンを配信しました

本日の配信内容は、下記になります。

[cloudpack更新情報]

◇日経BP Cloud Days Tokyo 2012 Conference & EXPOの出展場所を公開しました
今年もAWSブース内の1コーナーとしてcloudpackも参加します!

◇JAWS-UG-Hokuriku 勉強会 第2回
金沢で行われたJAWS-UG北陸の第2回勉強会参加レポートを公開

◇日経BP Cloud Days Tokyo 2012 Conference & EXPOの出展が決定いたしました
2月28日(火)、2月29日(水)東京国際フォーラムで開催のイベントに出展!

◇導入事例(UNIQLO CHECK-IN CHANCE)を追加いたしました
毎年膨大なアクセスのある、人気キャンペーンサイトをAWS上初運用!!


[気になるAmazon EC2関連情報]


★AWS技術レビュー

◇S3ってなんじゃ?(CloudFrontでストリーミングログを取得)


★サーバ技術レビュー

2月6日の週は更新情報がございません。


★cloudpack職人見習いのStudy Note

◇AWS SDK for PHPでインスタンス起動する

◇AWS SDK for PHPでインスタンスの一覧を取得する

◇MT5 記事編集画面 jQueryで入力チェックを入れた際のsubmitの挙動

◇ZendFrameworkによるシステム構築 vol.1 プロジェクト作成


毎週お届けする週刊cloudpackマガジンの購読希望の方は、
週刊cloudpackマガジンよりご登録ください。

2012年2月10日

AWS SDK for PHPでインスタンス起動する

こんにちは。
見習い職人の櫛田です。


今回は、AWS SDK for PHPでEC2インスタンスを起動してみます。

下記のように、AMIを指定して実行します。
また、オプションで、セキュティグループやリージョン等を指定することができます。
<?php
require_once('AWSSDKforPHP/sdk.class.php');  
// クラスを定義する
$ec2 = new AmazonEC2();

// インスタンスの起動
$response = $ec2->run_instances('ami-84db39ed', 1, 1, array(
 'InstanceType' => 'm1.small'
));

// 結果を確認する
var_dump($response->isOK());
?>
実行結果のtrueが返ってきました。
# php runinstances.php
bool(true)
そして、コンソール画面で確認してみるとインスタンスが起動しているのが確認できます。




※この記事は、なかの人(KUSSY8077)が書いています。

2012年2月9日

日経BP Cloud Days Tokyo 2012 Conference & EXPOの出展場所を公開しました

2月28日(火)、29日(水)に出展するCloud Days Tokyo 2011の出展場所を
先日紹介した日経BP Cloud Days Tokyo 2012 Conference & EXPOのページに公開しました。

会場入り口近くのAWSブース内になりますので、お誘い合わせの上、是非お立ち寄りください。




出展情報につきましては、日経BP Cloud Days Tokyo 2012 Conference & EXPOにて、随時公開していきます。

AWS SDK for PHPでインスタンスの一覧を取得する

こんにちは。
見習い職人の櫛田です。


AWSの勉強として、AWS SDK for PHPを試していきます。
今回はAWS SDK for PHPを利用してインスタンスの一覧を取得してみます。
(AWS SDK for PHPの設定ができている前提とします)

はじめに、「AWSSDKforPHP」のディレクトリを同じ階層に空のPHPファイルを
作成し、このファイルにインスタンスの一覧を取得するプログラムを記述します。
# ls
AWSSDKforPHP
# touch test.php
# ls
AWSSDKforPHP  test.php
# vi test.php
下記のように、インスタンスの一覧を取得するプログラムを記述します。
set_region($region);
  $ret = $ec2->describe_instances();
  if (!empty($ret->body->reservationSet->item)) {
    foreach ($ret->body->reservationSet->item as $item) {
      printf("[%s] %s".PHP_EOL, $region, $item->instancesSet->item->instanceId);
    }
  }
}
?>
そして、このPHPを実行すると下記のようにインスタンスIDを取得することができます。
# php test.php
[ec2.ap-northeast-1.amazonaws.com] i-8d******
コンソールでも同じインスタンスIDが表示されていることが確認できました。




※この記事は、なかの人(KUSSY8077)が書いています。

2012年2月8日

JAWS-UG-Hokuriku 勉強会 第2回

JAWS-UG2012年1月20日(金)に開催された
「JAWS-UG-Hokuriku 勉強会 第2回」に参加した際の、
参加レポートを公開しました。



石川県金沢市のITビジネスプラザ武蔵にて開催されたJAWS-UG-Hokuriku 勉強会 第2回は、
第0回から数えると、3回目となる勉強会で個性的な内容の発表が多く興味深い勉強会でした。

勉強会の中で、AWSの玉川氏より紹介があった昨年一年間のアップデートやサービスインの
件数の多さには驚きました。
また、17支部にまで増えているJAWS-UGの拡大に伴う盛り上がりにも今後の期待が高まります。


当日のセミナー内容とUstreamは下記の通りです。
-----
○発表資料

○Ustream
-----


詳細は、JAWS-UG-Hokuriku 勉強会 第2回よりご確認ください。

2012年2月7日

S3ってなんじゃ?(CloudFrontでストリーミングログを取得)

CloudFrontでストリーミングをする時に、デフォルトで試聴ログが取れるので、
試してみました。


○ストリーミングの設定

はじめに、ストリーミング用とログ用のにバケットを2つ用意します。
  • stream.memorycraft.jp:CDNストリーミングとプレイヤーのWEBホスト用のバケット
  • log.stream.memorycraft.jp:ストリームログ用のバケット


CDN用のバケットではストリーミングする動画プレイヤーのページをWEBホスティングするので、
「Website」の設定をしておきます。



次にストリーミング用のバケットにプレイヤーとムービー等をアップロードします。
今回はWEBプレイヤーのJWPlayerを使用しました。

このフリープレイヤーには、ムービーのサンプルとプレイヤーを埋め込むためのHTMLのテンプレートが
用意されているので、以下のように変更してCDN用のバケットにアップロードします。
また、今回はユーザーを特定するために、rtmpアクセスにuser_idのクエリを付与しました。
変更部分は赤字で示しています。
<!-- THIS IS A BASIC HTML FILE TO PLAY FLV's USING JW PLAYER
The following code is from longtailvideo.com's 'Setup Wizard', found at http://www.longtailvideo.com/support/jw-player-setup-wizard
-->
<HTML>
<HEAD>
<TITLE>
Streaming Video with JW Player
</TITLE>
</HEAD>
<BODY>
<!-- Put a header above your video, if you like
-->
<H1>This is my header</H1>
<!--This is where you call on the required JavaScript file. You uploaded this in step 2a; you can recognize it by the .js suffix
-->
<script type='text/javascript' src='http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/swfobject.js'></script>
<div id='mediaspace'>This text will be replaced</div>
<!--Where it says YOUR_BUCKET/player.swf is where you specify the player that you uploaded in step 2b
-->
<script type='text/javascript'>
var so = new SWFObject('http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.swf','mpl','470','290','9');
so.addParam('allowfullscreen','true');
so.addParam('allowscriptaccess','always');
so.addParam('wmode','opaque');
<!--This next line is where you specify your video file (uploaded in step 2c). For .flv files, you must write it as below ('YOUR_VIDEO_FILE'), *without* the .flv extension.
-->
so.addVariable('file','mp4:mymovie');
<!--This next line is where you point to your streaming distribution on cloudfront (done in step 3 above). NOTE: you *MUST* add "/cfx/st/" for it to work. This specifies it is a cloudfront object (cfx) and that it is to be streamed (st). This is the URL of the streaming distribution--it ends with .cloudfront.net. In the example above, I would write: 'rtmp:// s1jng015tymskd.cloudfront.net/cfx/st/'
-->
so.addVariable('streamer','rtmp://s23sut0ft0hkv9.cloudfront.net/cfx/st/?user_id=5678');
so.write('mediaspace');
</script>
</BODY>
</HTML>
<!--Common problems:
- You cannot have any spaces in any of your URL's (including your 'rtmp://...' URL) (i.e., http:// thereisaspaceatthebeginninghere.xxx)
- Be sure you are calling the correctly numbered version of the flowplayer objects/players (i.e. flowplayer-3.2.2.swf
- You cannot have duplicates of 's3.amazonaws.com' or 'cloudfront.net' in the same address (i.e. (http://s3.amazonaws.com/s3.amazonaws.com/YOUR_BUCKET/player.swf)
- There is a different naming protocol for mp4 vs flv files. For .mp4 files, YOU MUST write it as 'mp4:YOUR_VIDEO_FILE_WITHOUT_THE _MP4_SUFFIX'. For .flv files, you simply write the name of the file, 'YOUR_VIDEO_FILE_WITHOUT_THE_FLV_SUFFIX'.
-->

バケットにアップロードされるファイルは下記のようになります。



次に、CDNの設定を行います。
CloudFrontタブで「Create Distribution」を選択し、最初のDISTRIBUTION TYPEのフェーズで
「Delivery Method」にStreamingを選択します。
また、Bucketには先程ムービー一式をアップしたCDN用のバケットを指定します。



次のDISTRIBUTION DETAILSフェーズでは「Logging」の項目をOnに設定して、「Select Log Bucket」から
先程のログ用のバケットを指定します。
また、ここでは「Log Prefix」にstreamと入力して作成を終了します。



それでは、S3ホスティングされたプレイヤーのページを表示してみます。



上記のように、無事表示されました。


○ログの確認

しばらく(数時間)すると、ログ用のバケットにストリーミングのログが出力され始めます。



これらの一つをダウンロードして開いてみると以下のようなFMSのログになっています。
#Version: 1.0
#Fields: date time x-edge-location c-ip x-event sc-bytes x-cf-status x-cf-client-id cs-uri-stem cs-uri-query c-referrer x-page-url c-user-agent x-sname x-sname-query x-file-ext x-sid
2012-02-02 18:12:00 SFO4 219.117.233.241 connect 3073 OK 66f18822-d17a-4e1d-9319-e279ffe82caa rtmp://s23sut0ft0hkv9.cloudfront.net/cfx/st/ user_id=5678 http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.swf http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.html MAC%2011,2,202,183 - - - -
2012-02-02 18:12:00 SFO4 219.117.233.241 play 3476 OK 66f18822-d17a-4e1d-9319-e279ffe82caa rtmp://s23sut0ft0hkv9.cloudfront.net/cfx/st/ user_id=5678 http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.swf http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.html MAC%2011,2,202,183 mymovie - mp4 1
2012-02-02 18:12:01 SFO4 219.117.233.241 stop 205127 OK 66f18822-d17a-4e1d-9319-e279ffe82caa rtmp://s23sut0ft0hkv9.cloudfront.net/cfx/st/ user_id=5678 http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.swf http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.html MAC%2011,2,202,183 mymovie - mp4 1
2012-02-02 18:12:04 SFO4 219.117.233.241 pause 205295 OK 66f18822-d17a-4e1d-9319-e279ffe82caa rtmp://s23sut0ft0hkv9.cloudfront.net/cfx/st/ user_id=5678 http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.swf http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.html MAC%2011,2,202,183 mymovie - mp4 -
2012-02-02 18:12:18 SFO4 219.117.233.241 unpause 205295 OK 66f18822-d17a-4e1d-9319-e279ffe82caa rtmp://s23sut0ft0hkv9.cloudfront.net/cfx/st/ user_id=5678 http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.swf http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.html MAC%2011,2,202,183 mymovie - mp4 -
2012-02-02 18:12:21 SFO4 219.117.233.241 disconnect 205295 OK 66f18822-d17a-4e1d-9319-e279ffe82caa rtmp://s23sut0ft0hkv9.cloudfront.net/cfx/st/ user_id=5678 http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.swf http://s3-ap-northeast-1.amazonaws.com/stream.memorycraft.jp/player.html MAC%2011,2,202,183 - - - -
これらの項目は以下のようになっています。

date 日付
time 時刻
x-edge-location CDNのエッジロケーションを空港名のような3文字コード+数字で示しています。
c-ip クライアントのIP
x-event ストリームのイベントです。
Connect, Disconnect, Play, Stop, Pause, Unpause, Seekがあります。
sc-bytes サーバーから送られたバイト数
x-cf-status イベントのステータス
x-cf-client-id コネクションに対して一意のクライアントID
cs-uri-stem ストリームURIのベース部分
cs-uri-query ストリームURIのクエリ部分
c-referrer ストリーミングアクセスのリファラ
x-page-url ストリーミングアクセス元のWEBページのURL
c-user-agent ユーザーエージェント
x-sname ストリーミングされるファイル名
x-sname-query ストリーミングアクセスのクエリ
x-file-ext ストリーミングされるファイルの拡張子
x-sid コネクション内で一意なストリームID


ここで、x-eventでストリームの状態(Play, Stop, Pause, Unpause等)と、x-sname-queryでユーザーの特定や
その他のデータを送信できることで、工夫すれば試聴解析ができそうです。


こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら

日経BP Cloud Days Tokyo 2012 Conference & EXPOの出展が決定いたしました



cloudpackはこの度、日経BP Cloud Days Tokyo 2012 Conference & EXPO
に出展することが決定いたしました。
今回もAmazon Web Servicesブース内への出展となります。

開催概要は、下記になります。

名 称 日経BP Cloud Days Tokyo 2012 Conference & EXPO
日 時 2012年2月28日(火)~2月29日(水)10:00~18:00
会 場 東京国際フォーラム(東京都千代田区丸の内3丁目5番1号)
主 催 日経BP社
入場料 3,000円 (消費税込、事前登録により無料)
出展分野 SaaS、PaaS、HaaS/IaaS、DaaS/デスクトップ仮想化、
パブリッククラウド導入支援サービス、プライベートクラウド構築支援サービス、
サーバ/ストレージ/ネットワーク仮想化、データセンター、
クラウド対応セキュリティソリューション、ソフトウエア開発、
クラウド向け運用管理、データバックアップ、その他関連製品・サービス


出展情報につきましては、日経BP Cloud Days Tokyo 2012 Conference & EXPOにて、随時公開していきます。

2012年2月6日

MT5 記事編集画面 jQueryで入力チェックを入れた際のsubmitの挙動

こんにちは。
職人見習いの齋藤です。


ある案件でMT5の記事編集画面に用意したカスタムフィールドに
入力チェックを加える必要があったので、MTAppjQuery プラグインをインストールし、
form の submit()(更新ボタン押下時)に入力内容をチェックし、
問題があった場合は return false で submit をキャンセルさせ、
入力内容を修正するまで submit を無効にするという処理を追加しました。

実際に動作を確認してみると、入力チェックで submit をキャンセルするという動作は
問題なく行われたのですが、キャンセル後に再度更新ボタンを押下しても
submit が動作しないという現象が発生しました。
特にスクリプトでのエラーも見られず、その他の機能は問題なく動作していたのですが、
更新ボタン右のプレビューボタン(同じくsubmit)も動作しなくなっていました。

処理のタイミングや内容等を変更してみてもなかなか改善しなかったのですが、
下記の方法を試してみたところ、現象を回避することができました。
  • 処理をform.submit()ではなく
    $("カスタムフィールド名のid").blur(function(){~にする
  • submit を無効にするのではなく、
    更新ボタンを hide() で非表示にする(今回はプレビューボタンも一緒に非表示に)
  • 入力内容を修正し、問題ない場合は
    更新ボタンを show() で表示する(プレビューボタンも同様)

もし同じような現象が起きた際には上記の方法を試してみてください。

動作としては目的のものが実現できましたが、現象の根本的な解決にはなっていないので
引き続き原因を調査したいと思います。


※この記事は、なかの人(Iret_msaito)が書いています。

導入事例(UNIQLO CHECK-IN CHANCE)を追加いたしました



「UNIQLO CHECK-IN CHANCE」は、UNIQLOの毎年恒例の創業感謝祭の特別企画サイトで、
Facebookのチェックイン機能を利用して、各店舗にチェックインすることで
ユニクロで使用できるクーポンとグローバル旗艦店を巡る世界一周ツアーが当たるキャンペーンサイトです。
尚、総チェックイン数は6日間で合計202,479チェックインを達成しました。

今回、毎年膨大なアクセスでサイトがダウンしていた人気キャンペーンサイトを初めてAWS上で運用しました。
開発時期は小さなインスタンスを用意し、本番公開時にはスケールアップで増強し無事に乗り切ることができました。


詳細は、導入事例(UNIQLO CHECK-IN CHANCE)よりご確認ください。

2012/02/06 週刊cloudpackマガジンを配信しました

本日の配信内容は、下記になります。

[cloudpack更新情報]

◇『cloudpack職人紹介』にhamailogを追加しました
cloudpackに新しい職人がジョイン!サーバ運用保守を担当します

◇cloudpackブログの2012年1月のピックアップエントリーをご紹介します。
日々いろいろな情報を発信しているブログ記事をマンスリーでまとめました。


[気になるAmazon EC2関連情報]


★AWS技術レビュー

◇セキュリティグループ毎の上限値(AWS)

◇VPCのサブネット内で利用できるIPアドレスを取得(PHP)

◇EC2にアタッチできるEBSの上限

◇NagiosのCloudWatchプラグイン(PHP版)でRDSの監視

◇NagiosのCloudWatchプラグイン(PHP版)を実際に利用

◇RDSでfunctionを作成する


★サーバ技術レビュー

◇MySQL JDBCをインストール


★cloudpack職人見習いのStudy Note

◇Javascriptでテキストフィールドからパスワードフィールドに変更する


毎週お届けする週刊cloudpackマガジンの購読希望の方は、
週刊cloudpackマガジンよりご登録ください。

ZendFrameworkによるシステム構築 vol.1 プロジェクト作成

こんにちは。
職人見習いの高嶋です。


PHP + ZendFrameworkのコンビでシステムを構築する際の手順を数回に分けて記していきます。

ZendFrameworkはオープンソースのフレームワークで、多様性に富んでいますが、
堅いルールに縛られる事のないフレームワークなので好んで使用しています。

ただ堅いルールが無い分、開発者によって十人十色の構造形態になりやすく、
私もこれから書く構築方法がベストなのかは不明です。


■目標

一般的なシステムはユーザ側と管理者側にシステムが分かれていて
且つユーザ側のURLにはパスInfo的にパラメータが付加・制御できれば
大概のモノが作れると思います。
http://hoge.jp/admin/ => 管理側URL
http://hoge.jp/12345/fuga => ユーザ側のURL一例
特に上記のユーザ側URLの例は一般的には下記の形が未だ多く見られますが、
見栄えを良くしようと思います。
これにより、SEO的にも良いと思います。
http://hoge.jp/fuga.php?id=12345
前提としては以下の条件下での説明となります。
CentOS v5.x
PHP v5.3.x
ZendFramework v1.11.11
Smarty 3.1.7
PostgreSQL v8.4.x

プロジェクトディレクトリ /web/hoge


■ZendFrameworkのダウンロード

Zend Framework: Downloads

上記から最新の『Zend Framework Full Package』をダウンロードします。
Webサーバ機能が付いたパッケージとかありますが、シンプルにフレームワークのみ利用します。

ダウンロード、解凍後下記に置きます。
/usr/local/ZendFramework


■プロジェクトディレクトリの作成

ZendFrameworkにはターミナル上からコマンドでディレクトリ雛型を作成してくれるCLIツールが備わっています。
> cd /web/hoge
> /usr/local/ZendFramework/bin/zf.sh create project hoge
するとプロジェクトのディレクトリの基本構造がMVC構成で作成されます。
┬ .zfproject.xml
├ application
│├ Bootstrap.php
│├ configs
││└ application.ini
│├ controllers
││├ IndexController.php
││└ ErrorController.php
│├ models
│└ views
│ ├ helpers
│ └ scripts
│  ├ [コントローラ名]
│  │├ index.phtml
│  │└ [アクション名].phtml
│  └ error
├ library
└ public
 ├ .htaccess
 └ index.php
以下のURLにアクセスして画面が表示されれば問題ありません。
http://hoge.jp/index
※indexは省略可能


※この記事は、なかの人(piro556)が書いています。

2012年2月3日

セキュリティグループ毎の上限値(AWS)

セキュリティグループ毎の上限値を超えることは稀なことなのですが、
VPC内のセキュリティグループにルール追加した際に、以下のようなエラーになりました。

The maximum number of rules per security group has been reached.

上記の内容からすると、セキュリティグループに追加できるルールの上限を超えてしまったようです。
VPC内の1セキュリティグループのルールの数は、デフォルトは50個で申請することで増やせるようです。

Amazon VPC 制限増加申請

VPCの各種制限値は、下記で確認できます。

Appendix B: Limits

また、VPC用ではないセキュリティグループは上限が100となっているようです。

Security Group Concepts

「Note You can create up to 500 EC2 security groups, with up to 100 rules per group」


こちらの記事はなかの人(kenjionsoku)監修のもと掲載しています。

元記事は、こちら

2012年2月2日

CentOS6でhttpdのログローテーションの設定を行う

以前、CentOS6でcron.dailyの設定を行う方法を紹介しましたが、
今回は、httpdでdaily・圧縮ログローテーションする為の設定方法を紹介します。

/etc/logrotate.confの設定は、下記に設定しています。
daily
create
dateext
compress
下記は、デフォルト設定となります。
/etc/logrotate.d/httpd
/var/log/httpd/*log /var/log/httpd/*/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
上記で、ログローテーションを行ったのですが、正常に圧縮ができませんでした。
調査したところ delaycompress コマンドを設定していたため、圧縮ができてませんでした。

そこで、設定を下記のように変更しました。
/var/log/httpd/*log {
daily
missingok
ifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
以上で、ローテーション後に圧縮ができました。


こちらの記事はなかの人(be_hase)監修のもと掲載しています。
元記事は、こちら

『cloudpack職人紹介』にhamailogを追加しました

Iretyamaサーバの運用保守を担当することになりました、職人見習いの
hamailogを紹介します。


hamailogは、エンジニアの経験やAWSの経験はまだ浅いですが、
前職のインフラエンジニアの経験を活かしつつ一人前の職人目指して、
日々精進してくれています。
また、デザイナーの経験も持ち合わせています。

こちらの職人については、「cloudpack職人紹介(hamailog)」でご確認ください。

尚、cloudpackでは随時、事業拡大に伴い即戦力となる職人を募集しておりますので、
募集職種などの詳しい情報については、職人募集をご確認ください。

どうぞよろしくお願いします。

2012年2月1日

MySQL5.5で文字コードUTF-8を設定

MySQLの設定ファイルは、/etc/my.cnfとなり、
5.5以前の場合はUTF-8の設定時に、下記の対応をしていたと思います。

[mysqld]
default-character-set=utf8
character-set-server = utf8

しかしMySQL5.5の場合、上記を設定してrestartをすると、下記のエラーで起動ができません。

[ERROR] /usr/libexec/mysqld: unknown variable 'default-character-set=utf8'

MySQL5.5の場合は、下記の設定のみでOKとなります。

[mysqld]
character-set-server = utf8

起動ができない時等はログを確認すれば、原因がわかります。


こちらの記事はなかの人(be_hase)監修のもと掲載しています。
元記事は、こちら

cloudpackブログの2012年1月のピックアップエントリーをご紹介します。

cloudpackブログの2012年1月のピックアップエントリーをご紹介します。

○Amazon VPC関連
○DynamoDB関連
○AWS SDK for Android関連
○イベント関連
○導入事例
○週刊cloudpackマガジン

VPCのサブネット内で利用できるIPアドレスを取得(PHP)

VPCでELBを利用している場合、ELBは負荷に応じてスケールすることで、
サブネット内のIPアドレスを消費してしまいます。

そこで、ELBが存在するサブネット内で利用可能なIPアドレスがあるか、
逐次チェックしたいと思ったので、PHP(AWS SDK)でVPCのサブネットの
利用可能なIPアドレスを取得してみました。
#!/usr/bin/php
<?php
require_once("/opt/aws/php/latest/sdk.class.php");
$ec2 = new AmazonEC2("ACCESS_KEY", "SECRET_KEY");
$ec2->set_region("ap-northeast-1");
$response = $ec2->describe_subnets(array("SubnetId" => "subnet-xxxxxxxx"));
print((int)$response->body->subnetSet->item->availableIpAddressCount);
?>
実行すると下記のようになります。
# ./get-subnet-ip
249

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

EC2にアタッチできるEBSの上限

1台のEC2に対して、EBSをアタッチできる上限を調べてみました。

EC2のUser Guideにある、Attaching the Volume to an Instanceによりますと、Linux/UNIXの場合は、
アタッチ可能なデバイスは、/dev/sd[f-p]または /dev/sd[f-p][1-6]ということなので、
最大で、66ボリュームということになるようです。
予想よりも多くのEBSをアタッチすることができるようです。

また、Windowsの場合は、アタッチ可能なデバイスは、xvd[f-p]なので、11ボリュームとなります。
こちらは少し少ない気もしますが、Windowsの方がディスクを使う量が多いという印象があるからかもしれません。


こちらの記事はなかの人(muramasa64)監修のもと掲載しています。
元記事は、こちら