Skip to content

How to configure proxy for SQS in Spring Cloud AWS 3 #1184

Closed
@ifeLawal

Description

@ifeLawal

Discussed in #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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions