【发布时间】:2021-07-29 18:48:04
【问题描述】:
问题总结:
- 我们在账户 A 中有一个 AWS Redshift 集群,它有一个名为“产品”的数据库
- 在账户 B 中,我们有一个 lambda 函数,它需要使用 Redshift 数据 API 针对“产品”执行 SQL 语句
- 我们在 AWS Secrets Manager 中设置了一个新的密钥,其中包含红移集群凭证。此密钥已与账户 B 共享。我们已确认账户 B 可以从 AWS Secrets Manager 访问此信息。
当我们调用 Redshift Data API 操作“executeStatement”时,我们会收到以下错误:
ValidationException: Cluster doesn't exist in this region.
at Request.extractError (C:\git\repositories\sandbox\redshift\node_modules\aws-sdk\lib\protocol\json.js:52:27)
at Request.callListeners (C:\git\repositories\sandbox\redshift\node_modules\aws-sdk\lib\sequential_executor.js:106:20)
at Request.emit (C:\git\repositories\sandbox\redshift\node_modules\aws-sdk\lib\sequential_executor.js:78:10)
at Request.emit (C:\git\repositories\sandbox\redshift\node_modules\aws-sdk\lib\request.js:688:14)
at Request.transition (C:\git\repositories\sandbox\redshift\node_modules\aws-sdk\lib\request.js:22:10)
at AcceptorStateMachine.runTo (C:\git\repositories\sandbox\redshift\node_modules\aws-sdk\lib\state_machine.js:14:12)
at C:\git\repositories\sandbox\redshift\node_modules\aws-sdk\lib\state_machine.js:26:10
at Request.<anonymous> (C:\git\repositories\sandbox\redshift\node_modules\aws-sdk\lib\request.js:38:9)
at Request.<anonymous> (C:\git\repositories\sandbox\redshift\node_modules\aws-sdk\lib\request.js:690:12)
at Request.callListeners (C:\git\repositories\sandbox\redshift\node_modules\aws-sdk\lib\sequential_executor.js:116:18)
错误消息表明它可能没有转到正确的帐户,因为秘密包含我希望它知道的这些信息。
代码示例:
这是我的代码:
var redshiftdata = new aws.RedshiftData({ region: 'eu-west-2'});
const params : aws.RedshiftData.ExecuteStatementInput = {
ClusterIdentifier: '<clusteridentifier>',
Database: 'products',
SecretArn: 'arn:aws:secretsmanager:<region>:<accountNo>:secret:<secretname>',
Sql: `select * from product_table where id = xxx`,
StatementName: 'statement-name',
WithEvent: true
};
redshiftdata.executeStatement(params,
async function(err, data){
if (err) console.log(err, err.stack);
else {
const resultParams : aws.RedshiftData.GetStatementResultRequest = { Id: data.Id! };
redshiftdata.getStatementResult(resultParams, function(err, data){
if (err) console.log(err, err.stack);
else console.dir(data, {depth: null});
})
}
});
任何建议或指点将不胜感激。
【问题讨论】:
-
您需要在账户 A 中创建一个可假定的角色,并使用它来调用数据 API。在这个网站上搜索“assume role in javascript”。
-
太好了,谢谢。
标签: amazon-web-services api amazon-redshift