我在一个脚本中配置了一个使用CDK (我使用python)配置的dynamodb表,这个脚本是使用cdk堆栈创建的。现在,我有了另一个.py脚本,它帮助我将数据插入到使用cdk创建的db表中。我的boto3脚本是一个最小的脚本,看起来是这样的-
import boto3
ddb = boto3.resource('dynamodb')
table = ddb.Table(db_stream_table.table_arn)
table.put_item(Item={'timestamp': "123456", 'current_status': "response received", "responded_with": "Yes",'ticket_id': 100})
在这个boto3脚本中,我无法理解如何引用使用cdk创建的dynamodb表,因为行db_stream_table.table_arn
返回一个令牌,而实际上它并不引用表的名称。表的名称也有点像这样:InfratestcdkStack-TableCD557FA0-1S1M37VCP51C9
。(这个表名不像这里所描述的那样准确,我对数字和字母做了一些更改,但格式相同)
我是不是遗漏了什么?还是我的做法错了?有什么简单的方法吗?
发布于 2022-07-21 00:00:28
我认为有更容易的方法来解决这个问题,但是我想出了一个解决方案,就是在cdk脚本中设置ssm参数,如下所示:
aws_ssm.StringParameter(self, "SsmParameterforDynamoDB",
allowed_pattern=".*",
description="The name of the DynamoDB table",
parameter_name="dbname",
string_value=db_stream_table.table_name, # this is the name of your db table as referenced in your cdk code
tier=aws_ssm.ParameterTier.ADVANCED
)
然后,如果您有一个独立的脚本运行boto将一个项放到这个表中,那么您可以使用
import boto3
client = boto3.client('ssm')
response = client.get_parameter(
Name='dbname',
WithDecryption=False
)
tbl_Transaction_table_name = response['Parameter']['Value']
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(tbl_Transaction_table_name)
table.put_item(Item={'timestamp': "123456", 'current_status': "response received", "responded_with": "Yes",
'ticket_id': 100})
也许我会尝试一个iam角色来限制对此的访问,作为一个额外的步骤。
https://stackoverflow.com/questions/73061572
复制相似问题