
# 使用云数据库GeminiDB DynamoDB触发器
本节介绍如何通过函数工作流控制台创建云数据库GeminiDB DynamoDB触发器。
#### 云数据库GeminiDB DynamoDB触发器触发事件说明
GeminiDB推出了兼容DynamoDB API的服务，用户可以通过SDK/CLI访问数据库服务。关于GeminiDB兼容DynamoDB接口的详细介绍请参考[GeminiDB兼容DynamoDB接口](https://support.huaweicloud.com/dynamodbug-nosql/nosql_dynamodb_0003.html)。
云数据库GeminiDB DynamoDB作为事件源，通过GeminiDB DynamoDB触发器可实现定时拉取DynamoDB数据库流表信息，并触发函数执行。GeminiDB DynamoDB触发器每秒轮询四次以查找新记录，当出现新的流记录时，将同步调用FunctionGraph函数。
云数据库GeminiDB DynamoDB触发器的示例事件
- 以下为云数据库GeminiDB DynamoDB触发器的示例事件，具体参数解释请参考[表1]。
  ```
  {
       "event_time": 1747905781,
       "trigger_type": "DYNAMODB",
       "instance_ip": "10.0.0.205",
       "table_name": "test_052201",
       "records": [
           {
               "region": "ddbhws",
               "event_id": "000001747880625259000",
               "event_name": "INSERT",
               "sequence_number": "000001747880625259000",
               "size_bytes": 170,
               "stream_view_type": "NEW_AND_OLD_IMAGES",
               "approximate_arrival_timestamp": "2025-05-22T02:23:45.259Z",
               "keys": {
                   "Title": {
                       "S": "test"
                   },
                   "Year": {
                       "N": "2025"
                   }
               },
               "old_image": {
               },
               "new_image": {
                   "Plot": {
                       "S": "plot"
                   },
                   "Rating": {
                       "N": "1"
                   },
                   "Title": {
                       "S": "test"
                   },
                   "Year": {
                       "N": "2025"
                   }
               }
           },
           {
               "region": "ddbhws",
               "event_id": "000001747881021099000",
               "event_name": "MODIFY",
               "sequence_number": "000001747881021099000",
               "size_bytes": 323,
               "stream_view_type": "NEW_AND_OLD_IMAGES",
               "approximate_arrival_timestamp": "2025-05-22T02:30:21.099Z",
               "keys": {
                   "Title": {
                       "S": "test"
                   },
                   "Year": {
                       "N": "2025"
                   }
               },
               "old_image": {
                   "Plot": {
                       "S": "plot"
                   },
                   "Rating": {
                       "N": "1"
                   },
                   "Title": {
                       "S": "test"
                   },
                   "Year": {
                       "N": "2025"
                   }
               },
               "new_image": {
                   "Plot": {
                       "S": "plot"
                   },
                   "Rating": {
                       "N": "2"
                   },
                   "Title": {
                       "S": "test"
                   },
                   "Year": {
                       "N": "2025"
                   }
               }
           }
       ]
   }
  ```
   表1GeminiDB DynamoDB示例事件参数说明 
  | 参数                          | 类型     | 示例值                                                       | 描述                              |
  |:---|:---|:---|:---|
  | EventTime                   | Int    | 1747905781                                                | 触发器拉取完消息时的时间。                   |
  | TriggerType                 | String | DYNAMODB                                                  | 触发器类型。                          |
  | InstanceIp                  | String | 参考示例代码                                                    | DynamoDB的实例IP。                  |
  | TableName                   | String | 参考示例代码                                                    | DynamoDB的表名。                    |
  | Region                      | String | 参考示例代码                                                    | 局点信息。                           |
  | EventId                     | String | 参考示例代码                                                    | 事件ID。                           |
  | EventName                   | String | INSERT \| MODIFY \| REMOVE                                | 事件类名,枚举示例表示分别为插入，更改，删除。         |
  | SequenceNumber              | String | 参考示例代码                                                    | 事件序列号。                          |
  | SizeBytes                   | Int    | 100                                                       | 事件消息大小。                         |
  | StreamViewType              | String | NEW_IMAGE \| OLD_IMAGE \| NEW_AND_OLD_IMAGES \| KEYS_ONLY | 记录方式，枚举示例表示分别为新镜像，旧镜像，新旧镜像，仅主键。 |
  | ApproximateArrivalTimestamp | String | 参考示例代码                                                    | 事件入库时间。                         |
  | Keys                        | Map    | 参考示例代码                                                    | 主键。                             |
  | OldImage                    | Map    | 参考示例代码                                                    | 旧镜像。                            |
  | NewImage                    | Map    | 参考示例代码                                                    | 新镜像。                            |
     
  
 
#### 约束与限制
- GeminiDB DynamoDB触发器当前支持"华北-北京四"。具体运行时函数是否支持使用请以控制台为准。
- GeminiDB DynamoDB触发器支持使用的区域和具体运行时函数请以控制台展示为准。
- 当前默认为每个DynamoDB实例上的每个表对应的流创建最多四个触发器。同一个FunctionGraph函数可以支持由不同表创建的多个DynamoDB触发器，但不允许由同一表创建多个DynamoDB触发器。
- 如果执行函数返回函数错误，FunctionGraph不会重试，同时这部分数据将被丢弃。
- 云数据库GeminiDB DynamoDB触发器调用的请求正文有效负载大小为6MB。
 
#### 前提条件
- **云数据库GeminiDB兼容DynamoDB接口实例：**
  - 已创建GeminiDB兼容DynamoDB接口实例，创建过程请参见[购买GeminiDB兼容DynamoDB接口实例](https://support.huaweicloud.com/dynamodbug-nosql/nosql_dynamodb_0039.html)。
  
  - 请参见[给GeminiDB兼容DynamoDB接口实例设置安全组规则](https://support.huaweicloud.com/dynamodbug-nosql/nosql_dynamodb_0049.html)配置对应的安全组规则。
   

- **函数及其配置：**
  - 已创建函数。
  
  - 已配置函数的VPC权限和"GeminiDB ReadOnlyAccess"委托权限，详情请参见[配置函数的委托权限](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0920.html)。
  
  - 已开启函数访问VPC内资源的网络配置，且为函数配置的VPC需要与云数据库实例配置中的VPC相同，详情请参见[配置函数访问VPC](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0222.html#functiongraph_01_0222__section923421213196)。
   
 
#### 创建GeminiDB DynamoDB触发器
1. 登录[函数工作流控制台](https://console.huaweicloud.com/functiongraph/?locale=zh-cn)，在左侧的导航栏选择"函数 \> 函数列表"。
2. 选择待配置的函数，单击进入函数详情页。
3. 选择"设置 \> 触发器"，单击"创建触发器"，弹出"创建触发器"对话框。 
   图1创建触发器   
   ![](https://support.huaweicloud.com/usermanual-functiongraph/zh-cn_image_0000002327910753.png "点击放大")
   
   
4. 参考[表2]配置触发器参数。
   
    表2GeminiDB DynamoDB触发器参数说明 
   | 参数    | 说明                                                                                                                                                                                                                                                                                                                                                                                                         | 取值样例                             |
   |:---|:---|:---|
   | 触发器类型 | 必选参数。 选择"云数据库 GeminiDB DynamoDB(DYNAMODB)"。                                                                                                                                                                                                                                                                                                                         | 云数据库 GeminiDB DynamoDB(DYNAMODB) |
   | 名称    | 必填参数。 填写触发器的名称。以中文或英文开头，可以包含中文、英文、数字、下划线及中划线，最大长度64位。                                                                                                                                                                                                                                                                                                             | Dynamodb-fg                      |
   | 实例    | 必选参数。 选择已创建的GeminiDB DynamoDB数据库实例。若无实例，可单击"创建实例"完成创建。                                                                                                                                                                                                                                                                                                            | geminidb-fg                      |
   | 用户名   | 必填参数。 填写DynamoDB数据库用户名。只能包含英文字母、数字、下划线及中划线。                                                                                                                                                                                                                                                                                                                         | rwuser                           |
   | 密码    | 必填参数。 填写DynamoDB数据库密码。                                                                                                                                                                                                                                                                                                                                             | GeminiDB-test                    |
   | 表名    | 必填参数。 填写DynamoDB数据库表名。只能包含英文字母、数字、下划线及中划线。                                                                                                                                                                                                                                                                                                                           | table-test                       |
   | 批处理大小 | 必选参数。 输入每批从数据库读取的记录的数量，设置范围：1\~10000。                                                                                                                                                                                                                                                                                                                            | 100                              |
   | 起始位置  | 必选参数。 选择流中开始读取数据的位置，有以下选项： - TRIM_HORIZON：从最早被存储至分区的有效记录开始读取。  - LATEST：从分区中的最新记录开始读取，此设置可以保证总是读到分区中最新记录。   | TRIM_HORIZON                     |
      
   
   
5. 单击"确定"，完成触发器的创建。
 
#### 配置GeminiDB DynamoDB事件触发函数
1. 返回函数工作流控制台，在左侧的导航栏选择"函数 \> 函数列表"。
2. 选择待配置的函数，单击函数名称进入函数详情页。
3. 在函数详情页，选择函数版本。
4. 在"代码"页签下，单击"测试"，弹出"配置测试事件"对话框。
5. 填写如[表3]所示测试信息后，单击"创建"。
   
    表3测试信息 
   | 参数     | 说明                                                                                      |
   |:---|:---|
   | 配置测试事件 | 可创建新的测试事件，也可编辑已有的测试事件。 选择默认值："创建新的测试事件"。        |
   | 事件模板   | 选择空白模板，使用系统内置空白事件模板。                                                                    |
   | 事件名称   | 事件名称必须以大写或小写字母开头，支持字母（大写或小写），数字和下划线"_"（或中划线"-"），并以字母或数字结尾，长度为1-25个字符，例如：Gemini-123test。 |
   | 测试事件   | 自动加载系统内置空白事件模板，本例不做修改。                                                                  |
      
   
   
6. 单击"测试"，可以得到函数运行结果。
 
#### 相关文档
除使用控制台外，函数工作流支持通过API的方式使用函数触发器，详情请参见[函数触发器API参考](https://support.huaweicloud.com/api-functiongraph/FunctionTriggers.html)。
