Slide 1

Slide 1 text

Introduction to AWS SDK for Ruby Introduction to AWS SDK for Ruby ISOBE Kazuhiko (cloudpack) JAWS-UG静岡 2011-11-27 Powered by Rabbit 1.0.4 and COZMIXNG

Slide 2

Slide 2 text

提供 このLTはcloudpackの提供で お送りいたします 01 36

Slide 3

Slide 3 text

cloudpack AWS導入・構築支援、コンサル ティング、システム構築サービス 2010年4月 サービス開始 2011年1月 AWS ソリューション プロバイダ認定 02 36

Slide 4

Slide 4 text

cloudpack 月額費用固定型 日本円で請求書発行 フルマネージドホスティング 03 36

Slide 5

Slide 5 text

cloudpack 詳しくはWebで! http://cloudpack.jp/ 04 36

Slide 6

Slide 6 text

自己紹介 Twitter: muramasa64 cloudpackでAWSを運用 好きなAWSサービス: API 05 36

Slide 7

Slide 7 text

AWS SDK for Ruby AWS公式のSDK 2011年7月14日に初リリース 最新版は1.2.3 06 36

Slide 8

Slide 8 text

できること RubyからAWSのAPIを実行できる EC2, ELB, S3, SNS, SQS, STS, SES, IAM, SimpleDB, VPCに対 応 RDS未対応が惜しい 07 36

Slide 9

Slide 9 text

できること Ruby on Rails の ActiveRecord で、SimpleDBが使える まだリリースから間もないので、 他のSDKに比べてできることはや や少なめ 08 36

Slide 10

Slide 10 text

入手方法 gem gem install aws-sdk github git clone git://github.com/amazonwebservices/aws-sdk-for-ruby.git 09 36

Slide 11

Slide 11 text

使う準備 config.yml access_key_id: secret_access_key: 10 36

Slide 12

Slide 12 text

ライブラリと設定 require 'aws-sdk' AWS.config( YAML.load(File.read('config.yml')))   11 36

Slide 13

Slide 13 text

EC2 EC2を起動する ec2 = AWS::EC2.new ec2.instances.create( :image_id => 'ami-f49623f5' :key_name => 'keypair_name' :security_group_ids => ['default']) 12 36

Slide 14

Slide 14 text

Snapshot 各ボリュームのスナップショットを 作成する ec2.volumes.each do |v| v.create_snapshot( "from #{v.id} at #{Time.now}") end 13 36

Slide 15

Slide 15 text

Security Group IPアドレスを一括で置換する src_ip = 'x.x.x.x/32' dst_ip = 'y.y.y.y/32' ec2.security_groups.each do |src_sg| puts "#{src_sg.id}, #{src_sg.name}" src_sg.ip_permissions.each do |p| if p.ip_ranges.include? src_ip src_sg.authorize_ingress(p.protocol, p.port_range, dst_ip) src_sg.revoke_ingress(p.protocol, p.port_range, src_ip) end end end 14 36

Slide 16

Slide 16 text

S3 期間限定URIを生成 s3 = AWS::S3.new b = s3.buckets['your-bucket-name'] o = b.objects['object-name'] puts o.url_for(:read, :expires => 60*60*24*31) 一ヶ月間有効なURLが生成される 15 36

Slide 17

Slide 17 text

S3 Presignd-URL https://your-bucket- name.s3.amazonaws.com/ object-name? AWSAccessKeyId=AKIAIFCOKT CTDSDMPX2A&Expires=13151 25436&Signature=zEmS9f4% 2Fm%2BFLgxEsVA9ppfQDhks %3D 16 36

Slide 18

Slide 18 text

ちょっとしたハマり所 AWS SDK for Rubyで遭遇した  ハマった事例 17 36

Slide 19

Slide 19 text

最新のSnapshot as = [] ec2.volumes.each do |v| v.attachments.each do |a| as << a end end ss = {} r.snapshots.sort {|a,b| b.start_time <=> a.start_time }.map do |s| ss[s.volume_id] = s unless ss.include? s.volume_id end as.each do |a| vid = a.volume.id if ss.include? vid puts "#{a.instance.id} => (#{ss[vid].start_time})" end end 18 36

Slide 20

Slide 20 text

タイムアウトして失敗 Snapshotの作成日時を参照する たびにAPIが呼び出されてしまう らしい 大量にあるSnapshotをソートすると、 必ずタイムアウトしてしまう APIの呼び出し制限? 19 36

Slide 21

Slide 21 text

AWS.memoize AWS.memoize do ss = {} r.snapshots.sort {|a,b| b.start_time <=> a.start_time }.map do |s| ss[s.volume_id] = s unless ss.include? s.volume_id end end ソートしている部分を AWS.memoizeで囲むだけ 20 36

Slide 22

Slide 22 text

Snapshotの一覧 自分のSnapshotの一覧が欲しい ec2.snapshots.each do |s| # ... end これだと、publicなSnapshotも取 れてしまう! 21 36

Slide 23

Slide 23 text

AWS Developer Forum Forum: Ruby Development https://forums.aws.amazon.com/forum.jspa?forumID=125   22 36

Slide 24

Slide 24 text

質問した 23 36

Slide 25

Slide 25 text

次の日 24 36

Slide 26

Slide 26 text

AWSの中の人から回答 25 36

Slide 27

Slide 27 text

Snapshotの一覧 解決策: filter ec2.snapshots.filter( 'owner-id', 'YOUR_ACCOUNT_NUMBER').each do |s| # ... end 自分のアカウント番号を指定すると 自分のSnapshotのみ取得できる。 26 36

Slide 28

Slide 28 text

公式のSDKのメリット AWSのサポートが得られる 27 36

Slide 29

Slide 29 text

16日後 28 36

Slide 30

Slide 30 text

AWS SDK for Ruby 1.1.0 Release 29 36

Slide 31

Slide 31 text

Release Note 30 36

Slide 32

Slide 32 text

forumにもコメント 31 36

Slide 33

Slide 33 text

自分のSnapshotの取得 が簡単に ec2.snapshots.with_owner(:self).each do |s| # ... end AMIの一覧も同じようにできます。   32 36

Slide 34

Slide 34 text

公式SDKのメリット  フォーラムに困ってることや要望 を書きこむと、新しい機能が実装さ れることも! 33 36

Slide 35

Slide 35 text

困ったことや要望があっ たら フォーラムに書くなどのフィード バックしよう 次のリリースに反映されるかも 34 36

Slide 36

Slide 36 text

サンタクラウド #jawsug #サンタクラウド 集計ページ http://www.suz-lab.com/santacloud/ 35 36

Slide 37

Slide 37 text

  ご静聴ありがとうございました Powered by Rabbit 1.0.4 and COZMIXNG 36 36