AWS初学者在这里
我在GitLab中有一个回购,其中有一个python脚本和一个requirements.txt
文件,并且该python脚本必须部署在EC2 ubuntu实例中(并且该脚本每天必须触发一次) Gitlab CI。我正在使用CI创建存储库的部署程序包,并通过它在S3存储桶中部署压缩程序包。我的.gitlab-ci.yml
文件:
image: ubuntu:18.04
variables:
AWS_DEFAULT_REGION: eu-central-1
GIT_SUBMODULE_STRATEGY: recursive
S3_TEST_BUCKET: $BUCKET_UNPACK
stages:
- deploy
TestJob:
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 iso_forest_ad.py ~ # This is the python script
- mv requirements.txt ~
# Setup virtual environment
- mkdir ~/forEC2
- cd ~/forEC2
- virtualenv -p python3 venv
- source venv/bin/activate
- pip3.7 install -r ~/requirements.txt -t ~/forEC2/venv/lib/python3.7/site-packages/
# Package environment and dependencies
- cd ~/forEC2/venv/lib/python3.7/site-packages/
- zip -r9 ~/forEC2/archive.zip .
- cd ~
- zip -g ~/forEC2/archive.zip iso_forest_ad.py
- pip install awscli --upgrade
- export PATH=$PATH:~/.local/bin
- aws configure set aws_access_key_id $AWS_TEST_ACCESS_KEY_ID
- aws configure set aws_secret_access_key $AWS_TEST_SECRET_ACCESS_KEY
- aws configure set default.region $AWS_DEFAULT_REGION
- aws s3 cp ~/forEC2/archive.zip $BUCKET_UNPACK/anomaly-detection-deployment.zip
requirements.txt
-i https://pypi.org/simple
joblib==0.16.0; python_version >= '3.6'
numpy==1.19.0
pandas==1.0.5
psycopg2-binary==2.8.5
python-dateutil==2.8.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
pytz==2020.1
scikit-learn==0.23.1
scipy==1.5.1; python_version >= '3.6'
six==1.15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
sqlalchemy==1.3.18
threadpoolctl==2.1.0; python_version >= '3.5'
现在,我想传输脚本并将依赖项安装在ubuntu EC2实例中并运行脚本。
我知道一种方法是连接到EC2实例并执行
aws s3 sync s3://s3-bucket-name/folder /home/ubuntu
如帖子中的建议:Moving files from s3 to EC2 instance。但是这样做,我无法从requirements.txt
文件安装依赖项。
我想知道是否有替代方法(也许通过使用shell脚本或其他方法?)来实现这一目标。由于我也在本地使用ubuntu,因此不建议使用腻子。
答案 0 :(得分:1)
您发布的已经显示的link 方法之一。即使用UserData。
因此,您将必须开发一个 bash脚本,该脚本不仅下载链接中所示的zip文件,而且还要解压缩该文件,并在侧面安装requirements.txt
文件以及您需要的任何其他依赖项或配置设置。
因此您实例的UserData
可能是这样的(伪代码,这只是一个粗糙的示例):
#!/bin/bash
apt update
apt install -y zip awscli python3-pip # awscli is not normally on ubuntu
aws s3 sync s3://optimal-aws-nz-play-config/package.zip .
unzip package.zip
cd package
pip install -r ./requirenements.txt
如果您经常这样做,则可以使用实例设置和UserData
创建午餐模板,以针对从模板启动的每个实例自动执行这些步骤。
还有其他可能性,涉及CodeDeploy
,CodePipeline
,但是普通的旧UserData
是一个好的开始。
替代方法是使用run-command。上传新的s3软件包后,将从gitlab触发命令的执行。
docs中有一个如何调用运行命令的示例:
aws ssm send-command \
--document-name "AWS-RunPowerShellScript" \
--parameters commands=["echo helloWorld"] \
--targets Key=tag:Env,Values=Dev,Test
您必须编写自己的bash命令才能执行,而不是echo helloWorld
。