1

I am beginner of AWS and I have unclear points on connecting AWS API endpoints. I was unable to access AWS API endpoints from java client. Every times, it failed.

  • May I know why it failed to connect?
  • Is there any source code I can reference to do?

    public interface LamdaInterface {
    
        @LambdaFunction(functionName="GetCategoryAction")
        public List<LamdaOutput> getAllCategory(LamdaInput input);
    
    }
    
    public class LamdaTest {
    
    public static void main(String[] args) {
        AWSCredentials credentails = new AWSCredentials() {
    
            @Override
            public String getAWSSecretKey() {
                // my aws secret key
                return "xxxx";
            }
    
            @Override
            public String getAWSAccessKeyId() {
                // my aws access key Id
                return "xxx";
            }
        };
    
        AWSLambdaClient lambda = new AWSLambdaClient(credentails);
        lambda.configureRegion(Regions.AP_NORTHEAST_1);
        lambda.setEndpoint("https://xxx.execute-api.ap-northeast-1.amazonaws.com/prod/listall");
    
        LamdaInterface service = LambdaInvokerFactory.build(LamdaInterface.class, lambda);
        System.out.println("Calling...");
        List<LamdaOutput> list = service.getAllCategory(new LamdaInput());
        System.out.println("list : " + list);
        for (LamdaOutput l : list) {
            System.out.println("Name : " + l.getName());
        }
    }
    
    }
    

It failed by this error.

Calling...


Exception in thread "main" com.amazonaws.AmazonClientException: Unable to execute HTTP request: Connection timed out: connect  
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:642)    
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:400)    
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:362) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:311)  
    at com.amazonaws.services.lambda.AWSLambdaClient.invoke(AWSLambdaClient.java:1925) 
    at com.amazonaws.services.lambda.AWSLambdaClient.invoke(AWSLambdaClient.java:1029) 
    at com.amazonaws.services.lambda.invoke.LambdaInvokerFactory$LambdaInvocationHandler.invoke(LambdaInvokerFactory.java:121) 
    at com.sun.proxy.$Proxy7.getAllCategory(Unknown Source)    
    at testPrj.LamdaTest.main(LamdaTest.java:43) Caused by: java.net.ConnectException: Connection timed out: connect

Even though I tried to connect from the browser, it failed. It is GET request so I don't need to pass any request parameters.

https://xxx.execute-api.ap-northeast-1.amazonaws.com/prod/listall

Error is : **{"message":"Missing Authentication Token"}**

1 Answer 1

2

It looks like you are trying to invoke your lambda function at the URL you are setting as the endpoint. The endpoint is where the API client sends it's API calls. It is not related to where you'd browse to invoke your lambda. The valid lambda endpoints are listed here: http://docs.aws.amazon.com/general/latest/gr/rande.html#lambda_region. Incidentally, you should either set the endpoint, or call setRegion/configureRegion, but not both.

To invoke your lambda, use the invoke() API call on com.amazonaws.services.lambda.AWSLambdaClient or the AWS CLI (aws lambda invoke --function-name GetCategoryAction).

If you want to make your lambda accessible on the web as an API, you might want to look at the Amazon API Gateway service.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.