小编Dan*_*Dan的帖子

为什么我的Elastic Beanstalk应用程序拒绝PutItem访问我的DynamoDB,尽管它的作用?

目标

我想以编程方式从我的Elastic Beanstalk应用程序向DynamoDB中的表添加项目,使用类似于以下的代码:

Item item = new Item()
    .withPrimaryKey(UserIdAttributeName, userId)
    .withString(UserNameAttributeName, userName);

table.putItem(item);
Run Code Online (Sandbox Code Playgroud)

意外的结果

日志显示以下错误消息,[粗体部分]是我的编辑:

用户:arn:aws:sts :: [iam id?]:assume-role/aws-elasticbeanstalk-ec2-role/i- [some number]无权执行:dynamodb:PutItem on resource:arn:aws:dynamodb :us-west-2:[iam id?]:table/PiggyBanks(服务:AmazonDynamoDBv2;状态代码:400;错误代码:AccessDeniedException;请求ID:[请求ID])

我能够很好地获得表格,但是当调用PutItem时出现问题.

配置

我创建了一个新的Elastic Beanstalk应用程序.根据文档,这会自动为应用程序分配一个新角色,称为:

aws-elasticbeanstalk-service-role
Run Code Online (Sandbox Code Playgroud)

相同的文档表明我可以添加对我的数据库的访问,如下所示:

将其他服务的权限添加到IAM控制台中的默认服务角色.

所以,我找到了这个aws-elasticbeanstalk-service-role角色,并在其中添加了托管策略AmazonDynamoDBFullAccess.此策略如下所示,为简洁起见,删除了其他操作:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "dynamodb:*",
        [removed for brevity]
        "lambda:DeleteFunction"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这当然看起来应该授予我需要的访问权限.事实上,政策模拟器验证了这一点.使用以下参数,允许操作:

  • 角色:aws-elasticbeanstalk-service-role
  • 服务:DynamoDB
  • 行动:PutItem
  • 模拟资源:[从上面的日志中拉出] arn:aws:dynamodb:us-west-2: …

amazon-web-services amazon-dynamodb amazon-iam amazon-elastic-beanstalk

7
推荐指数
2
解决办法
1118
查看次数

如何在CloudFormation中生成AWS根账户ARN?

情况

我正在 CloudFormation 中生成 KMS 密钥。根据KMS 策略文档,创建帐户本身的策略至关重要Principal,以便 IAM 策略能够授予对密钥的访问权限。

问题

如何在 CloudFormation 中为帐户根创建 ARN?

amazon-web-services aws-cloudformation amazon-iam

6
推荐指数
2
解决办法
9657
查看次数

C++ 中多个线程等待同一事件句柄

概括

如果多个线程同时等待同一个事件句柄,如下所示:

WaitForSingleObject(theHandle, INFINITE);
Run Code Online (Sandbox Code Playgroud)

并且该事件被初始化为手动重置,如下所示:

// manual-reset and initial-state set to true
theHandle = CreateEvent(nullptr, true, true, nullptr);
Run Code Online (Sandbox Code Playgroud)

那么一旦设置了事件,所有线程都会恢复吗?

更详细一点

这个例子似乎表明他们都会恢复,但实际上并没有出来说任何一种方式:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms686915(v=vs.85).aspx

在我的特定情况下,我有一小段代码,其中事件被手动重置,并在短时间内再次设置。IE:

ResetEvent(theHandle)

// Do some things that should not lock at all let alone deadlock

SetEvent(theHandle)
Run Code Online (Sandbox Code Playgroud)

然后在实践中,我观察到一些等待事件设置的调用将无限期地等待:

WaitForSingleObject(theHandle, INFINITE); // Hello, deadlock
Run Code Online (Sandbox Code Playgroud)

我唯一能想到的是事件并没有按照我认为应该的方式工作,因此问题,或者我上面提到的“安全,无锁”代码实际上并不那么安全和无锁。

multithreading synchronization asynchronous thread-safety visual-c++

5
推荐指数
1
解决办法
4646
查看次数

DynamoDB 中分区和排序键查询的渐近性能是否恒定为 O(1)?

这个例子

以https://www.amazon.com/Amazon-DynamoDB-Developer-Guide-Services-ebook/dp/B007Q4JGBMMusic中的表为例。该表有分区键和排序键。ArtistSongTitle

问题

如果我查询特定艺术家的特定歌曲,性能是 O(1),还是取决于该艺术家在数据库中有多少条目?

先前的研究

链接的文档表明了稳定的性能:

如果您提供该项目的 Artist 和 SongTitle 值,则可以立即访问 Music 表中的任何项目。

然而,措辞含糊不清,没有给出任何支持。

这里,架构的描述方式表明性能不会恒定:

DynamoDB 使用分区键值作为内部哈希函数的输入。哈希函数的输出确定将存储项目的分区(DynamoDB 内部的物理存储)。具有相同分区键的所有项目都存储在一起,并按排序键值排序。

我预计这会导致 O(lg m) 性能,其中 m 是数据库中该特定分区键的条目数。为了在已排序的条目列表中搜索具有正确排序键的条目,需要这一非恒定时间 - 在本例中,是为了搜索正确的SongTitle.

谢谢你!

database indexing performance nosql amazon-dynamodb

5
推荐指数
1
解决办法
1772
查看次数