- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在生成 Python 代码来分析 Amazon EC2 提供的各种服务器 AMI 的性能。我目前在尝试通过 ssh 进入我生成的实例时遇到问题。我已经通过他们的网络界面成功地完成了,但不能以编程方式。
下面的代码使用以编程方式生成的安全组和 key 对(保存在本地)生成单个红帽 AMI。在实例运行后,我尝试使用保存的 key 对通过 ssh 进入实例(在它被 chmod 400
'd 之后)但是 ssh 命令卡住,没有产生任何输出。
代码:
#!/usr/bin/env python
import sys
from boto.ec2 import EC2Connection
#Fill in with your respective keys
awsAccessKey = ""
awsSecretKey = ""
#All AMI instance names from the free tier
#In the EC2 panel, goto "instances" -> "launch instance" -> "free tier"
amiNameArr = ["ami-bba18dd2","ami-a25415cb","ami-e8084981","ami-ad184ac4","ami-7527031c"]
#Lets just use a varying set of AMI's
amiDescArr = ["Amazon Linux","Red Hat Enterprise","SUSE Enterprise",
"Ubuntu Server 13.10","Microsoft Server 2012"]
#AMI Instance types, physical machine types that the AMIs run on; ti.micro only free one
#In order of optimizations: Micro, General, Memory, Storage, Compute
amiInstTypesArr = ["t1.micro",
"m1.small","m1.medium","m1.large","m1.xlarge","m3.medium",
"m2.xlarge","m2.2xlarge","m2.4xlarge",
"hi1.4xlarge","hs1.8xlarge",
"c1.medium","c1.large","c3.large","c3.xlarge","c3.2xlarge"]
if __name__ == "__main__":
from time import gmtime, strftime
sessionStart = strftime("h%Hm%Ms%S", gmtime())
#Connect to amazon AWS
print("\nConnectiong to AWS, start time: " + sessionStart)
awsConn = EC2Connection(awsAccessKey, awsSecretKey)
connParms = awsConn.get_params()
print("Connected with access key id: " + str(connParms['aws_access_key_id']))
#Create a key pair for this session
print("Creating key pair...")
keyPairName = "AWSAnalysisKeyPair" + sessionStart
awsKeyPair = awsConn.create_key_pair(keyPairName)
awsKeyPair.save("~")
print("Saved key pair: " + keyPairName)
#Create a security group for all server instances to use
print("Creating security group...")
securityGroupName = "AWSAnalysisSecurityGroup" + sessionStart
securityGroupDesc = "For access and analysis of programmatically spawned machines"
awsSecGroup = awsConn.create_security_group(securityGroupName, securityGroupDesc)
awsSecGroup.authorize('tcp',22,22,'0.0.0.0/0',awsSecGroup)
awsSecGroup.authorize('tcp',80,80,'0.0.0.0/0',awsSecGroup)
#Start spawning new server instances!
#For each AMI, create all machine instance types we can
print("Spawning instances...")
for amiIndx in range(1, 2): #len(amiNameArr)):
print(" AMI description: " + str(amiDescArr[amiIndx]))
for typeIndx in range(0, 1): #len(amiInstTypesArr)):
print(" starting machine: " + str(amiInstTypesArr[typeIndx]))
awsConn.run_instances(
amiNameArr[amiIndx],
instance_type = amiInstTypesArr[typeIndx],
security_groups = [securityGroupName],
key_name = keyPairName,
max_count = 1
)
#We now want to get information about each machine instance so we can analyze it
#conn.get_all_instances() returns a list of Reservation objects
from pprint import pprint
print("All spawned instance information")
reservations = awsConn.get_all_instances()
instances = [i for r in reservations for i in r.instances]
for i in instances:
#pprint(i.__dict__) #Shows all possible instance info
print("- id: " + str(i.__dict__['id']) + "\n"
" image: " + str(i.__dict__['image_id']) + "\n" +
" type: " + str(i.__dict__['instance_type']) + "\n" +
" state: " + str(i.__dict__['state']) + "\n" )
通过查看在线 EC2 界面,我知道我正在生成一个实例并且它正在运行,而且它具有以编程方式生成的 key 对和与之关联的安全组。鉴于它与这两个相关联,我必须弄清楚我的问题在于我如何构建 key 对和安全组。
我是否正确构建了安全组和 key 对?是否有任何其他原因导致我可能无法通过 SSH 连接到这些实例?
我也知道我尝试使用 ssh 访问机器实例是正确的,因为我可以通过从 Web 界面生成实例并通过 ssh 进入它们来成功地做到这一点。
最佳答案
我刚刚测试了您的脚本 - 事实上 - 它没有按预期工作:-)
首先,它在最后一行崩溃。 “状态”信息现在在名为“_state”的属性中返回。因此,您需要将第 76 行更改为:
" state: " + str(i.__dict__['_state']) + "\n" )
其次,您的 key 对、SG 和实例已创建,但如果我们在控制台中查看 SG 定义,您会看到
“来源”是安全组本身的名称。这意味着只有在同一安全组中运行的其他 EC2 实例才能连接到这些端口,而不是您的笔记本电脑。
您不应在 authorize
API 调用中添加 SG 对象。下面修改后的代码将执行此操作:
awsSecGroup.authorize('tcp',22,22,'0.0.0.0/0')
awsSecGroup.authorize('tcp',80,80,'0.0.0.0/0')
我刚刚用上面的两个修改测试了你的脚本,它按预期工作。
$ ssh -i ~/AWSAnalysisKeyPairh09m55s41.pem ec2-user@184.72.84.162
Warning: Permanently added '184.72.84.162' (RSA) to the list of known hosts.
[ec2-user@ip-10-151-40-134 ~]$ uname -a
Linux ip-10-151-40-134 2.6.32-358.14.1.el6.x86_64 #1 SMP Mon Jun 17 15:54:20 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux
[ec2-user@ip-10-151-40-134 ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.4 (Santiago)
--塞布
AWS EMEA 技术讲师
关于python - Amazon ec2 python boto,生成并连接到服务器实例,无法通过 ssh 进入生成的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21518617/
我已经阅读了关于“describe_cluster_snapshots”的解释...... http://docs.pythonboto.org/en/latest/ref/redshift.html
根据 DynamoDB 文档,如果使用受支持的 SDK,导致数据库节流的请求会自动重试。但是,我找不到任何关于 boto 如何处理节流情况的提及。 boto 会自动重试受限请求还是我应该开始捕获 Pr
有没有办法在 SQS 队列中设置消息的消息属性?我正在尝试检查发送到 SQS 队列的消息并更改其值。下面代码的最后一行获取并打印该值。 for message in queue.receive_mes
我无法从文档/示例中确定如何使用 boto 的 dynamodb2 从 DynamoDB 存储/读取二进制数据。它是如何完成的? 我的猜测是项目值类似于 { 'B': binary-data }但这会
我想获取 dynamodb 表的唯一哈希键值列表。我目前知道的唯一方法是扫描整个表,然后迭代扫描。什么是更好的方法? 最佳答案 rs = list(table.scan(range__eq="rang
我正在使用 boto 访问 dynamodb 表。一切顺利,直到我尝试执行扫描操作。 我尝试了在互联网上反复搜索后发现的几种语法,但没有成功: def scanAssets(self, asset):
我正在使用 Boto 库与 AWS 通信。我想禁用日志记录。 (或重定向到/dev/null 或其他文件)。我找不到明显的方法来做到这一点。我试过了,但这似乎没有帮助: import boto bot
这是我尝试将文档上传到云搜索的代码 from boto.cloudsearch2.layer2 import Layer2 conn_config = { 'region': 'us-east
我已经尝试过: connection = S3Connection( aws_access_key_id=settings.AWS_ACCESS_KEY_ID, aws_secret_
我正在编写一个脚本,以确保我们所有的 EC2 实例都有 DNS 条目,并且所有 DNS 条目都指向有效的 EC2 实例。 我的方法是尝试获取我们域的所有资源记录,以便在检查实例名称时可以遍历列表。 但
查看 boto 文档,当您将消息标识符从 SQS 队列中取出时,我没有看到获取消息标识符的方法。谁能提供一些有关我如何获取这些信息的信息? 最佳答案 Message实例应该有一个名为 id 的属性其中
我的python程序的第一行是from boto.s3.connection import S3Connection . 当我执行程序时,输出是“from: can't read/var/mail/b
我在使用 DynamoDB2 API 使用 boto 2.9.5 执行任何单个或批处理查询时遇到问题 我需要做一个这样的批量查询: one_org = Table('[table-name]').ba
我的网站正在使用 Django+Gunicorn+GEvent。 有一个功能,我必须将 Boto 用于 DynamoDB。 我需要调用monkey.patch_all() 来让Boto 变成green
我不断从包含在结构任务中的 boto create_launch_configuration() cmd 返回此错误。 这是命令: if user_data != '': security_group
我想使用 boto 获取 LoadBalancer 上的所有实例,我该如何实现? 这是我到目前为止所得到的: import boto from boto.regioninfo import Regio
标题已经说明问题了。 我正在请求一个带有 boto 的 Spot 实例,如下所示(aws key 和 secret key 是 ~/.boto 中设置的环境变量): import boto conn
我有一个我注册为亚马逊开发者的账户。 (我们称其为 developer 帐户) 我有另一个账户,我将其视为卖家账户(也是亚马逊开发者账户)。 (我们称此为seller 帐户) 我希望我的开发者帐户代表
如果存储桶名称有大写字母,我将无法连接到存储桶。 我有几个桶,里面有大写字母。 >>> mybucket = conn.get_bucket('Vig_import') Traceback (most
Boto在AWS上下文中代表什么?选择api名称似乎是一个随意的单词。是缩写吗?我已尝试使用Google搜索功能,但未发现其含义。 最佳答案 Boto的名称源于对亚马逊河原生海豚类型的葡萄牙语名称。
我是一名优秀的程序员,十分优秀!