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

EC2用户数据无法通过python boto命令工作,python,amazon-web-services,amazon-ec2,user-data,Python,Amazon Web Services,Amazon Ec2,User Data,我正在尝试启动一个实例,让脚本在第一次作为userdata的一部分启动时运行。使用了以下代码(python boto3库): 我一直在玩弄用户的数据,但没有成功。我一直在尝试向现有目录中的新文件回显一些字符串。下面是我尝试的最新版本 user_data = ''' #!/bin/bash echo 'test' > /home/ec2/test.txt ''' ami是基于CentOS的私有ami。我已经在服务器上本地测试了这些命令,并使它们正常工作。但是当我在u

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

我一直在玩弄用户的数据,但没有成功。我一直在尝试向现有目录中的新文件回显一些字符串。下面是我尝试的最新版本

user_data = '''
    #!/bin/bash
    echo 'test' > /home/ec2/test.txt
    '''
ami是基于CentOS的私有ami。我已经在服务器上本地测试了这些命令,并使它们正常工作。但是当我在userdata上使用相同的命令时(稍微调整以匹配userdata格式),它就不起作用了。实例成功启动,但我指定的文件不存在

我查看了其他示例(),甚至复制了它们的命令


谢谢你的帮助!谢谢:)

要将用户数据识别为脚本,第一个字符必须是
#(至少对于Linux实例)

但是,您的
user\u数据
变量被定义为:

"\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

可能是因为键入了错误的用户路径,所以脚本无法工作

正确的用户路径是
/home/ec2 user
,而不是脚本中假定的
/home/ec2

作为用户数据尝试以下操作:

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

仍然不起作用-我更新了我的用户数据以匹配您的:>>>用户数据=''''.#/bin/bash。。。echo'test'>/tmp/hello''我启动了一台服务器并登录:[root@ip-172-31-26-28 ~#ll-tr/tmp/total 8 drwxr-xr-x 2 elasticsearch elasticsearch 4096 2016年2月16日elasticsearch drwxr-xr-x 2 elasticsearch elasticsearch 4096 2016年2月17日jna--1985354563[root@ip-啦啦队没有解决我的问题。如果你阅读我对你第一个答案的评论,你会发现我尝试了你的建议,但仍然没有奏效。有什么想法吗?如果您通过EC2管理控制台启动并手动输入用户数据,那么用户数据是否适用于该AMI?可能没有为配置AMI。谢谢John!感谢您的跟进。我在卷曲时看到用户数据。不幸的是,它没有执行它(我重新运行了与您在第一个答案中建议的相同的命令)。关于如何为cloud init+配置实例并将其保存为AMI映像的有用链接?如果是这样的话。干杯我在上面添加了一个完整的示例,输出结果表明它是有效的。如果它不适用于您,那么问题在于没有为cloudinit配置AMI。(所有AWS Linux AMI默认配置为cloud init。)我不确定“为cloud init+配置实例,然后将其保存为AMI映像”是什么意思——用户数据不保存在AMI中,而是在实例启动时指定的。或者,您可以将Linux配置为在启动时运行命令,而不涉及用户数据。(请在其他地方搜索以了解如何操作!)
[ec2-user@ip-172-31-2-151 ~]$ ls /tmp
hello  hsperfdata_root