"Невозможно выполнить HTTP-запрос: подключиться к.s3.amazonaws.com: 443 не удалось: истекло время соединения - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь написать лямбда-функцию в Java, которая подключается к S3 и затем извлекает данные.

Когда я запускаю ее локально, с помощью функции main она работает нормально и возвращает результат.Когда я загружаю его в AWS lambda и запускаю его, получаю следующее сообщение об ошибке:

"errorMessage": "Невозможно выполнить HTTP-запрос: подключиться к bucket-name.s3.amazonaws.com: 443 [bucket-name.s3.amazonaws.com/52.217.1.172] не удалось: истекло время соединения "," errorType ":" com.amazonaws.SdkClientException ",

У меня есть корзина S3как общедоступный.

Мой pom.xml:

<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.493</version>
</dependency>
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
       </dependency>

 <dependency>
           <groupId>com.amazonaws</groupId>
           <artifactId>aws-lambda-java-core</artifactId>
           <version>1.1.0</version>
      </dependency>

Мой запрос Обработчик:

public class LambdaRequestHandler implements RequestHandler<String, String>{

@Autowired
public ClaimSuffixNumberService csService;

@Override
public String handleRequest(String input, Context context) {
    // TODO Auto-generated method stub

    if(csService==null) {
        csService= Application.getBean(ClaimSuffixNumberService.class);
    }
    String result= csService.readAndMakeCall("claimSuffix");
    return result;
}



}

Мой сервис

public String getObject(String fileName) {
System.out.println("Inside Get Object");

    try {
        BasicAWSCredentials awsCreds = new BasicAWSCredentials("access-key","secret-key");


        AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                                .withRegion(Regions.US_EAST_1)
                                .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                                .build();

        System.out.println(s3Client);

        S3Object s3object = s3Client.getObject(new GetObjectRequest(bucket-name, object-name));


        InputStream is = s3object.getObjectContent();

        String content = StreamUtils.copyToString(is, 
 StandardCharsets.UTF_8);

        return content;

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return null;
}





public String readAndMakeCall(String fileName) {
// TODO Auto-generated method stub
try {
    System.out.println("Reading for " + fileName);
    String content = getObject(fileName);

    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

    List<ClaimSuffixNumber> claimSuffixList = mapper.readValue(content, mapper.getTypeFactory().constructCollectionType(List.class, ClaimSuffixNumber.class));
    System.out.println(claimSuffixList.toString());
    for(ClaimSuffixNumber i: claimSuffixList)
    {
        System.out.println(i);
    }
    return claimSuffixList.toString();

} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
return " ";
}

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Судя по ошибке, у вашей лямбды нет интернета.Вы теряете интернет-соединение, когда настраиваете свою лямбду в Vpc.Чтобы восстановить доступ к Интернету, вы должны: - запустить лямбду в vpc по умолчанию (если это возможно) - настроить конечную точку v3 для sp vpc для вашего настраиваемого vpc (позволяет приложениям из вашего vpc настраивать доступ к s3, есть другие конечные точки, которые можно настроить; проверить цены), это работает только для некоторых сервисов aws) - настройте NAT-шлюз (см. цены, возможности подключения не ограничены только сервисами aws)

Не имеет отношения к этому, нет причин для жесткого кодирования учетных данных aws.Все необходимые разрешения должны быть назначены вашей роли исполнения.

0 голосов
/ 08 февраля 2019

Проверьте роль, назначаемую лямбде.Лямбда-роль имеет разрешение на доступ к s3 для чтения и записи.

Проверьте политику роли лямбда-выражений.

проверьте, назначена ли ей политика корзины, и конфигурация Cors для корзины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...