编程语言
首页 > 编程语言> > EC2用户数据无法通过python boto命令工作

EC2用户数据无法通过python boto命令工作

作者:互联网

我正在尝试启动一个实例,在第一次作为userdata的一部分启动时运行脚本.使用以下代码(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.我已经在服务器上本地测试了命令并让它们工作.但是当我在userdata上放置相同的命令(略微调整以匹配userdata格式)时,它不起作用.实例成功启动但我指定的文件不存在.

我查看了其他示例(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

标签:user-data,python,amazon-ec2
来源: https://codeday.me/bug/20190828/1752063.html