繁体   English   中英

使用 VPC 终端节点连接到 AWS S3 的示例 Java 代码

[英]Sample Java code to connect to AWS S3 using VPC endpoint

我是 AWS 的新手,正在寻找用于使用 vpc 端点连接到 AWS s3 的 Java 示例。 我在我的本地机器上尝试了下面的代码片段,但它不起作用。 如果我使用相同的凭据并使用 SFTP 客户端(WinSCP)登录,我就可以登录。 我想使用 S3 从中传输文件,以便我可以在代码中更快地处理文件。 此外,此代码不会在 EC2 实例中运行。

AWSCredentials credentials = new BasicAWSCredentials("*****", "*******");
    ClientConfiguration clientConfig = new ClientConfiguration().withRequestTimeout(50000);
    clientConfig.setUseTcpKeepAlive(true);
    AmazonS3 s3client = AmazonS3ClientBuilder
            .standard()
            .withCredentials(new AWSStaticCredentialsProvider(credentials))
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("vpce-************-*******.server.transfer.us-west-2.vpce.amazonaws.com", Regions.US_WEST_2.toString()))
            .withPathStyleAccessEnabled(true)
            .withClientConfiguration(clientConfig)
            .build();

我团队中的人只是用新的 S3 VPC 端点替换旧的 sftp 连接详细信息,并使用旧代码上传文件。 但我认为我们这样做并没有充分利用 s3 功能。 在这里将不胜感激专家的帮助。

您的问题中提供的信息存在多个问题。

vpce-************-*******.server.transfer.us-west-2.vpce.amazonaws.com不是Amazon S3 VPC 终端节点。 它是名为AWS Transer for SFTP的服务的 VPC 终端节点,该服务提供连接到 Amazon S3 存储桶的托管 SFTP 网关。

S3 VPC 端点不同,不需要客户端配置,也没有特殊的端点主机名——这些是透明的,在 VPC 内创建和正确配置时会自动使用。 他们提供了一个 REST 接口,而不是 SFTP。

在这两种情况下,VPC 终端节点只能从 VPC 内部使用,因此您无论如何都无法从 EC2 外部访问 AWS Transer for SFTP 终端节点。

但严格来说,这不是它不起作用的原因。 您拥有的代码也无法在 VPC 内运行,问题的根源在于AmazonS3 s3client = AmazonS3ClientBuilder构建了 S3 REST客户端,而不是SFTP客户端。 此客户端不能与面向 Internet 的或在 VPC 内部的 AWS Transfer for SFTP 终端节点一起使用,因为此类终端节点不是AwsClientBuilder.EndpointConfiguration()设计用于使用的终端节点。 在此处找到用于 SDK 的端点。 对于 us-west-2,ipv4 连接的端点是https://s3.us-west-2.amazonaws.com ,而 ipv4/ipv6 是https://s3.dualstack.us-west-2.amazonaws.com .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM