alikian / localstack-loader

Localstack Loader

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

localstack-loader

Build Maven Central License

A Library to start localstack, no spring dependencies, so it can be used with any version of spring.

  • Pull localstack docker image
  • Start localstack docker container
  • Create Resources based on cloudformation template
    • with Full Cloudformation temple, is slow (takes more 30 seconds)
    • with Simple Cloudformation is fast but is doesn't check dependent resources, it has support for Secrets Managers, DynamoDB and SQS
  • Creat AWS Clients using AWS SDK v2

Create AWS resources using AWS Cloudformation template

Example without Spring:

pom.xml

  <dependency>
    <groupId>io.github.alikian</groupId>
    <artifactId>localstack-loader</artifactId>
    <version>1.0.23</version>
  </dependency>

  LocalstackManager localstackManager =
        LocalstackManager.builder()
        .withPort(4566)
        .withSimpleCloudformation("cloudformation.yaml")
        .withImageName("localstack/localstack:2.2.0")
        .buildSimple();
  SecretsManagerClient secretsClient = localstackManager.getSecretsManagerClient();

Spring boot example:

package com.example;

import io.github.alikian.LocalstackManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;

@Configuration
@Profile({"test", "local"})
public class AwsConfig {

    LocalstackManager localstackManager = 
            LocalstackManager
                    .builder()
                    .withSimpleCloudformation("cloudformation.yaml")
                    .buildSimple();

    @Primary
    @Bean
    public DynamoDbClient getDynamoDbClient() {
        return localstackManager.getDynamoDbClient();
    }

    public SecretsManagerClient getSecretsManagerClient(){
        return localstackManager.getSecretsManagerClient();
    }

    @Primary
    @Bean
    public DynamoDbEnhancedClient getDynamoDbEnhancedClient() {
        return DynamoDbEnhancedClient.builder()
                .dynamoDbClient(getDynamoDbClient())
                .build();
    }
}

About

Localstack Loader

License:MIT License


Languages

Language:Java 100.0%