Chinaunix首页 | 论坛 | 博客
  • 博客访问: 553334
  • 博文数量: 38
  • 博客积分: 10093
  • 博客等级: 上将
  • 技术积分: 1460
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-24 13:04
文章分类

全部博文(38)

文章存档

2012年(1)

2010年(9)

2009年(3)

2008年(25)

我的朋友

分类: LINUX

2010-02-26 09:59:06

明白 Perl 程序员如何 运用 3 CPAN S3 模块 —— Net::Amazon::S3Amazon::S3 SOAP::Amazon::S3 —— 来列出、建立和删除 bucketS3 数据储存);列出、建立、获取和删除 bucket 中的项;以及取得一个项的元数据。

  IBM Amazon Web Services

  虚拟环境的计算能力、带宽、存储量、安全性和可靠性都不成疑问。假如不须要在您的系统中安装开发软件,云计算能够提供一种能够在虚拟环境中开发使用程序的方式吗?在虚拟计算环境中,您能够开发、部署和维护使用程序,并且能够根据业务需求调整计算资源,您仅需为自身运用的计算时间和容量付费。

  Perl 开发人员拥有一个精彩的资源,即 Comprehensive Perl Archive Network (CPAN)Amazon 也有一个精彩的资源 Simple Storage Service (S3)。尽管在 CPAN 上存在一个官方的 Amazon S3 Perl 库(称为 S3),但是 S3 涉及到至少 5 个或 6 个模块(不过有些不是完全独立的)。这好像一场辣椒烹饪比赛,出场的不是 200 人,而是 2000 人。

  现在,我在比赛结束后的一天出现了,和您共享最好的烹饪秘诀。这些模块和工具在 CPAN 上不花钱提供,您能够立即运用它们。我推选 3 个属于这三个模块的秘方:Net::Amazon::S3Amazon::S3 SOAP::Amazon::S3

  从 developerWorks 上的 功能丰厚的 PerlPerl Amazon 系列阅读关于 S3 的优点和缺点的探讨。没有必要在这里重复探讨,不过我会基本总结一下。

  S3 是由 Amazon 提供和维护的储存服务。Amazon 对用户的访问收费,因此不用担心服务器、备份、带宽可用性和分布等。因此,S3 和日常生活中的许多物品一样,是廉价便利的,并且由您决定它能不能适合您的业务或私人需求。

  S3 数据和 bucket 中的数据项议决 bucket(与域名大致相似)组织起来。提醒一下,在上传时必须要保卫 MIME 类型,否则您将下载到原始的二进制数据(这对映像的影响尤其大)。MIME 类型和其他元数据在写入之后就不能 再修改 —— 您必须删除并重新建立该项。

  在深入探索之前声明一下,本文针对具有中等水平的 Perl 程序员。本文不细致解释基本的 Perl 技能。此外,您应该知晓什么是 S3 以及如何 安装 CPAN 模块。

本文的目标

  我借助 3 个模块(Net::Amazon::S3Amazon::S3 SOAP::Amazon::S3)解释如何 执行一系列基本的 S3 操作,并展示必要的源代码,如下所示:

  列出、建立和删除 bucket

  列出、建立、获取和删除 bucket 中的项

  获取项的元数据

  为了让这些任务在模块之间具有可比性,我重用了相似的命令行选项和总体结构。

  Net::Amazon::S3

  明白 Moose

  Moose 的首要目标是让 Perl 5 OOP 更加易于运用、更加一致,从而减轻程序员的压力。议决帮助您放开面向对象编程的机制,Moose 帮助您重视您想实现的目标。构建在 Class::MOP 之上的 Moose 也使得元类编程更加基本 。假如您还没有尝试过这些特征,那么应该尝试一下;它是用 Perl 处理 OOP 的精彩方式。

  Net::Amazon::S3 模块是一个著名的模块,它受到广泛的支撑,功能也很彻底。它有一些前提条件,但要比 Moose 合理得多(假如您明白的话)。

  咱们将把 S3 密匙作为 S3KEY S3SECRET 储存在环境中。 这样,咱们就能够议决 Perl $ENV{S3KEY} $ENV{S3SECRET} 的形式访问它们。这种在文件中储存数据的要领是一种比较安全的保卫隐私性的要领(记得,假如 S3 密匙被盗,您将为他人购买带宽)。

  现在,Net::Amazon::S3 已经安装完毕。(您最好运用推选的 Net::Amazon::S3::Client 接口,因为 Net::Amazon::S3 被称为旧有接口。但是 Net::Amazon::S3::Client version 0.50 由于 Moose 模块而存在一个 bug,因此我在撰写本文时不能 运用它。这个 bug version 0.51 已经修正,当前的版本是 0.52)。现在让咱们探索例子。和以往一样,下载 小节提供所有脚本。

  清单 1. net-amazon-s3.pl 准备

#!/usr/bin/perl 

 

use warnings; 

use strict; 

use Data::Dumper; 

use Getopt::Long; 

use Net::Amazon::S3; 

use MIME::Types; 

 

my $mime = MIME::Types->new();

这是准则的代码,包含用于调试目标的 Data::Dumper。这里建立了一个泛型的 MIME 对象,尽管咱们仅在上传时运用它。

  清单 2. net-amazon-s3.pl 选项、帮助函数和原始 S3 连接

my %opts = ( 

  key    => $ENV{S3KEY}, 

  secret  => $ENV{S3SECRET}, 

  separator => '/', 

  ); 

 

GetOptions( 

  \%opts, 

  "createc=s", 

  "deleted=s", 

  "listl:s",     # the parameter is optional 

  "keysk", 

  "metadatam", 

  "get=s", 

  "put=s", 

  "separator=s", 

  "helph", 

 ); 

 

unless ($opts{key} && $opts{secret} ) 

{ 

 die "$0 requires the S3KEY and S3SECRET environment variables to be set."; 

} 

 

# handle -h 

usage() if exists $opts{help}; 

 

my $s3 = Net::Amazon::S3->new( 

         aws_access_key_id   => $opts{key}, 

         aws_secret_access_key => $opts{secret}, 

         retry         => 1, 

         ); 

 

die "Could not connect to S3" unless defined $s3; 

 

 

sub read_filename 

{ 

 print "\nEnter filename: "; 

 my $name = <>; 

 chomp $name; 

 return $name; 

} 

 

sub usage 

{ 

 print lt; 

 

 $0 [OPTIONS] 

 

Pass your S3 key and secret in the S3KEY and S3SECRET environment entries. 

 

Options: 

 --help or -h              : this help 

 --separator $opts{separator}      : BUCKET and KEY separator character 

                     (for --get and --put) 

 --create BUCKET (or -c BUCKET)     : create BUCKET 

 --delete BUCKET (or -d BUCKET)     : delete BUCKET 

 --delete BUCKET$opts{separator}KEY   : delete KEY in BUCKET 

 --list [BUCKET] (or -l)        : list a specific bucket or all buckets 

 --keys (or -k)             : list the keys in each bucket (requires --list) 

 --metadata (or -m)           : show the keys' metadata 

                     (requires --keys and --list) 

 --get BUCKET$opts{separator}KEY    : download KEY from BUCKET 

 --put BUCKET$opts{separator}KEY    : upload a file to KEY in BUCKET 

 

EOHIPPUS 

 

 exit 0; 

} 

 

阅读(736) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~