Testcontainers + Localstack +AWS Java SDK 2.x

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;