20120528 aws meister-reloaded-awssd-kforjava-public

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

description

 

Transcript of 20120528 aws meister-reloaded-awssd-kforjava-public

Page 1: 20120528 aws meister-reloaded-awssd-kforjava-public

AWSマイスターシリーズ ~AWS SDK for Java & AWS Toolkit for Eclipse~

2012年05月28日 大谷 晋平( @shot6 ) 片山 暁雄( @c9katayama ) ソリューションアーキテクト

Page 2: 20120528 aws meister-reloaded-awssd-kforjava-public

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

Copyright © 2011 Amazon Web Services

Page 3: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS Toolkit for Eclipse

Page 4: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS Toolkit for Eclipse

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

Page 5: 20120528 aws meister-reloaded-awssd-kforjava-public

インストール前提

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に入ってます

Page 6: 20120528 aws meister-reloaded-awssd-kforjava-public

インストール方法

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

Eclipse MarketPlaceからインストール

Page 7: 20120528 aws meister-reloaded-awssd-kforjava-public

機能

アカウント管理 AWS Explorer 各種サービスの情報表示/操作

EC2 コンソール EC2のコントロールパネル

AWS Elastic Beanstalk デプロイ、デバッグ、環境構築

AWS SDK for Java integration Javaプロジェクト/Webプロジェクトウィザード

Page 8: 20120528 aws meister-reloaded-awssd-kforjava-public

アカウント管理

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

Page 9: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS Explorer

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

Page 10: 20120528 aws meister-reloaded-awssd-kforjava-public

リージョンとアカウント

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

Page 11: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS Explorer – Amazon SNS

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

Page 12: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS Explorer – Amazon S3

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

Page 13: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS Explorer – Amazon SQS

キューの作成、削除 キューへのメッセージ送信 キュー内の一覧 メッセージの削除

Page 14: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS Explorer – Amazon SimpleDB

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

Page 15: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS Explorer – Amazon CloudFront

既存Distributionの一覧 Distributionの内容表示 Distributionの有効化/無効化

Page 16: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS Explorer – Amazon DynamoDB

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

Page 17: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS Explorer – Amazon RDS

既存RDSの一覧 DBへの接続 情報はData Managementに格納

• パスワード変更などはPreferences>DataManagementから

接続後は通常のJDBC接続で管理

Page 18: 20120528 aws meister-reloaded-awssd-kforjava-public

EC2 コンソール

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

ター

Page 19: 20120528 aws meister-reloaded-awssd-kforjava-public

EC2コンソール

EBS管理 EBS作成、削除、スナップショット作成 スナップショット一覧、削除

Page 20: 20120528 aws meister-reloaded-awssd-kforjava-public

EC2コンソール

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

Page 21: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS Elastic Beanstalk

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

Page 22: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS Elastic Beanstalk

各種詳細設定 AutoScalingポリシー

• トリガー条件、インスタンス起動設定、ゾーン設定

JavaVM設定 ELB設定 通知設定

Page 23: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS SDK for Java integration

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

Page 24: 20120528 aws meister-reloaded-awssd-kforjava-public

まとめ

AWS Toolkit for Eclipseは開発者に焦点 EC2、Beanstalkは機能が充実 それ以外はサービス情報の確認に利用

AWS SDKを利用する場合に便利 SDKバージョンの選択 AWSアカウントが選択可能 SDKにソースアタッチ済み

AWS Toolkit for Eclipseを使用するなら、コードでAWSクラウドをコントロールしよう!

Page 25: 20120528 aws meister-reloaded-awssd-kforjava-public

機能が足りない場合は・・・

AWS Toolkit for JavaはOSS https://github.com/amazonwebservices/aws-toolkit-for-

eclipse 拡張はご自由に!

Page 26: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS SDK オーバービュー

Page 27: 20120528 aws meister-reloaded-awssd-kforjava-public

AWSのサービス操作と言えば

AWS Management Console

AWSコマンドラインツール

Page 28: 20120528 aws meister-reloaded-awssd-kforjava-public

これらの裏側では・・・

各サービスの各操作に対して、APIが定義されている AWSでは・・・ 人間がGUIまたはCUI越しに叩く プログラミングしてそれを自動化・簡易化・カスタマイズ

• 人間が手でやらなくてはいけない事をプログラミングして自動化できる、これがSDKで実現可能

• しかも簡単 • AWSの実は最も優れた一面

Page 29: 20120528 aws meister-reloaded-awssd-kforjava-public

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とは

Page 30: 20120528 aws meister-reloaded-awssd-kforjava-public

起動、停止

Put,Get

DB起動、バックアップ

情報取得

REST

SOAP

Page 31: 20120528 aws meister-reloaded-awssd-kforjava-public

操作の種類

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

Page 32: 20120528 aws meister-reloaded-awssd-kforjava-public

AWS SDK for Java

Page 33: 20120528 aws meister-reloaded-awssd-kforjava-public

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

Page 34: 20120528 aws meister-reloaded-awssd-kforjava-public

操作可能サービス

EC2 S3 Autoscaling Cloudwatch ElasticLoadBalancing SimpleWorkflow ElasticBeanstalk IdentityManagement ElasticMapReduce ImportExport RDS ElastiCache Simpledb SimpleDB SNS SES DynamoDB SQS StorageGateway CloudSearch

Page 35: 20120528 aws meister-reloaded-awssd-kforjava-public

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

Page 36: 20120528 aws meister-reloaded-awssd-kforjava-public

Java SDKクライアントクラスの基本

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

Page 37: 20120528 aws meister-reloaded-awssd-kforjava-public

このような感じ

AWSCredentials credentials = null; try { credentials = new PropertiesCredentials(Util.class .getResourceAsStream("AwsCredentials.properties")); } catch (IOException e) { //例外処理 } //このクレデンシャルを使ってClientを生成する

IAM利用時は、IAMユーザーのアクセスキー、シークレットキーを利用。 IAMユーザーでアクセス権のないメソッドを呼ぶと、例外が発生。

Page 38: 20120528 aws meister-reloaded-awssd-kforjava-public

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);

Page 39: 20120528 aws meister-reloaded-awssd-kforjava-public

S3

// S3操作用クライアント AmazonS3 s3 = new AmazonS3Client(credentials); // bucket作成 s3.createBucket(“mybucket"); //オブジェクトのPUT PutObjectResult ret = client.putObject("mybucket", "aaa.txt", file);

AmazonS3Client

Page 40: 20120528 aws meister-reloaded-awssd-kforjava-public

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) {…

Page 41: 20120528 aws meister-reloaded-awssd-kforjava-public

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);

Page 42: 20120528 aws meister-reloaded-awssd-kforjava-public

Java SDKの構成

各サービス毎にクライアントクラスが付属 面倒な下記のようなことは利用者から隠ぺいしてくれる

• HTTP通信及び例外ハンドリング • 署名 • エラー時のリトライ処理

サービスどれでもほぼ同一で直感的な使い勝手の提供 極力、利用者は単純に呼び出すだけでよい プラガブルな構成で、部分的に入れ替えられる 挙動を変えたい 例外のハンドリング方法を変えたい 処理速度を上げたい

Page 43: 20120528 aws meister-reloaded-awssd-kforjava-public

Java SDKの構成イメージ

AmazonEC2Client

AmazonEC2AsyncClient

<<abstract>>AmazonWebServiceClient

AmazonHttpClient

保持

execute( リクエスト, レスポンスハンドラー, エラーハンドラー, ExecutionContext)

ExecutionContext

保持 ・利用する署名方法 ・クレデンシャル ・リトライ

Page 44: 20120528 aws meister-reloaded-awssd-kforjava-public

Java SDKのパッケージ構成

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

Page 45: 20120528 aws meister-reloaded-awssd-kforjava-public

Java SDKの各サービス毎の構成

クライアントは実体が2つ 同期通信を中心としたクライアント : XxxClient 非同期通信を追加した非同期クライアント : XxxAsyncClient

Page 46: 20120528 aws meister-reloaded-awssd-kforjava-public

リージョンを選択する

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

ande.html

Page 47: 20120528 aws meister-reloaded-awssd-kforjava-public

有効な利用方法

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

Page 48: 20120528 aws meister-reloaded-awssd-kforjava-public

Tips等

実行はどこからでも可能 インターネットのエンドポイントへアクセス出来れば、EC2インスタンスからでも、自分のPCからでもアクセス可能

EC2からであれば、メタデータと組み合わせて自己構成できる 便利なフレームワークがついている場合も DynamoDB ORマッパー S3 ハイレベルAPI SimpleWorkflow FlowFramework

Page 49: 20120528 aws meister-reloaded-awssd-kforjava-public

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());

Page 50: 20120528 aws meister-reloaded-awssd-kforjava-public

アドバンスドなトピック

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

Page 51: 20120528 aws meister-reloaded-awssd-kforjava-public

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

Page 52: 20120528 aws meister-reloaded-awssd-kforjava-public

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

標準で既に定義されているものも EC2RequestHandler QueueUrlHandler Route53IdRequestHandler

Page 53: 20120528 aws meister-reloaded-awssd-kforjava-public

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); } … }

Page 54: 20120528 aws meister-reloaded-awssd-kforjava-public

Marshaller/Unmarshaller AWSが提供しているXMLパース(一部JSONパース)では遅いので色々いらないものを省略してパースしたい Java SDKではStAXというプルモデル型のパーサー

• XMLのどこを読むかをコントロールしやすい Clientを書いて、自分でMarshaller/Unmarshallerする 各サービス.model.transformの下 ここにMarshaller/Unmarshallerが大量にいる コーディングポリシー的には Clientの各メソッド内でMarshallしてRequest<X>を作成 UnmarshallerはResponseHandlerにセットされて、

AmazonHttpClientに渡されてレスポンス帰ってきたら実行

Page 55: 20120528 aws meister-reloaded-awssd-kforjava-public

Java SDKのまとめ

JavaのSDKを使うことで 運用管理での煩雑な手間をコーディングして落とすことが可能

• もしかしてCloudFormationよりも楽? どのサービスでも同じような使い勝手で利用可能で楽 実際のサービス開発のお供に

• S3 • SNS/SQS/SWF • DynamoDB

AWSはコーディングする方の力を最大限に引き出すインフラ

HAPPY CODING!!