20120528 aws meister-reloaded-awssd-kforjava-public
Upcoming SlideShare
Loading in...5
×
 

20120528 aws meister-reloaded-awssd-kforjava-public

on

  • 3,869 views

 

Statistics

Views

Total Views
3,869
Views on SlideShare
3,866
Embed Views
3

Actions

Likes
4
Downloads
90
Comments
0

1 Embed 3

http://us-w1.rockmelt.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 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 ConsoleAWSコマンドラインツール
  • これらの裏側では・・・各サービスの各操作に対して、APIが定義されているAWSでは・・・  人間がGUIまたはCUI越しに叩く  プログラミングしてそれを自動化・簡易化・カスタマイズ • 人間が手でやらなくてはいけない事をプログラミ ングして自動化できる、これがSDKで実現可能 • しかも簡単 • AWSの実は最も優れた一面
  • 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  署名による暗号化
  • 起動、停止REST Put,GetSOAP DB起動、バックアップ 情報取得
  • 操作の種類例えば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 S3Autoscaling CloudwatchElasticLoadBalancing SimpleWorkflowElasticBeanstalk IdentityManagementElasticMapReduce ImportExportRDS ElastiCacheSimpledb SimpleDBSNS SESDynamoDB SQSStorageGateway 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 = newRunInstancesRequest("ami-xxxxx", 5, 5) .withKeyName(“yourkeyname") .withSecurityGroupIds(“yoursecgroup") .withMonitoring(true) .withInstanceType(InstanceType.M1Small);// インスタンスの起動ec2.runInstances(runInstancesRequest);
  • S3 AmazonS3Client// S3操作用クライアントAmazonS3 s3 = new AmazonS3Client(credentials);// bucket作成s3.createBucket(“mybucket");//オブジェクトのPUTPutObjectResult ret = client.putObject("mybucket","aaa.txt", file);
  • S3での巨大ファイルの簡易アップロード//TransferManagerを作成AmazonS3Client client = new AmazonS3Client(cred);TransferManager manager = new TransferManager(client);//最低1チャンクを5MBに設定TransferManagerConfiguration c = newTransferManagerConfiguration();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の構成イメージ <<abstract>> 保持 AmazonHttp AmazonWeb Client ServiceClient execute( リクエスト, AmazonEC2 レスポンスハンドラー, Client エラーハンドラー, ExecutionContext) 保持 ・利用する署名方法 ・クレデンシャル AmazonEC2 ExecutionCo ・リトライ AsyncClient ntext
  • Java SDKのパッケージ構成 com.amazonaws  auth : 署名関連  handlers : SDKの挙動をカスタマイズするハンドラー  http : 実際のHTTPリクエストを処理する  internal : リトライ関連  sdk : バージョン情報  services : 各サービス毎の実体  transform : API経由で返ってくるXMLをパースする実体  util : ユーティリティ
  • Java SDKの各サービス毎の構成 クライアントは実体が2つ  同期通信を中心としたクライアント : XxxClient  非同期通信を追加した非同期クライアント : XxxAsyncClient
  • リージョンを選択するリージョンの選択デフォルトはどれもus-eastsetEndpointメソッドで指定  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()));//withreq. 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, AmazonServiceExceptionpreviousException, 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!!