20120528 aws meister-reloaded-awssd-kforjava-public

AmazonWebServicesJapan 1,535 views 55 slides Jun 13, 2012
Slide 1
Slide 1 of 55
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55

About This Presentation

No description available for this slideshow.


Slide Content

AWSマイスターシリーズ
~AWS SDK for Java &
AWS Toolkit for Eclipse ~
2012年05月28日
大谷 晋平( @shot6 )
片山 暁雄( @c9katayama )
ソリューションアーキテクト

Agenda
AWS Toolkit for Eclipse
AWS SDK オーバービュー
AWS SDK for Java
コードサンプル
まとめ





Copyright © 2011 Amazon Web Services

AWS Toolkit for Eclipse

AWS Toolkit for Eclipse
EclipseにAWS操作のための 機能を追加 するプラグイン
AWSを使用したアプリの 開発/テストをバックアップ

インストール前提
Java 1.5以上
Eclipse IDE for Java EE Developers 3.6
3.7推奨
AWS Elastic Beanstalk Deployment:
Eclipse Web Tools Platform 2.0以上
Amazon SimpleDB Management
Eclipse Data Tools Platform 1.7 以上

Java EE Developer
に入ってます

インストール方法
Plugin更新サイトからインストール
http://aws.amazon.com/eclipse/

Eclipse MarketPlaceからインストール

機能
アカウント管理
AWS Explorer
各種サービスの情報表示/ 操作
EC2 コンソール
EC2のコントロールパネル
AWS Elastic Beanstalk
デプロイ、デバッグ、 環境構築
AWS SDK for Java integration
Javaプロジェクト /Webプロジェクトウィザード

アカウント管理
Access Key IDとSecret Access keyを登録
複数のアカウント登録 が可能

AWS Explorer
各サービス情報 の一覧
Amazon SNS
Amazon S3
Amazon SQS
Amazon SimpleDB
Amazon EC2
AWS Elastic Beanstalk
Amazon CloudFront
Amazon DynamoDB
Amazon RDS
ツリーから情報 にアクセス

リージョンとアカウント
メニューからリージョンとアカウントの切 り替え

AWS Explorer – Amazon SNS
トピックの一覧表示
トピックの作成
サブスクリプションの 作成/削除

AWS Explorer – Amazon S3
Bucketの作成/削除、権限設定
オブジェクト の一覧
ツリー状 に表示
オブジェクト の削除 、権限設定 、Pre-signed URLの 生成
オブジェクトアップロード
EclipseへのD&D でアップロード

AWS Explorer – Amazon SQS
キューの 作成、削除
キューへのメッセージ送信
キュー内 の一覧
メッセージの 削除

AWS Explorer – Amazon SimpleDB
ドメイン の作成/削除
ドメイン 内の一覧
行の追加/削除
SimpleDBクエリーエディタ
コードアシストあり

AWS Explorer – Amazon CloudFront
既存Distributionの一覧
Distributionの内容表示
Distributionの有効化/無効化

AWS Explorer – Amazon DynamoDB
テーブル の追加/削除
キャパシティの変更
テーブル 内アイテム 一覧
属性追加
スキャンの実行

AWS Explorer – Amazon RDS
既存RDSの 一覧
DBへの接続
情報はData Management に格納
•パスワード変更などは
Preferences>DataManagementから
接続後は通常のJDBC接続で管理

EC2 コンソール

AMI管理
検索、削除 、AMIからの起動
インスタンス 管理
右クリックから状態変更 、SSH接続、 AMI作成、 EBSの操作
インスタンスタイプおよびセキュリティグループによるフィル
ター

EC2コンソール
EBS管理
EBS作成、削除、 スナップショット作成
スナップショット一覧 、削除

EC2コンソール
セキュリティグループ管理
セキュリティグループ 作成、削除
アクセス条件の追加、 削除

AWS Elastic Beanstalk
Elastic Benstalkの 環境情報表示 と編集
各環境に属するAutoScaling,ELB,EC2 の一覧表示

AWS Elastic Beanstalk
各種詳細設定
AutoScalingポリシー
•トリガー条件、インスタンス起動設定、ゾーン設

JavaVM設定
ELB設定
通知設定

AWS SDK for Java integration
プロジェクト 構築時のウィザートを 提供
通常Javaプロジェクトと Webプロジェクトを構築 し、クラス
マスにAWS SDK for Javaを 追加
AWS SDKはeclipse updateを通じて最新版 を取得可能 サンプルコードと AWSアカウント設定 が可能
すぐに動作 するサンプルがソース提供

まとめ
AWS Toolkit for Eclipseは 開発者に焦点
EC2、Beanstalkは機能が充実
それ以外 はサービス情報 の確認に利用
AWS SDKを利用する場合に便利
SDKバージョンの 選択
AWSアカウントが選択可能
SDKにソースアタッチ済 み
AWS Toolkit for Eclipseを使用するなら 、コードでAWS ク
ラウドをコントロールしよう!

機能が足りない場合は・・・
AWS Toolkit for Javaは OSS
https://github.com/amazonwebservices/aws -toolkit-for-
eclipse
拡張はご 自由に!

AWS SDK オーバービュー

AWSのサービス操作と言えば
AWS Management Console
AWSコマンドラインツール

これらの裏側では・・・
各サービスの各操作に対して、API が定義されている
AWSでは・・・
人間がGUI またはCUI越しに叩く
プログラミングしてそれを自動化・簡易化・カスタマイズ
•人間が手でやらなくてはいけない事をプログラミ
ングして自動化できる、これがSDK で実現可能
•しかも簡単
•AWSの実は最も優れた一面

AWSのサービスを操作できるSDK
プログラムでクラウドを操作できるAPI 群
さまざまな言語で提供
•AWS SDK for Java
•AWS SDK for C#
•AWS SDK for Ruby
•AWS SDK for PHP
•AWS SDK for Android
•AWS SDK for iOS
•有志の方による実装(Python やActionScript)も
通信は原則HTTPS
署名による暗号化
AWS SDKとは

起動、停止
Put,Get
DB起動、バックアップ
情報取得
REST
SOAP

操作の種類
例えばEC2
インスタンス起動・・・ RunInstances
リブート・・・ RebootInstances
IPアドレス付与・・AllocateAddress
など100種類以上の操作が、プログラムから実行可能

AWS SDK for Java

AWS SDK for Java
AWS SDK for Java
Amazon提供のAWS 開発用Java SDK
http://aws.amazon.com/sdkforjava/
環境:Java5 以降
最新版 1.3.10
依存ライブラリ
•Commons-codec,httpclient,logging
•Jackson
•Javamail
•stax

操作可能サービス
EC2 S3
Autoscaling Cloudwatch
ElasticLoadBalancing SimpleWorkflow
ElasticBeanstalk IdentityManagement
ElasticMapReduce ImportExport
RDS ElastiCache
Simpledb SimpleDB
SNS SES
DynamoDB SQS
StorageGateway CloudSearch

はじめに取得するもの
AWSの認証キー(アクセスキー、シークレットキ-)
AWSログイン後、[ アカウント]>[セキュリティ証明書] の画面
から確認OK

Java SDKクライアントクラスの基本
クレデンシャル情報を渡す
アクセスキー
シークレットキー
方法としては
BasicAWSCredentialsで直接渡す
PropertiesCredentialsでプロパティファ
イルに記述する
独自でAWSCredentials を拡張する

このような感じ
AWSCredentials credentials = null;
try {
credentials = new PropertiesCredentials(Util.class
.getResourceAsStream ("AwsCredentials.properties"));
} catch (IOException e) {
//例外処理
}
//このクレデンシャルを使ってClient を生成する
IAM利用時は、IAMユーザーのアクセスキー、シークレットキーを利用。
IAMユーザーでアクセス権のないメソッドを呼ぶと、例外が発生。

EC2
AmazonEC2Client
// EC2操作用のクライアント
AmazonEC2 ec2
= new AmazonEC2Client(credentials);

// 立ち上げたいインスタンス情報の作成
RunInstancesRequest runInstancesRequest = new
RunInstancesRequest ("ami-xxxxx", 5, 5)
.withKeyName (“yourkeyname")
.withSecurityGroupIds (“yoursecgroup")
.withMonitoring (true)
.withInstanceType (InstanceType.M1Small);

// インスタンスの起動
ec2.runInstances(runInstancesRequest);

S3
// S3操作用クライアント
AmazonS3 s3 = new AmazonS3Client(credentials);

// bucket作成
s3.createBucket(“mybucket ");

//オブジェクトのPUT
PutObjectResult ret = client.putObject("mybucket",
"aaa.txt", file);
AmazonS3Client

S3での巨大ファイルの簡易アップロード
//TransferManagerを作成
AmazonS3Client client = new AmazonS3Client(cred);
TransferManager manager =
new TransferManager( client);

//最低1 チャンクを5MB に設定
TransferManagerConfiguration c = new
TransferManagerConfiguration();
c.setMinimumUploadPartSize (5 * 1024L * 1024L);
manager.setConfiguration(configuration);

//巨大ファイルのアップロード実行と進捗の監視
Upload upload = manager.upload(bucketName,
bigfileName, target, o);
while (upload.isDone() == false) {…

RDS
AmazonRDSClinet
// RDS操作用クライアント
AmazonRDS amazonRDS =
new AmazonRDSClient (credentials);
// DB instance作成
CreateDBInstanceRequest createDBInstanceRequest
= new CreateDBInstanceRequest ()
.withAllocatedStorage(5)
.withMultiAZ(true)
.withDBInstanceClass("db.m1.small")

.withEngine("MySQL ");
DBInstance result =
rds.createDBInstance(createDBInstanceRequest );

Java SDKの構成
各サービス毎にクライアントクラスが付属
面倒な下記のようなことは利用者から隠ぺいしてくれる
•HTTP通信及び例外ハンドリング
•署名
•エラー時のリトライ処理
サービスどれでもほぼ同一で直感的な使い勝手の提供
極力、利用者は単純に呼び出すだけでよい
プラガブルな構成で、部分的に入れ替えられる
挙動を変えたい
例外のハンドリング方法を変えたい
処理速度を上げたい

Java SDKの構成イメージ
AmazonEC2
Client
AmazonEC2
AsyncClient
<<abstract>>
AmazonWeb
ServiceClient
AmazonHttp
Client
保持
execute(
リクエスト,
レスポンスハンドラー,
エラーハンドラー,
ExecutionContext)
ExecutionCo
ntext
保持 ・利用する署名方法
・クレデンシャル
・リトライ

Java SDKのパッケージ構成
com.amazonaws
auth : 署名関連
handlers : SDKの挙動をカスタマイズするハンドラー
http : 実際のHTTP リクエストを処理する
internal : リトライ関連
sdk : バージョン情報
services : 各サービス毎の実体
transform : API経由で返ってくるXML をパースする実体
util : ユーティリティ

Java SDKの各サービス毎の構成
クライアントは実体が2 つ
同期通信を中心としたクライアント : XxxClient
非同期通信を追加した非同期クライアント : XxxAsyncClient

リージョンを選択する
リージョンの選択
デフォルトはどれもus- east
setEndpointメソッドで指定
setEndpoint("ec2.ap-southeast-1.amazonaws.com")
サービス 毎のエンドポイントは 下記URL 参照
http://docs.amazonwebservices.com/general/latest/gr/r
ande.html

有効な利用方法
利用方法(運用面)
決まったインスタンスを起動するバッチ
固定ディスク(EBS )のスナップショットを定期取得
S3からデータを定期的に取得
S3上のデータを監視して、無くなったら通知
利用方法(アプリから)
アプリのバックエンドとして、DynamoDBを使う
メール送信のためにSMS を使う
データ保存のためにS3 を使う

Tips等
実行はどこからでも可能
インターネットのエンドポイントへアクセス出来れば、EC2 イ
ンスタンスからでも、自分のPC からでもアクセス可能
EC2からであれば、メタデータと組み合わせて自己構成できる
便利なフレームワークがついている場合も
DynamoDB ORマッパー
S3 ハイレベルAPI
SimpleWorkflow FlowFramework

setterとwith
各種リクエストオブジェクトに 対して 値を設定する場合 、
setXXXと withXXXが利用可能 。
withXXXの 場合、戻り値がリクエストオブジェクトになるの
で、fluentな形での実装が可能 。
複数追加 できるようなパラメータ(add 系)の場合、setterに
はCollectionの引数しかない 場合が多いが、 withだと実際の
型の引数 が取れる。

//setter
req.setBlockDeviceMappings(Arrays.asList(new BlockDeviceMapping()));
//with
req.
withBlockDeviceMappings(new BlockDeviceMapping()).
withBlockDeviceMappings(new BlockDeviceMapping());

アドバンスドなトピック
Java SDKは拡張性をかなり確保した状態になっている
Client/AsyncClient自体も自分で拡張できる
おおざっぱなやり方はインターフェースをそのまま継承
細かく拡張ポイントを入れ替えることも可能
ClientConfiguration
RequestHandler
CustomBackoffStrategy
Marshaller/UnMarshaller

ClientConfiguration
各Clientクラスの基本的な挙動を決定する設定
ソケットのタイムアウト値
最大コネクション数
最大リトライ数
使用するプロトコル( デフォルト HTTPS)
プロキシ関連設定
コネクションタイムアウト
各Client生成時にClientConfiguration を渡す

RequestHandler
Servletでいうところのいわゆる Filter
デバッグ時や、何か統一的に処理させたい場合など便利
beforeRequest : リクエスト送信前
afterResponse : レスポンス受信後
afterError : エラー受信後
各サービスごとに定義可能
Clientで普通に渡す
com/amazonaws/services/xxx/request.handlersというファ
イルをおいて、これに定義するとロードされる
標準で既に定義されているものも
EC2RequestHandler
QueueUrlHandler
Route53IdRequestHandler

CustomBackoffStrategy
AWSクラウド側へのリトライ間隔をコントロールする
カスタマイズして現状使っているのは DynamoDBのみ
実行コンテキストである ExecutionContextに設定して渡す
AmazonHttpClientの600行目付近
pauseExponentiallyメソッド
private void pauseExponentially(int retries, AmazonServiceException
previousException, CustomBackoffStrategy backoffStrategy) {
long delay = 0;
if (backoffStrategy != null) {
delay = backoffStrategy.getBackoffPeriod(retries);
} else {
long scaleFactor = 300;

delay = ( long) (Math.pow(2, retries) * scaleFactor);
}

}

Marshaller/Unmarshaller
AWSが提供しているXMLパース( 一部JSON パース) では遅い
ので色々いらないものを省略してパースしたい
Java SDKではStAX というプルモデル型のパーサー
•XMLのどこを読むかをコントロールしやすい
Clientを書いて、自分でMarshaller /Unmarshallerする 各サービス. model.transformの下
ここにMarshaller /Unmarshallerが大量にいる
コーディングポリシー的には
Clientの各メソッド内でMarshall してRequest<X>を作成
UnmarshallerはResponseHandlerにセットされて、
AmazonHttpClientに渡されてレスポンス帰ってきたら実行

Java SDKのまとめ
JavaのSDKを使うことで
運用管理での煩雑な手間をコーディングして落とすことが可能
•もしかしてCloudFormation よりも楽?
どのサービスでも同じような使い勝手で利用可能で楽
実際のサービス開発のお供に
•S3
•SNS/SQS/SWF
•DynamoDB AWSはコーディングする方の力を最大限に引き出すインフラ
HAPPY CODING!!