Использование Python для управления AWS - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь использовать 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 голосов
/ 13 октября 2018

Для вашего первого сценария может возникнуть одна из двух возможностей: 1. AMI, на который вы ссылаетесь по идентификатору, недоступен, так как ключ неверен или AMI не существует 2. AMI недоступен в регионе, гдеваша машина настроена на

Скорее всего, ваш скрипт запускается с машины, которая не настроена для правильного региона.Если вы запускаете сценарий локально или на сервере, для которого роли не настроены, и вы используете aws-cli , вы можете запустить команду aws configure, чтобы соответствующим образом настроить ключи доступа и регион.Если вы запускаете свой экземпляр на сервере с настроенными ролями, ваш сервер должен быть запущен в правильном регионе, а ваши роли должны разрешать доступ к AMI EC2.

Что касается вашего второго вопроса (который в будущем, вероятно, будет опубликован отдельно), ваша синтаксическая ошибка в вашем сценарии является побочным эффектом несоблюдения того же формата, в котором вы написали свой первый сценарий.Скорее всего, ваш скрипт 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
...