このトピックでは、Go V2.0 software development kit (SDK) のインストール方法と使用方法について説明します。例として、DescribeInstances API 操作を使用して、1 つ以上の Elastic Compute Service (ECS) インスタンスの詳細をクエリする方法を示します。
前提条件
Alibaba Cloud アカウントは完全な権限を持っており、その AccessKey ペアが漏洩すると重大なセキュリティリスクとなります。そのため、Alibaba Cloud アカウントの使用は推奨されません。代わりに、最小限の権限を持つ Resource Access Management (RAM) ユーザーが AccessKey ペアを使用してログインしていることを確認してください。AccessKey ペアの作成方法の詳細については、「AccessKey ペアの作成」をご参照ください。
RAM ユーザーに ECS リソースを管理する権限が付与されていること。この例では読み取り専用アクセスが必要なため、AliyunECSReadonlyAccess システムポリシーを使用します。ビジネス要件に応じて権限を付与してください。
カスタムポリシーの作成
カスタムポリシーの作成方法については、「カスタムポリシーの作成」および「RAM での権限付与」をご参照ください。
ECS は、ベストプラクティスに基づいたカスタムポリシーのテンプレートを提供しています。これらのポリシーテンプレートを参照することで、ニーズに合わせたポリシーを迅速に作成できます。詳細については、「カスタムポリシー」をご参照ください。
システムポリシーの使用
ECS がサポートするシステムポリシーとその権限の詳細については、「ECS のシステムポリシー」をご参照ください。
AccessKey ペアが環境変数に設定されていること。詳細については、「Linux、macOS、Windows で環境変数を設定する」をご参照ください。
SDK のインストール
Go V2.0 SDK のインストール方法については、SDK センターをご参照ください。次のコマンドをコピーしてターミナルで実行し、ECS SDK をインストールします。
// プロジェクトに go.mod ファイルがない場合は、Go モジュールを初期化します。
go mod init <PROJECT_NAME>
go get -u github.com/alibabacloud-go/darabonba-openapi/v2/clientSDK の使用
1. クライアントの初期化
Alibaba Cloud SDK は、AccessKey やセキュリティトークンサービス (STS) トークンなど、複数の種類のアクセス認証情報をサポートしてクライアントを初期化します。詳細については、「アクセス認証情報の管理」をご参照ください。この例では、AccessKey を使用してクライアントを初期化する方法を示します。
package main
import (
"os"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
ecs20140526 "github.com/alibabacloud-go/ecs-20140526/v4/client"
"github.com/alibabacloud-go/tea/tea"
)
func CreateClient() (_result *ecs20140526.Client, _err error) {
config := &openapi.Config{
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID が設定されていることを確認してください。
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
// エンドポイントについては、https://api.aliyun.com/product/Ecs をご参照ください。
config.Endpoint = tea.String("ecs.cn-hangzhou.aliyuncs.com")
_result = &ecs20140526.Client{}
_result, _err = ecs20140526.NewClient(config)
return _result, _err
}
2. API 操作のリクエストオブジェクトの作成
リクエストオブジェクトを作成する前に、操作の API ドキュメント を表示してパラメーター情報を取得してください。
リクエストオブジェクトの命名規則は {APIName}Request です。例えば、DescribeInstances 操作のリクエストオブジェクトは DescribeInstancesRequest です。
// リクエストオブジェクトを作成します。
describeInstancesRequest := &ecs20140526.DescribeInstancesRequest{
RegionId: tea.String("cn-hangzhou"),
}3. 呼び出しの開始
クライアントを使用して OpenAPI 操作を呼び出す際に、タイムアウトやプロキシ設定などの実行時パラメーターを設定できます。詳細については、「高度な設定」をご参照ください。
レスポンスオブジェクトの命名規則は {APIName}Response です。例えば、DescribeInstances 操作のレスポンスオブジェクトは DescribeInstancesResponse です。
// 実行時パラメーターを設定します。
runtime := &util.RuntimeOptions{}
// DescribeInstances 操作を呼び出します。
response, _err := ecsClient.DescribeInstancesWithOptions(describeInstancesRequest, runtime)
if _err != nil {
panic(_err)
}
fmt.Println(response.Body.String())4. 例外処理
Go SDK は、例外を主に次のエラータイプに分類します。
error:API 操作に固有ではない一般的なエラー。SDK ソースファイルの変更による検証エラーや解析エラーなど。
SDKError:SDK リクエスト中に発生するビジネスエラー。
システムの堅牢性と安定性を確保するために、例外の伝播、ログの記録、回復の試行など、例外を処理するための適切な措置を講じてください。
5. 完全な例
package main
import (
"fmt"
"os"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
ecs20140526 "github.com/alibabacloud-go/ecs-20140526/v4/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
)
func CreateClient() (_result *ecs20140526.Client, _err error) {
config := &openapi.Config{
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID が設定されていることを確認してください。
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
// エンドポイントについては、https://api.aliyun.com/product/Ecs をご参照ください。
config.Endpoint = tea.String("ecs.cn-hangzhou.aliyuncs.com")
_result = &ecs20140526.Client{}
_result, _err = ecs20140526.NewClient(config)
return _result, _err
}
func main() {
ecsClient, _err := CreateClient()
if _err != nil {
panic(_err)
}
// リクエストオブジェクトを作成します。
describeInstancesRequest := &ecs20140526.DescribeInstancesRequest{
RegionId: tea.String("cn-hangzhou"),
}
// 実行時パラメーターを設定します。
runtime := &util.RuntimeOptions{}
resp, tryErr := func() (response *ecs20140526.DescribeInstancesResponse, _e error) {
defer func() {
if r := tea.Recover(recover()); r != nil {
_e = r
}
}()
// DescribeInstances 操作を呼び出します。
response, _err := ecsClient.DescribeInstancesWithOptions(describeInstancesRequest, runtime)
if _err != nil {
return nil, _err
}
return response, nil
}()
if tryErr != nil {
if sdkError, ok := tryErr.(*tea.SDKError); ok { // 型アサーションを使用して、tryErr が *tea.SDKError 型であるかどうかを確認します。
// これは出力のみを目的としています。プロジェクトでは例外を無視せず、慎重に処理してください。
fmt.Println(tea.StringValue(sdkError.Message))
fmt.Println(tea.StringValue(sdkError.Code))
fmt.Println(tea.StringValue(sdkError.Data))
} else {
// これは出力のみを目的としています。プロジェクトでは例外を無視せず、慎重に処理してください。
fmt.Println(tea.String(tryErr.Error()))
}
} else {
fmt.Println(resp.Body)
}
}
詳細情報
上記の方法に加えて、汎用呼び出しを使用して ECS OpenAPI 操作を呼び出すこともできます。詳細については、「汎用呼び出し」をご参照ください。
V1.0 SDK を使用しており、詳細を知りたい場合は、「V1.0 Go SDK」をご参照ください。