使用 Java2 aws sdk 时如何配置 Region?

asds_asds

我编写了以下控制器来生成 PreSigned S3 上传链接。

case class S3Controller(private val s3Config: S3Config, private val awsConfig: AwsConfig) {
  val URL_TIMEOUT_IN_MILLIS: Long = 60 * 5 * 1000

  def getPreSignedURLForUpload(keyName: String): String = {
    val preSigner: S3Presigner = DefaultS3Presigner.builder()
      .serviceConfiguration(s3Config.s3Configuration)
      .credentialsProvider(awsConfig.awsCredentialsProvider).build()

    val objectRequest: PutObjectRequest = PutObjectRequest.builder()
      .bucket(s3Config.bucketName)
      .key(keyName)
      .contentType("text/plain")
      .build()

    val preSignRequest: PutObjectPresignRequest = PutObjectPresignRequest.builder()
      .signatureDuration(Duration.ofMinutes(10))
      .putObjectRequest(objectRequest)
      .build()

    val preSignedRequest: PresignedPutObjectRequest = preSigner.presignPutObject(preSignRequest)


    val myURL: String = preSignedRequest.url().toString

    myURL
  }
}

我使用的配置对象

case class S3Config (
                      bucketName: String,
                      s3Configuration: S3Configuration
                    )
case class AwsConfig (
                       awsCredentialsProvider: AwsCredentialsProvider
                     )

我尝试使用以下代码对其进行测试

  test("S3 Controller"){
    val s3Configuration: S3Configuration = S3Configuration.builder()
      .pathStyleAccessEnabled(true).build()

    val s3Config: S3Config = S3Config(
      bucketName = "ccc",
      s3Configuration = s3Configuration
    )

    val awsCredentials: AwsCredentials = AwsBasicCredentials.create("aaa", "bbb")
    val awsCredentialsProvider: AwsCredentialsProvider = AwsCredentialsProviderChain.of(StaticCredentialsProvider.create(awsCredentials))
    
    val awsConfig: AwsConfig = AwsConfig(awsCredentialsProvider = awsCredentialsProvider)

    val s3Controller: S3Controller = S3Controller(s3Config, awsConfig)

    s3Controller.getPreSignedURLForUpload("ab")
  }

此测试失败并显示消息

Unable to load region from any of the providers in the chain software.amazon.awssdk.regions.providers.DefaultAwsRegionProviderChain@4e5ed836: [software.amazon.awssdk.regions.providers.SystemSettingsRegionProvider@5f8edcc5: Unable to load region from system settings. Region must be specified either via environment variable (AWS_REGION) or  system property (aws.region)., software.amazon.awssdk.regions.providers.AwsProfileRegionProvider@60015ef5: No region provided in profile: default, software.amazon.awssdk.regions.providers.InstanceProfileRegionProvider@2ab4bc72: Unable to contact EC2 metadata service.]
software.amazon.awssdk.core.exception.SdkClientException: Unable to load region from any of the providers in the chain software.amazon.awssdk.regions.providers.DefaultAwsRegionProviderChain@4e5ed836: [software.amazon.awssdk.regions.providers.SystemSettingsRegionProvider@5f8edcc5: Unable to load region from system settings. Region must be specified either via environment variable (AWS_REGION) or  system property (aws.region)., software.amazon.awssdk.regions.providers.AwsProfileRegionProvider@60015ef5: No region provided in profile: default, software.amazon.awssdk.regions.providers.InstanceProfileRegionProvider@2ab4bc72: Unable to contact EC2 metadata service.]

我知道这是因为我没有在任何地方配置区域。
配置 Region 的所有方法都是通过环境变量或配置文件。

有没有办法以编程方式配置区域?

smac2020

您在使用 builder() 声明服务对象时设置区域:

Region region = Region.US_EAST_1;
S3Presigner presigner = S3Presigner.builder()
                .region(region)
                .build();

所有 Java V2 代码示例都显示了这种设置区域的方式:

https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/example_code/s3/src/main/java/com/example/s3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何为TypeScript使用AWS sdk定义?

AWS配置使用AWS Java SDK获得

使用在aws-sdk中扮演角色的配置文件(AWS JavaScript SDK)

使用AWS Java SDK获取CloudWatch指标?

使用AWS SDK for Java API时SSLHandshakeException

使用AWS Java SDK的AWS计费信息

如何使用AWS Java SDK禁用请求级日志记录?

如何在AWS Java SDK中使用IAM角色

AWS Java SDK-使用Region方法时在Jackson中出现NoSuchMethodError

如何获得AWS上的凭证?我必须使用AWS Cognito SDK还是AWS SDK?

使用Retrofit2和Rx Java2发送大量POST时出现OutOfMemoryException

AWS Java SDK:如何使用AmazonDaxClientBuilder替换1.11.174 SDK版本中的常规DynamoDB客户端

适用于ssm的aws Java sdk提供了java.lang.NoSuchFieldError:SIGNING_REGION

使用Java SDK的AWS DataPipeline EvaluateExpression

在Scala中使用AWS Java SDK V2时,更好的处理异步调用的方法吗?

如何使用Java SDK生成AWS引导证书?

如何使用Java SDK 2在AWS Route 53中设置多个MX记录

如何在dynamodb java aws sdk 2.x的本地实例中配置端点?

使用PHP AWS SDK2脚本重新配置服务器

如何使用aws cli命令设置--region?

使用AWS Java的SDK,如何终止当前实例的CloudFormation堆栈?

如何在c#中使用aws sdk检索aws-ec2 Windows实例密码

如何使用AWS IOT Java SDK为事物创建规则?

开发AWS Lambda函数时无法理解要使用哪个Java SDK

使用 Java SDK2 获取临时 AWS 凭证

如何使用 AWS golang v2 SDK 配置 S3ForcePathStyle?

如何使用 AWS SDK V2 为 Amazon S3 配置终端节点?

如何使用变量中的凭证运行 AWS SDK 版本 2?

如何使用 spring-cloud-aws-messaging 或 aws-java-sdk 设置 AWS SNS 消息属性值?