在代码中配置适用于 C++ 的 AWS SDK 服务客户端 - 适用于 C++ 的 AWS SDK

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在代码中配置适用于 C++ 的 AWS SDK 服务客户端

当直接在代码中处理配置时,配置范围仅限于使用该代码的应用程序。在该应用程序中,您可选择以下配置方式:对所有服务客户端的全局配置、对某一特定 AWS 服务类型所有客户端的配置,或对某个具体服务客户端实例的配置。

适用于 C++ 的 AWS SDK 包含 AWS 服务客户端类,这些类提供了与您应用程序中使用的 AWS 服务进行交互的功能。在适用于 C++ 的 SDK 中,您可以更改默认客户端配置,这在您想要执行以下操作时非常有用:

  • 通过代理连接到 Internet

  • 更改 HTTP 传输设置,例如连接超时和请求重试次数

  • 指定 TCP 套接字缓冲区大小提示

ClientConfiguration 是适用于 C++ 的 SDK 中的一个结构,您可以在代码中将其实例化并加以使用。以下代码段说明了如何使用该类通过代理访问 Amazon S3。

Aws::Client::ClientConfiguration clientConfig; clientConfig.proxyHost = "localhost"; clientConfig.proxyPort = 1234; clientConfig.proxyScheme = Aws::Http::Scheme::HTTPS; Aws::S3::S3Client(clientConfig);

配置变量声明

ClientConfiguration 结构声明了以下成员变量:

Aws::String accountId; Aws::String accountIdEndpointMode = "preferred"; bool allowSystemProxy = false; Aws::String appId; Aws::String caPath; Aws::String caFile; struct { RequestChecksumCalculation requestChecksumCalculation = RequestChecksumCalculation::WHEN_SUPPORTED; ResponseChecksumValidation responseChecksumValidation = ResponseChecksumValidation::WHEN_SUPPORTED; } checksumConfig; ProviderFactories configFactories = ProviderFactories::defaultFactories; long connectTimeoutMs = 1000; struct CredentialProviderConfiguration { Aws::String profile; Aws::String region; struct { long metadataServiceNumAttempts = 1; long metadataServiceTimeout = 1; std::shared_ptr<RetryStrategy> imdsRetryStrategy; bool disableImdsV1; bool disableImds; } imdsConfig; struct STSCredentialsCredentialProviderConfiguration { Aws::String roleArn; Aws::String sessionName; Aws::String tokenFilePath; std::chrono::milliseconds retrieveCredentialsFutureTimeout = std::chrono::seconds(10); } stsCredentialsProviderConfig; } credentialProviderConfig; bool disableExpectHeader = false; bool disableIMDS = false; bool disableImdsV1 = false; bool enableClockSkewAdjustment = true; Aws::Crt::Optional<bool> enableEndpointDiscovery; bool enableHostPrefixInjection = true; bool enableHttpClientTrace = false; bool enableTcpKeepAlive = true; Aws::String endpointOverride; std::shared_ptr<Aws::Utils::Threading::Executor> executor = nullptr; FollowRedirectsPolicy followRedirects; Aws::Http::TransferLibType httpLibOverride; Aws::Http::TransferLibPerformanceMode httpLibPerfMode = Http::TransferLibPerformanceMode::LOW_LATENCY; long httpRequestTimeoutMs = 0; unsigned long lowSpeedLimit = 1; unsigned maxConnections = 25; Aws::Utils::Array<Aws::String> nonProxyHosts; Aws::String profileName; Aws::String proxyCaFile; Aws::String proxyCaPath; Aws::Http::Scheme proxyScheme; Aws::String proxyHost; unsigned proxyPort = 0; Aws::String proxyUserName; Aws::String proxyPassword; Aws::String proxySSLCertPath; Aws::String proxySSLCertType; Aws::String proxySSLKeyPath; Aws::String proxySSLKeyType; Aws::String proxySSLKeyPassword; std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> readRateLimiter = nullptr; Aws::String region; Aws::Client::RequestCompressionConfig requestCompressionConfig; long requestTimeoutMs = 0; std::shared_ptr<RetryStrategy> retryStrategy = nullptr; Aws::Http::Scheme scheme; unsigned long tcpKeepAliveIntervalMs = 30000; std::shared_ptr<smithy::components::tracing::TelemetryProvider> telemetryProvider; Aws::String userAgent; bool useDualStack = false; bool useFIPS = false; bool verifySSL = true; Aws::Http::Version version = Http::Version::HTTP_VERSION_2TLS; struct WinHTTPOptions { bool useAnonymousAuth = false; } winHTTPOptions; std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> writeRateLimiter = nullptr; static Aws::String LoadConfigFromEnvOrProfile(const Aws::String& envKey, const Aws::String& profile, const Aws::String& profileProperty, const Aws::Vector<Aws::String>& allowedValues, const Aws::String& defaultValue);

配置变量描述

以下列表介绍了可用于自定义客户端行为的 ClientConfiguration 成员变量。

accountId

指定 AWS 账户 ID 以用于基于账户的端点路由。使用格式 111122223333。基于账户的端点路由可提高某些服务的请求性能。

accountIdEndpointMode

控制基于账户的端点路由行为。有效值为“required”、“disabled”或“preferred”。默认值为“preferred”。设置为“disabled”可在必要时关闭基于账户的端点路由。

allowSystemProxy

控制 HTTP 客户端是否发现系统代理服务器设置。默认设置为 false。设置为 true 以启用自动代理发现。

appId

指定可选的特定于应用程序的标识符。设置后,此值将以 App/{appId} 格式附加到 User-Agent 标头中。您可以使用 AWS_SDK_UA_APP_ID 环境变量或 sdk_ua_app_id 共享配置文件属性设置此值。

caPath、caFile

指示 HTTP 客户端查找 SSL 证书信任存储的位置。示例信任存储库可能是使用 OpenSSL c_rehash 实用程序准备的目录。除非您的环境使用符号链接,否则无需设置这些变量。这些变量对 Windows 和 macOS 系统没有影响。

checksumConfig

包含校验和计算和验证设置。包括 requestChecksumCalculationresponseChecksumValidation,默认值为 WHEN_SUPPORTED。

configFactories

指定用于初始化客户端实用程序类的工厂方法,例如 ExecutorRetryStrategy。除非被覆盖,否则使用默认工厂。

requestTimeoutMs 和 connectTimeoutMs

指定 HTTP 请求超时前的等待时间(以毫秒为单位)。例如,在传输大文件时,可以考虑增加这些时间。

credentialProviderConfig

包含凭证提供程序的配置设置。使用此结构来自定义 SDK 获取 AWS 凭证的方式。

disableExpectHeader

仅适用于 CURL HTTP 客户端。默认情况下,CURL 会在 HTTP 请求中添加“Expect: 100-Continue”标头,以避免在服务器收到标头后立即返回错误的情况下发送 HTTP 有效载荷。此行为可以节省一次网络往返,在有效载荷较小且网络延迟敏感的情况下非常有用。该变量的默认设置为 false。如果设置为 true,则指示 CURL 将 HTTP 请求标头和正文有效载荷一起发送。

disableIMDS

控制是否禁用实例元数据服务(IMDS)调用。默认设置为 false。设置为 true 可在 EC2 实例之外运行时禁用 IMDS 调用。

disableImdsV1

控制是否在允许 IMDSv2 的同时禁用 IMDSv1 调用。默认设置为 false。设置为 true 可仅禁用 IMDSv1 调用以增强安全性。

enableClockSkewAdjustment

控制每次 HTTP 尝试后是否调整时钟偏差。默认设置为 false。

enableEndpointDiscovery

控制是否使用端点发现。默认情况下,将使用区域或被覆盖的端点。要启用端点发现,请将此变量设置为 true。

enableHostPrefixInjection

控制 HTTP 主机是否向 DiscoverInstances 请求添加“data-”前缀。默认情况下,启用此行为。要禁用此行为,请将此变量设置为 false。

enableHttpClientTrace

控制是否出于调试目的启用 HTTP 客户端跟踪。默认设置为 false。设置为 true 将会启用详细的 HTTP 请求和响应日志记录。

enableTcpKeepAlive

控制是否发送 TCP 保持连接数据包。默认设置为 true。与 tcpKeepAliveIntervalMs 变量结合使用。此变量不适用于 WinINet 和 IXMLHTTPRequest2 客户端。

endpointOverride

指定用于与服务通信的覆盖 HTTP 端点。

executor

引用异步执行器处理程序的实现。默认行为是为每个异步调用创建和分离线程。要更改此行为,请实现 Executor 类的一个子类并为该变量分配一个实例。

followRedirects

控制处理 HTTP 300 重定向代码时的行为。

httpLibOverride

指定默认 HTTP 工厂返回的 HTTP 实现。Windows 的默认 HTTP 客户端是 WinHTTP。所有其他平台的默认 HTTP 客户端均为 CURL。

httpLibPerfMode

指定 HTTP 库的性能模式。默认设置为 LOW_LATENCY。您可以调整此设置以针对不同的性能特征进行优化。

httpRequestTimeoutMs

指定 HTTP 请求超时(以毫秒为单位)。默认值为 0(无超时)。传输大文件时,请考虑增加此值。

lowSpeedLimit

指定允许的最低传输速度(以每秒字节为单位)。如果传输速度低于指定速度,则传输操作将中止。默认设置为 1 字节/秒。此变量仅适用于 CURL 客户端。

maxConnections

指定与单个服务器的 HTTP 的最大 HTTP 连接数。默认值为 25。除您的带宽实际可支持的范围外,无其他最大允许值限制。

nonProxyHosts

指定应绕过代理设置的主机名数组。使用此设置可将特定主机排除在代理配置之外。

profileName

指定要用于配置的 AWS 配置文件(profile)名称。SDK 会从 AWS 配置文件中指定的配置文件(profile)加载设置。

proxyCaFile

指定代理连接的证书颁发机构文件路径,当该路径与默认路径不同时使用。

proxyCaPath

指定代理连接的证书颁发机构信任存储路径,当该路径与默认路径不同时使用。

proxyScheme、proxyHost、proxyPort、proxyUserName 和 proxyPassword

用于为与 AWS 的所有通信设置和配置代理。该功能的适用场景示例包括:结合 Burp Suite 进行调试,或通过代理连接互联网。

proxySSLCertPath

为需要客户端证书的代理连接指定 SSL 证书文件的路径。

proxySSLCertType

指定用于代理连接的 SSL 证书类型。常见类型包括 PEM 和 DER。

proxySSLKeyPassword

指定代理连接中使用的 SSL 私钥的密码,前提是该私钥受密码保护。

proxySSLKeyPath

为需要客户端证书的代理连接指定 SSL 私钥文件的路径。

proxySSLKeyType

指定用于代理连接的 SSL 私钥类型。常见类型包括 PEM 和 DER。

writeRateLimiter 和 readRateLimiter

对读/写速率限制器实现的引用,这些限制器用于限制传输层的带宽使用。默认情况下,读取和写入速率不受限制。要引入限制功能,请实现 RateLimiterInterface 的一个子类并为这些变量分配一个实例。

区域

指定要使用的 AWS 区域,例如 us-east-1。默认情况下,使用的区域是在适用的 AWS 凭证中配置的默认区域。

requestCompressionConfig

包含请求压缩的配置设置。使用此结构控制请求在传输前的压缩时机与压缩方式。

retryStrategy

引用重试策略的实现。默认策略实现指数回退策略。要执行不同的策略,请实现 RetryStrategy 类的子类并为该变量分配一个实例。

scheme

指定 URI 寻址方案(HTTP 或 HTTPS)。默认方案是 HTTPS。

tcpKeepAliveIntervalMs

指定通过 TCP 连接发送保持连接(keep-alive)数据包的时间间隔(以毫秒为单位)。默认间隔为 30 秒。最小设置为 15 秒。此变量不适用于 WinINet 和 IXMLHTTPRequest2 客户端。

telemetryProvider

引用遥测提供程序实现来收集指标和跟踪数据。配置此设置来启用可观测性功能。

userAgent

仅供内部使用。请勿更改此变量的设置。

useDualStack

控制是否使用 IPv4 和 IPv6 双栈端点。请注意,并非所有 AWS 服务在所有区域都支持 IPv6。

useFIPS

控制是否使用经过联邦信息处理标准(FIPS)140-2 验证的加密模块。默认设置为 false。如果需要实现 FIPS 合规性,则设置为 true。

verifySSL

控制是否验证 SSL 证书。默认情况下将验证 SSL 证书。要禁用验证,请将变量设置为 false。

version

指定用于请求的 HTTP 版本。默认设置为 HTTP_VERSION_2TLS(基于 TLS 的 HTTP/2)。

winHTTPOptions

包含特定于 Windows 的 HTTP 配置选项。包括 useAnonymousAuth,默认设置为 false。