创建调用dynamodb放置项的step函数的cdk代码有问题

2024-06-10 11:30:28 发布

您现在位置:Python中文网/ 问答频道 /正文

CDK非常好,但我正在努力解决如何使用python sdk部署一个step函数来将一个项放入dynamodb表中的问题。我最终希望通过事件桥提供项目

当我遇到错误时,我不确定它们是否是真正的错误:

我试过这个:

  event_table = dynamodb.Table(self, 'events',
        partition_key=dynamodb.Attribute(name='id', type=dynamodb.AttributeType.STRING),
        billing_mode=dynamodb.BillingMode.PAY_PER_REQUEST, removal_policy=RemovalPolicy.DESTROY)

    map = {'id': {'S.$': '$.id'}}
    dynamo_put_task = CallDynamoDB.put_item(item=map, table_name=event_table.table_name)

    task = Task(self, 'invoke-notification-service', task=dynamo_put_task)
    state_machine = StateMachine(self, 'save-event', definition=task)
    Rule(self, 'rule_name', targets=[(SfnStateMachine(state_machine))], event_bus=event_bus, event_pattern=EventPattern(account=[Stack.of(self).account]))

我真的不知道如何使用DynamoAttributeValueMap,因为这只是python中的一个shell,所以我不使用它

即使要运行此程序,我也必须从DynamopulatImprops中删除以下行:

if isinstance(item, dict): item = DynamoAttributeValueMap(**item)

否则,当我尝试运行此操作时,会得到一个“未知关键字参数id”。这有点道理,因为它试图打开一个映射并将其传递给一个不带参数(只带self)的构造函数

一个使用cdk创建step函数以写入dynamodb的简单示例将非常有用

我真的不知道如何实例化那张地图

在本例中,我得到的代码至少生成了cloudformation模板,但该项为空。只是{}

当我尝试做这样的事情,因为我认为这是我应该做的

map = DynamoAttributeValueMap()
map._values = {'id': DynamoAttributeValue().with_s('$.id')}

若要尝试将值强制输入到该映射中,我遇到错误:

TypeError: Don't know how to convert object to JSON: DynamoAttributeValueMap(id=)

那么从this开始,我假设这个代码应该工作:

dynamo_put_task = CallDynamoDB.put_item(item={'id': DynamoAttributeValue().with_s('1234')},
table_name=event_table.table_name, return_values=DynamoReturnValues.ALL_NEW)

这将生成此模板:

 Type: AWS::StepFunctions::StateMachine
    Properties:
      DefinitionString:
        Fn::Join:
          - ""
          - - '{"StartAt":"invoke-notification-service","States":{"invoke-notification-service":{"End":true,"Parameters":{"Item":{},"TableName":"'
            - Ref: events26E65764
            - '","ReturnValues":"ALL_NEW"},"Type":"Task","Resource":"arn:'
            - Ref: AWS::Partition
            - :states:::dynamodb:putItem"}}}
      RoleArn:
        Fn::GetAtt:
          - saveeventRole24A1910F
          - Arn

请注意,该项为空白

当然,这是和

if isinstance(item, dict): item = DynamoAttributeValueMap(**item)

从DynamoPutItemsProps移除

那么有没有bug?只要一个简单的例子就很有用了

我确实怀疑,而且我怀疑可能有一个bug,因为除非我删除那行代码,否则任何东西都不起作用


Tags: nameselfeventidmaptaskput错误