Moto 如何创建 EC2 实例 - InvalidAMIID.NotFound

Moto how to create EC2 instance - InvalidAMIID.NotFound

使用 moto 您如何创建 EC2 实例,因为没有可用于启动实例的 AMI。 这个 repo 似乎是“预加载”稍后在测试中使用的 AMI,但我不确定它们是如何创建的 https://github.com/spulec/moto/blob/master/tests/test_ec2/test_instances.py#L25 https://github.com/spulec/moto/blob/master/moto/ec2/resources/amis.json

我试过调用 .describe_images(Owners=["amazon"]),但是,在 run_instances 调用中使用时返回的所有 AMI 都出现以下错误。

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

此问题还涉及未解决的问题How to create ami with specific image-id using moto?

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-file 必须与上面链接的格式相同。 请注意,必须在初始化 Moto 之前设置环境变量 - 这些 AMI 在您调用 from moto import mock_ec2 时加载,因此必须在导入之前设置环境变量。