镜像
所有文档
menu

云服务器 BCC

镜像

产品详情自助选购

创建自定义镜像

  • 该接口用于创建自定义镜像,默认配额每账号每地域20个,创建后的自定义镜像可用于创建实例。
  • 支持通过实例创建和通过快照创建两种方式。
  • 当通过实例创建时,只有 Running 或 Stopped 状态的实例才可以执行成功,否则会提示 409 错误。
  • 仅限通过系统盘快照创建自定义镜像。
  • 当通过快照创建时,只有 Available 状态的快照才可以执行成功,否则会提示 409 错误
package main
import (
	"fmt"
	"github.com/baidubce/bce-sdk-go/services/bcc"
	"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
	// 设置您的ak、sk和要访问的endpoint
	ak := "ak"
	sk := "sk"
	endpoint := "http://bcc.bj.baidubce.com"
	// 创建bcc client
	bccClient, _ := bcc.NewClient(ak, sk, endpoint)
	// 待创建的自定义镜像名称,支持大小写字母、数字、中文以及-_ /.特殊字符,必须以字母开头,长度1-65。
	imageName := "image02"
	// 当从快照创建镜像时,此参数是指用于创建镜像的快照ID。可选参数,与 snapshotId 不同时存在,同时存在时只取instanceId
	snapshotId := "m-***"
	// 当从实例创建镜像时,此参数是指用于创建镜像的实例ID。可选参数,与 snapshotId 不同时存在,同时存在时只取instanceId
	instanceId := "i-***"
	// 是否关联CDS,默认为false
	relateCds := false
	args := &api.CreateImageArgs{
		SnapshotId:  snapshotId,
		IsRelateCds: relateCds,
		ImageName:   imageName,
		InstanceId:  instanceId,
	}
	resp, err := bccClient.CreateImage(args)
	fmt.Println(resp, err)
}

注意,创建自定义镜像,默认配额每账号每地域20个。

查询镜像列表

  • 使用以下代码可以查询有权限的镜像列表。
  • 查询的镜像信息中包括公共镜像、自定义镜像和服务集成镜像。
  • 支持按 imageType 来过滤查询,此参数非必需,缺省为 All,即查询所有类型的镜像。
  • 支持按 imageName 来过滤查询自定义镜像,返回名称中包含该字符串的镜像。此参数非必需,设定ImageName时,必须同时指定ImageType为'Custom'。
package main

import (
	"fmt"
	"github.com/baidubce/bce-sdk-go/services/bcc"
	"github.com/baidubce/bce-sdk-go/services/bcc/api"
)

func main() {
	// 设置您的ak、sk和要访问的endpoint
	ak := "ak"
	sk := "sk"
	endpoint := "http://bcc.bj.baidubce.com"
	// 创建bcc client
	bccClient, _ := bcc.NewClient(ak, sk, endpoint)

	createInstanceArgs := &api.ListImageArgs{
		// 镜像类型
		ImageType: "ALL", 
	}
	images, err := bccClient.ListImage(createInstanceArgs)
	fmt.Println(err)
	fmt.Println(images)
}

具体的镜像类型可详细参考BCC API文档查询镜像列表

查询镜像详情

以下代码可以查询镜像详细信息:

package main

import (
	"fmt"
	"github.com/baidubce/bce-sdk-go/services/bcc"
)

func main() {
	// 设置您的ak、sk和要访问的endpoint
	ak := "ak"
	sk := "sk"
	endpoint := "http://bcc.bj.baidubce.com"
	// 创建bcc client
	bccClient, _ := bcc.NewClient(ak, sk, endpoint)

	imageId := "m-***"
	imageDetail, err := bccClient.GetImageDetail(imageId)
	fmt.Println(err)
	fmt.Println(imageDetail.Image)
}

删除自定义镜像

  • 该接口用于删除用户指定的自定义镜像,仅限自定义镜像,公共镜像和服务集成镜像不能删除。
  • imageId 所指定的镜像不存在,提示404错误。
  • 镜像删除后无法恢复,不能再用于创建、重置实例。

以下代码可以删除一个自定义镜像:

package main

import (
	"fmt"
	"github.com/baidubce/bce-sdk-go/services/bcc"
)

func main() {
	// 设置您的ak、sk和要访问的endpoint
	ak := "ak"
	sk := "sk"
	endpoint := "http://bcc.bj.baidubce.com"
	// 创建bcc client
	bccClient, _ := bcc.NewClient(ak, sk, endpoint)

	imageId := "m-***"
	err := bccClient.DeleteImage(imageId)
	fmt.Println(err)
}

跨地域复制自定义镜像

  • 用于用户跨地域复制自定义镜像,仅限自定义镜像,公共镜像和服务集成镜像不能复制。
  • regions如北京"bj",广州"gz",苏州"su",可多选:
package main

import (
	"fmt"
	"github.com/baidubce/bce-sdk-go/services/bcc"
	"github.com/baidubce/bce-sdk-go/services/bcc/api"
)

func main() {
	// 设置您的ak、sk和要访问的endpoint
	ak := "ak"
	sk := "sk"
	endpoint := "http://bcc.bj.baidubce.com"
	// 创建bcc client
	bccClient, _ := bcc.NewClient(ak, sk, endpoint)

	imageId := "m-***"
	destinations := &api.RemoteCopyImageArgs{
		Name:       "new-image",
		DestRegion: []string{"hkg"},
	}
	err := bccClient.RemoteCopyImage(imageId, destinations)
	fmt.Println(err)
}

跨地域复制自定义镜像并返回目的region的镜像镜像ID

  • 用于用户跨地域复制自定义镜像,仅限自定义镜像,公共镜像和服务集成镜像不能复制。
  • regions如北京"bj",广州"gz",苏州"su",可多选:
package main

import (
	"fmt"
	"github.com/baidubce/bce-sdk-go/services/bcc"
	"github.com/baidubce/bce-sdk-go/services/bcc/api"
)

func main() {
	// 设置您的ak、sk和要访问的endpoint
	ak := "ak"
	sk := "sk"
	endpoint := "http://bcc.bj.baidubce.com"
	// 创建bcc client
	bccClient, _ := bcc.NewClient(ak, sk, endpoint)

	imageId := "m-***"
	destinations := &api.RemoteCopyImageArgs{
		Name:       "new-image",
		DestRegion: []string{"hkg"},
	}
	imageCopyResult, err := bccClient.RemoteCopyImageReturnImageIds(imageId, destinations)
	fmt.Println(err)
	fmt.Println(imageCopyResult)
}

取消跨地域复制自定义镜像

以下代码用于取消跨地域复制自定义镜像:

package main

import (
	"fmt"
	"github.com/baidubce/bce-sdk-go/services/bcc"
)

func main() {
	// 设置您的ak、sk和要访问的endpoint
	ak := "ak"
	sk := "sk"
	endpoint := "http://bcc.bj.baidubce.com"
	// 创建bcc client
	bccClient, _ := bcc.NewClient(ak, sk, endpoint)

	imageId := "m-***"
	err := bccClient.DeleteImage(imageId)
	fmt.Println(err)
}

共享自定义镜像

  • 该接口用于共享用户自己的指定的自定义镜像,仅限自定义镜像,公共镜像和服务集成镜像不能共享。
  • imageId 所指定的镜像不存在,提示404错误。
  • 镜像共享后,被共享的用户可以使用此镜像创建、重置实例。
  • 请求参数中的account和accountId均为可选参数,但不能全部为空,当两个参数同时出现时,服务端会自动去重。
package main

import (
    "fmt"
    "github.com/baidubce/bce-sdk-go/services/bcc"
    "github.com/baidubce/bce-sdk-go/services/bcc/api"
)

func main() {
    // 设置您的ak、sk和要访问的endpoint
    ak := "ak"
    sk := "sk"
    endpoint := "bcc.bj.baidubce.com"
    // 创建bcc client
    bccClient, _ := bcc.NewClient(ak, sk, endpoint)

    ShareImageId := "m-***"

	// 请求将镜像分享给指定用户id
	args := &api.SharedUser{
		// 账号ID
		AccountId: "***",     
	}
	err := bccClient.ShareImage(ShareImageId, args)
	fmt.Println(err)
}

取消共享自定义镜像

  • 该接口用于取消共享用户自己的指定的自定义镜像,仅限自定义镜像,公共镜像和服务集成镜像不能共享。
  • imageId 所指定的镜像不存在,提示404错误。
  • 镜像取消共享后,被取消共享的用户不能再使用此镜像创建、重置实例。
  • 请求参数中的account和accountId均为可选参数,但不能全部为空,当两个参数同时出现时,服务端会自动去重。
package main

import (
    "fmt"
    "github.com/baidubce/bce-sdk-go/services/bcc"
    "github.com/baidubce/bce-sdk-go/services/bcc/api"
)

func main() {
    // 设置您的ak、sk和要访问的endpoint
    ak := "ak"
    sk := "sk"
    endpoint := "bcc.bj.baidubce.com"
    // 创建bcc client
    bccClient, _ := bcc.NewClient(ak, sk, endpoint)

    UnShareImageId := "m-***"

	// 请求取消将镜像分享给指定用户id
	args := &api.SharedUser{
		// 账号ID
		AccountId: "***", 
	}
	err := bccClient.UnShareImage(UnShareImageId, args)
	fmt.Println(err)
}

查询镜像已共享用户列表

  • imageId 所指定的镜像不存在,提示404错误。 如下代码用于查询镜像已共享的用户列表:
package main
import (
	"fmt"
	"github.com/baidubce/bce-sdk-go/services/bcc"
)
func main() {
	// 设置您的ak、sk和要访问的endpoint
	ak := "ak"
	sk := "sk"
	endpoint := "http://bcc.bj.baidubce.com"
	// 创建bcc client
	bccClient, _ := bcc.NewClient(ak, sk, endpoint)
	// 镜像id
    imageId := "m-***" 
	result, err := bccClient.GetImageSharedUser(imageId)
	fmt.Println(result)
	fmt.Println(err)
}

根据实例ID批量查询OS信息

如下代码可以根据实例的ID来查询相应OS的信息:

package main
import (
	"fmt"
	"github.com/baidubce/bce-sdk-go/services/bcc"
	"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
	// 设置您的ak、sk和要访问的endpoint
	ak := "ak"
	sk := "sk"
	endpoint := "http://bcc.bj.baidubce.com"
	// 创建bcc client
	bccClient, _ := bcc.NewClient(ak, sk, endpoint)

	args := &api.GetImageOsArgs{
		// 实例ID列表
		InstanceIds: []string{"i-***", "i-***"}, 
	}
	result, err := bccClient.GetImageOS(args)
	fmt.Println(result)
	fmt.Println(err)
}

镜像绑定标签

使用以下代码可以给指定镜像绑定标签:

package main
import (
	"fmt"
	"github.com/baidubce/bce-sdk-go/model"
	"github.com/baidubce/bce-sdk-go/services/bcc"
	"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
	// 设置您的ak、sk和要访问的endpoint
	ak := "ak"
	sk := "sk"
	endpoint := "http://bcc.bj.baidubce.com"
	// 创建bcc client
	bccClient, _ := bcc.NewClient(ak, sk, endpoint)
	args := &api.BindTagsRequest{
		ChangeTags: []model.TagModel{
			{
				// 标签键
				TagKey:   "Key***",
				// 标签值
				TagValue: "Value***",
			},
			{
				// 标签键
				TagKey:   "Key***",
				// 标签值
				TagValue: "Value***",
			},
		},
	}

	result := bccClient.BindImageToTags("m-***", args)
	fmt.Println(result)
}

镜像解绑标签

使用以下代码可以给指定镜像绑定标签:

package main
import (
	"fmt"
	"github.com/baidubce/bce-sdk-go/model"
	"github.com/baidubce/bce-sdk-go/services/bcc"
	"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
	// 设置您的ak、sk和要访问的endpoint
	ak := "ak"
	sk := "sk"
	endpoint := "http://bcc.bj.baidubce.com"
	// 创建bcc client
	bccClient, _ := bcc.NewClient(ak, sk, endpoint)
	args := &api.UnBindTagsRequest{
		ChangeTags: []model.TagModel{
			{
				// 标签键
				TagKey:   "Key***",
				// 标签值
				TagValue: "Value***",
			},
		},
	}
	err := bccClient.UnBindImageToTags(
		// 镜像Id
		"m-***", 
		args)
	fmt.Println(err)
}

导入镜像

使用以下代码可以导入镜像:

package main
import (
	"fmt"
	"github.com/baidubce/bce-sdk-go/services/bcc"
	"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
	// 设置您的ak、sk和要访问的endpoint
	ak := "ak"
	sk := "sk"
	endpoint := "http://bcc.bj.baidubce.com"
	// 创建bcc client
	bccClient, _ := bcc.NewClient(ak, sk, endpoint)

	args := &api.ImportCustomImageArgs{
		// 操作系统名称
		OsName:    "Centos",
		// 操作系统位数
		OsArch:    "64",
		// 操作系统类型
		OsType:    "linux",
		// 操作系统版本
		OsVersion: "6.5",
		// 镜像名称,支持大小写字母、数字、中文以及-_ /.特殊字符,必须以字母开头,长度1-65。
        Name:      "image-2",
		// bos镜像地址
		BosURL:    "https://bcc-bos.bj.bcebos.com/image_test/CentOS-6-x86_64-GenericCloud.qcow2", 
	}
	result, _ := bccClient.ImportCustomImage(args)
	fmt.Println(result)
}

根据实例规格查询可用公共镜像

使用以下代码可以根据实例规格查询可用的公共镜像:

func TestGetAvailableImagesBySpec(t *testing.T) {

	args := &api.GetAvailableImagesBySpecArg{
		OsName: "Centos",
		Spec:   "bcc.ic4.c1m1",
		MaxKeys: 10,
		Marker: "m-21bmeYvH",
	}

	result, _ := BCC_CLIENT.GetAvailableImagesBySpec(args)
	fmt.Println(result)
}
上一篇
磁盘
下一篇
快照