Skip to content

Latest commit

 

History

History
260 lines (152 loc) · 8.31 KB

README.jp.rdoc

File metadata and controls

260 lines (152 loc) · 8.31 KB

cap-rightscale

RightScaleを使用したインスタンスを取得するためのCapistrano拡張

[RightScale](www.rightscale.com)

インストール

パッケージのインストール

For Debian/Ubuntu:

$ apt-get install ruby ruby-dev
$ apt-get install rubygems  (インストールされていない場合)

For RHEL5 (probably needs the EPEL repository enabled):

$ yum install ruby ruby-devel
$ yum install rubygems (インストールされていない場合)

For MacOSX(MacPorts):

$ port install ruby
$ port install rb-rubygems (インストールされていない場合)

cap-rightscaleのインストール:

$ gem install cap-rightscale

設定

プロジェクトのルートディレクトリに移動して capify を実行:

$ cd <project_dir>
$ capify .

Capfileの設定(例 deploy.rb):

# config/deploy.rb
require 'rubygems'
require 'cap-rightscale'
require 'cap-rightscale/recipes'

DEPLOYMENT_ID = 12345       # RightScale Deployment ID
SERVER_ARRAY_ID = 6789      # RightScale ServerArray ID

# set roles
nickname :web, :name_prefix => "proxy", :deployment => DEPLOYMENT_ID
server_array :app, :array_id => SERVER_ARRAY_ID
tag :dbm, :tags => "xx_db:role=master", :deployment => DEPLOYMENT_ID
tag :dbs, :tags => "xx_db:role=slave", :deployment => DEPLOYMENT_ID, :no_release => true

RightScale API 認証情報記述したファイルを <HOME>/.rsconf/rsapiconfig.yml に配置

# <HOME>/.rsconf/rsapiconfig.yml
username: [email protected]
password: yourpassword
account: 1

テスト実行:

$ cap rs:none

Capistranoについてのヘルプ: github.com/capistrano/capistrano/wiki

Roles

roleを定義するには、 RightScaleのnicknameのプレフィックスとdeploymentを指定する:

nickname :web, :name_prefix => "proxy", :deployment => 12345
# => role :web, ["proxyXXX", ... in deployment ID:12345]

ServerArrayの場合:

server_array :app, :array_id => 6789, :backup => true
# => role(:app, :backup => true) { ["apXXX", ... in serverarray ID:6789] }

RightScale tagを指定した場合:

tag :dbm, :name_prefix => "db", :tags => ["xx_db:env=prod", "xx_db:role=master"], :deployment => 12345, :primary => true
# => role(:dbm, :primary => true) { ["dbXXX", ... in deployment ID:12345] }

RightScale API 認証情報

下記のサイト参照:

Authentication - RightScale Cloud Management Support Portal

RightScale APIを使用するためには認証が必要で、 ログインユーザ、パスワード(RightScale dashboardのログインに使用しているもの)とアカウント番号(Dashboardの右記URLの末尾の番号: Settings > Account)

RightScale APIの認証情報が記載された認証ファイルを <HOME>/.rsconf/rsapiconfig.yml に配置

もしくは、ファイルパスを記述する:

# config/deploy.rb
set :rs_confpath, "/project/config/rs_auth.yml"

キャッシュ

RightScale apiリクエストは、とても遅い。 初回リクエスト時に、テンポラリのディレクトリにキャッシュファイルを作成するようにしている。roleごとに生成し、デフォルトのキャッシュタイムは86400秒(1日)。

キャッシュタイム変更:

# config/deploy.rb
set :rs_lifetime, 86400 * 7  # 1week

環境変数で無効にする RS_CACHE=false、または Capfileで無効にする set :rs_lifetime 0rs_disable :use_rs_cache

$ cap invoke COMMAND='hostname' RS_CACHE=false

# disable cache config/deploy.rb
set :rs_lifetime, 0
# the other way
rs_disable :use_rs_cache

逆に、キャッシュタイムを無期限にする set :rs_lifetime -1.

# config/deploy.rb
set :rs_lifetime, -1

キャッシュクリア(Capfileを変更した場合は必ず実行する必要がある):

$ cap rs:cache:clear
$ cap rs:cc

roleに指定するサーバ名

デフォルトではAmazon EC2 local IPアドレスで、パラメータを指定することで変更可能。

EC2 public IPアドレスを使用:

# config/deploy.rb
rs_enable :use_public_ip

RightScale nicknameを使用する(名前解決を使用 /etc/hosts または dnsレコード) これは、IPアドレスより優先的に使用する。RightScale Nicknameを使用するには、 ec2 instancesのDNSホスト名設定方法参照:

ServerArrayのInstance名は、<ServerArray name> #numberが付与される

# ServerArray name: prod-web
prod-web #1   # <= instance nickname

Cap-rightscaleはServerArrayのinstance名をDNSホスト名に置き換えるように設定できる。デフォルトのフォーマットは “%d”(例: web #1 => web1).

rs_array_number_formatで、置換フォーマットを指定:

# config/deploy.rb
rs_array_number_format "%03d"   # web #1 => web001
rs_array_number_format "-%d"    # web #1 => web-1

Validate

ホストのvalidateは、pingと名前解決が使える。(無効なホストを除外するために)

  • rs_enable :validate_echo: ハングアップしたホストを除外

  • rs_enable :validate_resolv: 名前解決できないホストを除外

    # config/deploy.rb
    rs_enable :validate_echo, :validate_resolv
    

nickname

Definition:

nickname(role, params)

Arguments

role

Capistrano role paramter(:app, :web, :db)

params

Example:

nickname :app, :name_prefix => "ap", :deployment => 12345, :user => "www"
nickname :db, :name_prefix => "db", :deployment => 12345, :except_tags => "xx_db:state=broken"
nickname :mem, :name_prefix => "mem", :deployment => 12345, :except_tags => ["xx_mem:state=out_of_service"]

server_array

Definition:

server_array(role, params)

Arguments

role

Capistrano role paramter(:app, :web, :db)

params

Example:

server_array :app, :array_id => 6789, :user => "www"
server_array :mem, :array_id => 4321, :except_tags => "xx_mem:state=broken", :domain => "ec2.int.com"

tag

Definition:

tag(role, params)

role

Capistrano role paramter(:app, :web, :db)

params

Example:

tag :dbm, :deployment => 12345, :name_prefix => "db", :tags => "xx_db:role=master", :primary => true
tag :dbs, :deployment => 12345, :tags => ["xx_db:role=slave", "xx_db:master"]   # matching tag "xx_db:master=<master_ip>"

Output message

メッセージ出力の抑制(-v option):

$ cap -v shell
$ cap -v invoke COMMAND='cat /var/log/httpd/access_log' 2>/tmp/collect_httpd_access_log

Contributing to cap-rightscale

  • Check out the latest master to make sure the feature hasn’t been implemented or the bug hasn’t been fixed yet

  • Check out the issue tracker to make sure someone already hasn’t requested it and/or contributed it

  • Fork the project

  • Start a feature/bugfix branch

  • Commit and push until you are happy with your contribution

  • Make sure to add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.

Copyright © 2011 Satoshi Ohki. See LICENSE.txt for further details.