SlideShare a Scribd company logo
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とは

 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,Get
SOAP

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

    AmazonS3Client

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

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

//オブジェクトのPUT
PutObjectResult ret = client.putObject("mybucket",
"aaa.txt", file);
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の構成イメージ

  <<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-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!!

More Related Content

PDF
AWS CLIでAssumeRole
PDF
Amazon ElastiCache - AWSマイスターシリーズ
PDF
20120303 jaws summit-meister-04_cloud_formation
PDF
20120201 aws meister-reloaded-iam-and-billing-public
PDF
JAWS-UG CLI専門支部 #13 Azure ADで AWSのManagementConsoleに SSOしてみた (代理認証編)
PPTX
リソーステンプレート入門
PDF
[AWSマイスターシリーズ]Identity and Access Management (IAM)
PPTX
Prometheus × container insightsで aksを監視してみた
AWS CLIでAssumeRole
Amazon ElastiCache - AWSマイスターシリーズ
20120303 jaws summit-meister-04_cloud_formation
20120201 aws meister-reloaded-iam-and-billing-public
JAWS-UG CLI専門支部 #13 Azure ADで AWSのManagementConsoleに SSOしてみた (代理認証編)
リソーステンプレート入門
[AWSマイスターシリーズ]Identity and Access Management (IAM)
Prometheus × container insightsで aksを監視してみた

What's hot (20)

PPTX
DevAx::connect はじめました
PDF
JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする
PDF
AWSマイスターシリーズReloaded(AWS Beanstalk)
PDF
AWS Black Belt Tech シリーズ 2015 - AWS OpsWorks
PPTX
Azure id and rbac v0.7.19.0815
PPTX
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
PPTX
社内システム on AWS
PDF
[AWSマイスターシリーズ] AWS Elastic Beanstalk
PDF
AWS Black Belt Techシリーズ AWS CloudTrail & CloudWatch Logs
PDF
Infrastructure as code for azure
PDF
serverless
PPTX
20170902 kixs azure&azure stack
PDF
AAD authentication for azure app v0.1.20.0317
PDF
クラウド・アプリケーションの作り方
PPT
1/5 ADFS 2.0 を使用してWindows Azure との SSO を実現しよう v1.1
PDF
ハイブリットクラウド環境におけるモダンアプリケーション開発
PDF
【CEDEC2018】Azure最新情報+「オトギフロンティア」運用大公開+サーバーレスアーキテクチャー
PDF
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
PDF
WVD (Windows Virtual Desktop) 概要
PDF
Developers.IO 2018 ビジネスを阻害しない!AWS アカウントの管理
DevAx::connect はじめました
JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWS Black Belt Tech シリーズ 2015 - AWS OpsWorks
Azure id and rbac v0.7.19.0815
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
社内システム on AWS
[AWSマイスターシリーズ] AWS Elastic Beanstalk
AWS Black Belt Techシリーズ AWS CloudTrail & CloudWatch Logs
Infrastructure as code for azure
serverless
20170902 kixs azure&azure stack
AAD authentication for azure app v0.1.20.0317
クラウド・アプリケーションの作り方
1/5 ADFS 2.0 を使用してWindows Azure との SSO を実現しよう v1.1
ハイブリットクラウド環境におけるモダンアプリケーション開発
【CEDEC2018】Azure最新情報+「オトギフロンティア」運用大公開+サーバーレスアーキテクチャー
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
WVD (Windows Virtual Desktop) 概要
Developers.IO 2018 ビジネスを阻害しない!AWS アカウントの管理
Ad

Similar to 20120528 aws meister-reloaded-awssd-kforjava-public (20)

PDF
[AWSマイスターシリーズ] AWS SDK for Java / .NET
PDF
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
PDF
[AWSマイスターシリーズ] AWS SDK for PHP / Ruby / boto(Python) / JavaScript in Node.js
PDF
[AWSマイスターシリーズ] AWS Client Side SDK -Android,iOS & JavaScript-
PDF
AWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めよう
PDF
AWS SDK for Haskell開発
PDF
Cloud Programing for beginner
PDF
AWS SDK for Android and iOS
PDF
AWS Black Belt Techシリーズ AWS SDK
PDF
AWSマイスターシリーズReloaded -AWS SDK for .NET-
PDF
Programming AWS with Perl at YAPC::Asia 2013
PDF
AWSにおける モバイル向けサービス及び事例紹介(20151211)
PDF
AWS Black Belt Techシリーズ Amazon Elastic Compute Cloud (Amazon EC2)
PDF
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
PDF
AWS Introduction for Startups
PDF
Windows 開発者のための Dev&Ops on AWS
PPTX
AWS ではじめる Programmable Cloud
PDF
Amazon EC2
PDF
Amazon Ec2
PDF
AWS初心者向けWebinar .NET開発者のためのAWS超入門
[AWSマイスターシリーズ] AWS SDK for Java / .NET
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWSマイスターシリーズ] AWS SDK for PHP / Ruby / boto(Python) / JavaScript in Node.js
[AWSマイスターシリーズ] AWS Client Side SDK -Android,iOS & JavaScript-
AWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めよう
AWS SDK for Haskell開発
Cloud Programing for beginner
AWS SDK for Android and iOS
AWS Black Belt Techシリーズ AWS SDK
AWSマイスターシリーズReloaded -AWS SDK for .NET-
Programming AWS with Perl at YAPC::Asia 2013
AWSにおける モバイル向けサービス及び事例紹介(20151211)
AWS Black Belt Techシリーズ Amazon Elastic Compute Cloud (Amazon EC2)
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
AWS Introduction for Startups
Windows 開発者のための Dev&Ops on AWS
AWS ではじめる Programmable Cloud
Amazon EC2
Amazon Ec2
AWS初心者向けWebinar .NET開発者のためのAWS超入門
Ad

More from Amazon Web Services Japan (20)

PDF
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
PDF
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
PDF
202204 AWS Black Belt Online Seminar AWS IoT Device Defender
PDF
Infrastructure as Code (IaC) 談義 2022
PDF
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
PDF
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
PDF
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
PPTX
20220409 AWS BLEA 開発にあたって検討したこと
PDF
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
PDF
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
PDF
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
PDF
Amazon QuickSight の組み込み方法をちょっぴりDD
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
PDF
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
PDF
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
PDF
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
PDF
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
PPTX
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
PDF
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
202204 AWS Black Belt Online Seminar AWS IoT Device Defender
Infrastructure as Code (IaC) 談義 2022
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
20220409 AWS BLEA 開発にあたって検討したこと
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
Amazon QuickSight の組み込み方法をちょっぴりDD
マルチテナント化で知っておきたいデータベースのこと
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介

20120528 aws meister-reloaded-awssd-kforjava-public

  • 1. AWSマイスターシリーズ ~AWS SDK for Java & AWS Toolkit for Eclipse~ 2012年05月28日 大谷 晋平( @shot6 ) 片山 暁雄( @c9katayama ) ソリューションアーキテクト
  • 2. Agenda AWS Toolkit for Eclipse AWS SDK オーバービュー AWS SDK for Java コードサンプル まとめ Copyright © 2011 Amazon Web Services
  • 3. AWS Toolkit for Eclipse
  • 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プロジェクトウィザード
  • 8. アカウント管理 Access Key IDとSecret Access keyを登録 複数のアカウント登録が可能
  • 9. AWS Explorer 各サービス情報の一覧  Amazon SNS  Amazon S3  Amazon SQS  Amazon SimpleDB  Amazon EC2  AWS Elastic Beanstalk  Amazon CloudFront  Amazon DynamoDB  Amazon RDS ツリーから情報にアクセス
  • 11. AWS Explorer – Amazon SNS トピックの一覧表示 トピックの作成 サブスクリプションの作成/削除
  • 12. AWS Explorer – Amazon S3 Bucketの作成/削除、権限設定 オブジェクトの一覧  ツリー状に表示 オブジェクトの削除、権限設定、Pre-signed URLの生成 オブジェクトアップロード  EclipseへのD&Dでアップロード
  • 13. AWS Explorer – Amazon SQS キューの作成、削除 キューへのメッセージ送信 キュー内の一覧 メッセージの削除
  • 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の操作  インスタンスタイプおよびセキュリティグループによるフィル ター
  • 21. AWS Elastic Beanstalk Elastic Benstalkの環境情報表示と編集 各環境に属するAutoScaling,ELB,EC2の一覧表示
  • 22. AWS Elastic Beanstalk 各種詳細設定  AutoScalingポリシー • トリガー条件、インスタンス起動設定、ゾーン設 定  JavaVM設定  ELB設定  通知設定
  • 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ク ラウドをコントロールしよう!
  • 25. 機能が足りない場合は・・・ AWS Toolkit for JavaはOSS  https://github.com/amazonwebservices/aws-toolkit-for- eclipse  拡張はご自由に!
  • 27. AWSのサービス操作と言えば AWS Management Console AWSコマンドラインツール
  • 28. これらの裏側では・・・ 各サービスの各操作に対して、APIが定義されている AWSでは・・・  人間がGUIまたはCUI越しに叩く  プログラミングしてそれを自動化・簡易化・カスタマイズ • 人間が手でやらなくてはいけない事をプログラミ ングして自動化できる、これがSDKで実現可能 • しかも簡単 • 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  署名による暗号化
  • 30. 起動、停止 REST Put,Get SOAP DB起動、バックアップ 情報取得
  • 31. 操作の種類 例えばEC2  インスタンス起動・・・RunInstances  リブート・・・ RebootInstances  IPアドレス付与・・AllocateAddress  など100種類以上の操作が、プログラムから実行可能
  • 32. AWS SDK for Java
  • 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
  • 36. Java SDKクライアントクラスの基本 クレデンシャル情報を渡す  アクセスキー  シークレットキー 方法としては  BasicAWSCredentialsで直接渡す  PropertiesCredentialsでプロパティファ イルに記述する  独自でAWSCredentialsを拡張する
  • 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 : ユーティリティ
  • 45. Java SDKの各サービス毎の構成 クライアントは実体が2つ  同期通信を中心としたクライアント : XxxClient  非同期通信を追加した非同期クライアント : XxxAsyncClient
  • 47. 有効な利用方法 利用方法(運用面)  決まったインスタンスを起動するバッチ  固定ディスク(EBS)のスナップショットを定期取得  S3からデータを定期的に取得  S3上のデータを監視して、無くなったら通知 利用方法(アプリから)  アプリのバックエンドとして、DynamoDBを使う  メール送信のためにSMSを使う  データ保存のためにS3を使う
  • 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());
  • 50. アドバンスドなトピック Java SDKは拡張性をかなり確保した状態になっている Client/AsyncClient自体も自分で拡張できる  おおざっぱなやり方はインターフェースをそのまま継承 細かく拡張ポイントを入れ替えることも可能  ClientConfiguration  RequestHandler  CustomBackoffStrategy  Marshaller/UnMarshaller
  • 51. ClientConfiguration 各Clientクラスの基本的な挙動を決定する設定  ソケットのタイムアウト値  最大コネクション数  最大リトライ数  使用するプロトコル(デフォルトHTTPS)  プロキシ関連設定  コネクションタイムアウト 各Client生成時にClientConfigurationを渡す
  • 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); } … }
  • 54. Marshaller/Unmarshaller AWSが提供しているXMLパース(一部JSONパース)では遅い ので色々いらないものを省略してパースしたい  Java SDKではStAXというプルモデル型のパーサー • XMLのどこを読むかをコントロールしやすい  Clientを書いて、自分でMarshaller/Unmarshallerする 各サービス.model.transformの下  ここにMarshaller/Unmarshallerが大量にいる コーディングポリシー的には  Clientの各メソッド内でMarshallしてRequest<X>を作成  UnmarshallerはResponseHandlerにセットされて、 AmazonHttpClientに渡されてレスポンス帰ってきたら実行
  • 55. Java SDKのまとめ JavaのSDKを使うことで  運用管理での煩雑な手間をコーディングして落とすことが可能 • もしかしてCloudFormationよりも楽?  どのサービスでも同じような使い勝手で利用可能で楽  実際のサービス開発のお供に • S3 • SNS/SQS/SWF • DynamoDB AWSはコーディングする方の力を最大限に引き出すインフラ  HAPPY CODING!!