2011年2月24日木曜日

"Elastic Beanstalk"を試してみた(AWS)

スズキです。

遅ればせながら、"Elastic Beanstalk"を試してみました。

すでに、"Management Console"に"Elastic Beanstalk"のタブがあるので、
そこから操作できます。

最初は下記のように申し込み(のようなもの?)からです。


ボタンを押すと、いつものサインインを要求されます。


サインインが終わると、下記のメッセージが表示され、同時にメールも送られてきます。


再度、"Management Console"を利用すると、"Elastic Beanstalk"が利用できるようになっています。


試験的にサンプルアプリケーションを立ち上げてみると、
下記のような画面になります。(環境が構築されるまでに多少時間がかかります)


この状態で、すでにサンプルアプリケーションも起動されており、
 "View Running Version"ボタンを押すと、
次のような、動作しているWebアプリケーションを確認することができます。


次は、実際に運用しているWARで試してみよう。
--------
http://www.suz-lab.com

PHP(OpenSSL)で秘密鍵を生成

スズキです。

下記でパスフレーズ無しの秘密鍵が作成されます。

--------【PHP】--------
<?php
$conf = array("private_key_bits" => 2048);
$pkey = openssl_pkey_new($conf);
openssl_pkey_export($pkey, $out);
print($out);
?>
--------

関数リファレンスはこちらです。
http://www.php.net/manual/ja/ref.openssl.php

こんな感じで作成した証明書をELBにインストールするプログラムを、
cloudpackの中の人が作ってます。
--------
http://www.suz-lab.com

2011年2月23日水曜日

ELBの負荷分散アルゴリズム

スズキです。

あまり気にしてませんでしたが、調べてみると、下記に、
http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/index.html?SvcIntro.html
以下のような記述がありました。

--------
By default a load balancer routes each request independently
to the application instance with the smallest load.
--------
デフォルトではELBはそれぞれのリクエストを
最も負荷の少ないEC2インスタンスに(独立的に)割り振ります。
--------

というのがフォーラムにもありました。
https://forums.aws.amazon.com/thread.jspa?messageID=225525&tstart=0#225525

ラウンドロビンだと思ってた…
--------
http://www.suz-lab.com

"AWS SDK for PHP"でELBに証明書をインストール(SSL Termination)

スズキです。

下記で"AWS SDK for PHP"をS3で使ってみましたが、
http://blog.suz-lab.com/2011/02/aws-sdk-for-phps3.html
今回は、ELBに証明書をインストールしてみました。

利用するサービスはIAMとELBになります。

IAM: サーバ証明書の登録
ELB: サーバ証明書のインストール

実際のコードは下記のようになります。

--------【PHP】--------
<?php

// ライブラリの読み込み
require_once("./sdk.class.php");

// キーを用意
$key = <<<KEY
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
KEY;

// 証明書を用意
$crt = <<<CRT
-----BEGIN CERTIFICATE-----
...
----END CERTIFICATE-----
CRT;

// IAMサービスの作成
$iam = new AmazonIAM();

// サーバ証明書(php-test)の削除
$response = $iam->delete_server_certificate("php-test");

// サーバ証明書(php-test)の登録
$response = $iam->upload_server_certificate("php-test", $crt, $key, array(
 "Path" => "/mycerts/" // ARNのパス
));

// サーバ証明書(php-test)情報の取得
// この情報からARNが
// arn:aws:iam::000000000000:server-certificate/mycerts/php-test
// であることがわかります
$response = $iam->get_server_certificate("php-test");

// ELBサービスの作成
$elb = new AmazonELB();

// リージョンの設定
$response = $elb->set_region(AmazonELB::REGION_APAC_SE1);

// リスナーの削除
$response = $elb->delete_load_balancer_listeners("test-lb", array(443));

// リスナーの作成
$response = $elb->create_load_balancer_listeners("test-lb", array(
 array(
  "Protocol" => "HTTPS",
  "LoadBalancerPort" => 443,
  "InstancePort" => 80,
  "SSLCertificateId" => "arn:aws:iam::000000000000:server-certificate/mycerts/php-test"
 )
));

// 証明書の更新
$response = $elb->set_load_balancer_listener_ssl_certificate(
 "test-lb",
 443,
 "arn:aws:iam::000000000000:server-certificate/mycerts/php-test"
);

?>
--------

あとはよろしく…
--------
http://www.suz-lab.com

2011年2月18日金曜日

"mysql-bench"でMySQLのベンチマークの比較

スズキです。

こちらでベンチマークの取得までできたので、
今度は、ベンチマークの比較です。

とりあえず、下記コマンドで比較するベンチマークを取得します。

# ./run-all-tests --machine=micro1 --server=mysql --cmp=mysql --log &
# ./run-all-tests --machine=micro2 --server=mysql --cmp=mysql --log &

すると、下記のようにベンチマークの結果がファイルとして作成されます。

# ls -1 output/
ATIS-mysql-micro1-cmp-mysql
ATIS-mysql-micro2-cmp-mysql
RUN-mysql-micro1-cmp-mysql
RUN-mysql-micro2-cmp-mysql
alter-table-mysql-micro1-cmp-mysql
alter-table-mysql-micro2-cmp-mysql
big-tables-mysql-micro1-cmp-mysql
big-tables-mysql-micro2-cmp-mysql
connect-mysql-micro1-cmp-mysql
connect-mysql-micro2-cmp-mysql
create-mysql-micro1-cmp-mysql
create-mysql-micro2-cmp-mysql
insert-mysql-micro1-cmp-mysql
insert-mysql-micro2-cmp-mysql
select-mysql-micro1-cmp-mysql
select-mysql-micro2-cmp-mysql
transactions-mysql-micro1-cmp-mysql
transactions-mysql-micro2-cmp-mysql
wisconsin-mysql-micro1-cmp-mysql
wisconsin-mysql-micro2-cmp-mysql

そして、下記コマンドで比較の表を作成することができます。

# ./compare-results --cmp=mysql

HTMLの表を作成したい場合は、下記の"template.html"を作成します。

--------【template.html】--------
 text of chapter
--------

そして、下記のコマンドを実行します。

# ./compare-results --cmp=mysql --html

すると、次のような表が作成されます。


1mysql-micro1MySQL 5.1.54
2mysql-micro2MySQL 5.1.54  
Operation 1
mysql
2
mysql
Results per test in seconds:
ATIS9.00299.00
alter-table324.0020.00
big-tables203.00194.00
connect1110.001206.00
create463.00336.00
insert10465.0012692.40
select4859.795291.15
wisconsin35.00103.00
The results per operation:
alter_table_add (100)144.007.00
alter_table_drop (91)121.009.00
connect (10000)205.004.00
connect+select_1_row (10000)246.005.00
connect+select_simple (10000)17.0083.00
count (100)42.00209.00
count_distinct (1000)6.006.00
count_distinct_2 (1000)416.00390.00
count_distinct_big (120)176.00304.00
count_distinct_group (1000)258.00251.00
count_distinct_group_on_key (1000)82.00146.00
count_distinct_group_on_key_parts (1000)8.005.00
count_distinct_key_prefix (1000)5.0079.00
count_group_on_key_parts (1000)380.00372.00
count_on_key (50100)+1389.79+1879.15
create+drop (10000)51.0041.00
create_MANY_tables (10000)40.00249.00
create_index (8)29.002.00
create_key+drop (10000)369.0044.00
create_table (31)1.001.00
delete_all_many_keys (1)160.00473.00
delete_big (1)0.000.00
delete_big_many_keys (128)160.00473.00
delete_key (10000)1.0049.00
delete_range (12)3.00123.00
drop_index (8)28.002.00
drop_table (28)0.000.00
drop_table_when_MANY_tables (10000)1.001.00
insert (350768)455.00626.00
insert_duplicates (100000)7.008.00
insert_key (100000)491.00846.00
insert_many_fields (2000)104.002.00
insert_select_1_key (1)2.002.00
insert_select_2_keys (1)1.0031.00
min_max (60)130.004.00
min_max_on_key (85000)409.0028.00
multiple_value_insert (100000)1.0052.00
once_prepared_select (100000)81.00244.00
order_by_big (10)168.0013.00
order_by_big_key (10)9.0010.00
order_by_big_key2 (10)266.0057.00
order_by_big_key_desc (10)449.00219.00
order_by_big_key_diff (10)150.00471.00
order_by_big_key_prefix (10)14.00324.00
order_by_key2_diff (500)56.0017.00
order_by_key_prefix (500)32.001.00
order_by_range (500)36.001.00
outer_join (10)19.00268.00
outer_join_found (10)468.00274.00
outer_join_not_found (500)9.00265.00
outer_join_on_key (10)486.00325.00
prepared_select (100000)459.00456.00
select_1_row (100000)128.0076.00
select_1_row_cache (100000)7.00337.00
select_2_rows (100000)325.0089.00
select_big (80)338.00275.00
select_big_str (10000)3.00129.00
select_cache (10000)953.00549.00
select_cache2 (10000)491.001067.00
select_column+column (100000)102.0093.00
select_diff_key (500)6.005.00
select_distinct (800)2.00119.00
select_group (2911)11.00384.00
select_group_when_MANY_tables (10000)2.001.00
select_join (100)0.001.00
select_key (200000)+717.73+788.87
select_key2 (200000)561.00+836.43
select_key2_return_key (200000)+618.24581.00
select_key2_return_prim (200000)+738.01+716.56
select_key_prefix (200000)430.00+833.25
select_key_prefix_join (100)3.0060.00
select_key_return_key (200000)+693.04+765.28
select_many_fields (2000)99.00191.00
select_range (410)564.00542.00
select_range_key2 (25010)68.00217.00
select_range_prefix (25010)231.00223.00
select_simple (100000)5.00240.00
select_simple_cache (100000)72.00150.00
select_simple_join (500)0.000.00
update_big (10)7.00210.00
update_of_key (50000)5.0031.00
update_of_key_big (501)138.00278.00
update_of_primary_key_many_keys (256)332.0024.00
update_with_key (300000)661.00728.00
update_with_key_prefix (100000)179.0043.00
wisc_benchmark (114)2.001.00
TOTALS +17132.80+20335.54

さらに下記コマンドでグラフも作成することもできます。

# mkdir gif
# perl graph-compare-results --cmp=mysql
Here some things we already know ....
name --> gif/benchmark2-mysql.gif
※GDを利用しています。

作成したグラフは下記の通りです。



RDSのベンチマークも比較してみよう。
--------

2011年2月16日水曜日

"mysql-bench"でMySQLのベンチマーク

スズキです。

とりあえず、こんな感じです。
(localhostでMySQLが立ち上がってることが前提です)

# yum -y install mysql-bench
# cd /usr/share/sql-bench/
# ./run-all-tests
--------
Benchmark DBD suite: 2.15
Date of test: 2011-02-05 20:43:27
Running tests on: Linux 2.6.16-xenU i686
Arguments:
Comments:
Limits from:
Server version: MySQL 5.1.54
Optimization: None
Hardware:

alter-table: Total time: 23 wallclock secs ( 0.06 usr 0.00 sys +
0.00 cusr 0.00 csys = 0.06 CPU)
ATIS: Total time: 24 wallclock secs ( 2.60 usr 0.12 sys + 0.00 cusr
0.00 csys = 2.72 CPU)
big-tables: Total time: 135 wallclock secs ( 1.95 usr 0.22 sys +
0.00 cusr 0.00 csys = 2.17 CPU)
connect: Total time: 517 wallclock secs (15.46 usr 6.71 sys + 0.00
cusr 0.00 csys = 22.17 CPU)
create: Total time: 192 wallclock secs ( 0.49 usr 0.26 sys + 0.00
cusr 0.00 csys = 0.75 CPU)
insert: Total time: 6710 wallclock secs (164.28 usr 23.75 sys + 0.00
cusr 0.00 csys = 188.03 CPU)
select: Estimated total time: 3483.64 wallclock secs (16.65 usr 1.69
sys + 0.00 cusr 0.00 csys = 18.34 CPU)
transactions: Test skipped because the database doesn't support transactions
wisconsin: Total time: 149 wallclock secs ( 1.39 usr 0.37 sys + 0.00
cusr 0.00 csys = 1.76 CPU)

All 9 test executed successfully

Tests with estimated time have a + at end of line
Totals per operation:
Operation seconds usr sys cpu tests

alter_table_add 9.00 0.03 0.00 0.03 100
alter_table_drop 10.00 0.01 0.00 0.01 91
connect 4.00 1.80 0.37 2.17 10000
connect+select_1_row 35.00 2.17 0.40 2.57 10000
connect+select_simple 80.00 1.93 0.48 2.41 10000
count 109.00 0.08 0.00 0.08 100
count_distinct 151.00 0.13 0.01 0.14 1000
count_distinct_2 9.00 0.07 0.02 0.09 1000
count_distinct_big 206.00 2.57 0.03 2.60 120
count_distinct_group 6.00 0.34 0.01 0.35 1000
count_distinct_group_on_key 193.00 0.14 0.02 0.16 1000
count_distinct_group_on_key_parts 104.00 0.27 0.01 0.28 1000
count_distinct_key_prefix 121.00 0.05 0.00 0.05 1000
count_group_on_key_parts 36.00 0.34 0.00 0.34 1000
count_on_key 1223.64 3.76 0.53 4.29 50100 +
create+drop 44.00 0.06 0.01 0.07 10000
create_MANY_tables 96.00 0.06 0.02 0.08 10000
create_index 2.00 0.01 0.00 0.01 8
create_key+drop 50.00 0.11 0.03 0.14 10000
create_table 2.00 0.00 0.00 0.00 31
delete_all_many_keys 217.00 0.01 0.01 0.02 1
delete_big 4.00 0.00 0.00 0.00 1
delete_big_many_keys 217.00 0.01 0.01 0.02 128
delete_key 1.00 0.10 0.10 0.20 10000
delete_range 56.00 0.00 0.00 0.00 12
drop_index 2.00 0.00 0.00 0.00 8
drop_table 0.00 0.00 0.00 0.00 28
drop_table_when_MANY_tables 1.00 0.12 0.12 0.24 10000
insert 365.00 3.91 3.03 6.94 350768
insert_duplicates 199.00 1.32 0.78 2.10 100000
insert_key 433.00 2.24 0.84 3.08 100000
insert_many_fields 2.00 0.10 0.01 0.11 2000
insert_select_1_key 1.00 0.00 0.00 0.00 1
insert_select_2_keys 2.00 0.00 0.00 0.00 1
min_max 45.00 0.01 0.00 0.01 60
min_max_on_key 171.00 5.36 0.81 6.17 85000
multiple_value_insert 13.00 0.15 0.01 0.16 100000
once_prepared_select 154.00 3.39 0.95 4.34 100000
order_by_big 199.00 7.18 0.10 7.28 10
order_by_big_key 182.00 7.45 0.14 7.59 10
order_by_big_key2 181.00 7.25 0.12 7.37 10
order_by_big_key_desc 108.00 7.38 0.21 7.59 10
order_by_big_key_diff 10.00 7.09 0.08 7.17 10
order_by_big_key_prefix 104.00 7.13 0.11 7.24 10
order_by_key2_diff 2.00 0.61 0.00 0.61 500
order_by_key_prefix 0.00 0.35 0.00 0.35 500
order_by_range 1.00 0.34 0.00 0.34 500
outer_join 200.00 0.00 0.00 0.00 10
outer_join_found 189.00 0.00 0.00 0.00 10
outer_join_not_found 177.00 0.00 0.00 0.00 500
outer_join_on_key 10.00 0.00 0.00 0.00 10
prepared_select 186.00 6.22 0.90 7.12 100000
select_1_row 120.00 1.49 0.84 2.33 100000
select_1_row_cache 7.00 1.22 0.88 2.10 100000
select_2_rows 129.00 1.49 0.92 2.41 100000
select_big 59.00 7.19 0.07 7.26 80
select_big_str 80.00 1.23 0.18 1.41 10000
select_cache 420.00 0.68 0.07 0.75 10000
select_cache2 495.00 0.60 0.19 0.79 10000
select_column+column 7.00 1.52 0.99 2.51 100000
select_diff_key 0.00 0.04 0.00 0.04 500
select_distinct 2.00 0.49 0.01 0.50 800
select_group 80.00 0.34 0.03 0.37 2911
select_group_when_MANY_tables 1.00 0.14 0.08 0.22 10000
select_join 0.00 0.14 0.00 0.14 100
select_key 379.00 14.31 2.02 16.33 200000
select_key2 495.00 13.79 2.07 15.86 200000
select_key2_return_key 386.00 12.96 2.31 15.27 200000
select_key2_return_prim 428.00 13.85 2.17 16.02 200000
select_key_prefix 475.00 13.88 1.99 15.87 200000
select_key_prefix_join 3.00 1.39 0.00 1.39 100
select_key_return_key 315.00 13.79 1.86 15.65 200000
select_many_fields 133.00 1.85 0.21 2.06 2000
select_range 486.00 2.99 0.02 3.01 410
select_range_key2 50.00 1.48 0.12 1.60 25010
select_range_prefix 21.00 1.54 0.13 1.67 25010
select_simple 50.00 1.32 0.80 2.12 100000
select_simple_cache 5.00 1.28 0.85 2.13 100000
select_simple_join 1.00 0.16 0.01 0.17 500
update_big 184.00 0.00 0.00 0.00 10
update_of_key 70.00 0.55 0.52 1.07 50000
update_of_key_big 129.00 0.00 0.01 0.01 501
update_of_primary_key_many_keys 69.00 0.00 0.00 0.00 256
update_with_key 361.00 3.30 2.31 5.61 300000
update_with_key_prefix 38.00 2.01 1.00 3.01 100000
wisc_benchmark 16.00 0.99 0.14 1.13 114

TOTALS 11416.64 199.66 33.07 232.73 3425950 +
--------

これでRDSのベンチマークもとってみよう。
--------
http://www.suz-lab.com

コマンドラインツールでインスタンス情報を取得(AWS)

スズキです。

テスト用に300インスタンス立ち上げる機会があり、
起動は"Management Console"で一気に300インスタンス立ち上げれるのですが、
"Public DNS"を"Management Console"で調べるのは大変なので、
コマンドラインツールを利用して一気に取得してみました。

利用したツールはこちら(Windows)です。
http://aws.amazon.com/developertools/351

Javaの環境やPATHまわりなどを適当に設定し、
下記コマンドを実行すると、インスタンス情報を取得できます。

> ec2-describe-instances ^
? -K P:\common\etc\aws\aws-stress\pk.pem ^
? -C P:\common\etc\aws\aws-stress\cert.pem ^
? --region us-east-1 ^
? -F "tag:Name=TEST1" ^
? > stress.txt

"-F"で取得情報をフィルタリングすることができ、
ここでは、NameタグにTEST1が設定されているものだけ取得しています。
詳しくはこちらを参照のこと。
http://docs.amazonwebservices.com/AWSEC2/latest/CommandLineReference/index.html?ApiReference-cmd-DescribeInstances.html

取得情報は下記のとおりです。(適当に改行しています)

--------【stress.txt】--------
INSTANCE
i-xxxxxxxx
ami-xxxxxxxx
ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com
ip-xxx-xxx-xxx-xxx.ec2.internal
running
aws-stress_us-east-1
0
t1.micro
2011-02-16T00:40:05+0000
us-east-1a
windows
monitoring-enabled
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
ebs
hvm

BLOCKDEVICE
/dev/sda1
vol-xxxxxxxx
2011-02-16T00:40:31.000Z

TAG
instance
i-xxxxxxxx
Name
TEST1
--------

あとは、"sed"などを使って必要な情報(Public DNS)のみになるように整形です。
--------
http://www.suz-lab.com

2011年2月14日月曜日

PostgreSQLの"autovacuum"の実行状況をログに出力

スズキです。

"autovacuum"の実行状況が知りたかったので、
ログに出力されるようにしてみました。

下記サイトより、"postgresql.conf"の"log_min_messages"を
"debug2"に変えることで、"autovacuum"の実行状況が
ログに出力されることがわかります。
http://heppoko2ki.blog.shinobi.jp/Entry/179/

--------【postgresql.conf】--------
...
log_min_messages = debug2
...
--------

指定できるログレベルは、下記の通りです。

debug5, debug4, debug3, debug2, debug1,
info, notice, warning, error, log, fatal, panic

上記を設定して(PostgreSQLを再起動して)、いくつかのデータをインサートして、
デリートすると、下記のように"autovacuum"が実行されていることが、
ログで確認できます。

--------
...
2011-02-14 19:07:27 JST DEBUG: "public.test"をバキュームしています
2011-02-14 19:07:27 JST DEBUG: "test": 896行バージョンを4ページから削除しました
2011-02-14 19:07:27 JST DEBUG: "test": 全 4 ページ中の 4
ページで見つかった行バージョン:移動可能 896 行、削除不可 0 行
...
--------

PostgreSQLのRDS、でないかなー…
--------
http://www.suz-lab.com

PostgreSQLのログにタイムスタンプを表示

スズキです。

PostgreSQLのデフォルト設定の場合、
下記のようにログにタイムスタンプがつきません…

--------【log_line_prefix指定前】--------
...
LOG: 自動バキュームランチャプロセス
LOG: データベースシステムの接続受付準備が整いました。
...
--------

タイムスタンプを付ける場合は、"postgresql.conf"にて、
下記のように、"log_line_prefix"を指定する必要があります。

--------【postgresql.conf】--------
...
log_line_prefix = '%t '
...
--------

利用出来る特殊文字は下記の通りです。

%u = user name
%d = database name
%r = remote host and port
%h = remote host
%p = process ID
%t = timestamp without milliseconds
%m = timestamp with milliseconds
%i = command tag
%c = session ID
%l = session line number
%s = session start timestamp
%v = virtual transaction ID
%x = transaction ID (0 if none)
%q = stop here in non-session processes

指定すると、下記のようにログにタイムスタンプが付きます。

--------【log_line_prefix指定後】--------
...
2011-02-14 18:30:01 JST LOG: 自動バキュームランチャプロセス
2011-02-14 18:30:01 JST LOG: データベースシステムの接続受付準備が整いました。
...
--------

タイムスタンプはデフォルトでつくようにして欲しいなー…
--------
http://www.suz-lab.com

2011年2月8日火曜日

AWS日本語情報系RSSをまとめてみた

スズキです。

こちらで"Google Reader"の共有パッケージ機能を利用してみたのですが、
http://blog.suz-lab.com/2011/02/aws.html

調子にのって、AWSの日本語情報系のRSSもまとめてみました。
http://www.google.com/reader/bundle/user/00956581858990229883/bundle/AWS%E6%97%A5%E6%9C%AC%E8%AA%9E%E6%83%85%E5%A0%B1

現在、まとめたRSSは下記となっています。

▼Amazon Web Services ブログ
http://aws.typepad.com/aws_japan/

▼Nabble - jaws-users
http://jaws-users.687672.n3.nabble.com/

▼AWS Developer Forums: Message List - Japanese
https://forums.aws.amazon.com/forum.jspa?forumID=19

Enjoy!
--------
http://www.suz-lab.com

AWSの状態確認

スズキです。

AWSの状態確認は下記、"Service Health Dashboard"にて確認できます。
http://status.aws.amazon.com/

そこには、各リージョン、各サービスごとにRSSも用意されており、
これを購読することにより、状態を確認することもできます。

ただRSSは、各リージョン、各サービスごと用意されてるため、
RSSリーダーなどに、すべてを登録するには、少し面倒です。

ということで、それらをまとめたRSSを
"Google Reader"の共有パッケージ機能を利用して作成して見ました。

http://www.google.com/reader/bundle/user/00956581858990229883/bundle/AWS%20Current%20Status

これ一つをRSSリーダーなどに登録すれば、AWSの状態を随時確認できるはずです。

Enjoy!
--------
http://www.suz-lab.com

2011年2月4日金曜日

"AWS SDK for PHP"でS3にファイルアップロード

スズキです。

"AWS SDK for PHP"でS3にファイルアップロードしてみました。
http://aws.amazon.com/sdkforphp/

ライプラリをダウンロードして展開すると、
下記のようにファイルやディレクトリが配置されます。

$ ls -1
--------
config-sample.inc.php
lib
sdk.class.php
services
utilities
--------

そして、"config-sample.inc.php"を"config.inc.php"にコピーして、
アクセスキーとシークレットキーを設定します。

$ cp config-sample.inc.php config.inc.php
$ vi config.inc.php
--------
...
define('AWS_KEY', 'KKKKKKKK');
...
define('AWS_SECRET_KEY', 'SSSSSSSS');
...
--------

最後に、以下のようにPHPスクリプトを実行すると、
S3へファイルアップロードできます。

--------【s3.php】--------
<?php

// ライブラリの読み込み
require_once("./sdk.class.php");

// AmazonS3クラスをインスタンス化
$s3 = new AmazonS3();

// リージョンの設定(下記が設定できます)
// AmazonS3::REGION_US_E1
// AmazonS3::REGION_US_W1
// AmazonS3::REGION_EU_W1
// AmazonS3::REGION_APAC_SE1
$s3->set_region(AmazonS3::REGION_US_E1);

// "cdn.suz-lab.com"バケットに"test.txt"をアップロード
$response = $s3->create_object("cdn.suz-lab.com", "test.txt", array(
"fileUpload" => "test.txt", // アップロードするファイルを指定
"acl" => AmazonS3::ACL_PUBLIC,
"contentType" => "text/plain"
));
// ※ aclは下記が設定できます。
// AmazonS3::ACL_PRIVATE
// AmazonS3::ACL_PUBLIC
// AmazonS3::ACL_OPEN
// AmazonS3::ACL_AUTH_READ
// AmazonS3::ACL_OWNER_READ
// AmazonS3::ACL_OWNER_FULL_CONTROL

// 結果の表示
var_dump($response);
?>
--------
※上記ファイルと同一ディレクトリにconfig.inc.phpがあることが前提です。

他にもいろいろとパラメータを設定できるので、詳しくは下記を参照してください。
http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=AmazonS3/create_object

ELB関係もPHPで試さないと...
--------
http://www.suz-lab.com