标签: aws-java-sdk

com包中com.amazonaws.services.lambda.runtime在AWS java sdk 1.10.2中不存在

我正在尝试使用入门( Java中的AWS Lambda代码编写)页面中的Java代码示例,但我被困为com.amazonaws.services.lambda.runtime pacakge似乎缺失了

以下是示例代码:

package example;

import com.amazonaws.services.lambda.runtime.Context;      //package does not exist error
import com.amazonaws.services.lambda.runtime.LambdaLogger; // package does not exist error
import com.amazonaws.services.s3.AmazonS3;       // import works (not needed, I've put them in for testing import)
import com.amazonaws.services.s3.model.S3Object; // import works (not needed, I've put them in for testing import)

public class Hello {
    public String myHandler(int myCount, Context context) {
        LambdaLogger logger = context.getLogger();
        logger.log("received : " + myCount);
        return String.valueOf(myCount);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Netbeans中通过命令行(指定aws …

java aws-sdk aws-lambda aws-java-sdk

22
推荐指数
2
解决办法
2万
查看次数

使用DynamoDBMapper Java AWS SDK进行分页

从API文档中,dynamo db确实支持扫描和查询操作的分页.这里的问题是将ExclusiveStartIndex当前请求设置LastEvaluatedIndex为先前请求的值,以获得结果的下一组(逻辑页).

我正在尝试实现相同但我正在使用DynamoDBMapper,这似乎有更多的优点,如与数据模型紧密耦合.所以,如果我想做上述事情,我假设我会做以下事情:

// Mapping of hashkey of the last item in previous query operation
Map<String, AttributeValue> lastHashKey = .. 
DynamoDBQueryExpression expression = new DynamoDBQueryExpression();

...
expression.setExclusiveStartKey();
List<Table> nextPageResults = mapper.query(Table.class, expression);
Run Code Online (Sandbox Code Playgroud)

我希望我的上述理解在使用DynamoDBMapper进行分页时是正确的.其次,我怎么知道我已经到了结果的末尾.如果我使用以下api,请从文档中获取:

QueryResult result = dynamoDBClient.query((QueryRequest) request);
boolean isEndOfResults = StringUtils.isEmpty(result.getLastEvaluatedKey());
Run Code Online (Sandbox Code Playgroud)

回到使用DynamoDBMapper,我怎么知道在这种情况下我是否达到了结果的结尾.

pagination amazon-web-services amazon-dynamodb aws-java-sdk

14
推荐指数
1
解决办法
2万
查看次数

从 Cognito 身份池 identityId 获取 Cognito 用户池用户名

我正在使用 AWS Congito 用户池通过 Cognito 身份池进行账户管理,该身份池将此用户池作为身份提供者。我使用它来控制通过 API 网关对 API 的访问,该网关将请求发送到 Lambda。我的 Lambda 是使用 Micronaut 用 Ja​​va 8 实现的。所有这些都运行良好。

在 Lambda 中,我从以下Principal中获取名称HttpRequest

  protected String resolveUser( HttpRequest request ){
    String ret = null;

    Optional<Principal> principal = request.getUserPrincipal();
    if( principal.isPresent() ){
      ret = principal.get().getName();
    }

    if( ret == null || ret.length() == 0 ){
      ret = "unknown";
    }
    return ret;
  }
Run Code Online (Sandbox Code Playgroud)

Cognito identityId 的字符串名称中返回的内容。像这样的东西:

us-east-1:xxxxe650-53f4-4cba-b553-5dff42bexxxx

我想记录实际的用户登录信息,或者至少有一些方法可以在需要时将 identityId 转换为登录信息。

LookupDeveloperIdentity API调用似乎是去了解这个正确的方式,但我无法得到它的工作。

尝试使用 Java 和 AWS Java SDK 2 执行此操作: …

amazon-web-services amazon-cognito aws-java-sdk micronaut micronaut-aws

14
推荐指数
1
解决办法
2322
查看次数

AmazonS3:获取警告:S3AbortableInputStream:并非所有字节都从S3ObjectInputStream读取,中止HTTP连接

这是我得到的警告:

S3AbortableInputStream:并非所有字节都从S3ObjectInputStream中读取,从而中止HTTP连接.这可能是错误,可能导致次优行为.通过范围GET仅请求您需要的字节或在使用后消耗输入流.

我尝试使用try with resources但是S3ObjectInputStream似乎没有通过此方法关闭.

 try (S3Object s3object = s3Client.getObject(new GetObjectRequest(bucket, key));
      S3ObjectInputStream s3ObjectInputStream = s3object.getObjectContent();
      BufferedReader reader = new BufferedReader(new InputStreamReader(s3ObjectInputStream, StandardCharsets.UTF_8));
    ){
  //some code here blah blah blah
 }
Run Code Online (Sandbox Code Playgroud)

我也试过下面的代码并明确关闭,但这也不起作用:

S3Object s3object = s3Client.getObject(new GetObjectRequest(bucket, key));
S3ObjectInputStream s3ObjectInputStream = s3object.getObjectContent();

try (BufferedReader reader = new BufferedReader(new InputStreamReader(s3ObjectInputStream, StandardCharsets.UTF_8));
){
     //some code here blah blah
     s3ObjectInputStream.close();
     s3object.close();
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

PS:我只从S3读取两行文件,文件中有更多数据.

amazon-s3 aws-sdk aws-java-sdk

12
推荐指数
2
解决办法
1万
查看次数

JetS3t与AWS Java SDK

我需要弄清楚AWS SDK Java API和Jets3t API之间的关系?哪个在吞吐量和性能方面更好?

我假设连接不可靠,所以我可能需要上传/下载数据块.

JetS3t中有用于分段上传的API.但我也在寻找多部分下载.

java amazon-s3 jets3t aws-java-sdk

11
推荐指数
1
解决办法
2106
查看次数

并非所有字节都从S3ObjectInputStream中读取,从而中止HTTP连接

我最近不得不升级到aws-java-sdk 1.11.108.我有一个java程序,它将s3对象(大小为8到10 GB)下载到EC2框并将其作为流处理.这个程序已经工作了2年多没有任何问题,但在更新到aws-java-sdk的最新版本后,我的文件下载在日志中中止了以下WARN消息(无例外)

WARN:com.amazonaws.services.s3.internal.S3AbortableInputStream - Not all bytes were read from the S3ObjectInputStream, aborting HTTP connection. This is likely an error and may result in sub-optimal behavior. Request only the bytes you need via a ranged GET or drain the input stream after use.

S3Object s3Obj = s3client.getObject(new GetObjectRequest(bucketName, s3FileName));
Reader reader = new BufferedReader(new InputStreamReader(new  GZIPInputStream(s3Obj.getObjectContent());
Run Code Online (Sandbox Code Playgroud)

如果有人可以告诉为什么流静默地中止而不抛出任何异常,我会很感激,以及使它工作的最佳方法是什么.

谢谢

aws-java-sdk

11
推荐指数
1
解决办法
3413
查看次数

Amazon Web Services中的API重试逻辑

http://docs.aws.amazon.com/general/latest/gr/api-retries.html

本文档提到"每个AWS SDK实现自动重试逻辑,AWS SDK for Java自动重试请求".

如果我没有指定任何重试配置,那么Java AWS SDK的默认机制是什么?如果AWS服务端出现故障,我一直在使用Java AWS SDK并获得简单的服务异常.我从未经历过任何"自动"重试机制.有人可以解释一下这种重试机制是什么吗?

java amazon-ec2 amazon-web-services aws-java-sdk

10
推荐指数
1
解决办法
7980
查看次数

“无法执行 HTTP 请求:连接到 &lt;bucket-name&gt;.s3.amazonaws.com:443 失败:连接超时

我正在尝试用 java 编写一个连接到 S3 的 Lambda 函数,然后获取数据。

当我在本地运行它时,使用 main 函数它工作正常并返回结果。但是当我将其上传到 AWS lambda 并运行它时,我收到以下错误消息:

"errorMessage": "无法执行 HTTP 请求:连接到存储桶名称.s3.amazonaws.com:443 [存储桶名称.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>
Run Code Online (Sandbox Code Playgroud)

我的请求处理程序:

public class LambdaRequestHandler implements RequestHandler<String, String> {
@Autowired
public ClaimSuffixNumberService csService;
    @Override
    public String handleRequest(String input, Context context) {
        if(csService == null) {
            csService = Application.getBean(ClaimSuffixNumberService.class);
        }
        String result= csService.readAndMakeCall("claimSuffix");
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的服务

public String getObject(String fileName) …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services aws-sdk aws-lambda aws-java-sdk

10
推荐指数
2
解决办法
5万
查看次数

从AWS Lambda发布到SNS时超时

我正在尝试从Lambda函数调用向SNS发布一些数据,但它似乎不起作用.我的功能代码是 -

public class Handler implements RequestHandler<DynamodbEvent, Void> {

    private static final String SNS_TOPIC_ARN = "arn:aws:sns:us-west-2:account_number:function_name";

    @Override
    public Void handleRequest(DynamodbEvent dynamodbEvent, Context context) {

        LambdaLogger logger = context.getLogger();

        AmazonSNSClient snsClient = new AmazonSNSClient(new DefaultAWSCredentialsProviderChain());
        snsClient.setRegion(Region.getRegion(Regions.US_WEST_2));

        for (DynamodbStreamRecord record : dynamodbEvent.getRecords()) {
            Map<String, AttributeValue> newImage = record.getDynamodb().getNewImage();

            if (newImage == null) {
                continue;
            }

            String sensorId = newImage.get("sensorID").getS();
            long timestamp = Long.parseLong(newImage.get("timestamp").getS());
            double temperature = Double.parseDouble(newImage.get("payload").getM().get("temp").getN());

            String data = sensorId + " " + timestamp + " " + temperature;

            logger.log(data); …
Run Code Online (Sandbox Code Playgroud)

java amazon-web-services amazon-sns aws-lambda aws-java-sdk

9
推荐指数
1
解决办法
3679
查看次数

Spring Boot应用程序通过AWS SES发送简单电子邮件所需的配置步骤是什么?

今天我一直在和它斗争几个小时.我开始使用http://cloud.spring.io/spring-cloud-aws/spring-cloud-aws.html#_sending_mails上的文档,这些文档并没有真正说明具体步骤.它只是说开发人员可以包含Bean XML然后自动装配MailSender.我已尝试过以及许多变种,并且无法使用spring-cloud-aws使其工作.我最终直接使用了aws-java-sdk-ses并手动配置了这个类.

这是一个简单的项目,展示了我的尝试:https: //github.com/deinspanjer/aws-ses-test

这个项目编译,但当我运行它时,我得到:

Parameter 0 of constructor in com.example.awssestest.AwsSesTestApplication required a bean of type 'org.springframework.mail.MailSender' that could not be found.
- Bean method 'mailSender' not loaded because @ConditionalOnClass did not find required class 'javax.mail.internet.MimeMessage'
- Bean method 'simpleMailSender' not loaded because @ConditionalOnClass did not find required class 'com.amazonaws.services.simpleemail.AmazonSimpleEmailService'
- Bean method 'javaMailSender' not loaded because @ConditionalOnClass did not find required class 'com.amazonaws.services.simpleemail.AmazonSimpleEmailService'
Run Code Online (Sandbox Code Playgroud)

如果我尝试添加javax-mail(https://github.com/deinspanjer/aws-ses-test/tree/try-with-javax-mail-api),则错误将更改为:

Parameter 0 of constructor in com.example.awssestest.AwsSesTestApplication required …
Run Code Online (Sandbox Code Playgroud)

amazon-ses spring-boot aws-java-sdk spring-cloud-aws

8
推荐指数
1
解决办法
4214
查看次数