Amazon S3 не возвращает ответ или выдает ошибку при запуске на экземпляре EC2 - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь подключиться к корзине S3, используя ключ доступа и секретный ключ. Это работает правильно на моей локальной машине. Однако, когда я пытаюсь запустить его на экземпляре EC2, выполнение останавливается на строке result = s3Client.listObjectsV2(request);. Нет никаких исключений. Там просто нет ответа. Я был бы очень признателен за любую помощь.

Java код

    AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accesskey, secretkey)))
        .withRegion(region).build();

    ListObjectsV2Result result = null;
    List<S3ObjectSummary> objects = null;
    String continuationToken = null;

    System.out.println("Starting loop to request information");

    int count = 1;
    do {
         ListObjectsV2Request request = new ListObjectsV2Request();
         request.setBucketName(bucket);
         request.setContinuationToken(continuationToken);

         System.out.println("Placing request information #" + count);
         result = s3Client.listObjectsV2(request);
         System.out.println("Got response for request #" + count++);

         continuationToken = result.getNextContinuationToken();
         objects = result.getObjectSummaries();

         for (S3ObjectSummary os : objects) {
             System.out.println(os.getKey());
         }
    } while (continuationToken != null);

пом. xml

    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.11.466</version>
    </dependency>

S3 Bucket policy

{
    "Version": "2012-10-17",
    "Id": "Policy1563965234895",
    "Statement": [
        {
            "Sid": "Stmt1563965231235",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::xxxxxxxxxxxx:user/xyz_dev",
                ]
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::xxxx-yyy-bucket",
                "arn:aws:s3:::xxxx-yyy-bucket/*"
            ]
        }
    ]
}

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Вы упоминаете, что ваш проект Spring BOOT.

Мы работаем над документом, который покажет вам, как написать приложение Spring BOOT, которое вызывает AWS Services (в документе в качестве примера используется DynamoDB) и развернуть его в AWS Elasti c Бобовый стебель.

Когда вы делаете это, вам нужно сделать несколько вещей, чтобы приложение Spring BOOT заработало, например:

  1. Установить порт, который прослушивает Spring Boot путем добавления новой переменной среды с именем SERVER_PORT со значением 5000.

  2. Добавьте новую переменную с именем AWS_ACCESS_KEY_ID и укажите свой ключ доступа ценность.

  3. Добавьте новую переменную с именем AWS_SECRET_ACCESS_KEY и укажите значение секретного ключа.

Чтобы создать службу AWS клиент, используйте EnvironmentVariableCredentialsProvider - вот так, чтобы использовать переменные среды.

Region region = Region.US_EAST_1; DynamoDbClient ddb =

 DynamoDbClient.builder()
             .region(region)
             .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
             .build();

Когда документ будет готов, я опубликую его здесь.

Надеюсь, это поможет ...

0 голосов
/ 26 февраля 2020

Спасибо за ваши ответы. У меня было несколько проблем с кодом (это не было проблемой с Amazon S3)

  1. Это была печально известная ошибка java.lang.NoSuchFieldError: SIGNING_REGION, но возникающая только в EC2. Он не был перехвачен в блоке try-catch, окружающем код, но был в ответе HTTP.
  2. Мой проект находится в Spring Boot, он неправильно импортировал разные версии aws -sdk модулей
  3. У меня была другая запись POM hadoop-aws, которая имела собственную версию aws -sdk

Исправление:

  1. Добавлен индивидуальный aws -sdk Записи модуля вместо полных aws - java -sdk com.amazonaws aws - java -sdk-cognitoidp

    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-core -->
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-core</artifactId>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-cognitoidentity -->
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-cognitoidentity</artifactId>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-cognitoidp -->
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-cognitoidp</artifactId>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-kms -->
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-kms</artifactId>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3 -->
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-s3</artifactId>
    </dependency>
    
  2. Добавлены исключения к значению oop - aws

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-aws</artifactId>
        <version>3.1.1</version>
        <exclusions>
            <exclusion>
                <groupId>com.amazonaws</groupId>
                <artifactId>aws-java-sdk-bundle</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...