python-3.x - 如何将多个 python 脚本一起部署为多个 aws lambda 函数?
问题描述
AWS初学者在这里
我在 gitlab 上有一个存储库,其中有一个名为automatic_invoice_generator
. 该分支包含以下内容:
- 脚本1.py
- 脚本2.py
- 脚本3.py
- .gitlab-ci.yml
现在,我必须将这三个代码部署为三个不同的 aws lambda 函数。现在,我所做的是从分支、、、、和为每个分支创建 3 个不同的automatic_invoice_generator
分支script1_branch
(我稍微更改了文件以适应特定的脚本)。script2_branch
script3_branch
.gitlab-ci.yml
我的.gitlab-ci.yml
文件Script1.py
看起来如下:
image: ubuntu:latest
variables:
GIT_SUBMODULE_STRATEGY: recursive
LAMBDA_NAME: Script1
AWS_DEFAULT_REGION: eu-central-1
S3_BUCKET: invoice-bucket
stages:
- deploy
production:
stage: deploy
script:
- apt-get -y update
- apt-get -y install python3-pip python3.7 zip
- python3.7 -m pip install --upgrade pip
- python3.7 -V
- pip3.7 install virtualenv
- mv Script1.py ~
- mv csv_data~
- mv requirements.txt ~
# Move submodules
- mv edilite/edilite ~
- mv edilite/pydifact/pydifact ~
# Setup virtual environment
- mkdir ~/forlambda
- cd ~/forlambda
- virtualenv -p python3 venv
- source venv/bin/activate
- pip3.7 install -r ~/requirements.txt -t ~/forlambda/venv/lib/python3.7/site-packages/
# Package environment and dependencies
- cd ~/forlambda/venv/lib/python3.7/site-packages/
- zip -r9 ~/forlambda/archive.zip .
- cd ~
- zip -g ~/forlambda/archive.zip Script1.py
- zip -r ~/forlambda/archive.zip csv_data/*
- zip -r ~/forlambda/archive.zip edilite/*
- zip -r ~/forlambda/archive.zip pydifact/*
# Upload package to S3
# Install AWS CLI
- pip install awscli --upgrade # --user
- export PATH=$PATH:~/.local/bin # Add to PATH
# Configure AWS connection
- aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
- aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
- aws configure set default.region $AWS_DEFAULT_REGION
- aws sts get-caller-identity --output text --query 'Account' # current account
- aws s3 cp ~/forlambda/archive.zip s3://$S3_BUCKET/$LAMBDA_NAME-deployment.zip
我.gitlab-ci.yml
对所有分支 ( script1_branch
, script2_branch
, script3_branch
) 使用相同的文件,只更改脚本的LAMBDA_NAME
和名称。.py
当我.gitlab-ci.yml
为所有 3 个分支运行文件时,代码运行并创建了 3 个不同的 lambda 函数,并且代码运行得非常好。
我想知道是否有一种方法可以修改我的.gitlab-ci.yml
文件,而不是为 3 个不同的脚本(、、、)创建 3 个不同的分支,而是script1_branch
从script2_branch
(script3_branch
比如说)创建一个分支automatic_invoice_generator
并all_scripts_branch
部署所有 3脚本同时作为三个不同的 lambda 函数?
我对 aws 和 gitlab 都有点陌生,因此感谢您的帮助。
解决方案
考虑以下存根.gitlab-ci.yml
,它说明了利用 GitLab CI YAML 锚功能 ( https://docs.gitlab.com/ee/ci/yaml/#anchors ) 来减少代码重复:
image: alpine
variables:
GIT_SUBMODULE_STRATEGY: recursive
AWS_DEFAULT_REGION: eu-central-1
S3_BUCKET: invoice-bucket
stages:
- deploy
.job_template: &job_definition # Hidden key that defines an anchor named 'job_definition'
stage: deploy
script:
- echo zip -g ~/forlambda/archive.zip ${LAMBDA_NAME}.py
- echo aws s3 cp ~/forlambda/archive.zip s3://$S3_BUCKET/${LAMBDA_NAME}-deployment.zip
production1:
variables:
LAMBDA_NAME: Script1
<<: *job_definition # Merge the contents of the 'job_definition' alias
production2:
variables:
LAMBDA_NAME: Script2
<<: *job_definition # Merge the contents of the 'job_definition' alias
参考: - https://docs.gitlab.com/ee/ci/yaml/#anchors - https://gitlab.com/gitlab-org/gitlab-foss/issues/24535
推荐阅读
- json - 如何使用 beanshell 预处理器更新 jmeter 中的 JSON 节点值
- javascript - puppeteer 白色或灰色屏幕截图
- swift - Swift 错误:“EnumName”有一个依赖于自身的原始类型
- javascript - 有没有办法将错误栏添加到 Echarts 库
- html - 为什么没有出现 Django 表单集?
- python - Culebra 测试仪错误:没有名为 culebratester_client.api.default_api 的模块
- excel - 确保用户在大写字母的输入框中输入文本
- botframework - Botbuilder 4. 一个应用服务上的机器人很少
- java - 使用 GSON 和 lambda 过滤 JSON
- python - Holoviews .to 接口:如何根据输入参数对 cmap 和范围进行属性化