阿里云SDK研发人员
错误码是MissingParameter
,意思是你的请求 (request)没有设置必选的参数。调用 request.setKey()
方法即可。
要知道如何获取所有ECS ID,可以使用 DescribeInstances
这个API,具体用法可参考: https://help.aliyun.com/document_detail/25506.html
要查询ECS其他API的用法,请参考:https://help.aliyun.com/document_detail/25485.html
要查询其他产品的API用法,请参考:https://developer.aliyun.com/api
阿里云API无需开通,当您注册了阿里云账户,并开通了某个产品(例如云服务器、云数据库等)之后,相应产品的API就自动可用了。
要知道如何使用各产品的API,可以参考相应的产品API文档:https://developer.aliyun.com/api
创建SDK的AcsClient
`时有一个可选参数timeout
,设置方式如下:
client = AcsClient(
"<your-access-key-id>",
"<your-access-key-secret>",
"<your-region-id>",
timeout=10, # 超时时间,单位为秒
);
这个超时时间缺省值为 10秒。 在目前的实现中(以后可能会变),这个参数传给 HTTPConnection
的构造函数 。
当HTTP连接、读写超过这个参数设定的时间后,SDK会抛出异常:
aliyunsdkcore.acs_exception.exceptions.ClientException: SDK.ServerUnreachable Unable to connect server: timed out
简单地回答: 是的。
Python SDK(以及其他许多语言的SDK,例如Java,PHP,.NET等)使用异常作为出错处理方式。当SDK端遇到问题(例如没有提供必要参数),或者服务端返回错误(例如API执行失败),都会抛出异常。可以用以下代码处理异常:
try:
response = client.do_action_with_exception(request)
except ServerException as e:
# ServerException的处理逻辑
pass
except ClientException as e:
# ClientException的处理逻辑
pass
这个问题是因为账单管理
这个产品未在SDK中设置endpoint,导致endpoint解析失败。感谢您的反馈,我们已经将这个问题告知产品同学,将在未来发布新的版本解决这个问题。
要临时地解决你现在的问题,你可以在SDK中强制设定账单管理使用的endpoint即可。根据相关文档的描述,你可以使用 business.aliyuncs.com
这个endpoint。
在Python SDK中设置endpoint的方法:
request.set_endpoint("business.aliyuncs.com")
很抱歉,消息队列还未发布PHP SDK。
API的服务端流控通常是以User ID
为单位的,也就是说,多个人、多个应用程序使用同一个账户向服务端发起请求,服务端会把这些请求数合并计算来判断是否触发流控。可以排查您的同事、团队是否有人在用同一个账号,或者有正在运行的应用程序(包括测试环境或者线上环境)也使用了同一个账号。请注意,多个Access Key
可能关联一个账号。
要查看你所调用的API的具体流控策略(例如每秒多少次),请查看相关产品文档中的API说明。
这个问题的原因是,SDK无法找到该产品(例如ECS,RDS,短信服务)在这个Region上的服务地址(endpoint),分情况解决:
1, 使用其他Region ID
当错误信息中出现这样的附加描述 Or you can use the other available regions: ap-southeast-1 cn-beijing cn-hangzhou ...
时,这表明该产品在其他Region下是有服务地址的。你可以尝试使用描述中的其他 Region ID。
2,升级SDK Core
SDK Core发布(aliyun-java-sdk-core
或aliyun-python-sdk-core
)中包含了服务地址的静态配置。当服务地址更新时,我们会发布新的SDK core来包含新的服务地址。因此升级到最新的SDK Core有可能解决这个问题。
3,直接指定服务地址(Endpoint)
如果你知道你希望使用的服务地址是什么,你可以在程序中直接指定服务地址来绕过这个问题。具体方法是:
Java SDK:
DescribeInstancesRequest request = new DescribeInstancesRequest();
// 对这个请求直接设置Endpoint
request.setEndpoint("你的Endpoint");
DescribeInstancesResponse response = this.client.getAcsResponse(request);
Python SDK:
request = DescribeInstancesRequest()
# 对这个请求直接设置 Endpoint
request.set_endpoint("你的Endpoint")
# 使用这个 Endpoint发起请求
response = self.client.do_action_with_exception(request)
阿里云SDK会根据本地时间发送时间戳到服务端。而服务端会对时间戳进行校验,如果发现时间戳相差太大,则会拒绝请求,并返回 InvalidTimeStamp.Expired
错误。
要修复这个问题,将本地环境(即调用SDK的应用程序所在的机器)的时钟调整准确即可。
阿里云Python SDK,以及其他语言的SDK(例如Java,PHP, .NET, Go, Node.js),在向服务器发送请求时,都会在HTTP请求中加入时间戳(Timestamp
字段)。这个时间戳的生成使用了 UTC+0 时区。
例如,本地时间为 2018年10月9日,13点41分01秒,时区为东八区(中国所处时区),则SDK发送的时间戳将为 2018-10-09T05:41:01Z
。
如果本地(调用SDK的程序所在的机器环境上)的时钟错乱,则将导致时间戳发送到服务端时被拒绝,返回 InvalidTimeStamp.Expired
错误。遇到这种情况时,将本地的时钟调整正确即可。