IBM Cloud Docs
使用 Go SDK

使用 Go SDK

IBM Analytics Engine Go SDK 允许您以编程方式与无服务器实例的 IBM Analytics Engine 服务 API 进行交互。

您可以从 GitHub获取 SDK 的源代码。 请参阅 ibm-iae-go-sdkiaesdk 库提供对 IBM Analytics Engine API 的完整访问权。

获取 SDK

您需要下载并安装 SDK 以在 Go 应用程序中使用该 SDK。 您可以通过输入以下命令来执行此操作:

go get -u github.com/IBM/ibm-iae-go-sdk

如果应用程序使用 Go 模块,那么可以向 Go 应用程序添加合适的导入,然后运行:

go mod tidy

导入软件包

安装 SDK 后,需要导入要在 Go 应用程序中使用的 SDK 软件包。

例如:

import (
  "github.com/IBM/go-sdk-core/v3/core"
  "github.com/IBM/ibm-iae-go-sdk/ibmanalyticsengineapiv3"
)

创建客户机和获取凭证

当您连接到 IBM Analytics Engine时,将使用您提供的凭证信息 (API 密钥和服务实例标识) 来创建和配置客户机。 如果不手动提供此信息,那么可以从凭证文件或环境变量获取这些凭证。

您可以在创建服务凭证时或通过 CLI 检索服务实例标识。 请参阅 检索服务端点

要使用 IBM Analytics Engine Go SDK ,您需要以下值:

  • IAM_API_KEY: 创建服务凭证时生成的 API 密钥。 您可以通过在 IBM Cloud 仪表板上查看服务凭证来进行检索。
  • instance_guid: 创建服务凭证时在 resource_instance_id 中生成的值。 您可以通过在 IBM Cloud 仪表板上查看服务凭证来进行检索。
  • IAE_ENDPOINT_URL : 包含 https:// 协议的服务端点 URL。 请参阅 服务端点

正在初始化配置

Go SDK 允许您通过以下两种方法之一来构造服务客户机:

  • 通过编程方式设置客户机选项

    您可以通过指定各种客户机选项 (例如,认证程序和服务端点 URL) ,以编程方式构造 IBM Analytics Engine 服务客户机的实例:

    package main
    
    import (
     "fmt"    
    "github.com/IBM/go-sdk-core/v3/core"
    "github.com/IBM/ibm-iae-go-sdk/ibmanalyticsengineapiv3"
    )
    
    func main() {
        // Create an IAM authenticator.
        authenticator := &core.IamAuthenticator{
            ApiKey: "{apikey}", // eg "0viPHOY7LbLNa9eLftrtHPpTjoGv6hbLD1QalRXikliJ"
            URL: "{api auth url}", // "https://iam.cloud.ibm.com/identity/token"
        }
    
        // Construct an "options" struct for creating the service client.
        options := &ibmanalyticsengineapiv3.IbmAnalyticsEngineApiV3Options{
            Authenticator: authenticator,
            URL: "{url}",  // eg "https://api.us-south.ae.cloud.ibm.com"
        }
    
        // Construct the service client.
        ibmAnalyticsEngineApiService, err := ibmanalyticsengineapiv3.NewIbmAnalyticsEngineApiV3(options)
        if err != nil {
            panic(err)
        }
    
        // Service operations can now be invoked using the "ibmAnalyticsEngineApiService" variable.
    }
    
  • 通过使用外部配置属性

    为了避免对寻源凭证进行硬编码,可以将这些值存储在应用程序外部的配置属性中。

    要使用配置属性:

    1. 定义要由应用程序使用的配置属性。 这些属性可以实现为:

      • 导出的环境变量
      • 存储在凭证文件中的值

      以下示例显示了如何使用环境变量。 每个环境变量都必须以 IBM_ANALYTICS_ENGINE_API作为前缀。

      export IBM_ANALYTICS_ENGINE_API_URL=<IAE_ENDPOINT_URL>
      export IBM_ANALYTICS_ENGINE_API_AUTH_TYPE=iam
      export IBM_ANALYTICS_ENGINE_API_APIKEY=<IAM_API_KEY>
      

      IBM_ANALYTICS_ENGINE_API 是 IBM Analytics Engine API 客户机的缺省服务名称,这意味着缺省情况下, SDK 将查找以此前缀折叠为大写开头的属性。

    2. 构建服务客户机:

      // Create an IAM authenticator.
      authenticator := &core.IamAuthenticator{
         ApiKey: "{apikey}", // eg "0viPHOY7LbLNa9eLftrtHPpTjoGv6hbLD1QalRXikliJ"
         URL: "{api auth url}", //https://iam.cloud.ibm.com/identity/token
      }
      
      // Construct an "options" struct for creating the service client.
      options := &ibmanalyticsengineapiv3.IbmAnalyticsEngineApiV3Options{
         Authenticator: authenticator,
         URL: "{url}",  // eg "https://api.us-south.ae.cloud.ibm.com"
      }
      
      // Construct the service client.
      service, err := ibmanalyticsengineapiv3.NewIbmAnalyticsEngineApiV3(options)
      if err != nil {
         panic(err)
      }
      

使用 iaesdk 的代码样本

除了此部分中的样本代码片段外,您还可以使用 IBM Analytics Engine V3 API 参考中的 Go 代码样本。

以下代码样本显示了如何执行以下操作:

  • 检索单个实例的详细信息:
    (ibmAnalyticsEngineApi *IbmAnalyticsEngineApiV3) GetInstance(getInstanceOptions *GetInstanceOptions) (result *Instance, response *core.DetailedResponse, err error)
    
    示例请求:
    func main() {
        // Construct an instance of the GetInstanceOptions model
        getInstanceOptionsModel := new(ibmanalyticsengineapiv3.GetInstanceOptions)
        getInstanceOptionsModel.InstanceID = core.StringPtr("dc0e9889-eab2-4t9e-9441-566209499546")
    
        _, response, _ := ibmAnalyticsEngineApiService.GetInstance(getInstanceOptionsModel)
        fmt.Println(response)
    }
    
  • 在给定的无服务器 Spark 实例上部署 Spark 应用程序:
    (ibmAnalyticsEngineApi *IbmAnalyticsEngineApiV3) CreateApplication(createApplicationOptions *CreateApplicationOptions) (result *ApplicationResponse, response *core.DetailedResponse, err error)
    
    样本请求;
    func main() {
        // Construct an instance of the CreateApplicationOptions model
        createApplicationOptionsModel := new(ibmanalyticsengineapiv3.CreateApplicationOptions)
        createApplicationOptionsModel.InstanceID = core.StringPtr("dc0e9889-eab2-4t9e-9441-566209499546")
        createApplicationOptionsModel.Application = core.StringPtr("cos://bucket_name.my_cos/my_spark_app.py")
        createApplicationOptionsModel.Class = core.StringPtr("IbmAnalyticsEngineApi")
        createApplicationOptionsModel.Arguments = []string{"/opt/ibm/spark/examples/src/main/resources/people.txt"}
        createApplicationOptionsModel.Conf = make(map[string]interface{})
        createApplicationOptionsModel.Env = make(map[string]interface{})
    
        _, applicationCreationResponse, _ := ibmAnalyticsEngineApiService.CreateApplication(createApplicationOptionsModel)
        fmt.Println(applicationCreationResponse)
    }
    
  • 检索所有 Spark 应用程序:
    (ibmAnalyticsEngineApi *IbmAnalyticsEngineApiV3) ListApplications(listApplicationsOptions *ListApplicationsOptions) (result *ApplicationCollection, response *core.DetailedResponse, err error)
    
    示例请求:
    func main() {
        // Construct an instance of the ListApplicationsOptions model
        listApplicationsOptionsModel := new(ibmanalyticsengineapiv3.ListApplicationsOptions)
        listApplicationsOptionsModel.InstanceID = core.StringPtr("dc0e9889-eab2-4t9e-9441-566209499546")
    
        _, applicationCollection, _ := ibmAnalyticsEngineApiService.ListApplications(listApplicationsOptionsModel)
        fmt.Println(applicationCollection)
    }
    
  • 检索给定 Spark 应用程序的详细信息:
    (ibmAnalyticsEngineApi *IbmAnalyticsEngineApiV3) GetApplication(getApplicationOptions *GetApplicationOptions) (result *ApplicationGetResponse, response *core.DetailedResponse, err error)
    
    示例请求:
    func main() {
        // Construct an instance of the GetApplicationOptions model
        getApplicationOptionsModel := new(ibmanalyticsengineapiv3.GetApplicationOptions)
        getApplicationOptionsModel.InstanceID = core.StringPtr("dc0e9889-eab2-4t9e-9441-566209499546")
        getApplicationOptionsModel.ApplicationID = core.StringPtr("db933645-0b68-4dcb-80d8-7b71a6c8e542")
    
        _, applicationGetResponse, _ := ibmAnalyticsEngineApiService.GetApplication(getApplicationOptionsModel)
        fmt.Println(applicationGetResponse)
    }
    
  • 停止由 app_id 标识标识的正在运行的应用程序。 这是一个幂等的操作。 如果请求的应用程序已停止或完成,那么不执行任何操作。
    (ibmAnalyticsEngineApi *IbmAnalyticsEngineApiV3) DeleteApplication(deleteApplicationOptions *DeleteApplicationOptions) (response *core.DetailedResponse, err error)
    
    示例请求:
    func main() {
        // Construct an instance of the DeleteApplicationOptions model
        deleteApplicationOptionsModel := new(ibmanalyticsengineapiv3.DeleteApplicationOptions)
        deleteApplicationOptionsModel.InstanceID = core.StringPtr("dc0e9889-eab2-4t9e-9441-566209499546")
        deleteApplicationOptionsModel.ApplicationID = core.StringPtr("db933645-0b68-4dcb-80d8-7b71a6c8e542")
    
        applicationDeletionResponse, _ := ibmAnalyticsEngineApiService.DeleteApplication(deleteApplicationOptionsModel)
        fmt.Println(applicationDeletionResponse)
    }
    
  • 返回给定应用程序的状态:
    (ibmAnalyticsEngineApi *IbmAnalyticsEngineApiV3) GetApplicationState(getApplicationStateOptions *GetApplicationStateOptions) (result *ApplicationGetStateResponse, response *core.DetailedResponse, err error)
    
    示例请求:
    func main() {
        // Construct an instance of the GetApplicationStateOptions model
        getApplicationStateOptionsModel := new(ibmanalyticsengineapiv3.GetApplicationStateOptions)
        getApplicationStateOptionsModel.InstanceID = core.StringPtr("dc0e9889-eab2-4t9e-9441-566209499546")
        getApplicationStateOptionsModel.ApplicationID = core.StringPtr("db933645-0b68-4dcb-80d8-7b71a6c8e542")
    
        _, applicationGetStateResponse, _ := ibmAnalyticsEngineApiService.GetApplicationState(getApplicationStateOptionsModel)
        fmt.Println(applicationGetStateResponse)
    }