• 4、AWS SDK for Go-session使用


    session使用注意事项

    在适用于 Go 的 AWS 开发工具包中,会话是一个对象,其中包含服务客户端的配置信息。用于与 AWS 服务进行交互。例如,会话可以包含有关将发送请求的区域、要使用的凭据或其他请求处理程序的信息。无论何时创建服务客户端,都必须指定会话。有关会话的更多信息,请参阅 AWS SDK for Go API 参考中的会话包。

    会话可以在共享相同基本配置的所有服务客户端之间共享。会话是根据 SDK 的默认配置和请求处理程序构建的。

    您应该尽可能缓存会话。这是因为每次创建新会话时,都会从环境和配置文件中加载所有配置值。在所有服务客户端之间共享会话值可确保加载配置的次数最少。

    并发

    只要会话没有被修改,会话就可以安全地并发使用。创建会话后,SDK 不会修改会话。从共享会话同时创建服务客户端是安全的。

    具有共享配置文件的会话

    使用前面的方法,您可以创建仅在AWS_SDK_LOAD_CONFIG设置了环境变量的情况下加载附加配置文件的会话。或者,您可以显式创建启用共享配置的会话。为此,您可以使用 NewSessionWithOptions配置会话的创建方式。使用 NewSessionWithOptionswith SharedConfigStateset to SharedConfigEnable将创建会话,就像AWS_SDK_LOAD_CONFIG 设置了环境变量一样。

    创建会话

    创建 时session,您可以传入aws.Config覆盖默认值或覆盖当前配置值的可选值。这允许您根据需要提供额外的或基于案例的配置。

    默认情况下NewSession,仅从共享凭据文件 ( ~/.aws/credentials) 加载凭据。如果AWS_SDK_LOAD_CONFIG环境变量设置为真值,则会话是根据共享配置 ( ~/.aws/config) 和共享凭证 ( ~/.aws/credentials) 文件中的配置值创建的。有关详细信息,请参阅具有共享配置文件的会话。

    使用默认配置和请求处理程序创建会话。以下示例使用来自环境变量或共享凭证文件的凭证、区域和配置文件值创建会话。它要求AWS_PROFILE设置或default 使用。

    sess, err := session.NewSession()
    
    • 1

    SDK 提供所有会话都使用的默认配置,除非您覆盖某个字段。例如,您可以在使用aws.Configstruct 创建会话时指定 AWS 区域。有关您可以指定的字段的更多信息,请参阅 AWS SDK for Go API 参考中的aws.Config。

    sess, err := session.NewSession(&aws.Config{
        Region: aws.String("us-east-2")},
    )
    
    • 1
    • 2
    • 3

    从会话创建 Amazon S3 客户端实例:

    sess, err := session.NewSession()
    if err != nil {
        // Handle Session creation error
    }
    svc := s3.New(sess)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用选项覆盖创建会话

    此外NewSession,您还可以使用 NewSessionWithOptions. 此函数允许您控制和覆盖如何通过代码创建会话,而不是仅由环境变量驱动。

    当您想要提供配置文件或覆盖共享凭证状态 ( )时,请使用

    NewSessionWithOptions 。AWS_SDK_LOAD_CONFIG
    
    // Equivalent to session.New
    sess, err := session.NewSessionWithOptions(session.Options{})
    
    // Specify profile to load for the session's config
    sess, err := session.NewSessionWithOptions(session.Options{
        Profile: "profile_name",
    })
    
    // Specify profile for config and region for requests
    sess, err := session.NewSessionWithOptions(session.Options{
        Config: aws.Config{Region: aws.String("us-east-2")},
        Profile: "profile_name",
    })
    
    // Force enable Shared Config support
    sess, err := session.NewSessionWithOptions(session.Options{
        SharedConfigState: SharedConfigEnable,
    })
    
    // Assume an IAM role with MFA prompting for token code on stdin
    sess := session.Must(session.NewSessionWithOptions(session.Options{
        AssumeRoleTokenProvider: stscreds.StdinTokenProvider,
        SharedConfigState: SharedConfigEnable,
    }))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    已弃用New

    该New函数已被弃用,因为它没有提供返回加载配置文件和值时发生的错误的好方法。因此, NewSession已创建,因此可以在创建会话失败时检索错误。

    共享配置字段

    默认情况下,SDK 从共享凭证文件加载凭证 ~/.aws/credentials。任何其他配置值由环境变量、SDK 默认值和用户提供的aws.config值提供。

    如果AWS_SDK_LOAD_CONFIG设置了环境变量,或者使用SharedConfigEnable选项来创建会话(如下例所示),则还会从共享配置文件 ( ~/.aws/config) 中加载其他配置信息(如果存在)。如果两个文件之间的任何配置设置值不同,则共享凭证文件 ( ~/.aws/credentials) 中的值优先。

    sess := session.Must(session.NewSessionWithOptions(session.Options{
        SharedConfigState: session.SharedConfigEnable,
    }))
    
    • 1
    • 2
    • 3

    有关共享凭据设置的更多信息,请参阅会话包的文档。

    环境变量

    创建会话时,您可以设置多个环境变量来调整 SDK 的运行方式以及创建会话时加载的配置数据。环境值是可选的。对于凭证,您必须同时设置访问密钥和秘密访问密钥。否则,Go 会忽略你设置的那个。除非另有说明,否则所有环境变量值都是字符串。

    有关环境变量设置的更多信息,请参阅会话包的文档。

    添加请求处理程序

    您可以将处理程序添加到会话以处理 HTTP 请求。所有使用会话的服务客户端都会继承处理程序。例如,以下处理程序记录服务客户端发出的每个请求及其有效负载。

    // Create a session, and add additional handlers for all service
    // clients created with the Session to inherit. Adds logging handler.
    sess, err := session.NewSession()
    sess.Handlers.Send.PushFront(func(r *request.Request) {
        // Log every request made and its payload
        logger.Println("Request: %s/%s, Payload: %s",
            r.ClientInfo.ServiceName, r.Operation, r.Params)
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    复制会话

    您可以使用Copy 方法创建会话的副本。当您想要创建具有相似设置的多个会话时,复制会话非常有用。每次复制会话时,您都可以为任何字段指定不同的值。例如,以下代码片段在将字段sess覆盖到时复制会话 :Regionus-east-2

    usEast2Sess := sess.Copy(&aws.Config{Region: aws.String("us-east-2")})
    
    • 1

    示例代码

    package main
    
    import (
    	"fmt"
    	"github.com/aws/aws-sdk-go/aws"
    	"github.com/aws/aws-sdk-go/aws/credentials"
    	"github.com/aws/aws-sdk-go/aws/session"
    	"github.com/aws/aws-sdk-go/service/s3"
    	"github.com/aws/aws-sdk-go/service/s3/s3manager"
    	"os"
    )
    
    var (
    	accessKey = "xxx"
    	secretKey = "xxx" 
    	region    = "oss-cn-beijing"
    	endpoint  = "oss-cn-beijing.aliyuncs.com"
    )
    
    func main() {
    	//只要不修改session,session就可以安全的并发使用。
    	sess, err := session.NewSession(&aws.Config{
    		Credentials: credentials.NewStaticCredentials(accessKey, secretKey, ""),
    		Endpoint:    aws.String(endpoint),
    		Region:      aws.String(region),
    		//minio:true,oss:false
    		S3ForcePathStyle: aws.Bool(false),
    		//SDK 支持使用客户端 TLS 证书配置的环境和会话选项,这些证书作为客户端 TLS 握手的一部分发送以进行客户端身份验证。
    		//如果使用,则需要 Cert 和 Key 值。如果缺少一个,或者无法加载文件的内容,则会返回一个错误。
    		//ClientTLSCert:              nil,
    		//ClientTLSKey:               nil,
    	})
    	if err != nil {
    		panic(err)
    	}
    	//使用 New 函数创建新的服务客户端。
    	//使用该客户端,您可以向服务发出 API 请求。
    	//这些客户端可以安全地并发使用。
    	svc := s3.New(sess)
    	fmt.Println("Endpoint:", *svc.Config.Endpoint)
    	fmt.Println("S3ForcePathStyle:", *svc.Config.S3ForcePathStyle)
    	fmt.Println("Region:", *svc.Config.Region)
    	fmt.Println("-------------------------------")
    
    	//复制会话
    	//想要创建具有相似设置的多个会话时,复制会话非常有用。每次复制会话时,您都可以为任何字段指定不同的值。例如,以下代码片段在将字段sess覆盖到时复制会话 :Regionus-east-2
    	usEast2Sess := sess.Copy(&aws.Config{Region: aws.String("us-east-2")})
    	fmt.Println("usEast2Sess Endpoint:", *usEast2Sess.Config.Endpoint)
    	fmt.Println("usEast2Sess S3ForcePathStyle:", *usEast2Sess.Config.S3ForcePathStyle)
    	fmt.Println("usEast2Sess Region:", *usEast2Sess.Config.Region)
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
  • 相关阅读:
    parallelStream 详细解析 Java 8 Stream API 中的 parallelStream 方法
    nodejs上传文件到七牛云代码实现
    深度学习mAP
    德语翻译器在线翻译中文-德语翻译器支持各大语言翻译
    maven jar依赖地址
    整合第三方技术-- 缓存
    LNMP及论坛的搭建
    RHCE之路网盘搭建
    LeetCode买卖股票之一:基本套路(122)
    公众号网课答案查题方法搭建
  • 原文地址:https://blog.csdn.net/Edu_enth/article/details/125993016