MCPcopy Index your code
hub / github.com/elgohr/go-localstack

github.com/elgohr/go-localstack @v1.0.164

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.164 ↗ · + Follow
862 symbols 1,299 edges 9 files 42 documented · 5%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

go-localstack

Test codecov Go Report Card PkgGoDev License

Go Wrapper for using localstack in go testing

Installation

Please make sure that you have Docker installed.

go get github.com/elgohr/go-localstack

Usage

Authentication

Starting March 23, 2026, localstack requires a token.
In this way users must
1. Sign up for a free LocalStack account at localstack.cloud 2. Generate an auth token from the LocalStack Web App 3. Use localstack.NewAuthenticatedInstance("LOCALSTACK_AUTH_TOKEN") for passing the token

Old images can still be used without token via localstack.NewInstance(localstack.WithVersion(localstack.LastVersionBeforeAuthToken)).

Examples

With SDK V2 (using EndpointResolverV2). Please have a look at resolvers for a complete list of resolvers.

func ExampleLocalstackSdkV2EndpointResolverV2(t *testing.T) {
    l, err := localstack.NewAuthenticatedInstance("LOCALSTACK_AUTH_TOKEN")
    if err != nil {
        t.Fatalf("Could not connect to Docker %v", err)
    }
    if err := l.Start(); err != nil {
        t.Fatalf("Could not start localstack %v", err)
    }
    t.Cleanup(func() {
        if err := l.Stop(); err != nil {
            t.Fatalf("Could not stop localstack %v", err)
        }
    })

    cfg, err := config.LoadDefaultConfig(ctx,
        config.WithRegion("us-east-1"),
        config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider("dummy", "dummy", "dummy")),
    )
    if err != nil {
        t.Fatalf("Could not get config %v", err)
    }
    resolver := localstack.NewDynamoDbResolverV2(i)
    client := dynamodb.NewFromConfig(cfg, dynamodb.WithEndpointResolverV2(resolver))

    myTestWithV2Client(client)
}

With SDK V2 (using EndpointResolverV1)

func ExampleLocalstackSdkV2(t *testing.T) {
    l, err := localstack.NewAuthenticatedInstance("LOCALSTACK_AUTH_TOKEN")
    if err != nil {
        t.Fatalf("Could not connect to Docker %v", err)
    }
    if err := l.Start(); err != nil {
        t.Fatalf("Could not start localstack %v", err)
    }
    t.Cleanup(func() {
        if err := l.Stop(); err != nil {
            t.Fatalf("Could not stop localstack %v", err)
        }
    })

    cfg, err := config.LoadDefaultConfig(ctx,
        config.WithRegion("us-east-1"),
        config.WithEndpointResolverWithOptions(aws.EndpointResolverWithOptionsFunc(func(_, _ string, _ ...interface{}) (aws.Endpoint, error) {
            return aws.Endpoint{
                PartitionID:       "aws", 
                URL:               l.EndpointV2(localstack.SQS), 
                SigningRegion:     "us-east-1", 
                HostnameImmutable: true,
            }, nil
        })),
        config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider("dummy", "dummy", "dummy")),
    )
    if err != nil {
        t.Fatalf("Could not get config %v", err)
    }

    myTestWithV2(cfg)
}

With SDK V1

func TestWithLocalStack(t *testing.T) {
    l, err := localstack.NewAuthenticatedInstance("LOCALSTACK_AUTH_TOKEN")
    if err != nil {
        t.Fatalf("Could not connect to Docker %v", err)
    }
    if err := l.Start(); err != nil {
        t.Fatalf("Could not start localstack %v", err)
    }
    t.Cleanup(func() {
        if err := l.Stop(); err != nil {
            t.Fatalf("Could not stop localstack %v", err)
        }
    })

    myTestWith(&aws.Config{
        Credentials: credentials.NewStaticCredentials("not", "empty", ""),
        DisableSSL:  aws.Bool(true),
        Region:      aws.String(endpoints.UsWest1RegionID),
        Endpoint:    aws.String(l.Endpoint(localstack.SQS)),
    })
}

Extension points exported contracts — how you extend this code

InstanceOption (FuncType)
InstanceOption is an option that controls the behaviour of localstack.
localstack.go
DockerClient (Interface)
go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate counterfeiter:generate . DockerClient DockerClient
internal/internal.go

Core symbols most depended-on inside this repo

recordInvocation
called by 122
internal/internalfakes/fake_docker_client.go
EndpointV2
called by 28
localstack.go
ResolveEndpoint
called by 22
resolver.go
resolveEndpoint
called by 22
resolver.go
Stop
called by 15
localstack.go
Start
called by 14
localstack.go
StartWithContext
called by 8
localstack.go
Error
called by 8
localstack.go

Shape

Method 772
Function 60
Struct 28
FuncType 1
Interface 1

Languages

Go100%

Modules by API surface

internal/internalfakes/fake_docker_client.go726 symbols
resolver.go67 symbols
localstack.go40 symbols
localstack_test.go10 symbols
localstack_internal_test.go8 symbols
exampleV2_test.go4 symbols
example_test.go3 symbols
internal/internal_test.go2 symbols
internal/internal.go2 symbols

For agents

$ claude mcp add go-localstack \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page