Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database DynamoDB Perl抽象_Database_Perl_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

Database DynamoDB Perl抽象

Database 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实现

我最近读到了亚马逊的新DB产品DynamoDB,我必须承认这听起来非常吸引人。然而,在我跑开并开始重新编程我的模型层以利用街区上的新孩子之前,我需要一些更详细的信息。有人知道抽象DynamoDB的Perl包吗?还是太早了?我会称之为“ORM”包,但在DynamoDB世界中没有关系。阿尔法和贝塔有吗?如何通过Perl访问amazon的dynamodb


谢谢

我用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上最新的始终在线:

我猜这可能太早了。有趣的是,这个示例的第一部分来自我在AWS论坛上添加到线程中的代码…-)不过还是谢谢你。我已经在做这件事了,并且已经根据你刚刚发布的代码开发了一些软件包。我应该感谢你。我从你的帖子中得到了代码,并计算出了其余的代码,并让它端到端工作。我贴出了答案,认为这可能对寻找解决方案的人有所帮助。有趣的东西。期待使用一个包,隐藏这些细节!看起来Amazon至少试图在不放弃安全性的情况下对此进行一些安全性保护。看起来DBD模块可以由这些安全性组成