我想使用aws-sdk for Javascript获得EC2实例的公共IP。执行以下代码后,返回给出{ Reservations: [] }
。
'use strict';
const AWS = require('aws-sdk');
AWS.config.loadFromPath('./aws.json');
AWS.config.update({ region: 'ap-northeast-1' });
const ec2 = new AWS.EC2({ apiVersion: '2016-11-15' });
const params = {
Filters: [
{
Name: 'ip-address',
Values: [
'ip-address'
]
}
],
InstanceIds: [
"i-0acf483a5cbdfdbeb"
]
};
ec2.describeInstances(params, function (err, data) {
if (err) {
console.log(err);
}
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
使用的凭据已在IAM上经过验证,并被允许访问EC2实例。为什么不能获取其公共IP?
节点:7.1.0
作业系统:CentOS 7.3 / Windows 10
我的 API 服务器具有从请求标头获取令牌的中间件。如果访问正确,则执行下一个功能。
但是请求去了中间件,然后去了下一个函数,c.Request.Body
变成了0
。
中间件
func getUserIdFromBody(c *gin.Context) (int) {
var jsonBody User
length, _ := strconv.Atoi(c.Request.Header.Get("Content-Length"))
body := make([]byte, length)
length, _ = c.Request.Body.Read(body)
json.Unmarshal(body[:length], &jsonBody)
return jsonBody.Id
}
func CheckToken() (gin.HandlerFunc) {
return func(c *gin.Context) {
var userId int
config := model.NewConfig()
reqToken := c.Request.Header.Get("token")
_, resBool := c.GetQuery("user_id")
if resBool == false {
userId = getUserIdFromBody(c)
} else {
userIdStr := c.Query("user_id")
userId, _ = strconv.Atoi(userIdStr)
}
...
if ok {
c.Nex()
return …
Run Code Online (Sandbox Code Playgroud)