Flink 无法将 http 请求发送到本地堆栈上的 S3 存储桶
Flink can not send http request to S3 bucket on localstack
我正在尝试调用 getObject
api 以在我的 Flink 作业中获取 S3 bucket0 上的外部文件,但它不断从我的 localstack 设置中获取 SdkException:
org.apache.flink.kinesis.shaded.com.amazonaws.SdkClientException:
Unable to execute HTTP request: mybucketName.s3.localstack
这就是我使用 docker compose 和 localstack
创建资源的方式
container_name: localstack
image: localstack/localstack:0.12.15
ports:
- "14566:4566"
expose:
- "4566"
environment:
- DEFAULT_REGION=us-east-1
- AWS_ACCESS_KEY_ID=test
- AWS_SECRET_ACCESS_KEY=test
- EDGE_PORT=4566
- SERVICES=s3
- AWS_CBOR_DISABLE=1
我尝试用 http://localstack:4566 和 http://s3.localstack:4566 替换端点,但我仍然看到错误
import org.apache.flink.kinesis.shaded.com.amazonaws.services.s3.AmazonS3ClientBuilder;
AwsClientBuilder.EndpointConfiguration endpointConfiguration =
new AwsClientBuilder.EndpointConfiguration(
"http://s3.localstack:4566", // also tried localstack:4566 and 127.0.0.1:4566 etc..
region);
s3Client = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(endpointConfiguration)
.build()
S3Object s3Object = s3Client.getObject(bucketName, objectLocation);
有人知道我为什么会遇到这个问题吗?抱歉,SdkException 仅显示无法执行 HTTP,不会输出 context/info 的批次。谢谢。
我想我已经找到了解决方案,我应该在我的客户端中调用 .enablePathStyleAccess()
AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(endpointConfiguration)
.enablePathStyleAccess()
.build()
请参考这个post
我正在尝试调用 getObject
api 以在我的 Flink 作业中获取 S3 bucket0 上的外部文件,但它不断从我的 localstack 设置中获取 SdkException:
org.apache.flink.kinesis.shaded.com.amazonaws.SdkClientException:
Unable to execute HTTP request: mybucketName.s3.localstack
这就是我使用 docker compose 和 localstack
创建资源的方式container_name: localstack
image: localstack/localstack:0.12.15
ports:
- "14566:4566"
expose:
- "4566"
environment:
- DEFAULT_REGION=us-east-1
- AWS_ACCESS_KEY_ID=test
- AWS_SECRET_ACCESS_KEY=test
- EDGE_PORT=4566
- SERVICES=s3
- AWS_CBOR_DISABLE=1
我尝试用 http://localstack:4566 和 http://s3.localstack:4566 替换端点,但我仍然看到错误
import org.apache.flink.kinesis.shaded.com.amazonaws.services.s3.AmazonS3ClientBuilder;
AwsClientBuilder.EndpointConfiguration endpointConfiguration =
new AwsClientBuilder.EndpointConfiguration(
"http://s3.localstack:4566", // also tried localstack:4566 and 127.0.0.1:4566 etc..
region);
s3Client = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(endpointConfiguration)
.build()
S3Object s3Object = s3Client.getObject(bucketName, objectLocation);
有人知道我为什么会遇到这个问题吗?抱歉,SdkException 仅显示无法执行 HTTP,不会输出 context/info 的批次。谢谢。
我想我已经找到了解决方案,我应该在我的客户端中调用 .enablePathStyleAccess()
AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(endpointConfiguration)
.enablePathStyleAccess()
.build()
请参考这个post