AWS lambda and API Gateway in China
AWS上的Lambda 与 API Gateway配合可以迅速搭出一个REST API,在中国情况有一点特殊。
-
登录lambda,创建一个Lambda Function。
-
登录apigateway,创建一个API Gateway,选择Deploy API部署到某个Stage,比如beta。
到这里,如果是在中国以外的地区,现在你只要运行
curl "https://**********.execute-api.cn-north-1.amazonaws.com.cn/beta"
就能看到
"Hello from Lambda!"
但是这里是中国,我们有特色,你得到不一样的东西,是这个,
{"Message":null}
原因在这里,
You cannot open your endpoint without ICP Recordal. It always return 403 {“Message”: null}. Except your function authorize by IAM.
就是说你要么用一个自己已备案的域名,要么加上IAM授权。我没有已备案域名,所以加上IAM授权,如下。
记得点下Deploy API,再来一次
curl "https://**********.execute-api.cn-north-1.amazonaws.com.cn/beta"
这次是下面这个,说明认证生效了。
{"message":"Missing Authentication Token"}
AWS_IAM要求对所有HTTP请求签名以保证安全,就是需要对请求计算hash,加上你的AWS access/secret key再hash,得到一个签名,放到HTTP Authorization头里。你如果能手动得到这个签名,当作Authentication通过curl传给AWS,理论上也是可行的。
awscurl自动化了这个过程,安装awscurl,通过它来调用就好了。
pip install awscurl
awscurl –access_key ******** –secret_key ************** –region=cn-north-1 “https://****.execute-api.cn-north-1.amazonaws.com.cn/beta”