当我使用UserData创建和实例时,我这样做:
_i = ec2.create_instances(
ImageId=my_ami,
MinCount=1,
MaxCount=1,
KeyName=my_key,
InstanceType="t2.small",
UserData=u_data)
然后启动此实例。我ssh到实例,我的UserData文件似乎没有被执行。我使用boto3.set_stream_logger('botocore')
在控制台中记录了所有内容,并检查了UserData参数的base64编码。它看起来像这样:
#!/bin/bash
echo "Hello World" >> /tmp/data.txt
我可以将它复制到ec2实例上的shell文件中,使其可执行,并执行它就好了。我真的很困惑为什么在创建实例时没有应用我的UserData参数。非常感谢任何帮助。
答案 0 :(得分:0)
这很傻,但我发现了问题。当我创建一个字符串变量来保存UserData时,我在shebang之前的文件顶部有一个换行符。 shebang必须是UserData文件的第一行。每天都在学习!
希望这可以帮助有人在路上。
答案 1 :(得分:0)
希望这对其他人有所帮助。
u_data = '''#!/bin/bash
echo "Hello World" >> /tmp/data.txt'''
_i = ec2.create_instances(
ImageId=my_ami,
MinCount=1,
MaxCount=1,
KeyName=my_key,
InstanceType="t2.small",
UserData=u_data) # the script we wrote above