ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-08-28 13:09:41  阅读:203  来源: 互联网

标签:user-data python amazon-ec2


我正在尝试启动一个实例,在第一次作为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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有