Moto, как создать экземпляр EC2 - InvalidAMIID.NotFound
Используя moto , как вы можете создать экземпляр EC2, поскольку нет доступных AMI для запуска экземпляра. Это репо, похоже, «предварительно загружает» AMI, которые позже используются в тестах, но я не уверен, как они создаются https://github.com/spulec/moto/blob/master/tests/test_ec2/test_instances.py#L25https://github.com/spulec/moto/blob/master/moto/ec2/resources/amis.json
я пытался позвонить
.describe_images(Owners=["amazon"])
однако все AMI, возвращаемые при использовании в вызове run_instances, дают следующую ошибку.
from moto import mock_ec2
@mock_ec2
def Test_create_ec2():
boto3.client('ec2').run_instances(ImageId="ami-1234abcd", MinCount=1, MaxCount=1)
botocore.exceptions.ClientError: An error occurred (InvalidAMIID.NotFound) when calling the RunInstances operation: The image id '[ami-1234abcd]' does not exist
Эта проблема также связана с нерешенным вопросом Как создать ami с определенным идентификатором изображения с помощью moto?
1 ответ
Призыв к
describe_images
дает список всех доступных ImageId. Следующий тест работает против текущей ветки разработки Moto:
@mock_ec2
def test_all_images():
client = boto3.client("ec2", region_name="us-east-1")
images = client.describe_images(Owners=["amazon"])["Images"]
for image in images:
client.run_instances(ImageId=image["ImageId"], MinCount=1, MaxCount=1)
Предварительно загруженные изображения взяты из этого файла:https://github.com/spulec/moto/blob/master/moto/ec2/resources/amis.json .
Если вы хотите заменить свои собственные AMI, вы можете использовать следующую переменную среды:
MOTO_AMIS_PATH=/full/path/to/amis.json
Этот JSON-файл должен быть в том же формате, что и указанный выше. Обратите внимание, что переменная среды должна быть установлена до того, как Moto будет инициализирован — эти AMI загружаются в тот момент, когда вы вызываете
from moto import mock_ec2
, поэтому переменная среды должна быть установлена до того, как произойдет импорт.