镜像
更新时间:2024-07-02
创建自定义镜像
- 该接口用于创建自定义镜像,默认配额每账号每地域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)
}