52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package services
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/aws/aws-sdk-go-v2/aws"
|
|
"github.com/aws/aws-sdk-go-v2/config"
|
|
"github.com/aws/aws-sdk-go-v2/service/sqs"
|
|
"github.com/fgm/izidic"
|
|
)
|
|
|
|
func SQSClientService(dic *izidic.Container) (any, error) {
|
|
ctx := context.Background()
|
|
profile := dic.MustParam(PProfile).(string)
|
|
region := dic.MustParam(PRegion).(string)
|
|
epr := endpointResolver{region: region}
|
|
cfg, err := config.LoadDefaultConfig(ctx,
|
|
config.WithRegion(region),
|
|
config.WithSharedConfigProfile(profile),
|
|
config.WithEndpointResolverWithOptions(epr),
|
|
)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed loading default AWS config: %w", err)
|
|
}
|
|
|
|
client := sqs.NewFromConfig(cfg)
|
|
return client, nil
|
|
}
|
|
|
|
type endpointResolver struct {
|
|
region string
|
|
}
|
|
|
|
func (e endpointResolver) ResolveEndpoint(service, region string, options ...interface{}) (aws.Endpoint, error) {
|
|
if service != `SQS` {
|
|
return aws.Endpoint{}, fmt.Errorf("trying to Resolve non-SQS service: %s", service)
|
|
}
|
|
ep := aws.Endpoint{
|
|
URL: "http://localhost:4566/",
|
|
HostnameImmutable: false,
|
|
PartitionID: "000000000000",
|
|
SigningName: "",
|
|
SigningRegion: e.region,
|
|
SigningMethod: "",
|
|
Source: 0,
|
|
}
|
|
if region != "" {
|
|
ep.URL = fmt.Sprintf("https://sqs.%s.amazonaws.com/", region)
|
|
}
|
|
return ep, nil
|
|
}
|