2012-11-06

AmazonEC2でEBS

AmazonEC2で使うストレージにEBSというのがあります。
ここではEBSを使えるようにする二つの方法を _φ(。_。*)メモメモします。
EBSとは Amazon Elastic Block Store の略で、私はイー・ビー・エスっていいます。

二つの方法
  • 新規にVolumeをAttachする場合
  • snapshotからVolumeを作成しAttachする場合

★共通の注意事項
インスタンスに Attach にできる Volume は同じ availability zone 内に限られるので、作成時に確認する。
パンくず:services > Compute & Networking > EC2
アマゾン ウェブ サービス にアクセス。

新規にVolumeをAttachする場合


主に、メインのストレージは既にあってログやバックアップを別のストレージに分ける場合に使用しています。
一般的なWebサービスを提供するインスタンスを作る場合、Root Partition(ルートパーティション)<OSが入っている部分>は、32GiBくらいにしておけば十分だと思っているからです。
一概には言えないですけどね (´・ω・`)

  1. 新規Volume(ヴォリューム)作成
    パンくず(左メニュー):ELASTIC BLOCK STORE > Volumes
    1. 右上メニュー:Create Volume
    2. 入力項目:
      Size: *** GiB ( GiB / TiB )
      Availability Zone: ap-northeast-1a
      ap-northeast-1b / ap-northeast-1b / ap-northeast-1b )

      Snapshot: --- No Snapshot ---
      Volume Type: Standard
    3. 『Yes, Create』
    4. 作ったVolumeが何か分かるように名前を付けておく。
      できたVolumeを選択すると下段に以下のタブとともに情報が表示される。
      [Details] , [Status Checks] , [Monitoring] , [Tags]
      パンくず:Tags > Add/Edit Tags
      Key=Name , Value=任意の名前 --> Save Tags
  2. インスタンスにAttach(アタッチ)する
    1. 右上メニュー:Attach Volume
    2. 入力項目:
      Volume: vol-******* in <availability zone>
      Instances: [Select Instance] in <availability zone>
      Device: /dev/sd*
    3. 『Yes, Attach』
  3. Volumeを使えるようにする
    1. 使えるファイルシステムにフォーマット
    2. マウント
    3. インスタンスを再起動しても自動的にマウントさせる

これで、ディスクが追加されたように使えます ( ̄ー+ ̄)
ちなみに、RootPartitionではないのでインスタンスをSTOPしなくても追加されます
つぎは、snapshotからEBSをつくりRootPartitionにする方法を _φ(。_。*)メモメモします。

snapshotからVolumeを作成しAttachする場合

2012-10-17

CのApache-module::subprocess_env構造体

r->subprocess_env構造体には何が入っているか調べてみました。
概要
Apacheにはリクエスト毎の情報をもつ request_rec 構造体があります。 subprocess_env構造体は、環境変数の配列です。

include/httpd.h にて、下記のように定義されています。

この subprocess_env構造体は、apr_table_t 型なので、r->headers_in 等と同じように取り出し可能です。
と、いわれましても。。。って思いませんか?

subprocess_env構造体の全容というか、いったい何が入っているのか気になる!

お決まりのようにググってみましたけども、ちっとも出てきません。
そこで全部の中身をだしちゃうコードを書く事にしました。

あとは、きっと環境が変われば中身も変わる物だから、こんなんですよーってのが無いんだと固く信じてます (*´∀`*)
(英語力が他かければドキュメントが見つかるのだろうか?むかしなら「Doxygen」のマニュアルが沢山出てきたんだけどなぁ。。。)

では、早速コードを。 さて、何がでてくるかな?
QUERY_STRINGを取って見ているので、適当に ?hoge=bar なんてつけてみる。

■出力結果↓ Σ(゜∀゜ノ)ノマジか!
【NULL】 じゃん。。。なんで?
その辺のサンプルコードってよく書いてあるよね?何が違うんだろう。。。と、思っています?

なんと、これにはちゃんとした訳があります。現時点では当然の振る舞いです。
subprocess_env構造体 の値を取得する前に、とある処理を入れてあげないと、KEY=VALの形でデータがsubprocess_env構造体に入ってこないのです。
その処理が。。。【ap_add_cgi_vars関数】です。

では、早速コードに追記して実行してみます。 さて、何がでてくるかな?
QUERY_STRINGを取って見ているので、適当に ?hoge=bar なんてつけてみる。
ついでに、REMOTE_ADDRも取ってみましょう (*´∀`*)
■出力結果↓ やった ヾ(@⌒▽⌒@)ノとれました。
この ap_add_cgi_vars関数は下記のように定義されています。
void ap_add_cgi_vars (request_rec *  r  ) 
Add CGI environment variables required by HTTP/1.1 to the request's environment table
Parameters:
r the current request 

さて、QUERY_STRINGを取得したい場合は、これだけでOKですが、、、、REMOTE_ADDRを取得したい人はどうしましょう?【NULL】 じゃん。。。なんで?
取れない??

なんて事はありません (*´∀`*)ちゃんと取得できるようになっています。
その処理が。。。【ap_add_common_vars関数】です。

さてさて、コードに追記して実行してみます。 さて、取れるでしょうか?
QUERY_STRINGを取って見ているので、適当に ?hoge=bar なんてつけてみる。
ついでに、REMOTE_ADDRも取ってみましょう (*´∀`*)
■出力結果↓ やった ヾ(@⌒▽⌒@)ノ完璧。
この ap_add_common_vars関数は下記のように定義されています。
void ap_add_common_vars (request_rec *  r  ) 
Add common CGI environment variables to the requests environment table
Parameters:
r the current request 

これで必要な情報を取る事ができますね〜 (*´∀`*)
おしまい。

AmazonEC2を使ってみる

0.アカウントを作る

アマゾン ウェブ サービス にアクセスして作成。
この時、クレジットカードが無いと使う事ができないので手元に用意しておくしかない。

1.インスタンスを立ち上げる



2.まずはじめにやる事

■rootのパスワード設定 ■タイムゾーンの設定 [以後変更されないように設定] 変更されないようにこうすれば良いっていろんなサイトにあるのだけど、今のところ効かない・・・・・

■ホスト名の変更
■swap領域の確保
メモリの2倍で。Diskの小さいのはメモリと同じくらいかなぁ。これはラージの場合。
smallは何かしらデフォルトで確保されているので、とくに設定は変えないでおいてみた。
・領域の確保  ・swap領域として初期化(まだ認識はされない) ・swapとして有効に  ・再起動しても確保されるように