镜像
更新时间:2024-07-02
创建自定义镜像
- 该接口用于创建自定义镜像,默认配额每账号每地域20个,创建后的自定义镜像可用于创建实例。
- 支持通过实例创建和通过快照创建两种方式。
- 当通过实例创建时,只有 Running 或 Stopped 状态的实例才可以执行成功,否则会提示 409 错误。
- 仅限通过系统盘快照创建自定义镜像。
- 当通过快照创建时,只有 Available 状态的快照才可以执行成功,否则会提示 409 错误
Go
1package main
2import (
3 "fmt"
4 "github.com/baidubce/bce-sdk-go/services/bcc"
5 "github.com/baidubce/bce-sdk-go/services/bcc/api"
6)
7func main() {
8 // 设置您的ak、sk和要访问的endpoint
9 ak := "ak"
10 sk := "sk"
11 endpoint := "http://bcc.bj.baidubce.com"
12 // 创建bcc client
13 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
14 // 待创建的自定义镜像名称,支持大小写字母、数字、中文以及-_ /.特殊字符,必须以字母开头,长度1-65。
15 imageName := "image02"
16 // 当从快照创建镜像时,此参数是指用于创建镜像的快照ID。可选参数,与 snapshotId 不同时存在,同时存在时只取instanceId
17 snapshotId := "m-***"
18 // 当从实例创建镜像时,此参数是指用于创建镜像的实例ID。可选参数,与 snapshotId 不同时存在,同时存在时只取instanceId
19 instanceId := "i-***"
20 // 是否关联CDS,默认为false
21 relateCds := false
22 args := &api.CreateImageArgs{
23 SnapshotId: snapshotId,
24 IsRelateCds: relateCds,
25 ImageName: imageName,
26 InstanceId: instanceId,
27 }
28 resp, err := bccClient.CreateImage(args)
29 fmt.Println(resp, err)
30}
注意,创建自定义镜像,默认配额每账号每地域20个。
查询镜像列表
- 使用以下代码可以查询有权限的镜像列表。
- 查询的镜像信息中包括公共镜像、自定义镜像和服务集成镜像。
- 支持按 imageType 来过滤查询,此参数非必需,缺省为 All,即查询所有类型的镜像。
- 支持按 imageName 来过滤查询自定义镜像,返回名称中包含该字符串的镜像。此参数非必需,设定ImageName时,必须同时指定ImageType为'Custom'。
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "http://bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 createInstanceArgs := &api.ListImageArgs{
18 // 镜像类型
19 ImageType: "ALL",
20 }
21 images, err := bccClient.ListImage(createInstanceArgs)
22 fmt.Println(err)
23 fmt.Println(images)
24}
具体的镜像类型可详细参考BCC API文档查询镜像列表
查询镜像详情
以下代码可以查询镜像详细信息:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6)
7
8func main() {
9 // 设置您的ak、sk和要访问的endpoint
10 ak := "ak"
11 sk := "sk"
12 endpoint := "http://bcc.bj.baidubce.com"
13 // 创建bcc client
14 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
15
16 imageId := "m-***"
17 imageDetail, err := bccClient.GetImageDetail(imageId)
18 fmt.Println(err)
19 fmt.Println(imageDetail.Image)
20}
删除自定义镜像
- 该接口用于删除用户指定的自定义镜像,仅限自定义镜像,公共镜像和服务集成镜像不能删除。
- imageId 所指定的镜像不存在,提示404错误。
- 镜像删除后无法恢复,不能再用于创建、重置实例。
以下代码可以删除一个自定义镜像:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6)
7
8func main() {
9 // 设置您的ak、sk和要访问的endpoint
10 ak := "ak"
11 sk := "sk"
12 endpoint := "http://bcc.bj.baidubce.com"
13 // 创建bcc client
14 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
15
16 imageId := "m-***"
17 err := bccClient.DeleteImage(imageId)
18 fmt.Println(err)
19}
跨地域复制自定义镜像
- 用于用户跨地域复制自定义镜像,仅限自定义镜像,公共镜像和服务集成镜像不能复制。
- regions如北京"bj",广州"gz",苏州"su",可多选:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "http://bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 imageId := "m-***"
18 destinations := &api.RemoteCopyImageArgs{
19 Name: "new-image",
20 DestRegion: []string{"hkg"},
21 }
22 err := bccClient.RemoteCopyImage(imageId, destinations)
23 fmt.Println(err)
24}
跨地域复制自定义镜像并返回目的region的镜像镜像ID
- 用于用户跨地域复制自定义镜像,仅限自定义镜像,公共镜像和服务集成镜像不能复制。
- regions如北京"bj",广州"gz",苏州"su",可多选:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "http://bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 imageId := "m-***"
18 destinations := &api.RemoteCopyImageArgs{
19 Name: "new-image",
20 DestRegion: []string{"hkg"},
21 }
22 imageCopyResult, err := bccClient.RemoteCopyImageReturnImageIds(imageId, destinations)
23 fmt.Println(err)
24 fmt.Println(imageCopyResult)
25}
取消跨地域复制自定义镜像
以下代码用于取消跨地域复制自定义镜像:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6)
7
8func main() {
9 // 设置您的ak、sk和要访问的endpoint
10 ak := "ak"
11 sk := "sk"
12 endpoint := "http://bcc.bj.baidubce.com"
13 // 创建bcc client
14 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
15
16 imageId := "m-***"
17 err := bccClient.DeleteImage(imageId)
18 fmt.Println(err)
19}
共享自定义镜像
- 该接口用于共享用户自己的指定的自定义镜像,仅限自定义镜像,公共镜像和服务集成镜像不能共享。
- imageId 所指定的镜像不存在,提示404错误。
- 镜像共享后,被共享的用户可以使用此镜像创建、重置实例。
- 请求参数中的account和accountId均为可选参数,但不能全部为空,当两个参数同时出现时,服务端会自动去重。
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 ShareImageId := "m-***"
18
19 // 请求将镜像分享给指定用户id
20 args := &api.SharedUser{
21 // 账号ID
22 AccountId: "***",
23 }
24 err := bccClient.ShareImage(ShareImageId, args)
25 fmt.Println(err)
26}
取消共享自定义镜像
- 该接口用于取消共享用户自己的指定的自定义镜像,仅限自定义镜像,公共镜像和服务集成镜像不能共享。
- imageId 所指定的镜像不存在,提示404错误。
- 镜像取消共享后,被取消共享的用户不能再使用此镜像创建、重置实例。
- 请求参数中的account和accountId均为可选参数,但不能全部为空,当两个参数同时出现时,服务端会自动去重。
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 UnShareImageId := "m-***"
18
19 // 请求取消将镜像分享给指定用户id
20 args := &api.SharedUser{
21 // 账号ID
22 AccountId: "***",
23 }
24 err := bccClient.UnShareImage(UnShareImageId, args)
25 fmt.Println(err)
26}
查询镜像已共享用户列表
- imageId 所指定的镜像不存在,提示404错误。 如下代码用于查询镜像已共享的用户列表:
Go
1package main
2import (
3 "fmt"
4 "github.com/baidubce/bce-sdk-go/services/bcc"
5)
6func main() {
7 // 设置您的ak、sk和要访问的endpoint
8 ak := "ak"
9 sk := "sk"
10 endpoint := "http://bcc.bj.baidubce.com"
11 // 创建bcc client
12 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
13 // 镜像id
14 imageId := "m-***"
15 result, err := bccClient.GetImageSharedUser(imageId)
16 fmt.Println(result)
17 fmt.Println(err)
18}
根据实例ID批量查询OS信息
如下代码可以根据实例的ID来查询相应OS的信息:
Go
1package main
2import (
3 "fmt"
4 "github.com/baidubce/bce-sdk-go/services/bcc"
5 "github.com/baidubce/bce-sdk-go/services/bcc/api"
6)
7func main() {
8 // 设置您的ak、sk和要访问的endpoint
9 ak := "ak"
10 sk := "sk"
11 endpoint := "http://bcc.bj.baidubce.com"
12 // 创建bcc client
13 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
14
15 args := &api.GetImageOsArgs{
16 // 实例ID列表
17 InstanceIds: []string{"i-***", "i-***"},
18 }
19 result, err := bccClient.GetImageOS(args)
20 fmt.Println(result)
21 fmt.Println(err)
22}
镜像绑定标签
使用以下代码可以给指定镜像绑定标签:
Go
1package main
2import (
3 "fmt"
4 "github.com/baidubce/bce-sdk-go/model"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8func main() {
9 // 设置您的ak、sk和要访问的endpoint
10 ak := "ak"
11 sk := "sk"
12 endpoint := "http://bcc.bj.baidubce.com"
13 // 创建bcc client
14 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
15 args := &api.BindTagsRequest{
16 ChangeTags: []model.TagModel{
17 {
18 // 标签键
19 TagKey: "Key***",
20 // 标签值
21 TagValue: "Value***",
22 },
23 {
24 // 标签键
25 TagKey: "Key***",
26 // 标签值
27 TagValue: "Value***",
28 },
29 },
30 }
31
32 result := bccClient.BindImageToTags("m-***", args)
33 fmt.Println(result)
34}
镜像解绑标签
使用以下代码可以给指定镜像绑定标签:
Go
1package main
2import (
3 "fmt"
4 "github.com/baidubce/bce-sdk-go/model"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8func main() {
9 // 设置您的ak、sk和要访问的endpoint
10 ak := "ak"
11 sk := "sk"
12 endpoint := "http://bcc.bj.baidubce.com"
13 // 创建bcc client
14 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
15 args := &api.UnBindTagsRequest{
16 ChangeTags: []model.TagModel{
17 {
18 // 标签键
19 TagKey: "Key***",
20 // 标签值
21 TagValue: "Value***",
22 },
23 },
24 }
25 err := bccClient.UnBindImageToTags(
26 // 镜像Id
27 "m-***",
28 args)
29 fmt.Println(err)
30}
导入镜像
使用以下代码可以导入镜像:
Go
1package main
2import (
3 "fmt"
4 "github.com/baidubce/bce-sdk-go/services/bcc"
5 "github.com/baidubce/bce-sdk-go/services/bcc/api"
6)
7func main() {
8 // 设置您的ak、sk和要访问的endpoint
9 ak := "ak"
10 sk := "sk"
11 endpoint := "http://bcc.bj.baidubce.com"
12 // 创建bcc client
13 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
14
15 args := &api.ImportCustomImageArgs{
16 // 操作系统名称
17 OsName: "Centos",
18 // 操作系统位数
19 OsArch: "64",
20 // 操作系统类型
21 OsType: "linux",
22 // 操作系统版本
23 OsVersion: "6.5",
24 // 镜像名称,支持大小写字母、数字、中文以及-_ /.特殊字符,必须以字母开头,长度1-65。
25 Name: "image-2",
26 // bos镜像地址
27 BosURL: "https://bcc-bos.bj.bcebos.com/image_test/CentOS-6-x86_64-GenericCloud.qcow2",
28 }
29 result, _ := bccClient.ImportCustomImage(args)
30 fmt.Println(result)
31}
根据实例规格查询可用公共镜像
使用以下代码可以根据实例规格查询可用的公共镜像:
Go
1func TestGetAvailableImagesBySpec(t *testing.T) {
2
3 args := &api.GetAvailableImagesBySpecArg{
4 OsName: "Centos",
5 Spec: "bcc.ic4.c1m1",
6 MaxKeys: 10,
7 Marker: "m-21bmeYvH",
8 }
9
10 result, _ := BCC_CLIENT.GetAvailableImagesBySpec(args)
11 fmt.Println(result)
12}