Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何将部署包从S3传输到EC2实例以运行python脚本?_Amazon Web Services_Amazon S3_Amazon Ec2_Gitlab_Gitlab Ci - Fatal编程技术网

Amazon web services 如何将部署包从S3传输到EC2实例以运行python脚本?

Amazon web services 如何将部署包从S3传输到EC2实例以运行python脚本?,amazon-web-services,amazon-s3,amazon-ec2,gitlab,gitlab-ci,Amazon Web Services,Amazon S3,Amazon Ec2,Gitlab,Gitlab Ci,这里是AWS初学者 我在GitLab中有一个repo,它有一个python脚本和一个requirements.txt文件,python脚本必须通过GitLab CI部署在EC2 ubuntu实例中(并且脚本必须每天只触发一次)。我正在使用CI创建一个repo的部署包,通过这个包,我正在S3 bucket中部署压缩包。我的.gitlab ci.yml文件: image: ubuntu:18.04 variables: AWS_DEFAULT_REGION: eu-central-1

这里是AWS初学者

我在GitLab中有一个repo,它有一个python脚本和一个
requirements.txt
文件,python脚本必须通过GitLab CI部署在EC2 ubuntu实例中(并且脚本必须每天只触发一次)。我正在使用CI创建一个repo的部署包,通过这个包,我正在S3 bucket中部署压缩包。我的
.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
正如帖子中所建议的那样:。但是这样做,我无法从
requirements.txt
文件安装依赖项

我想知道是否有另一种方法(可能通过使用shell脚本或其他方法)来实现这一点。因为我也在本地使用ubuntu,所以使用putty不是我的选择。

你发布的已经显示了一种方法。即通过使用

因此,您必须开发一个bash脚本,该脚本不仅可以下载链接中所示的zip文件,还可以将其解压缩,并安装
requirements.txt
文件以及您需要的任何其他依赖项或配置设置

因此,您实例的
UserData
如下所示(伪代码,这只是一个粗略的示例):

如果这是您经常做的事情,您可以使用实例设置和
UserData
创建午餐模板,以便为从模板启动的每个实例自动执行这些步骤

还有其他的可能性,包括
CodeDeploy
codepippeline
,但是普通的
UserData
将是一个好的开始

另一种选择是使用。在上传新的s3包之后,将从gitlab触发该命令的执行

下面是如何调用run命令的示例:


您需要编写自己的bash命令来执行,而不是
echo helloWorld

嘿,@Marcin,谢谢您的回复。我了解到,创建实例时,
UserData
只运行一次。如果是,考虑到我对脚本进行了更改并且希望部署这些更改的情况,在这种情况下会发生什么?@reinhardt Hi。遗憾的是,什么都没有。UserData只运行一次。如果您希望在每次进行更改时部署脚本,可以使用CodePipeline,如答案中所述。你也可以使用更容易使用的。基本上,在gitlab.yml中,可以使用aws cli在实例上执行run命令。该命令将运行与userdata基本相同的脚本。感谢您的建议。如果可能,您可以添加一个使用run命令的小示例吗?@reinhardt example added:-)
#!/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
aws ssm send-command \
    --document-name "AWS-RunPowerShellScript" \
    --parameters commands=["echo helloWorld"] \
    --targets Key=tag:Env,Values=Dev,Test