The HuaweiCloud Go SDK allows you to easily work with Huawei Cloud services such as Elastic Compute Service (ECS) and Virtual Private Cloud(VPC) without the need to handle API related tasks.
This document introduces how to obtain and use HuaweiCloud Go SDK.
HuaweiCloud Go SDK supports go 1.14 or later. Run go version
to check the version of Go.
-
Import the required modules as follows:
import (
"fmt"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/httphandler"
vpc "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/vpc/v2"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/vpc/v2/model"
"net/http"
)
-
Config {Service}Client
Configurations
2.1 Default Configuration
// Use default configuration
httpConfig := config.DefaultHttpConfig()
2.2 Proxy(Optional)
// Use proxy if needed
httpConfig.WithProxy(config.NewProxy().
WithSchema("http").
WithHost("proxy.huaweicloud.com").
WithPort(80).
WithUsername("testuser").
WithPassword("password"))))
2.3 Connection(Optional)
// seconds to wait for the server to send data before giving up
httpConfig.WithTimeout(30);
2.4 SSL Certification(Optional)
// Skip ssl certification checking while using https protocol if needed
httpConfig.WithIgnoreSSLVerification(true);
-
Initialize the credentials
Notice:
There are two types of HUAWEI CLOUD services, regional services and global services.
Global services currently only support IAM, TMS, EPS.
For Regional services' authentication, projectId is required.
For global services' authentication, domainId is required.
ak
is the access key ID for your account.
sk
is the secret access key for your account.
projectId
is the ID of your project depending on your region which you want to operate.
domainId
is the account ID of HUAWEI CLOUD.
securityToken
is the security token when using temporary AK/SK.
3.1 Use permanent AK/SK
# Regional Services
auth := basic.NewCredentialsBuilder().
WithAk(ak).
WithSk(sk).
WithProjectId(projectId).
Build()
# Global Services
auth := global.NewCredentialsBuilder().
WithAk(ak).
WithSk(sk).
WithDomainId(domainId).
Build()
3.2 Use temporary AK/SK
It's preferred to obtain temporary access key, security key and security token first, which could be obtained through permanent access key and security key or through an agency.
Obtaining a temporary access key token through permanent access key and security key, you could refer to document: https://support.huaweicloud.com/en-us/api-iam/iam_04_0002.html . The API mentioned in the document above corresponds to the method of createTemporaryAccessKeyByToken in IAM SDK.
Obtaining a temporary access key and security token through an agency, you could refer to document: https://support.huaweicloud.com/en-us/api-iam/iam_04_0101.html . The API mentioned in the document above corresponds to the method of createTemporaryAccessKeyByAgency in IAM SDK.
# Regional Services
auth := basic.NewCredentialsBuilder().
WithAk(ak).
WithSk(sk).
WithProjectId(projectId).
WithSecurityToken(securityToken).
Build()
# Global Services
auth := global.NewCredentialsBuilder().
WithAk(ak).
WithSk(sk).
WithDomainId(domainId).
WithSecurityToken(securityToken).
Build()
-
Initialize the {Service}Client instance
// Initialize specified New{Service}Client, take NewVpcClient for example
client := vpc.NewVpcClient(
vpc.VpcClientBuilder().
WithEndpoint(endpoint).
WithCredential(auth).
WithHttpConfig(config.DefaultHttpConfig()).
Build())
where:
-
Send a request and print response.
// send request and print response, take interface of ListVpcs for example
request := &model.ListVpcsRequest{
Body: &model.ListVpcsRequestBody{
Vpc: &model.ListVpcsOption{
limit: 1,
},
},
}
response, err := client.ListVpcs(request)
if err == nil {
fmt.Printf("%+v\n",response.Vpc)
} else {
fmt.Println(err)
}
-
Exceptions
Level 1 |
Notice |
ServiceResponseError |
service response error |
url.Error |
connect endpoint error |
response, err := client.ListVpcs(request)
if err == nil {
fmt.Println(response)
} else {
fmt.Println(err)
}
-
Original HTTP Listener
In some situation, you may need to debug your http requests, original http request and response information will be needed. The SDK provides a listener function to obtain the original encrypted http request and response information.
⚠ Warning: The original http log information are used in debugging stage only, please do not print the original http header or body in the production environment. These log information are not encrypted and contain sensitive data such as the password of your ECS virtual machine or the password of your IAM user account, etc.
func RequestHandler(request http.Request) {
fmt.Println(request)
}
func ResponseHandler(response http.Response) {
fmt.Println(response)
}
client := vpc.NewVpcClient(
vpc.VpcClientBuilder().
WithEndpoint("{your endpoint}").
WithCredential(
basic.NewCredentialsBuilder().
WithAk("{your ak string}").
WithSk("{your sk string}").
WithProjectId("{your project id}").
Build()).
WithHttpConfig(config.DefaultHttpConfig().
WithIgnoreSSLVerification(true).
WithHttpHandler(httphandler.
NewHttpHandler().
AddRequestHandler(RequestHandler).
AddResponseHandler(ResponseHandler))).
Build())