SlideShare a Scribd company logo
1 of 60
Download to read offline
第5回 AWS User Group - Sapporo 勉強会




AWS小ネタ集
欧文印刷株式会社 田名辺健人
2012.02.14

        http://www.flickr.com/photos/mendhak/4271441910/
田名辺 健人(たなべたけひと)
              ソフトウェアエンジニア
              欧文印刷株式会社(東京都)
              2011年11月から札幌でテレワーク
@dateofrock


              札幌・東京コアメンバー
              Ustream担当
              好きなサービスはSQS
Happy Valentine




http://www.flickr.com/photos/pinksherbet/1483193019/
LT(Lady's Happy Valentine
          Talk)
してくれた貴女へ…

      http://www.flickr.com/photos/pinksherbet/1483193019/
NUboard
      Happy Valentine
プレゼント♡
       from 欧文印刷



  http://www.flickr.com/photos/pinksherbet/1483193019/
たまには
  技術の話を
しようと思います
    www
• S3 小ネタ
 •   読み書きのスループットを上げる方法
 •   バケット名にピリオドでハマる方法

• S3実践ネタ
 •   設定ファイル置き場
 •   Pre-signed URLの使い道

• Simpleシリーズ2連発
 •   アプリ内エラー通知はSNSが便利
 •   SimpleDB APIがシンプルじゃない件




           http://www.flickr.com/photos/mendhak/4271441910/
ネ
                  タ
                  作
                  り
                  す
                  ぎ
                  た
                  w

http://www.flickr.com/photos/donsolo/2435421847/
• S3 小ネタ
 •   読み書きのスループットを上げる方法
 •   バケット名にピリオドでハマる方法

• S3実践ネタ
 •   設定ファイル置き場
 •   Pre-signed URLの使い道

• Simpleシリーズ2連発
 •   アプリ内エラー通知はSNSが便利
 •   SimpleDB APIがシンプルじゃない件




           http://www.flickr.com/photos/mendhak/4271441910/
半分
• S3 小ネタ
 •   読み書きのスループットを上げる方法
 •   バケット名にピリオドでハマる方法

• S3実践ネタ


           カット
 •   設定ファイル置き場
 •   Pre-signed URLの使い道

• Simpleシリーズ2連発
 •   アプリ内エラー通知はSNSが便利
 •   SimpleDB APIがシンプルじゃない件




            orz
           http://www.flickr.com/photos/mendhak/4271441910/
• S3 小ネタ
 •   読み書きのスループットを上げる方法
 •   バケット名にピリオドでハマる方法

• S3実践ネタ
 •   設定ファイル置き場
 •   Pre-signed URLの使い道

• Simpleシリーズ2連発
 •   アプリ内エラー通知はSNSが便利
 •   SimpleDB APIがシンプルじゃない件




           http://www.flickr.com/photos/mendhak/4271441910/
Pre-signed URLの使い道


• S3オブジェクトに対して有効期限付きの
  パブリックなURLを生成できる

• Query String Request Authentication
  http://docs.amazonwebservices.com/AmazonS3/latest/dev/
  RESTAuthentication.html#RESTAuthenticationQueryStringAuth
Pre-signed URL
  どんなもの?
GET /images/photo.jpg?
AWSAccessKeyId=0PN5J17HBGZHT7JJ3X82
&Expires=1141889120
&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
Signature =
URL-Encode(
 Base64(
  HMAC-SHA1(
   YourSecretAccessKeyID,
   UTF-8-Encoding-Of(StringToSign))));
StringToSign = HTTP-VERB + "n" +
    Content-MD5 + "n" +
    Content-Type + "n" +
    Expires + "n" +
    CanonicalizedAmzHeaders +
    CanonicalizedResource;
こんなマンドクサイもの
はSDKに頼ろう
Java

Interface AmazonS3
java.net.URL generatePresignedUrl(java.lang.String bucketName,
                                  java.lang.String key,
                                  java.util.Date expiration,
                                  HttpMethod method)
                                  throws AmazonClientException


Date after5Seconds = new Date();
after5Seconds.setTime(System.currentTimeMillis() + 5 * 1000);

AmazonS3 s3 = new AmazonS3Client(cred);
Url url = s3.generatePresignedUrl(“mybucket”, “images/photo.jpg”,
  after5Seconds, HttpMethod.GET);
Ruby
Class: AWS::S3::S3Object
- (URI::HTTP, URI::HTTPS) url_for(method, options = {})




url = s3.buckets['mybucket'].objects['images/photo.jpg'].
      url_for(:read, :expires => 5)
Ruby

      Ruby
Class: AWS::S3::S3Object
- (URI::HTTP, URI::HTTPS) url_for(method, options = {})




     ステキ!
url = s3.buckets['mybucket'].objects['images/photo.jpg'].
      url_for(:read, :expires => 5)
Pre-signed URL
     実 例
Pre-signed URLの使い道


• Webサーバーの負荷が劇的に減る!
 • アプリはPre-signed URLを生成してS3
  にリダイレクトするだけ

 • 重たいデータ送出はS3にお任せ!
• S3 小ネタ
 •   読み書きのスループットを上げる方法
 •   バケット名にピリオドでハマる方法

• S3実践ネタ
 •   設定ファイル置き場
 •   Pre-signed URLの使い道

• Simpleシリーズ2連発
 •   アプリ内エラー通知はSNSが便利
 •   SimpleDB APIがシンプルじゃない件




           http://www.flickr.com/photos/mendhak/4271441910/
アプリ内の通知は
  SNSが便利

たとえば例外が投げられたら

 メールでお知らせとか
Java
            例えばUncaughtExceptionHandlerを使う

Thread.setDefaultUncaughtExceptionHandler(
  new UncaughtExceptionHandler() {
     public void uncaughtException(Thread t, Throwable e) {
     " AWSCredentials cred = new BasicAWSCredentials(
          "アクセスキー","シークレットキー");
    "    AmazonSNS sns = new AmazonSNSClient(cred);
    "    String stackTrace = getStackTraceString(e);
    "    sns.publish(new PublishRequest(
  " "    " "arn:aws:sns:ap-northeast-1:xxxxx:sns-test",
  " "    " stackTrace, "Java Exception"));
"       }
" }
);
Ruby on Rails
  例えばApplicationController#rescue_fromを使う

require 'rubygems'
require 'aws-sdk'

class ApplicationController < ActionController::Base
  rescue_from StandardError do |exception|
    topic = AWS::SNS::Topic.new(
      'arn:aws:sns:ap-northeast-1:xxxxx:sns-test'
    )

    topic.publish(exception.backtrace.to_s,
      :subject => 'Rails exception');
    raise exception
  end
end
ただし、
  メッセージは
8kB以内に限るorz
SimpleDB APIが
  シンプルじゃない件

• いや、シンプルすぎて冗長なコードに
 なってしまう

• 素のJDBCはチョット…的な。
• データの型は全部文字列だよ!
SimpleDBの
Data Mapperがホスィ
 Hibernate的な
ActiveRecord的な
    WOのEOF的な
Ruby


SDKにSimpleDBの

Data Mapperが!
class Book < AWS::Record::Base
  string_attr :title
end



Book.new(:title => 'スベらないプレゼン').save
Book.where('title like ?', '%プレゼン%').count



$ rails generate scaffold_controller Book title:string



config/routes.rb:
Myapp::Application.routes.draw do
  resources :books
end



           http://aws.amazon.com/articles/8621639827664165 より
class Book < AWS::Record::Base
  string_attr :title
end



Book.new(:title => 'スベらないプレゼン').save


 Railsと違和感なしに
Book.where('title like ?', '%プレゼン%').count




           統合できる!
$ rails generate scaffold_controller Book title:string



config/routes.rb:
Myapp::Application.routes.draw do
  resources :books
end



           http://aws.amazon.com/articles/8621639827664165 より
Java

• AWS SDK for Javaには低レベルAPIしかな
 いのだよ。

• JPA実装とかはあるけど…
 https://github.com/appoxy/simplejpa
でも実はね…
DynamoDBには
DataMapperが
あるのだよ(;́Д`)
@DynamoDBTable(tableName = "BookTable")
public class Book {
    private Long id;
    private String title;

    @DynamoDBHashKey
    public Long getId() {
    " return this.id;
    }

    @DynamoDBAttribute(attributeName = "title")
    public String getTitle() {
    " return this.title;
    }

    // 以下、setter
}
使用例
     (DynamoDBMapper)
AWSCredentials cred = new BasicAWSCredentials(
  "アクセスキ", "シークレットキー");
AmazonDynamoDB db = new AmazonDynamoDBClient(cred);

DynamoDBMapper mapper = new DynamoDBMapper(db);

Long key = 105L;
Book book = mapper.load(Book.class, key);
book.setTitle("スベらないプレゼン");
mapper.save(book);
mapper.delete(book);
なぜSimpleDBに
 は無いのだ!
ついカッとなって
 つくってみたw
SimpleDBMapper
     (笑)
@SimpleDBDomain(domainName = "BookDomain")
public class Book {

    @SimpleDBItemName
    public Long id;

    @SimpleDBAttribute(attributeName = "title")
    public String title;

}
使用例
       (SimpleDBMapper)
AWSCredentials cred = new BasicAWSCredentials(
  "アクセスキ", "シークレットキー");
AmazonSimpleDB db = new AmazonSimpleDBClient(cred);

SimpleDBMapper mapper = new SimpleDBMapper(db);

Long key = 105L;
Book book = mapper.load(Book.class, key);
book.setTitle("スベらないプレゼン");
mapper.save(book);
mapper.delete(book);
DynamoをSimple
に変えただけ(笑)
simpledb-mapper(笑)

•   DynamoDBMapperライクなAPI(笑)

•   でもパクっただけじゃない

    •   1024byteを超えるデータ(Blob)はS3に

    •   @SimpleDBVersionでOptimistic
        Lock(Conditional PUT/DELETE)

    •   検索APIにはナウいFluent Interface採用
ナウな感じに書ける

List<Book> books =
  mapper.from(Book.class).
    where("title", Like, "%スベる%").
   and("price", GreaterThan, 1000).
   orderBy("price", DESC).
   limit(10).
   fetch();
ただし
使用上のご注意

• 自分が現状必要としていないものは実装
 していません(笑)

• リレーション機能は持たせないつもりで
 す。(Simpleじゃなくなるので)

• テストは適当です(これはひどい)
というわけで
dateofrock/
simpledb-mapper
      (笑)
気が向いたら
Forkしてね
残りは後日
ブログに書きますw




   http://www.flickr.com/photos/mendhak/4271441910/
Thank you!


    http://www.flickr.com/photos/mendhak/4271441910/

More Related Content

What's hot

Expectation for cloudSearch
Expectation for cloudSearchExpectation for cloudSearch
Expectation for cloudSearchMinoru Osuka
 
JavaScriptで出来る、あんなことこんなこと
JavaScriptで出来る、あんなことこんなことJavaScriptで出来る、あんなことこんなこと
JavaScriptで出来る、あんなことこんなことMayu Kimura
 
Anemoneによるクローラー入門
Anemoneによるクローラー入門Anemoneによるクローラー入門
Anemoneによるクローラー入門Tasuku Nakano
 
Maiking RIA Apps by Ruby
Maiking RIA Apps by RubyMaiking RIA Apps by Ruby
Maiking RIA Apps by Rubyshozon
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews, Inc.
 
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...Amazon Web Services Japan
 
Rubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerRubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerTakuro Sasaki
 
はじめてのAWS Lambda
はじめてのAWS LambdaはじめてのAWS Lambda
はじめてのAWS LambdaMasaki Misawa
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Yohei Sasaki
 
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみたKinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみたMasaki Misawa
 
JSON Schema と API テスト YAPC::Asia Tokyo 2014
JSON Schema と API テスト YAPC::Asia Tokyo 2014JSON Schema と API テスト YAPC::Asia Tokyo 2014
JSON Schema と API テスト YAPC::Asia Tokyo 2014Naoki Shimizu
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリYukiya Nakagawa
 
WebAppDev勉強会 #1 at cafe? IKAGAWA DO
WebAppDev勉強会 #1 at cafe? IKAGAWA DOWebAppDev勉強会 #1 at cafe? IKAGAWA DO
WebAppDev勉強会 #1 at cafe? IKAGAWA DOKohei Noda
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBmoai kids
 
Enable Skype to favorite the messages
Enable Skype to favorite the messagesEnable Skype to favorite the messages
Enable Skype to favorite the messagesdaipanchi
 
類義語検索と類義語ハイライト
類義語検索と類義語ハイライト類義語検索と類義語ハイライト
類義語検索と類義語ハイライトShinichiro Abe
 
Scotty を利用した "ゆるふわ" Web サービス作成
Scotty を利用した "ゆるふわ" Web サービス作成Scotty を利用した "ゆるふわ" Web サービス作成
Scotty を利用した "ゆるふわ" Web サービス作成krdlab
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"Kentaro Yoshida
 

What's hot (20)

Expectation for cloudSearch
Expectation for cloudSearchExpectation for cloudSearch
Expectation for cloudSearch
 
JavaScriptで出来る、あんなことこんなこと
JavaScriptで出来る、あんなことこんなことJavaScriptで出来る、あんなことこんなこと
JavaScriptで出来る、あんなことこんなこと
 
Anemoneによるクローラー入門
Anemoneによるクローラー入門Anemoneによるクローラー入門
Anemoneによるクローラー入門
 
Maiking RIA Apps by Ruby
Maiking RIA Apps by RubyMaiking RIA Apps by Ruby
Maiking RIA Apps by Ruby
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
 
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
 
Swift + JSON via WordPress
Swift + JSON via WordPressSwift + JSON via WordPress
Swift + JSON via WordPress
 
Rubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerRubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawler
 
はじめてのAWS Lambda
はじめてのAWS LambdaはじめてのAWS Lambda
はじめてのAWS Lambda
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
 
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみたKinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
 
JSON Schema と API テスト YAPC::Asia Tokyo 2014
JSON Schema と API テスト YAPC::Asia Tokyo 2014JSON Schema と API テスト YAPC::Asia Tokyo 2014
JSON Schema と API テスト YAPC::Asia Tokyo 2014
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
 
WebAppDev勉強会 #1 at cafe? IKAGAWA DO
WebAppDev勉強会 #1 at cafe? IKAGAWA DOWebAppDev勉強会 #1 at cafe? IKAGAWA DO
WebAppDev勉強会 #1 at cafe? IKAGAWA DO
 
Yesod勉強会
Yesod勉強会Yesod勉強会
Yesod勉強会
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Enable Skype to favorite the messages
Enable Skype to favorite the messagesEnable Skype to favorite the messages
Enable Skype to favorite the messages
 
類義語検索と類義語ハイライト
類義語検索と類義語ハイライト類義語検索と類義語ハイライト
類義語検索と類義語ハイライト
 
Scotty を利用した "ゆるふわ" Web サービス作成
Scotty を利用した "ゆるふわ" Web サービス作成Scotty を利用した "ゆるふわ" Web サービス作成
Scotty を利用した "ゆるふわ" Web サービス作成
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
 

Similar to AWS小ネタ集

Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionGoh Matsumoto
 
プログラマブルクラウドの薦め
プログラマブルクラウドの薦めプログラマブルクラウドの薦め
プログラマブルクラウドの薦めShinpei Ohtani
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係Hiraku Komuro
 
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ  AWS re:Invent 2014 最新情報のアップデートAWS Black Belt Techシリーズ  AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデートAmazon Web Services Japan
 
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)Toru Kawamura
 
Introduction of aws-cli
Introduction of aws-cliIntroduction of aws-cli
Introduction of aws-cliMasaaki HIROSE
 
JAWSUG architecture-crowler
JAWSUG architecture-crowlerJAWSUG architecture-crowler
JAWSUG architecture-crowlerTakuro Sasaki
 
Transfer for sftp 20181212
Transfer for sftp 20181212Transfer for sftp 20181212
Transfer for sftp 20181212Noguchi Takaaki
 
シラサギハンズオン 東京
シラサギハンズオン 東京シラサギハンズオン 東京
シラサギハンズオン 東京Yu Ito
 
3分でわかる(気になれる) AWS OpsWorks
3分でわかる(気になれる) AWS OpsWorks3分でわかる(気になれる) AWS OpsWorks
3分でわかる(気になれる) AWS OpsWorksYuuki Namikawa
 
Amazon ec2とは何か?
Amazon ec2とは何か?Amazon ec2とは何か?
Amazon ec2とは何か?Shinya_131
 
serverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Pythonserverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Pythonmasahitojp
 
シラサギハンズオン 大阪
シラサギハンズオン 大阪シラサギハンズオン 大阪
シラサギハンズオン 大阪Yu Ito
 
S3 -ほぼ週刊AWSマイスターシリーズ第2回-
S3 -ほぼ週刊AWSマイスターシリーズ第2回-S3 -ほぼ週刊AWSマイスターシリーズ第2回-
S3 -ほぼ週刊AWSマイスターシリーズ第2回-SORACOM, INC
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
AWS as MBaaS 〜APIキーとかの話〜
AWS as MBaaS 〜APIキーとかの話〜AWS as MBaaS 〜APIキーとかの話〜
AWS as MBaaS 〜APIキーとかの話〜Yuki Hirai
 
沖縄Web+db勉強会 20121026
沖縄Web+db勉強会 20121026沖縄Web+db勉強会 20121026
沖縄Web+db勉強会 20121026Shusaku Fukumine
 
WebAppDev勉強会 #4
WebAppDev勉強会 #4WebAppDev勉強会 #4
WebAppDev勉強会 #4Kohei Noda
 

Similar to AWS小ネタ集 (20)

Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
 
プログラマブルクラウドの薦め
プログラマブルクラウドの薦めプログラマブルクラウドの薦め
プログラマブルクラウドの薦め
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
 
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ  AWS re:Invent 2014 最新情報のアップデートAWS Black Belt Techシリーズ  AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
 
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
 
Introduction of aws-cli
Introduction of aws-cliIntroduction of aws-cli
Introduction of aws-cli
 
JAWSUG architecture-crowler
JAWSUG architecture-crowlerJAWSUG architecture-crowler
JAWSUG architecture-crowler
 
Haikara
HaikaraHaikara
Haikara
 
Tech fun rails_workshop
Tech fun rails_workshopTech fun rails_workshop
Tech fun rails_workshop
 
Transfer for sftp 20181212
Transfer for sftp 20181212Transfer for sftp 20181212
Transfer for sftp 20181212
 
シラサギハンズオン 東京
シラサギハンズオン 東京シラサギハンズオン 東京
シラサギハンズオン 東京
 
3分でわかる(気になれる) AWS OpsWorks
3分でわかる(気になれる) AWS OpsWorks3分でわかる(気になれる) AWS OpsWorks
3分でわかる(気になれる) AWS OpsWorks
 
Amazon ec2とは何か?
Amazon ec2とは何か?Amazon ec2とは何か?
Amazon ec2とは何か?
 
serverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Pythonserverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Python
 
シラサギハンズオン 大阪
シラサギハンズオン 大阪シラサギハンズオン 大阪
シラサギハンズオン 大阪
 
S3 -ほぼ週刊AWSマイスターシリーズ第2回-
S3 -ほぼ週刊AWSマイスターシリーズ第2回-S3 -ほぼ週刊AWSマイスターシリーズ第2回-
S3 -ほぼ週刊AWSマイスターシリーズ第2回-
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
AWS as MBaaS 〜APIキーとかの話〜
AWS as MBaaS 〜APIキーとかの話〜AWS as MBaaS 〜APIキーとかの話〜
AWS as MBaaS 〜APIキーとかの話〜
 
沖縄Web+db勉強会 20121026
沖縄Web+db勉強会 20121026沖縄Web+db勉強会 20121026
沖縄Web+db勉強会 20121026
 
WebAppDev勉強会 #4
WebAppDev勉強会 #4WebAppDev勉強会 #4
WebAppDev勉強会 #4
 

More from Takehito Tanabe

XamarinとAWSをつないでみた話
XamarinとAWSをつないでみた話XamarinとAWSをつないでみた話
XamarinとAWSをつないでみた話Takehito Tanabe
 
スタートアップがグローバルなシステムを作るために、積極的にサーバーレスに取り組んでみた話 / Serverless Meetup Sapporo
スタートアップがグローバルなシステムを作るために、積極的にサーバーレスに取り組んでみた話 / Serverless Meetup Sapporoスタートアップがグローバルなシステムを作るために、積極的にサーバーレスに取り組んでみた話 / Serverless Meetup Sapporo
スタートアップがグローバルなシステムを作るために、積極的にサーバーレスに取り組んでみた話 / Serverless Meetup SapporoTakehito Tanabe
 
エフスタ!!HOKKAIDO エンジニアが この先 生き残るには
エフスタ!!HOKKAIDO エンジニアが この先 生き残るにはエフスタ!!HOKKAIDO エンジニアが この先 生き残るには
エフスタ!!HOKKAIDO エンジニアが この先 生き残るにはTakehito Tanabe
 
クラウドで管理する手作り育苗ハウスのつくり方
クラウドで管理する手作り育苗ハウスのつくり方クラウドで管理する手作り育苗ハウスのつくり方
クラウドで管理する手作り育苗ハウスのつくり方Takehito Tanabe
 
さっぽろ農学校成果発表
さっぽろ農学校成果発表さっぽろ農学校成果発表
さっぽろ農学校成果発表Takehito Tanabe
 
JAWS-DAYS 2015 / 北海道 x 農業 x クラウド
JAWS-DAYS 2015 / 北海道 x 農業 x クラウドJAWS-DAYS 2015 / 北海道 x 農業 x クラウド
JAWS-DAYS 2015 / 北海道 x 農業 x クラウドTakehito Tanabe
 
青森ITビジネス・マッチング交流会
青森ITビジネス・マッチング交流会青森ITビジネス・マッチング交流会
青森ITビジネス・マッチング交流会Takehito Tanabe
 
Farmnoteの技術(AWS Cloud Roadshow 2014 札幌)
Farmnoteの技術(AWS Cloud Roadshow 2014 札幌)Farmnoteの技術(AWS Cloud Roadshow 2014 札幌)
Farmnoteの技術(AWS Cloud Roadshow 2014 札幌)Takehito Tanabe
 
リモート勤務でエンジニアをやっているワケ 〜 AWS ジャパンツアー 2014年 夏 札幌
リモート勤務でエンジニアをやっているワケ 〜 AWS ジャパンツアー 2014年 夏 札幌リモート勤務でエンジニアをやっているワケ 〜 AWS ジャパンツアー 2014年 夏 札幌
リモート勤務でエンジニアをやっているワケ 〜 AWS ジャパンツアー 2014年 夏 札幌Takehito Tanabe
 
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.3 AWS Elastic Beanstalkについて
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.3 AWS Elastic Beanstalkについてブログ製本サービス MyBooks.jpのアーキテクチャ Part.3 AWS Elastic Beanstalkについて
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.3 AWS Elastic BeanstalkについてTakehito Tanabe
 
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)Takehito Tanabe
 
Garage labsサーバー部11U final
Garage labsサーバー部11U finalGarage labsサーバー部11U final
Garage labsサーバー部11U finalTakehito Tanabe
 
北海道の楽しい100人
北海道の楽しい100人北海道の楽しい100人
北海道の楽しい100人Takehito Tanabe
 
第8回クラウドごった煮 4年と半年、AWSを使い続けた結果
第8回クラウドごった煮 4年と半年、AWSを使い続けた結果第8回クラウドごった煮 4年と半年、AWSを使い続けた結果
第8回クラウドごった煮 4年と半年、AWSを使い続けた結果Takehito Tanabe
 
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1Takehito Tanabe
 
クラウド移住で地方に住むということ
クラウド移住で地方に住むということクラウド移住で地方に住むということ
クラウド移住で地方に住むということTakehito Tanabe
 
華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築Takehito Tanabe
 
テレワークHOKKAIDOセミナー 会社を辞めないUターン
テレワークHOKKAIDOセミナー 会社を辞めないUターンテレワークHOKKAIDOセミナー 会社を辞めないUターン
テレワークHOKKAIDOセミナー 会社を辞めないUターンTakehito Tanabe
 
雲にのって札幌まで来た話
雲にのって札幌まで来た話雲にのって札幌まで来た話
雲にのって札幌まで来た話Takehito Tanabe
 

More from Takehito Tanabe (20)

XamarinとAWSをつないでみた話
XamarinとAWSをつないでみた話XamarinとAWSをつないでみた話
XamarinとAWSをつないでみた話
 
スタートアップがグローバルなシステムを作るために、積極的にサーバーレスに取り組んでみた話 / Serverless Meetup Sapporo
スタートアップがグローバルなシステムを作るために、積極的にサーバーレスに取り組んでみた話 / Serverless Meetup Sapporoスタートアップがグローバルなシステムを作るために、積極的にサーバーレスに取り組んでみた話 / Serverless Meetup Sapporo
スタートアップがグローバルなシステムを作るために、積極的にサーバーレスに取り組んでみた話 / Serverless Meetup Sapporo
 
エフスタ!!HOKKAIDO エンジニアが この先 生き残るには
エフスタ!!HOKKAIDO エンジニアが この先 生き残るにはエフスタ!!HOKKAIDO エンジニアが この先 生き残るには
エフスタ!!HOKKAIDO エンジニアが この先 生き残るには
 
クラウドで管理する手作り育苗ハウスのつくり方
クラウドで管理する手作り育苗ハウスのつくり方クラウドで管理する手作り育苗ハウスのつくり方
クラウドで管理する手作り育苗ハウスのつくり方
 
さっぽろ農学校成果発表
さっぽろ農学校成果発表さっぽろ農学校成果発表
さっぽろ農学校成果発表
 
JAWS-DAYS 2015 / 北海道 x 農業 x クラウド
JAWS-DAYS 2015 / 北海道 x 農業 x クラウドJAWS-DAYS 2015 / 北海道 x 農業 x クラウド
JAWS-DAYS 2015 / 北海道 x 農業 x クラウド
 
青森ITビジネス・マッチング交流会
青森ITビジネス・マッチング交流会青森ITビジネス・マッチング交流会
青森ITビジネス・マッチング交流会
 
Farmnoteの技術(AWS Cloud Roadshow 2014 札幌)
Farmnoteの技術(AWS Cloud Roadshow 2014 札幌)Farmnoteの技術(AWS Cloud Roadshow 2014 札幌)
Farmnoteの技術(AWS Cloud Roadshow 2014 札幌)
 
リモート勤務でエンジニアをやっているワケ 〜 AWS ジャパンツアー 2014年 夏 札幌
リモート勤務でエンジニアをやっているワケ 〜 AWS ジャパンツアー 2014年 夏 札幌リモート勤務でエンジニアをやっているワケ 〜 AWS ジャパンツアー 2014年 夏 札幌
リモート勤務でエンジニアをやっているワケ 〜 AWS ジャパンツアー 2014年 夏 札幌
 
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.3 AWS Elastic Beanstalkについて
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.3 AWS Elastic Beanstalkについてブログ製本サービス MyBooks.jpのアーキテクチャ Part.3 AWS Elastic Beanstalkについて
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.3 AWS Elastic Beanstalkについて
 
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
 
Garage labsサーバー部11U final
Garage labsサーバー部11U finalGarage labsサーバー部11U final
Garage labsサーバー部11U final
 
北海道の楽しい100人
北海道の楽しい100人北海道の楽しい100人
北海道の楽しい100人
 
第8回クラウドごった煮 4年と半年、AWSを使い続けた結果
第8回クラウドごった煮 4年と半年、AWSを使い続けた結果第8回クラウドごった煮 4年と半年、AWSを使い続けた結果
第8回クラウドごった煮 4年と半年、AWSを使い続けた結果
 
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1
 
クラウド移住で地方に住むということ
クラウド移住で地方に住むということクラウド移住で地方に住むということ
クラウド移住で地方に住むということ
 
華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築華麗なるElastic Beanstalkでの環境構築
華麗なるElastic Beanstalkでの環境構築
 
テレワークHOKKAIDOセミナー 会社を辞めないUターン
テレワークHOKKAIDOセミナー 会社を辞めないUターンテレワークHOKKAIDOセミナー 会社を辞めないUターン
テレワークHOKKAIDOセミナー 会社を辞めないUターン
 
AWSと1500日
AWSと1500日AWSと1500日
AWSと1500日
 
雲にのって札幌まで来た話
雲にのって札幌まで来た話雲にのって札幌まで来た話
雲にのって札幌まで来た話
 

Recently uploaded

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Recently uploaded (9)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

AWS小ネタ集

  • 1. 第5回 AWS User Group - Sapporo 勉強会 AWS小ネタ集 欧文印刷株式会社 田名辺健人 2012.02.14 http://www.flickr.com/photos/mendhak/4271441910/
  • 2. 田名辺 健人(たなべたけひと) ソフトウェアエンジニア 欧文印刷株式会社(東京都) 2011年11月から札幌でテレワーク @dateofrock 札幌・東京コアメンバー Ustream担当 好きなサービスはSQS
  • 3.
  • 4.
  • 5.
  • 7. LT(Lady's Happy Valentine Talk) してくれた貴女へ… http://www.flickr.com/photos/pinksherbet/1483193019/
  • 8. NUboard Happy Valentine プレゼント♡ from 欧文印刷 http://www.flickr.com/photos/pinksherbet/1483193019/
  • 10. • S3 小ネタ • 読み書きのスループットを上げる方法 • バケット名にピリオドでハマる方法 • S3実践ネタ • 設定ファイル置き場 • Pre-signed URLの使い道 • Simpleシリーズ2連発 • アプリ内エラー通知はSNSが便利 • SimpleDB APIがシンプルじゃない件 http://www.flickr.com/photos/mendhak/4271441910/
  • 11. タ 作 り す ぎ た w http://www.flickr.com/photos/donsolo/2435421847/
  • 12. • S3 小ネタ • 読み書きのスループットを上げる方法 • バケット名にピリオドでハマる方法 • S3実践ネタ • 設定ファイル置き場 • Pre-signed URLの使い道 • Simpleシリーズ2連発 • アプリ内エラー通知はSNSが便利 • SimpleDB APIがシンプルじゃない件 http://www.flickr.com/photos/mendhak/4271441910/
  • 13. 半分 • S3 小ネタ • 読み書きのスループットを上げる方法 • バケット名にピリオドでハマる方法 • S3実践ネタ カット • 設定ファイル置き場 • Pre-signed URLの使い道 • Simpleシリーズ2連発 • アプリ内エラー通知はSNSが便利 • SimpleDB APIがシンプルじゃない件 orz http://www.flickr.com/photos/mendhak/4271441910/
  • 14. • S3 小ネタ • 読み書きのスループットを上げる方法 • バケット名にピリオドでハマる方法 • S3実践ネタ • 設定ファイル置き場 • Pre-signed URLの使い道 • Simpleシリーズ2連発 • アプリ内エラー通知はSNSが便利 • SimpleDB APIがシンプルじゃない件 http://www.flickr.com/photos/mendhak/4271441910/
  • 15. Pre-signed URLの使い道 • S3オブジェクトに対して有効期限付きの パブリックなURLを生成できる • Query String Request Authentication http://docs.amazonwebservices.com/AmazonS3/latest/dev/ RESTAuthentication.html#RESTAuthenticationQueryStringAuth
  • 16. Pre-signed URL どんなもの?
  • 17. GET /images/photo.jpg? AWSAccessKeyId=0PN5J17HBGZHT7JJ3X82 &Expires=1141889120 &Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D Signature = URL-Encode( Base64( HMAC-SHA1( YourSecretAccessKeyID, UTF-8-Encoding-Of(StringToSign)))); StringToSign = HTTP-VERB + "n" + Content-MD5 + "n" + Content-Type + "n" + Expires + "n" + CanonicalizedAmzHeaders + CanonicalizedResource;
  • 19. Java Interface AmazonS3 java.net.URL generatePresignedUrl(java.lang.String bucketName, java.lang.String key, java.util.Date expiration, HttpMethod method) throws AmazonClientException Date after5Seconds = new Date(); after5Seconds.setTime(System.currentTimeMillis() + 5 * 1000); AmazonS3 s3 = new AmazonS3Client(cred); Url url = s3.generatePresignedUrl(“mybucket”, “images/photo.jpg”, after5Seconds, HttpMethod.GET);
  • 20. Ruby Class: AWS::S3::S3Object - (URI::HTTP, URI::HTTPS) url_for(method, options = {}) url = s3.buckets['mybucket'].objects['images/photo.jpg']. url_for(:read, :expires => 5)
  • 21. Ruby Ruby Class: AWS::S3::S3Object - (URI::HTTP, URI::HTTPS) url_for(method, options = {}) ステキ! url = s3.buckets['mybucket'].objects['images/photo.jpg']. url_for(:read, :expires => 5)
  • 22. Pre-signed URL 実 例
  • 23.
  • 24.
  • 25.
  • 26.
  • 27. Pre-signed URLの使い道 • Webサーバーの負荷が劇的に減る! • アプリはPre-signed URLを生成してS3 にリダイレクトするだけ • 重たいデータ送出はS3にお任せ!
  • 28. • S3 小ネタ • 読み書きのスループットを上げる方法 • バケット名にピリオドでハマる方法 • S3実践ネタ • 設定ファイル置き場 • Pre-signed URLの使い道 • Simpleシリーズ2連発 • アプリ内エラー通知はSNSが便利 • SimpleDB APIがシンプルじゃない件 http://www.flickr.com/photos/mendhak/4271441910/
  • 30. Java 例えばUncaughtExceptionHandlerを使う Thread.setDefaultUncaughtExceptionHandler( new UncaughtExceptionHandler() { public void uncaughtException(Thread t, Throwable e) { " AWSCredentials cred = new BasicAWSCredentials( "アクセスキー","シークレットキー"); " AmazonSNS sns = new AmazonSNSClient(cred); " String stackTrace = getStackTraceString(e); " sns.publish(new PublishRequest( " " " "arn:aws:sns:ap-northeast-1:xxxxx:sns-test", " " " stackTrace, "Java Exception")); " } " } );
  • 31. Ruby on Rails 例えばApplicationController#rescue_fromを使う require 'rubygems' require 'aws-sdk' class ApplicationController < ActionController::Base rescue_from StandardError do |exception| topic = AWS::SNS::Topic.new( 'arn:aws:sns:ap-northeast-1:xxxxx:sns-test' ) topic.publish(exception.backtrace.to_s, :subject => 'Rails exception'); raise exception end end
  • 33. SimpleDB APIが シンプルじゃない件 • いや、シンプルすぎて冗長なコードに なってしまう • 素のJDBCはチョット…的な。 • データの型は全部文字列だよ!
  • 36. class Book < AWS::Record::Base string_attr :title end Book.new(:title => 'スベらないプレゼン').save Book.where('title like ?', '%プレゼン%').count $ rails generate scaffold_controller Book title:string config/routes.rb: Myapp::Application.routes.draw do resources :books end http://aws.amazon.com/articles/8621639827664165 より
  • 37. class Book < AWS::Record::Base string_attr :title end Book.new(:title => 'スベらないプレゼン').save Railsと違和感なしに Book.where('title like ?', '%プレゼン%').count 統合できる! $ rails generate scaffold_controller Book title:string config/routes.rb: Myapp::Application.routes.draw do resources :books end http://aws.amazon.com/articles/8621639827664165 より
  • 38. Java • AWS SDK for Javaには低レベルAPIしかな いのだよ。 • JPA実装とかはあるけど… https://github.com/appoxy/simplejpa
  • 41. @DynamoDBTable(tableName = "BookTable") public class Book { private Long id; private String title; @DynamoDBHashKey public Long getId() { " return this.id; } @DynamoDBAttribute(attributeName = "title") public String getTitle() { " return this.title; } // 以下、setter }
  • 42. 使用例 (DynamoDBMapper) AWSCredentials cred = new BasicAWSCredentials( "アクセスキ", "シークレットキー"); AmazonDynamoDB db = new AmazonDynamoDBClient(cred); DynamoDBMapper mapper = new DynamoDBMapper(db); Long key = 105L; Book book = mapper.load(Book.class, key); book.setTitle("スベらないプレゼン"); mapper.save(book); mapper.delete(book);
  • 45.
  • 46. SimpleDBMapper (笑)
  • 47. @SimpleDBDomain(domainName = "BookDomain") public class Book { @SimpleDBItemName public Long id; @SimpleDBAttribute(attributeName = "title") public String title; }
  • 48. 使用例 (SimpleDBMapper) AWSCredentials cred = new BasicAWSCredentials( "アクセスキ", "シークレットキー"); AmazonSimpleDB db = new AmazonSimpleDBClient(cred); SimpleDBMapper mapper = new SimpleDBMapper(db); Long key = 105L; Book book = mapper.load(Book.class, key); book.setTitle("スベらないプレゼン"); mapper.save(book); mapper.delete(book);
  • 49.
  • 51. simpledb-mapper(笑) • DynamoDBMapperライクなAPI(笑) • でもパクっただけじゃない • 1024byteを超えるデータ(Blob)はS3に • @SimpleDBVersionでOptimistic Lock(Conditional PUT/DELETE) • 検索APIにはナウいFluent Interface採用
  • 52. ナウな感じに書ける List<Book> books = mapper.from(Book.class). where("title", Like, "%スベる%"). and("price", GreaterThan, 1000). orderBy("price", DESC). limit(10). fetch();
  • 54. 使用上のご注意 • 自分が現状必要としていないものは実装 していません(笑) • リレーション機能は持たせないつもりで す。(Simpleじゃなくなるので) • テストは適当です(これはひどい)
  • 56.
  • 59. 残りは後日 ブログに書きますw http://www.flickr.com/photos/mendhak/4271441910/
  • 60. Thank you! http://www.flickr.com/photos/mendhak/4271441910/