问题标签 [rds-data-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
255 浏览

java - AWS Rds 数据 API 失败 software.amazon.awssdk.core.exception.SdkClientException:无法间歇性地加载凭证

我目前在 AWS 有一个 spring boot 批处理作业(不要问我为什么 springboot 这不是我的决定!),即处理文件并通过 aws rds data api 对 rds postgres 执行插入和选择操作(也不是我的决定使用)。我正在使用适用于 java 版本 2.16.74 的 aws sdk 进行rds 数据 api 连接。该文件将包含大量记录,假设文件包含 700 条记录,则在处理文件时对数据 api 的调用会间歇性失败。文件中的每条记录都会创建 3 个数据 api 调用,有时其中一些调用会随机失败,并出现以下错误:

software.amazon.awssdk.core.exception.SdkClientException:无法从链 AwsCredentialsProviderChain(credentialsProviders=[SystemPropertyCredentialsProvider(),EnvironmentVariableCredentialsProvider(),WebIdentityTokenCredentialsProvider(),ProfileCredentialsProvider(),ContainerCredentialsProvider(),InstanceProfileCredentialsProvider 中的任何提供商加载凭据()]) : [SystemPropertyCredentialsProvider(): 无法从系统设置加载凭据。必须通过环境变量 (AWS_ACCESS_KEY_ID) 或系统属性 (aws.accessKeyId) 指定访问密钥。EnvironmentVariableCredentialsProvider():无法从系统设置中加载凭证。必须通过环境变量 (AWS_ACCESS_KEY_ID) 或系统属性 (aws.accessKeyId) 指定访问密钥。WebIdentityTokenCredentialsProvider():

代码 :

任何人都知道此问题的根本原因,execute 语句因此错误而失败并抛出SdkClientException.

Java 版本:java 11 aws coretto 版本。

Springboot:版本 2.2.0.RELEASE

0 投票
0 回答
27 浏览

postgresql - RDS Data API BatchExecute taking significantly longer than standard connection

I have an AWS Lambda function that needs to insert several thousand rows of data into an RDS PostgreSQL database within a Serverless Cluster. Previously I used a normal database connection using psycopg2, but I switched to the RDS Data API in order to improve performance. However, using the Data API, BatchExecute exceeds the 5 minute lambda limit and still fails to commit the transaction in this time. Meanwhile, the psycopg2 solution, which uses a different transfer protocol, inserts all data in under 30 seconds.

Why is this possible? Shouldn't the Data API give superior performance as it doesn't need to establish a connection? Can I change any settings to make the RDS Data API perform suitably?

I don't believe I am reaching any of the data size limits, because the lambda times out rather than explicitly throwing an error. Also, I know that the connection is succeeding, as other small queries are able to execute successfully.

0 投票
0 回答
27 浏览

postgresql - 如何在没有 order by 子句或游标的情况下为我的 REST API 获得稳定的结果集?

我正在创建一个使用 RDS 数据 API 连接到 AWS RDS 实例(Aurora Serverless/Postgres)的 REST API。请求流程:
Client -> API Gateway -> Lambda -> RDS Data API -> RDS

Lambda 将请求映射到通过数据 API 发送到 RDS 的 sql 语句。查询的结果(行)以 json 格式发送回客户端。

我所有的表都有一个索引的主键列。然而,这个主键的值并不总是递增 1,存在间隙。这些表最多可以包含数十亿行。

该解决方案对于较小的表很简单,但对于较大的表,由于数据 API 限制(1 MB 响应大小)和 Lambda 运行时限制(最多 15 分钟),必须实现某种分页。我已经阅读了实现分页的不同方法。唯一合适的方法似乎是基于游标的分页,因为它是唯一可以在不使用order by子句的情况下保证稳定结果集的方法。

但是我不能使用(服务器端)游标,因为当 Lambda 超时时,数据库连接以及游标都会关闭。

我可以使用包含开始值和结束值的 url 参数来过滤表的主键列,但是该列并不总是递增 1。因此,执行类似的操作https://website.com/table/users?start_idx=0&end_idx=100不一定会返回 100 条记录,这是不可取的。

我怎样才能以惯用的方式最好地解决这个问题?