Database DynamoDB Perl抽象
我最近读到了亚马逊的新DB产品DynamoDB,我必须承认这听起来非常吸引人。然而,在我跑开并开始重新编程我的模型层以利用街区上的新孩子之前,我需要一些更详细的信息。有人知道抽象DynamoDB的Perl包吗?还是太早了?我会称之为“ORM”包,但在DynamoDB世界中没有关系。阿尔法和贝塔有吗?如何通过Perl访问amazon的dynamodbDatabase DynamoDB Perl抽象,database,perl,amazon-web-services,amazon-dynamodb,Database,Perl,Amazon Web Services,Amazon Dynamodb,我最近读到了亚马逊的新DB产品DynamoDB,我必须承认这听起来非常吸引人。然而,在我跑开并开始重新编程我的模型层以利用街区上的新孩子之前,我需要一些更详细的信息。有人知道抽象DynamoDB的Perl包吗?还是太早了?我会称之为“ORM”包,但在DynamoDB世界中没有关系。阿尔法和贝塔有吗?如何通过Perl访问amazon的dynamodb 谢谢我用JavaScript为DynamoDB编写了接口 我也是Perl程序员 请看提供的示例,它非常类似于Perl 下面是一个如何使用perl实现
谢谢我用JavaScript为DynamoDB编写了接口 我也是Perl程序员 请看提供的示例,它非常类似于Perl
下面是一个如何使用perl实现的示例
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Net::Amazon::AWSSign;
use XML::XPath;
use XML::XPath::XMLParser;
use LWP::UserAgent;
use HTTP::Request::Common;
use DateTime::Format::HTTP;
use Digest::SHA qw(sha256 hmac_sha256_base64);
use URI::Escape;
my $iam_key_id = 'Your AWS Access Key';
my $iam_secret = 'Your Security tocken';
my $url = "https://sts.amazonaws.com/?" .
"Action=GetSessionToken" .
"&Version=2011-06-15";
my $awsSign = new Net::Amazon::AWSSign("$iam_key_id", "$iam_secret"); # New object
my $awsSignedRESTURI = $awsSign->addRESTSecret($url); # Returns signed REST query URI for lwp-get, curl, etc.
my $response = `curl -s "$awsSignedRESTURI"`;
print Dumper($response);
my $xp = XML::XPath->new(xml => $response);
$xp->set_namespace('xx','https://sts.amazonaws.com/doc/2011-06-15/');
my $sessionToken = $xp->getNodeText('/xx:GetSessionTokenResponse/GetSessionTokenResult/Credentials/SessionToken');
my $accessKeyId = $xp->getNodeText('/xx:GetSessionTokenResponse/GetSessionTokenResult/Credentials/AccessKeyId');
my $secretAccessKey = $xp->getNodeText('/xx:GetSessionTokenResponse/GetSessionTokenResult/Credentials/SecretAccessKey');
print $sessionToken . "\n";
# SESSION TOKEN RECEIVED
put('{"TableName":"Test","Item":{"Id":{"S":"1"},"name":{"S":"somedata"}}}');
print "-----------------------------\n";
get('{"TableName":"Test","Key":{"HashKeyElement":{"S":"1"}}}');
exit;
sub get
{
my ($json) = @_;
perform('GetItem', $json);
}
sub put
{
my ($json) = @_;
perform('PutItem', $json);
}
sub perform
{
my ($target, $json) = @_;
my $class = 'DateTime::Format::HTTP';
my $date = $class->format_datetime(DateTime->now);
my $tosign =
"POST\n" .
"/\n" .
"\n" .
"host:dynamodb.us-east-1.amazonaws.com\n" .
"x-amz-date:$date\n" .
"x-amz-security-token:" . $sessionToken . "\n" .
"x-amz-target:DynamoDB_20111205.$target\n" .
"\n" .
$json;
my $b64 = hmac_sha256_base64(sha256($tosign), $secretAccessKey);
while (length($b64) % 4) {$b64 .= '=';}
##Dynamo request
my $string =
"POST http://dynamodb.us-east-1.amazonaws.com/ HTTP/1.1\n" .
"host: dynamodb.us-east-1.amazonaws.com\n" .
"x-amz-date: $date\n" .
"x-amzn-authorization: AWS3 AWSAccessKeyId=" . $accessKeyId . ",Algorithm=HmacSHA256,SignedHeaders=host;x-amz-date;x-amz-security-token;x-amz-target,Signature=$b64\n" .
"x-amz-target: DynamoDB_20111205.$target\n" .
"x-amz-security-token: " . $sessionToken . "\n" .
"content-type: application/x-amz-json-1.0\n" .
"connection: Keep-Alive\n" .
"user-agent: perl\n" .
"\n" .
$json;
my $req = HTTP::Request->parse($string);
my $ua = LWP::UserAgent->new;
print Dumper($ua->request($req));
}
您还可以使用我的perl模块Net::Amazon::DynamoDB(@MadHacker:i冒昧地修改了上面的签名代码)
- CPAN:
- github上最新的始终在线: