EC2 用户数据无法通过 python boto 命令运行

2024-01-01

我正在尝试启动一个实例,并在第一次作为用户数据的一部分启动时运行一个脚本。使用以下代码(python boto3 库):

import boto3
ec2 = boto3.resource('ec2')
instance = ec2.create_instances(DryRun=False, ImageId='ami-abcd1234', MinCount=1, MaxCount=1, KeyName='tde', Placement={'AvailabilityZone': 'us-west-2a'}, SecurityGroupIds=['sg-abcd1234'], UserData=user_data, InstanceType='c3.xlarge', SubnetId='subnet-abcd1234')

我一直在玩弄 user_data 但没有成功。我一直在尝试将某些字符串回显到现有目录中的新文件。以下是我尝试的最新版本。

user_data = '''
    #!/bin/bash
    echo 'test' > /home/ec2/test.txt
    '''

ami 是基于 CentOS 的私有 AMI。我已经在服务器上本地测试了这些命令并使其正常工作。但是当我在用户数据上使用相同的命令(稍微调整以匹配用户数据格式)时,它不起作用。实例启动成功,但我指定的文件不存在。

我查看了其他示例(https://github.com/coresoftwaregroup/boto-examples/blob/master/32-create-instance-enhanced-with-user-data.py https://github.com/coresoftwaregroup/boto-examples/blob/master/32-create-instance-enhanced-with-user-data.py)甚至复制了他们的命令。

感谢您的帮助!谢谢 :)


为了将用户数据识别为脚本,最先字符必须是#!(至少对于 Linux 实例而言)。

然而,你的user_data变量被定义为:

"\n    #!/bin/bash\n    echo 'test' > /home/ec2/test.txt\n    "

你应该这样定义它:

user_data = '''#!/bin/bash
echo 'test' > /tmp/hello'''

其产生:

"#!/bin/bash\necho 'test' > /tmp/hello"

这工作正常。

所以,这是最终产品:

import boto3

ec2 = boto3.resource('ec2')

user_data = '''#!/bin/bash
echo 'test' > /tmp/hello'''

instance = ec2.create_instances(ImageId='ami-abcd1234', MinCount=1, MaxCount=1, KeyName='my-key', SecurityGroupIds=['sg-abcd1234'], UserData=user_data, InstanceType='t2.nano', SubnetId='subnet-abcd1234')

登录后:

[ec2-user@ip-172-31-2-151 ~]$ ls /tmp
hello  hsperfdata_root
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EC2 用户数据无法通过 python boto 命令运行 的相关文章

随机推荐