OCI CLI/Terraform创建uk-london-1实例报AD无法从请求推断错误
问题根因
该报错为误导性参数校验提示,与填写的可用域(AD)参数无关,核心问题是传入的--image-id参数值不符合接口要求:
- OCI所有
*-id类参数(含image-id、subnet-id、compartment-id等)均要求传入以ocid1.开头的资源唯一OCID标识,当前传入的Canonical-Ubuntu-22.04-2022.06.16-0是镜像显示名,不属于合法的镜像OCID。 - OCI后端校验逻辑会优先校验目标镜像与传入AD的适配关系,当传入的镜像ID不存在、无法匹配到对应镜像资源时,无法完成镜像-AD的映射校验,就会抛出"AvailabilityDomain could not be inferred from the Request"错误,不会直接提示image-id参数非法,极易误导排查方向。
参照Terraform教程操作时出现同类报错,触发原因完全一致。
修复步骤
1. 获取目标镜像的合法OCID
执行以下命令查询uk-london-1区域Canonical官方Ubuntu 22.04对应版本镜像的OCID:
oci compute image list \ --compartment-id <你的租户根compartment OCID> \ --operating-system "Canonical Ubuntu" \ --operating-system-version "22.04" \ --region uk-london-1
从返回的结果列表中,找到display-name为Canonical-Ubuntu-22.04-2022.06.16-0的条目,其对应的id字段值(ocid1.image.oc1.uk-london-1.xxxx格式)就是合法的image-id参数值。
如果熟悉JMESPath语法,可以加上查询参数直接过滤输出结果:
oci compute image list \ --compartment-id <你的租户根compartment OCID> \ --operating-system "Canonical Ubuntu" \ --operating-system-version "22.04" \ --region uk-london-1 \ --query 'data[?"display-name"==`Canonical-Ubuntu-22.04-2022.06.16-0`].id | [0]' \ --raw-output
2. 修正CLI实例启动命令
将原命令中--image-id后的镜像显示名替换为上一步获取到的真实镜像OCID即可,修正后的命令结构如下:
oci compute instance launch \ --availability-domain lMrS:UK-LONDON-1-AD-1 \ --compartment-id <你的compartment OCID> \ --shape VM.Standard.E2.1.Micro \ --subnet-id <你的子网OCID> \ --image-id <查询到的镜像OCID> \ --region uk-london-1
命令末尾追加--region uk-london-1是为了强制指定操作区域,避免本地CLI默认区域配置与目标区域不一致触发额外校验错误。
3. Terraform场景修复
检查oci_core_instance资源块中source_details配置下的image_id字段,确保传入的是镜像OCID而非显示名。推荐使用OCI官方数据源动态查询镜像OCID,避免硬编码错误值,参考配置如下:
data "oci_core_images" "ubuntu_2204" { compartment_id = "<你的租户根compartment OCID>" operating_system = "Canonical Ubuntu" operating_system_version = "22.04" region = "uk-london-1" filter { name = "display_name" values = ["Canonical-Ubuntu-22.04-2022.06.16-0"] } } resource "oci_core_instance" "test_vm" { availability_domain = "lMrS:UK-LONDON-1-AD-1" compartment_id = "<你的compartment OCID>" shape = "VM.Standard.E2.1.Micro" source_details { source_type = "image" image_id = data.oci_core_images.ubuntu_2204.images[0].id } # 其余子网、SSH密钥、元数据等配置按实际需求补充 }
额外排查点
如果替换为正确镜像OCID后仍然报错,按以下顺序校验配置:
- 确认传入的subnet-id属于
uk-london-1区域,且与所选AD的网络拓扑匹配,跨区域子网会触发同类校验错误 - 确认当前账号拥有所选compartment下的实例创建、子网使用权限,权限不足时偶尔也会抛出该类误导性提示
- 确认VM.Standard.E2.1.Micro规格在所选AD下有可用资源,免费额度的Micro规格存在单AD售罄的可能,但该场景一般会返回容量不足类错误,优先级低于前两项检查
内容的提问来源于stack exchange,提问作者JLevconoks
相关产品推荐
相关产品推荐

