我正在尝试使用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')'
我想念的是什么?
答案 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