Al usar localstack en las pruebas y el sdk 2.x de AWS para Java no es tan simple como sacar el endpoint y el credential provider de localstack y pasarlo al cliente de aws, hay que constuir primeros los objetos del sdk 2 para pasarlos al cliente con datos que entrega localstack:
private static LocalStackContainer ls = null;
@BeforeAll
public static void before() {
ls = new LocalStackContainer(DockerImageName.parse("localstack/localstack"))
.withServices(DYNAMODB);
ls.start();
final var credentials = ls.getDefaultCredentialsProvider().getCredentials();
final var ddbc = DynamoDbClient.builder()
.endpointOverride(ls.getEndpointOverride(DYNAMODB))
.credentialsProvider(
StaticCredentialsProvider.create(AwsBasicCredentials.create(
credentials.getAWSAccessKeyId(),
credentials.getAWSSecretKey()))).build();
}
ese el código para construir el cliente de dynamo usando el endpoint override (eso fue simple) y el credential provider (eso fue un poco más de trabajo) usando el access key y secret key
también dejo los imports:
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.localstack.LocalStackContainer;
import static org.testcontainers.containers.localstack.LocalStackContainer.Service.DYNAMODB;
import org.testcontainers.utility.DockerImageName;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;