🚨

AWS SDK for SwiftでDynamoDB localに接続する際にSSL errorが出る

2025/01/25に公開

概要

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