2012-01-19 27 views
5

Gần đây tôi đã đọc về cung cấp DB mới của Amazon, DynamoDB, và phải thừa nhận nó có vẻ rất hấp dẫn. Tuy nhiên, trước khi tôi chạy đi và bắt đầu lập trình lại lớp Mô hình của mình để tận dụng lợi thế của đứa trẻ mới trên khối, tôi cần một số chi tiết cụ thể hơn. Có ai biết về một gói Perl tóm tắt DynamoDB hay là quá sớm? Tôi sẽ gọi nó là một gói 'ORM', nhưng không có mối quan hệ nào trong thế giới DynamoDB. Có một bản alpha, beta không? Làm thế nào tôi có thể truy cập vào máy phát điện của amazon thông qua Perl?DynamoDB Perl Abstraction

Cảm ơn

+0

Tôi đoán đó là * quá sớm *. – Axeman

Trả lời

0

tôi đã viết giao diện cho DynamoDB trong JavaScript Tôi cũng Perl lập trình viên hãy nhìn vào ví dụ được cung cấp, nó rất giống với Perl

See example and download link here

0

Dưới đây là một ví dụ về cách làm điều đó bằng cách sử dụng 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)); 
} 
+0

Hài hước, phần đầu tiên của ví dụ này là từ mã của tôi, tôi đã thêm vào một chủ đề trên diễn đàn AWS. https://forums.aws.amazon.com/message.jspa?messageID=314685#314685. :-) Nhưng dù gì cũng cảm ơn. Tôi đã làm việc về điều này và có một vài gói đang được phát triển dựa trên mã bạn vừa đăng. – MadHacker

+0

Tôi nên cảm ơn bạn sau đó. Tôi đã nhận được mã từ bài đăng của bạn và đã tìm ra phần còn lại và làm việc để kết thúc. Tôi đăng câu trả lời, nghĩ rằng nó có thể hữu ích cho ai đó đang tìm kiếm một giải pháp. – dineshr

+0

Thú vị. Mong muốn sử dụng một gói ẩn các chi tiết này! Có vẻ như Amazon ít nhất đang cố gắng để có một số an ninh xung quanh điều này trong khi không ném ra an ninh. – jjohn

Các vấn đề liên quan