AWS SDK for SwiftでDynamoDB localに接続する際にSSL errorが出る
概要
DynamoDB localをdockerで起動し、AWS SDK for Swiftで接続しようとした際に
let client = try await DynamoDBClient(config: .init(endpoint: "http://localhost:8000"))
error URLSessionHTTPClient : [ClientRuntime] URLRequest(POST https://localhost:8000/) failed with error: Error Domain=NSURLErrorDomain Code=-1200 "SSLエラーが起きたため、サーバへのセキュリティ保護された接続を確立できません。" UserInfo={NSErrorFailingURLStringKey=https://localhost:8000/, NSLocalizedRecoverySuggestion=それでもサーバに接続しますか?, _kCFStreamErrorDomainKey=3, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <19311CA1-2E24-44D9-A54A-2B6D7C52594C>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <19311CA1-2E24-44D9-A54A-2B6D7C52594C>.<1>"
), NSLocalizedDescription=SSLエラーが起きたため、サーバへのセキュリティ保護された接続を確立できません。, NSErrorFailingURLKey=https://localhost:8000/, NSUnderlyingError=0x600001dec8a0 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9836, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9836, _NSURLErrorNWPathKey=satisfied (Path is satisfied), viable, interface: lo0}}, _kCFStreamErrorCodeKey=-9836}
Test CreateTable() recorded an issue at EventStoreForDynamoDBTests.swift:12:6: Caught error: Error Domain=NSURLErrorDomain Code=-1200 "SSLエラーが起きたため、サーバへのセキュリティ保護された接続を確立できません。" UserInfo={NSErrorFailingURLStringKey=https://localhost:8000/, NSLocalizedRecoverySuggestion=それでもサーバに接続しますか?, _kCFStreamErrorDomainKey=3, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <19311CA1-2E24-44D9-A54A-2B6D7C52594C>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <19311CA1-2E24-44D9-A54A-2B6D7C52594C>.<1>"
), NSLocalizedDescription=SSLエラーが起きたため、サーバへのセキュリティ保護された接続を確立できません。, NSErrorFailingURLKey=https://localhost:8000/, NSUnderlyingError=0x600001dec8a0 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9836, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9836, _NSURLErrorNWPathKey=satisfied (Path is satisfied), viable, interface: lo0}}, _kCFStreamErrorCodeKey=-9836}
のエラーが出て、詰まったのでその備忘録です
解決策
何も設定しない
何も設定しない場合、http://localhost:8000
にデフォルトで向くようになります。この場合HTTPでアクセスされ、SSLエラーが発生しなくなりました.
@preconcurrency import AWSDynamoDB
let client = try await DynamoDBClient()
endpointを設定かつ、HTTPでアクセスする必要がある場合
デフォルトのURLSessionHTTPClientの設定がhttpsになっているため、HTTPClientを自分で作成したものにする必要があります。
@preconcurrency import AWSDynamoDB
@preconcurrency import ClientRuntime
let client = try await DynamoDBClient(config: .init(
endpoint: "http://localhost:8001",
httpClientEngine: ClientConfigurationDefaults.makeClient(httpClientConfiguration: .init(protocolType: .http))
))
Discussion