spring-cloud-aws icon indicating copy to clipboard operation
spring-cloud-aws copied to clipboard

How to configure proxy for SQS in Spring Cloud AWS 3

Open ifeLawal opened this issue 7 months ago • 2 comments

Discussed in https://github.com/awspring/spring-cloud-aws/discussions/1027

Originally posted by ghughal January 22, 2024 With 2.4.x version, we were using ClientConfiguration to configure proxy (and other properties like max retry, max connection etc.) here is a sample below:

import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.sqs.AmazonSQSAsync;
import org.springframework.beans.factory.annotation.Value;
import com.amazonaws.services.sqs.AmazonSQSAsyncClientBuilder;

public class SqsConfig {

    @Value("${cloud.aws.client.proxy-host}")
    public String proxyHost;
    
    @Value("${cloud.aws.client.proxy-port}")
    public String proxyPort;
    
    @Value("${cloud.aws.client.non-proxy-hosts}")
    public String nonProxyHost;
    
    // Value is populated by the region code in the cloud environment.
    @Value("${cloud.aws.region.static}")
    public String region;

    public ClientConfiguration clientConfiguration() {
      final ClientConfiguration config = new ClientConfiguration();
      config.setProxyHost(proxyHost);
      config.setProxyPort(Integer.parseInt(proxyPort));
      config.setNonProxyHosts(nonProxyHost);
      return config;
    }

    public AmazonSQSAsync localamazonSqsAsync() {
          String awsProfileName = "adfs";
          return AmazonSQSAsyncClientBuilder
            .standard()
            .withRegion(region)
            .withCredentials(new ProfileCredentialsProvider(awsProfileName))
            .withClientConfiguration(clientConfiguration())
            .build();
      }

}

but it's not clear how to do that programmatically with 3.1.x version and it was not clear from documentation. Thank you.

Here is what I have for the migration to 3.1.x.

import com.amazonaws.ClientConfiguration;
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsAsyncClient;

public class SqsConfig {

    @Value("${cloud.aws.client.proxy-host}")
    public String proxyHost;
    
    @Value("${cloud.aws.client.proxy-port}")
    public String proxyPort;
    
    @Value("${cloud.aws.client.non-proxy-hosts}")
    public String nonProxyHost;
    
    // Value is populated by the region code in the cloud environment.
    @Value("${cloud.aws.region.static}")
    public String region;

    public ClientConfiguration clientConfiguration() {
      final ClientConfiguration config = new ClientConfiguration();
      config.setProxyHost(proxyHost);
      config.setProxyPort(Integer.parseInt(proxyPort));
      config.setNonProxyHosts(nonProxyHost);
      return config;
    }

    public SqsAsyncClient localamazonSqsAsync() {
      String awsProfileName = "adfs";
      return SqsAsyncClient.builder()
          .region(Region.of(region))
          .credentialsProvider(ProfileCredentialsProvider.create(awsProfileName))
          // .asyncConfiguration(clientConfiguration())  -- tried using asyncConfiguration but this does not take the client configuration
          .build();
    }

Any information on how to incorporate the clientConfiguration?

ifeLawal avatar Jul 23 '24 13:07 ifeLawal