我已经设置了aws glue crawler,并且已经有数据库填充了我的Glue Data Catalog。 我想使用Web API访问有关数据目录的信息。
例如,我想GetDatabases。
当我使用python boto3 库时,我会获得所有数据库的列表。
import boto3
glue = boto3.client('glue',region_name='us-west-2')
glue.get_databases()
使用 aws-sdk js库时的情况相同
var AWS = require('aws-sdk');
AWS.config.update({region: 'us-west-2'});
var glue = new AWS.Glue();
glue.getDatabases((err,data)=>{
if(err){
console.log(err);
}
console.log(data);
});
我要做的是从Postman调用web api。 邮递员使用AWS凭证创建AWS签名(在授权选项卡下)。
当我使用邮递员描述ec2实例时,它工作正常。 但是,在尝试执行
时,我收到 AccessDeniedExceptionPOST https://glue.us-west-2.amazonaws.com/
Headers: X-Amz-Target: AWSGlue.GetDatabases
Authorization:....
X-Amz-Date:...
Content-Type:multipart/form-data
我错过了一些标题吗?如何调用web api并获取数据库列表?
感谢您的帮助。
答案 0 :(得分:1)
经过大量的反复试验后,我发现标题非常重要
POST / HTTP/1.1
Host: glue.us-west-2.amazonaws.com
X-Amz-Target: AWSGlue.GetDatabases
Content-Type: application/x-amz-json-1.1
X-Amz-Date: 20180425T052803Z
Authorization: AWS4-HMAC-SHA256 Credential=AWS_KEY/20180425/us-west-2/glue/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date;x-amz-target, Signature=f6dfb78d7ee837dc57ce6e13d9fd6ec0631d0c5546f0142ce997bc7e9203c7b7
如果您不想指定任何参数,那么重要的是传递空体({})。