首页 > 解决方案 > 在 Amazon Linux 2 上启动时执行 python 脚本

问题描述

我正在尝试在 Amazon Linux 2 实例上执行 python 脚本。在我的user-data部分中,我有一个脚本,它将 python 脚本从 S3 存储桶复制到实例并像这样执行它:

#!/bin/bash

# e - stops the script if there is an error
# x - output every command in /var/log/syslog
set -e -x

# set AWS region
echo "export AWS_DEFAULT_REGION=us-east-1" >> /etc/profile
source /etc/profile
# copy python script from the s3 bucket
aws s3 cp s3://${bucket_name}/ /home/ec2-user --recursive

sudo python3 my_python_script.py

问题是python脚本似乎根本没有被执行。

注意:python 脚本从存储桶中复制得很好

我在这里缺少什么?

更新:检查后/var/log/cloud-init-output.log看起来问题出在python脚本中,找不到boto3模块:

+ python3 /home/ec2-user/my_python_script.py
Traceback (most recent call last):
  File "/home/ec2-user/my_python_script.py", line 1, in <module>
    import boto3
ModuleNotFoundError: No module named 'boto3'
Dec 10 15:52:25 cloud-init[3697]: util.py[WARNING]: Failed running /var/lib/cloud/instance/scripts/part-001 [1]
Dec 10 15:52:25 cloud-init[3697]: cc_scripts_user.py[WARNING]: Failed to run module scripts-user (scripts in /var/lib/cloud/instance/scripts)
Dec 10 15:52:25 cloud-init[3697]: util.py[WARNING]: Running module scripts-user (<module 'cloudinit.config.cc_scripts_user' from '/usr/lib/python2.7/site-packages/cloudinit/config/cc_scripts_user.pyc'>) failed

问题是我确实安装了boto3模块。在创建自定义 AMI 映像之前,我创建了一个自定义 AMI 映像,其中安装了所有模块(我曾经pip3安装它们)

更新2

我验证了该图像确实在库boto3中安装了软件包:python3

[ec2-user@ip-ip ~]$ python3
Python 3.7.9 (default, Aug 27 2020, 21:59:41)
[GCC 7.3.1 20180712 (Red Hat 7.3.1-9)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto3
>>>

更新3

问题的原因是我安装了boto3user唯一的包(即pip3 install boto3 --user),然后我创建了 AMI 映像。因此,将波纹管添加到我的user-data脚本后,它工作正常

#!/bin/bash

...
sudo pip3 install boto3
sudo python3 my_python_script.py

标签: pythonamazon-web-services

解决方案


您可以将输出重定向到一个文件并读取它以查看错误:您是否有 python3,您的实例是否具有访问此存储桶的凭据/角色,您的脚本是否需要任何第三方,您可以尝试运行上面的脚本吗root?本地第一,运行命令应该是python3 /home/ec2-user/my_python_script.py


推荐阅读