【问题标题】:Unable to create a sample VPC using boto. socket.gaierror: [Errno -2] Name or service not known无法使用 boto 创建示例 VPC。 socket.gaierror: [Errno -2] 名称或服务未知
【发布时间】:2016-02-04 21:01:12
【问题描述】:

我是初学者,正在尝试使用 boto 创建 VPC。

 [root@localhost orchestration]# cat create-vpc.py
#!/usr/bin/python

import boto.vpc
import pdb


from boto.vpc import VPCConnection

#c = VPCConnection()

c=boto.vpc.connect_to_region('us-east-1')

vpc = c.create_vpc('10.0.12.0/16')
subnet = c.create_subnet(vpc.id, '10.0.12.1/24')

这是我创建 VPC 的示例脚本。 但是我收到一个错误“gaierror:[Errno -2] Name or service not known”

这是完整的回溯。

Traceback (most recent call last):
  File "create-vpc.py", line 13, in <module>
    vpc = c.create_vpc('10.0.12.0/16')
  File "/usr/lib/python2.7/site-packages/boto/vpc/__init__.py", line 135, in create_vpc
    return self.get_object('CreateVpc', params, VPC)
  File "/usr/lib/python2.7/site-packages/boto/connection.py", line 1192, in get_object
    response = self.make_request(action, params, path, verb)
  File "/usr/lib/python2.7/site-packages/boto/connection.py", line 1116, in make_request
    return self._mexe(http_request)
  File "/usr/lib/python2.7/site-packages/boto/connection.py", line 913, in _mexe
    self.is_secure)
  File "/usr/lib/python2.7/site-packages/boto/connection.py", line 705, in get_http_connection
    return self.new_http_connection(host, port, is_secure)
  File "/usr/lib/python2.7/site-packages/boto/connection.py", line 747, in new_http_connection
    connection = self.proxy_ssl(host, is_secure and 443 or 80)
  File "/usr/lib/python2.7/site-packages/boto/connection.py", line 792, in proxy_ssl
    int(self.proxy_port)), timeout)
  File "/usr/lib64/python2.7/socket.py", line 559, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno -2] Name or service not known

我还为 ~/.boto 文件配置了访问权限和密钥。 仅供参考,

[root@localhost orchestration]# cat ~/.boto
[Credentials]

aws_access_key_id=<my-access-key>
aws_secret_access_key=<my-secret-key>

我还经历了一些其他类似的问题,建议在 /etc/hosts 文件中添加 yun.local 条目。

这是我的 /etc/hosts 文件和 /etc/resolv.conf 文件。

[root@localhost orchestration]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.240.1 yun.local

[root@localhost orchestration]# cat /etc/resolv.conf
# Generated by NetworkManager
search comviva.com
nameserver 172.19.1.10
nameserver 172.19.1.11
nameserver 172.16.1.20
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 172.16.1.22

也是telnet的o/p

[root@localhost orchestration]# telnet yun.local 80
Trying 192.168.240.1...
telnet: connect to address 192.168.240.1: Connection refused

仅供参考,

[root@localhost orchestration]# nslookup ec2.us-east-1.amazonaws.com
Server:         172.19.1.11
Address:        172.19.1.11#53

Name:   ec2.us-east-1.amazonaws.com
Address: 54.239.26.182

[root@localhost orchestration]#
[root@localhost orchestration]#
[root@localhost orchestration]# dig ec2.us-east-1.amazonaws.com

; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7 <<>> ec2.us-east-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24619
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;ec2.us-east-1.amazonaws.com.   IN      A

;; ANSWER SECTION:
ec2.us-east-1.amazonaws.com. 0  IN      CNAME   ec2.amazonaws.com.
ec2.amazonaws.com.      48      IN      A       54.239.20.1

;; Query time: 153 msec
;; SERVER: 172.19.1.10#53(172.19.1.10)
;; WHEN: Tue Nov 17 23:32:12 EST 2015
;; MSG SIZE  rcvd: 90

我还尝试使用 Ansible 创建此 VPC,并且正如预期的那样,那里也出现了相同的错误。 我如何克服这个 gaierror ?任何答案都将不胜感激。

【问题讨论】:

  • 您是否定义了要连接的区域?
  • 是的,我已经在 python 脚本本身中定义了该区域#!/usr/bin/python import boto.ec2 ec2=boto.ec2.connect_to_region('us-east-1') print ec2 ec2.run_instances('ami-0129cc68', key_name='/root/IOX_Key.pem', instance_type='t2.micro', security_groups='sg-08d0ba6d')

标签: python sockets ansible boto amazon-vpc


【解决方案1】:

要在 boto 中创建您的 VPCConnection(或任何服务连接对象),您应该使用以下咒语:

import boto.vpc
c = boto.vpc.connect_to_region('us-east-1')  # or whatever

通过这种方式,您可以保证有一个正确初始化的 VPCConnection 对象指向正确的端点。

【讨论】:

  • 感谢您的建议,但我仍然遇到同样的错误。 File "/usr/lib64/python2.7/socket.py", line 556, in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): socket.gaierror: [Errno -2] Name or service not known [root@localhost 编排]# cat create-vpc.py #!/usr/bin/python import boto.vpc import pdb from boto.vpc import VPCConnection #c = VPCConnection() c=boto.vpc.connect_to_region( 'us-east-1') vpc = c.create_vpc('10.0.12.0/16') 子网 = c.create_subnet(vpc.id, '10.0.12.1/24')
  • 嘿石榴石!我仍然遇到同样的错误。这阻碍了我进一步的 AWS 编排活动。你能推荐点什么吗?
  • 您收到的错误基本上是 DNS 错误。它无法找到与服务端点关联的主机。所以,要么它使用了错误的主机名,要么你的 DNS 工作不正常。你能用你当前的代码更新你原来的问题吗?很难在评论中阅读它。
  • 您的代码似乎是正确的(尽管您可以删除“from boto.vpc import VPCConnection”行,但它什么也没做)。创建连接后可以添加“print(c.host)”吗?主机的价值是什么?它应该是“ec2.us-east-1.amazonaws.com”。是吗?如果是这样,如果您尝试查找该主机会发生什么,例如“nslookup ec2.us-east-1.amazonaws.com”还是“dig ec2.us-east-1.amazonaws.com”?
  • 是的 c.host 的值是 ec2.us-east-1.amazonaws.com 我已经用 nslookup 的 o/p 编辑了这个问题并挖掘!请推荐!!
猜你喜欢
  • 2013-09-24
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
相关资源
最近更新 更多