使用Python管理AWS

时间:2018-10-12 20:53:09

标签: python amazon-web-services amazon-ec2 instance

我正在尝试使用Python创建EC2实例,但我不断遇到这些错误。

这是我的代码:

#!/usr/bin/env python
import boto3
ec2 = boto3.resource('ec2')
instance = ec2.create_instances(
    ImageId='ami-0922553b7b0369273',
    MinCount=1,
    MaxCount=1,
    InstanceType='t2.micro')
print instance[0].id

这是我遇到的错误

Traceback (most recent call last):
  File "./createinstance.py", line 8, in <module>
    InstanceType='t2.micro')
  File "/usr/lib/python2.7/site-packages/boto3/resources/factory.py", line 520, in do_action
    response = action(self, *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/boto3/resources/action.py", line 83, in __call__
    response = getattr(parent.meta.client, operation_name)(**params)
  File "/usr/lib/python2.7/site-packages/botocore/client.py", line 320, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/lib/python2.7/site-packages/botocore/client.py", line 623, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (InvalidAMIID.NotFound) when calling the RunInstances operation: The image id '[ami-0922553b7b0369273]' does not exist

尝试创建密钥对时也会出现错误

这是我用于创建密钥对的代码

  import boto3
ec2 = boto3.resource('ec2')

# create a file to store the key locally
outfile = open('ec2-keypair.pem','w')

# call the boto ec2 function to create a key pair
key_pair = ec2.create_key_pair(KeyName='ec2-keypair')

# capture the key and store it in a file
KeyPairOut = str(key_pair.key_material)
print(KeyPairOut)
outfile.write(KeyPairOut)

response = ec2.instance-describe()
print response

这是错误消息

./createkey.py: line 1: import: command not found
./createkey.py: line 2: syntax error near unexpected token `('
./createkey.py: line 2: `ec2 = boto3.resource('ec2')'

我想念的是什么?

1 个答案:

答案 0 :(得分:1)

对于您的第一个脚本,可能会出现以下两种可能性之一: 1.您通过ID引用的AMI不可用,因为密钥不正确或AMI不存在 2.在您设置机器的区域中,AMI不可用

您很可能正在从未配置正确区域的计算机上运行脚本。如果在本地或未配置角色的服务器上运行脚本,并且正在使用aws-cli,则可以运行aws configure命令来适当配置访问密钥和区域。如果您在配置了角色的服务器上运行实例,则需要在正确的区域中运行服务器,并且您的角色需要允许访问EC2 AMI。

对于第二个问题(将来可能会单独发布),脚本中的语法错误是不遵循相同格式编写第一个脚本的副作用。实际上,您的python脚本很可能没有被解释为python脚本。您应该在文件顶部添加shebang,并删除import boto3语句前的空格。

#!/usr/bin/env python
import boto3
# create a file to store the key locally
outfile = open('ec2-keypair.pem','w')

# call the boto ec2 function to create a key pair
key_pair = ec2.create_key_pair(KeyName='ec2-keypair')

# capture the key and store it in a file
KeyPairOut = str(key_pair.key_material)
print(KeyPairOut)
outfile.write(KeyPairOut)

response = ec2.instance-describe()
print response