aws的各种坑-丙
目前项目的配置文件全部托管在gitlab上,每个环境对应一个库,只使用master分支(存个配置文件而已也用不着搞那么多分支)
运维历来这么搞,历史旧债了,我不是运维所以也没动力推动变革
最开始的需求是,研发在更新了dev环境的配置文件并push之后,能在第一时间得到通知
大体思路:dev的config库被push后,gitlab的webhook去call aws的api网关,调lambda,拿到此次push的所有commit,扒出各commit的commitID/在gitlab的URL/增删改过的文件,稍作格式化,丢给钉钉机器人在群里叫一声。看着确实简单。
前面一截都好说,无非就是api网关好像会把收到的header name全部转成小写(这又是另一个坑了)。自己造了个测试事件验出来改改就好了。关键是后面那一截,给钉钉机器人发通知:
一般都是用requests,本来想着这种很common的东西,lambda的运行时应该有的吧,结果很失望,不但没有,还丢了个错误:
1 |
|
搜了一圈下来,找到这么一篇文章, Upcoming changes to the Python SDK in AWS Lambda
大概意思就是手动加一层官方指定的ARN就行了。其中有这么个列表,AWS自己做的lambda layer,各region对应的ARN不同.copy过来凑个版面
Region | ARN |
---|---|
ap-northeast-1 | arn:aws:lambda:ap-northeast-1:249908578461:layer:AWSLambda-Python-AWS-SDK:4 |
us-east-1 | arn:aws:lambda:us-east-1:668099181075:layer:AWSLambda-Python-AWS-SDK:4 |
ap-southeast-1 | arn:aws:lambda:ap-southeast-1:468957933125:layer:AWSLambda-Python-AWS-SDK:4 |
eu-west-1 | arn:aws:lambda:eu-west-1:399891621064:layer:AWSLambda-Python-AWS-SDK:4 |
us-west-1 | arn:aws:lambda:us-west-1:325793726646:layer:AWSLambda-Python-AWS-SDK:4 |
ap-east-1 | arn:aws:lambda:ap-east-1:118857876118:layer:AWSLambda-Python-AWS-SDK:4 |
ap-northeast-2 | arn:aws:lambda:ap-northeast-2:296580773974:layer:AWSLambda-Python-AWS-SDK:4 |
ap-northeast-3 | arn:aws:lambda:ap-northeast-3:961244031340:layer:AWSLambda-Python-AWS-SDK:4 |
ap-south-1 | arn:aws:lambda:ap-south-1:631267018583:layer:AWSLambda-Python-AWS-SDK:4 |
ap-southeast-2 | arn:aws:lambda:ap-southeast-2:817496625479:layer:AWSLambda-Python-AWS-SDK:4 |
ca-central-1 | arn:aws:lambda:ca-central-1:778625758767:layer:AWSLambda-Python-AWS-SDK:4 |
eu-central-1 | arn:aws:lambda:eu-central-1:292169987271:layer:AWSLambda-Python-AWS-SDK:4 |
eu-north-1 | arn:aws:lambda:eu-north-1:642425348156:layer:AWSLambda-Python-AWS-SDK:4 |
eu-west-2 | arn:aws:lambda:eu-west-2:142628438157:layer:AWSLambda-Python-AWS-SDK:4 |
eu-west-3 | arn:aws:lambda:eu-west-3:959311844005:layer:AWSLambda-Python-AWS-SDK:4 |
sa-east-1 | arn:aws:lambda:sa-east-1:640010853179:layer:AWSLambda-Python-AWS-SDK:4 |
us-east-2 | arn:aws:lambda:us-east-2:259788987135:layer:AWSLambda-Python-AWS-SDK:4 |
us-west-2 | arn:aws:lambda:us-west-2:420165488524:layer:AWSLambda-Python-AWS-SDK:5 |
cn-north-1 | arn:aws-cn:lambda:cn-north-1:683298794825:layer:AWSLambda-Python-AWS-SDK:4 |
cn-northwest-1 | arn:aws-cn:lambda:cn-northwest-1:382066503313:layer:AWSLambda-Python-AWS-SDK:4 |
us-gov-west | arn:aws-us-gov:lambda:us-gov-west-1:556739011827:layer:AWSLambda-Python-AWS-SDK:4 |
us-gov-east | arn:aws-us-gov:lambda:us-gov-east-1:138526772879:layer:AWSLambda-Python-AWS-SDK:4 |
(以上信息截止到这篇文章发出都还是准的,后续变化以上面那篇文章里的为准。)
在lambda找到相关函数,点击设计器中相对靠底层的layer,然后点击 __添加层__。在接下来的页面中选择 指定一个ARN ,参照以上列表选择对应region的ARN。
lambda中使用时,导入requests使用该语句: from botocore.vendored import requests
然后就OK了
估计不止requests要这样处理,只是我刚好遇到了这个而已。如果不这样的话,就得自己本地搞到requests的源码,带上自己的代码一起打个zip,甚至丢到s3再发到lambda,复杂度大大增加。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!