首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AWS攻略——使用CodeBuild进行自动化构建和部署Lambda(Python)

AWS攻略——使用CodeBuild进行自动化构建和部署Lambda(Python)

作者头像
方亮
发布2020-06-16 16:21:58
2K0
发布2020-06-16 16:21:58
举报
文章被收录于专栏:方亮方亮方亮

        Aws Lambda是Amazon推出的“无服务架构”服务。我们只需要简单的上传代码,做些简单的配置,便可以使用。而且它是按运行时间收费,这对于低频访问的服务来说很划算。具体的介绍可以常见aws lambda的官网。(转载请指明出于breaksoftware的csdn博客)

        比较正统的方法是使用Aws CloudFormation方案,但是鉴于这个方案过于复杂,所以我们还是借助CloudBuild的自定义命令来解决。

        本文适用于熟悉在Aws Lambda人工部署python代码,而不熟悉自动化部署的同学。

创建Lambda函数  

        因为我们只是涉及“部署”,所以我们需要先手工在us-east-1(我们的生产环境)上创建一个Lambda函数。

        我们选用python3.7,函数名为jobs_manager

        最后记得将入口函数的路径和函数名给指定正确。

创建S3存储桶

        我们做python开发时,往往需要引入其他第三方库。Aws Lambda让我们通过配置函数的“层”(layer)来配置这些引入。如果是手工部署,我们需要把这些库压缩到python.zip的文件中,然后在Lambda层中创建一个层并上传,最后在函数设置中引入。

        当我们使用自动化部署方案时,我们可以将压缩的层文件保存到S3中,然后配置给对应函数。这样我们就需要新建一个存储桶。

        给桶的名字取名规则是:“可用区”-layers-of-lambda。因为我们将“生产”和“测试”环境部署在不同的可用区中,所以可以通过配置不同的可用区来对同一套代码进行分区部署。(具体看之后介绍的buildspec.yml和CodeBuild设置)

创建CodeBuild工程

        创建过程和《AWS攻略——使用CodeBuild进行自动化构建和部署静态网页》类似,同样需要设置下环境变量REGION的值为us-east-1,这样之后的buildspec.yml将可以使用到该值做“生产”和“测试”环境区分。

        同时记下角色名

修改IAM

        在IAM中找到上步的角色名称,修改其策略。

        为简单起见,我们给与S3所有资源的所有权限。(不严谨)

        还要新增lambda权限,也是所有资源所有权限。(不严谨)

创建Buildspec.yml文件

        该文件放置在项目(我们的项目名叫apollo)的根目录下。

version: 0.2

phases:
  install:
    runtime-versions:
      python: 3.7
    commands:
      - pip install --upgrade pip
      - pip install --upgrade awscli

  pre_build:
    commands:
  
  build:
    commands:
      - pip install -r requirements.txt -t ./python
      - zip layer_apollo.zip -r python/
      - aws s3 cp layer_apollo.zip --region $REGION s3://$REGION-layers-of-lambda/layer_apollo.zip
      - layer_version=$(aws lambda publish-layer-version --region $REGION --layer-name apollo --description "apollo layer" --license-info "MIT" --content S3Bucket=$REGION-layers-of-lambda,S3Key=layer_apollo.zip --compatible-runtimes python3.7 | jq '.LayerVersionArn' | sed 's/\"//g')
      - echo $layer_version

      - update_jobs_manager_layer_cmd='aws lambda update-function-configuration --region '$REGION' --function-name jobs_manager --layers '$layer_version
      - echo $update_jobs_manager_layer_cmd
      - $update_jobs_manager_layer_cmd

      - zip apollo.zip -r aws/ conf/ jobs_manager/ kvdb/ modules/ rollback_sqs/ proto/ services/ sqs/ utils/ 
      - aws lambda --region $REGION update-function-code --function-name jobs_manager --zip-file fileb://apollo.zip

        第6行指明我们需要使用python3.7的环境。

        第8,9行,让构建环境先更新pip和aws的工具awscli。

        第16行,我们将项目依赖都装到构建环境的python目录下。requestments.txt是通过下面指令生成的,但是需要手工剔除包含版本是0.0.0的库,否则之后部署会报错。

pip freeze >requestments.txt

        第17,18行将依赖打包并上传到之前步骤创建的S3上。

        第19行将S3上的依赖包发布到lambda的层上,并获取期版本号。

        第22~24将更新lambda函数层的版本号。

        第26,27行将项目打包并更新到lambda函数中。

构建

        进入之前创建的apollo_online的构建项目中,然后点击“构建”

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建Lambda函数  
  • 创建S3存储桶
  • 创建CodeBuild工程
  • 修改IAM
  • 创建Buildspec.yml文件
  • 构建
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档