使用Terraform基于自定义镜像创建IBM Cloud VSI时遭遇「未找到指定镜像」错误的技术问询
解决Terraform IBM VPC自定义镜像查找失败的问题
首先,你的错误核心原因是把镜像的UUID(唯一ID)当成了显示名称来查询,而非Terraform仅支持公共镜像——IBM VPC的自定义镜像完全可以通过Terraform正常使用,只是你的数据源配置逻辑有误。
为什么会出现No image found错误?
你使用的r010-489ff05b-1494-4a05-8b12-c6f44a958859是自定义镜像的UUID(系统生成的唯一标识),并不是你在IBM Cloud控制台创建镜像时设置的自定义名称。ibm_is_image数据源的name参数需要匹配镜像的显示名称,而非UUID,因此Terraform找不到对应资源。
快速修复方案
根据你的需求,有两种可靠的配置方式:
1. 通过镜像ID直接查询(推荐,更稳定)
修改ibm_is_image数据源,使用id参数指定镜像的UUID,替代原本的name参数:
data "ibm_is_image" "custom_image" { id = "r010-489ff05b-1494-4a05-8b12-c6f44a958859" # 可选:指定区域确保和VPC/子网所在区域一致,避免跨区域查找失败 region = local.REGION } # Virtual Server Instance resource "ibm_is_instance" "vsi1" { name = "${local.BASENAME}-vsi1" vpc = ibm_is_vpc.vpc-instance.id keys = [data.ibm_is_ssh_key.ssh_key_id.id] zone = local.ZONE image = data.ibm_is_image.custom_image.id profile = "cx2-2x4" primary_network_interface { subnet = ibm_is_subnet.subnet1.id security_groups = [ibm_is_security_group.sg1.id] } }
2. 通过镜像显示名称查询
如果你偏好使用名称查询,先登录IBM Cloud控制台的VPC镜像页面,找到该自定义镜像的实际显示名称(比如你创建时输入的my-custom-centos-image),再替换name参数的值:
data "ibm_is_image" "custom_image" { name = "你的自定义镜像显示名称" region = local.REGION }
额外注意事项
- 镜像的区域必须与VPC、子网所在区域完全一致,否则即使ID/名称正确也会查找失败,建议显式指定
region参数确保匹配。 - IBM VPC的Terraform provider支持自定义镜像、共享镜像等所有镜像类型,不存在仅支持公共镜像的限制。
内容的提问来源于stack exchange,提问作者jpsstack
相关产品推荐
相关产品推荐

