AWS攻略——使用CodeBuild进行自动化构建和部署Lambda(Python)
? ? ? ? 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.2phases:install:runtime-versions:python: 3.7commands:- pip install --upgrade pip- pip install --upgrade awsclipre_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的構建項目中,然后點擊“構建”
總結
以上是生活随笔為你收集整理的AWS攻略——使用CodeBuild进行自动化构建和部署Lambda(Python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AWS攻略——使用CodeBuild进行
- 下一篇: 谈一次单元测试驱动代码重构