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