@@ -58,7 +58,7 @@ await localStackContainer.StartAsync()
58
58
.ConfigureAwait(false);
59
59
{{< /tab >}}
60
60
{{< tab header="Go" lang="go">}}
61
- container, err := localstack.StartContainer (ctx, localstack.NoopOverrideContainerRequest )
61
+ container, err := localstack.Run (ctx, " localstack/localstack : latest " )
62
62
{{< /tab >}}
63
63
{{< tab header="Java" lang="java">}}
64
64
LocalStackContainer localstack = new LocalStackContainer(DockerImageName.parse("localstack/localstack:3"));
@@ -77,42 +77,44 @@ config.ServiceURL = localStackContainer.GetConnectionString();
77
77
using var client = new AmazonS3Client(config);
78
78
{{< /tab >}}
79
79
{{< tab header="Go" lang="go">}}
80
+ type resolverV2 struct {
81
+ // you could inject additional application context here as well
82
+ }
83
+
84
+ func (* resolverV2) ResolveEndpoint(ctx context.Context, params s3.EndpointParameters) (smithyendpoints.Endpoint, error) {
85
+ // delegate back to the default v2 resolver otherwise
86
+ return s3.NewDefaultEndpointResolverV2().ResolveEndpoint(ctx, params)
87
+ }
88
+
80
89
func s3Client(ctx context.Context, l * localstack.LocalStackContainer) (* s3.Client, error) {
81
- // the Testcontainers Docker provider is used to get the host of the Docker daemon
82
- provider, err := testcontainers.NewDockerProvider()
90
+ mappedPort, err := l.MappedPort(ctx, nat.Port("4566/tcp"))
83
91
if err != nil {
84
92
return nil, err
85
93
}
86
94
87
- host , err := provider.DaemonHost(ctx )
95
+ provider , err := testcontainers.NewDockerProvider( )
88
96
if err != nil {
89
97
return nil, err
90
98
}
99
+ defer provider.Close()
91
100
92
- mappedPort , err := l.MappedPort (ctx, nat.Port("4566/tcp") )
101
+ host , err := provider.DaemonHost (ctx)
93
102
if err != nil {
94
103
return nil, err
95
104
}
96
105
97
- customResolver := aws.EndpointResolverWithOptionsFunc(
98
- func(service, region string, opts ...interface{}) (aws.Endpoint, error) {
99
- return aws.Endpoint{
100
- PartitionID: "aws",
101
- URL: fmt.Sprintf("http://%s:%d", host, mappedPort.Int()),
102
- SigningRegion: region,
103
- }, nil
104
- })
105
-
106
106
awsCfg, err := config.LoadDefaultConfig(context.TODO(),
107
107
config.WithRegion(region),
108
- config.WithEndpointResolverWithOptions(customResolver),
109
108
config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(accesskey, secretkey, token)),
110
109
)
111
110
if err != nil {
112
111
return nil, err
113
112
}
114
113
114
+ // reference: https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/endpoints/#with-both
115
115
client := s3.NewFromConfig(awsCfg, func(o *s3.Options) {
116
+ o.BaseEndpoint = aws.String("http://" + host + ":" + mappedPort.Port())
117
+ o.EndpointResolverV2 = &resolverV2{}
116
118
o.UsePathStyle = true
117
119
})
118
120
0 commit comments