More Related Content
Similar to 20120528 aws meister-reloaded-awssd-kforjava-public
Similar to 20120528 aws meister-reloaded-awssd-kforjava-public (20)
More from Amazon Web Services Japan
More from Amazon Web Services Japan (20)
20120528 aws meister-reloaded-awssd-kforjava-public
- 2. Agenda
AWS Toolkit for Eclipse
AWS SDK オーバービュー
AWS SDK for Java
コードサンプル
まとめ
Copyright © 2011 Amazon Web Services
- 4. AWS Toolkit for Eclipse
EclipseにAWS操作のための機能を追加するプラグイン
AWSを使用したアプリの開発/テストをバックアップ
- 5. インストール前提
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
に入ってます
- 7. 機能
アカウント管理
AWS Explorer
各種サービスの情報表示/操作
EC2 コンソール
EC2のコントロールパネル
AWS Elastic Beanstalk
デプロイ、デバッグ、環境構築
AWS SDK for Java integration
Javaプロジェクト/Webプロジェクトウィザード
- 9. AWS Explorer
各サービス情報の一覧
Amazon SNS
Amazon S3
Amazon SQS
Amazon SimpleDB
Amazon EC2
AWS Elastic Beanstalk
Amazon CloudFront
Amazon DynamoDB
Amazon RDS
ツリーから情報にアクセス
- 12. AWS Explorer – Amazon S3
Bucketの作成/削除、権限設定
オブジェクトの一覧
ツリー状に表示
オブジェクトの削除、権限設定、Pre-signed URLの生成
オブジェクトアップロード
EclipseへのD&Dでアップロード
- 14. AWS Explorer – Amazon SimpleDB
ドメインの作成/削除
ドメイン内の一覧
行の追加/削除
SimpleDBクエリーエディタ
コードアシストあり
- 15. AWS Explorer – Amazon CloudFront
既存Distributionの一覧
Distributionの内容表示
Distributionの有効化/無効化
- 16. AWS Explorer – Amazon DynamoDB
テーブルの追加/削除
キャパシティの変更
テーブル内アイテム一覧
属性追加
スキャンの実行
- 17. AWS Explorer – Amazon RDS
既存RDSの一覧
DBへの接続
情報はData Managementに格納
• パスワード変更などは
Preferences>DataManagementから
接続後は通常のJDBC接続で管理
- 18. EC2 コンソール
AMI管理
検索、削除、AMIからの起動
インスタンス管理
右クリックから状態変更、SSH接続、AMI作成、EBSの操作
インスタンスタイプおよびセキュリティグループによるフィル
ター
- 23. AWS SDK for Java integration
プロジェクト構築時のウィザートを提供
通常JavaプロジェクトとWebプロジェクトを構築し、クラス
マスにAWS SDK for Javaを追加
AWS SDKはeclipse updateを通じて最新版を取得可能
サンプルコードとAWSアカウント設定が可能
すぐに動作するサンプルがソース提供
- 24. まとめ
AWS Toolkit for Eclipseは開発者に焦点
EC2、Beanstalkは機能が充実
それ以外はサービス情報の確認に利用
AWS SDKを利用する場合に便利
SDKバージョンの選択
AWSアカウントが選択可能
SDKにソースアタッチ済み
AWS Toolkit for Eclipseを使用するなら、コードでAWSク
ラウドをコントロールしよう!
- 29. AWS SDKとは
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
署名による暗号化
- 31. 操作の種類
例えばEC2
インスタンス起動・・・RunInstances
リブート・・・ RebootInstances
IPアドレス付与・・AllocateAddress
など100種類以上の操作が、プログラムから実行可能
- 33. 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
- 34. 操作可能サービス
EC2 S3
Autoscaling Cloudwatch
ElasticLoadBalancing SimpleWorkflow
ElasticBeanstalk IdentityManagement
ElasticMapReduce ImportExport
RDS ElastiCache
Simpledb SimpleDB
SNS SES
DynamoDB SQS
StorageGateway CloudSearch
- 37. このような感じ
AWSCredentials credentials = null;
try {
credentials = new PropertiesCredentials(Util.class
.getResourceAsStream("AwsCredentials.properties"));
} catch (IOException e) {
//例外処理
}
//このクレデンシャルを使ってClientを生成する
IAM利用時は、IAMユーザーのアクセスキー、シークレットキーを利用。
IAMユーザーでアクセス権のないメソッドを呼ぶと、例外が発生。
- 38. 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);
- 39. S3
AmazonS3Client
// S3操作用クライアント
AmazonS3 s3 = new AmazonS3Client(credentials);
// bucket作成
s3.createBucket(“mybucket");
//オブジェクトのPUT
PutObjectResult ret = client.putObject("mybucket",
"aaa.txt", file);
- 40. 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) {…
- 41. 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);
- 42. Java SDKの構成
各サービス毎にクライアントクラスが付属
面倒な下記のようなことは利用者から隠ぺいしてくれる
• HTTP通信及び例外ハンドリング
• 署名
• エラー時のリトライ処理
サービスどれでもほぼ同一で直感的な使い勝手の提供
極力、利用者は単純に呼び出すだけでよい
プラガブルな構成で、部分的に入れ替えられる
挙動を変えたい
例外のハンドリング方法を変えたい
処理速度を上げたい
- 43. Java SDKの構成イメージ
<<abstract>> 保持
AmazonHttp
AmazonWeb
Client
ServiceClient
execute(
リクエスト,
AmazonEC2 レスポンスハンドラー,
Client エラーハンドラー,
ExecutionContext)
保持 ・利用する署名方法
・クレデンシャル
AmazonEC2 ExecutionCo ・リトライ
AsyncClient ntext
- 44. Java SDKのパッケージ構成
com.amazonaws
auth : 署名関連
handlers : SDKの挙動をカスタマイズするハンドラー
http : 実際のHTTPリクエストを処理する
internal : リトライ関連
sdk : バージョン情報
services : 各サービス毎の実体
transform : API経由で返ってくるXMLをパースする実体
util : ユーティリティ
- 48. Tips等
実行はどこからでも可能
インターネットのエンドポイントへアクセス出来れば、EC2イ
ンスタンスからでも、自分のPCからでもアクセス可能
EC2からであれば、メタデータと組み合わせて自己構成できる
便利なフレームワークがついている場合も
DynamoDB ORマッパー
S3 ハイレベルAPI
SimpleWorkflow FlowFramework
- 49. 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());
- 52. RequestHandler
ServletでいうところのいわゆるFilter
デバッグ時や、何か統一的に処理させたい場合など便利
beforeRequest : リクエスト送信前
afterResponse : レスポンス受信後
afterError : エラー受信後
各サービスごとに定義可能
Clientで普通に渡す
com/amazonaws/services/xxx/request.handlersというファ
イルをおいて、これに定義するとロードされる
標準で既に定義されているものも
EC2RequestHandler
QueueUrlHandler
Route53IdRequestHandler
- 53. 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);
}
…
}
- 55. Java SDKのまとめ
JavaのSDKを使うことで
運用管理での煩雑な手間をコーディングして落とすことが可能
• もしかしてCloudFormationよりも楽?
どのサービスでも同じような使い勝手で利用可能で楽
実際のサービス開発のお供に
• S3
• SNS/SQS/SWF
• DynamoDB
AWSはコーディングする方の力を最大限に引き出すインフラ
HAPPY CODING!!