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

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

在代码中为 C++ 服务客户端配置 AWS SDK

当直接在代码中处理配置时,配置范围仅限于使用该代码的应用程序。在该应用程序中,有用于所有服务客户机的全局配置、特定 AWS 服务 类型的所有客户机的配置或特定服务客户机实例的配置选项。

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

  • 通过代理连接到 Internet

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

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

ClientConfiguration是 SDK for C++ 中的一个结构,你可以在代码中实例化并使用它。以下代码段说明了如何使用该类通过代理访问 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 的格式。基于账户的端点路由可提高某些服务的请求性能。

accountIdEndpoint模式

控制基于账户的端点路由行为。有效值为 “必填”、“已禁用” 或 “首选”。默认值为 “首选”。设置为 “已禁用” 可在必要时关闭基于账户的端点路由。

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 系统没有影响。

checksumC

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

配置工厂

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

requestTimeoutMs 和 connectTimeoutMs

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

credentialProviderConfig

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

disableExpectHeader

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

禁用 IMDS

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

禁用 imdsv1

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

enableClockSkew调整

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

enableEndpointDiscovery

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

enableHostPrefix注射

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

enableHttpClient跟踪

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

enableTcpKeep还活着

控制是否发送 TCP 保持活动状态的数据包。默认设置为 true。与tcpKeepAliveIntervalMs变量一起使用。此变量不适用于 Win INet 和 IXMLHTTPRequest2 客户端。

终端节点覆盖

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

执行者

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

关注重定向

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

httpLibOverride

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

httpLibPerf模式

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

httpRequestTimeout女士

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

lowSpeedLimit

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

最大连接数

指定与单个服务器的最大 HTTP 连接数。默认值为 25。除了您的带宽可以合理支持的范围外,不存在允许的最大值。

nonProxyHosts

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

profileName

指定用于 AWS 配置的配置文件名称。SDK 将来自指定配置文件的设置加载到 AWS 配置文件中。

proxyCaFile

指定代理连接的证书颁发机构文件的路径与默认路径不同。

proxyCaPath

为代理连接指定证书颁发机构信任存储的路径(如果路径与默认路径不同)。

ProxyScheme、ProxyHost、proxyPort 和 proxyPassword proxyUserName

用于为与的所有通信设置和配置代理 AWS。此功能何时可能有用的示例包括与 Burp 套件一起进行调试,或者使用代理连接到 Internet。

代理SSLCert路径

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

代理SSLCert类型

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

代理SSLKey密码

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

代理SSLKey路径

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

代理SSLKey类型

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

writeRateLimiter 和 readRateLimiter

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

区域

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

requestCompressionConfig

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

重试策略

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

scheme

指定 URI 寻址方案,可以是 HTTP 或 HTTPS。默认方案是 HTTPS。

tcpKeepAliveIntervalMs

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

遥测提供商

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

userAgent

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

useDualStack

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

使用 Fips

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

verifysSL

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

version

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

赢了 HTTPOptions

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