このトピックでは、Elastic Compute Service (ECS) SDK V2.0 for Goをインストールする方法について説明し、SDKを使用してECS API操作を呼び出す方法の例を示します。 この例では、ECS SDK V2.0 for Goを使用してDescribeInstancesを呼び出し、ECSインスタンスに関する情報を照会します。
前提条件
最低限必要な権限を持つResource Access Management (RAM) ユーザーは、AccessKeyペアを使用してログオンします。 Alibaba Cloudアカウントには完全な権限があり、AccessKeyペアが侵害された場合に重大なセキュリティリスクとなるため、Alibaba Cloudアカウントの使用は推奨しません。 AccessKeyペアの作成の詳細については、「AccessKeyペアの作成」をご参照ください。
RAMユーザーはECSリソースの管理を許可されています。 この例では読み取り専用アクセスが必要で、AliyunECSReadonlyAccessシステムポリシーが使用されます。 ビジネス要件に応じて権限を許可します。
カスタムポリシーを作成します。
カスタムポリシーの作成に関するガイダンスについては、「カスタマイズポリシーの作成」と「RAM権限付与」をご参照ください。
ECSは、ベストプラクティスに基づいたカスタムポリシーテンプレートを提供します。 これらのポリシーテンプレートを参照して、ニーズに基づいてポリシーをすばやく確立します。 詳細については、「ECSのカスタムポリシー」をご参照ください。
システムポリシーを使用します。
ECSがサポートするシステムポリシーとその権限の詳細については、「ECSのシステムポリシー」をご参照ください。
AccessKeyペアは環境変数で設定されます。 詳細については、「Linux、macOS、およびWindowsでの環境変数の設定」をご参照ください。
ECS SDK V2.0 for Goのインストール
ECS SDK V2.0 For Goのインストール方法については、 SDKセンターを使用します。 次のコマンドをコピーし、ターミナルでコマンドを実行して、Go用ECS SDK V2.0をインストールできます。
go get github.com/alibabacloud-go/darabonba-openapi/v2/client
ECS SDK V2.0 for Goを使用する
1. Initialize a client.
Alibaba Cloud SDKは、クライアントを初期化するために、AccessKeyペアやSTS (Security Token Service) トークンなどの複数のアクセス資格情報をサポートしています。 詳細については、「アクセス資格情報の管理」をご参照ください。 この例では、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{
// Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured.
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
// Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured.
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
// Specify an endpoint. For information about endpoints, visit 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操作のパラメーターを表示します。 この例では、DescribeInstances操作が使用されています。 DescribeInstances操作のパラメーターは、DescribeInstancesで表示できます。
リクエストオブジェクトの名前は {操作名} リクエスト形式です。 たとえば、DescribeInstances操作の要求オブジェクトは、DescribeInstancesRequestという名前です。
// Create a request object.
describeInstancesRequest := &ecs20140526.DescribeInstancesRequest{
RegionId: tea.String("cn-hangzhou"),
}
3. API操作を呼び出します。
クライアントからAPI操作を呼び出す場合、タイムアウトパラメーターやプロキシパラメーターなどの実行時パラメーターを指定できます。 詳細は、「高度な設定」をご参照ください。
応答オブジェクトの名前は {操作名} 応答形式です。 たとえば、DescribeInstances操作の応答オブジェクトは、DescribeInstancesResponseという名前です。
// Specify runtime parameters.
runtime := &util.RuntimeOptions{}
// Call the DescribeInstances operation.
response, _err := ecsClient.DescribeInstancesWithOptions(describeInstancesRequest, runtime)
if _err != nil {
panic(_err)
}
fmt.Println(response.Body.String())
4. 例外を処理します。
ECS SDK for Goは、例外を次のタイプに分類します。
error: このタイプの例外は、ビジネス以外のエラーが原因です。 たとえば、SDKソースファイルが変更されたために検証が失敗した場合、または解析が失敗した場合、エラー例外がスローされます。
SDKError: ほとんどの場合、このタイプの例外はビジネスエラーが原因です。
システムの堅牢性と安定性を確保するために、例外のレポート、例外のログ記録、再試行などの操作を実行して例外を適切に処理することを推奨します。
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{
// Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured.
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
// Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured.
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
// Specify an endpoint. For information about endpoints, visit 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)
}
// Create a request object.
describeInstancesRequest := &ecs20140526.DescribeInstancesRequest{
RegionId: tea.String("cn-hangzhou"),
}
// Specify runtime parameters.
runtime := &util.RuntimeOptions{}
resp, tryErr := func() (response *ecs20140526.DescribeInstancesResponse, _e error) {
defer func() {
if r := tea.Recover(recover()); r != nil {
_e = r
}
}()
// Call the DescribeInstances operation.
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 { // Check whether the tryErr error is of the *tea.SDKError type based on the type assertion.
// Handle exceptions with caution in actual business scenarios and do not ignore the exceptions in your project. In this example, exceptions are provided only for reference.
fmt.Println(tea.StringValue(sdkError.Message))
fmt.Println(tea.StringValue(sdkError.Code))
fmt.Println(tea.StringValue(sdkError.Data))
} else {
// Handle exceptions with caution in actual business scenarios and do not ignore the exceptions in your project. In this example, exceptions are provided only for reference.
fmt.Println(tea.String(tryErr.Error()))
}
} else {
fmt.Println(resp.Body)
}
}
関連ドキュメント
ECS SDK V2.0 for Goを使用して、ECS API操作のジェネリック呼び出しを実行することもできます。 詳細については、「ジェネリック呼び出し」をご参照ください。
ECS SDK V1.0 for Goを使用している場合は、SDKの詳細については「V1.0 Go SDK」をご参照ください。