我正在尝试从aws-sdk-go迁移到aws-sdk-go-v2。但是,我在本地使用本地堆栈来模仿一些亚马逊网络服务,比如sqs和s3。我不确定如何将新的sdk配置为使用localstack端点而不是真正的端点。
例如,在v1 SDK中,我可以通过在此处设置端点来将其指向本地堆栈:
session.Must(session.NewSession(&aws.Config{
Region: aws.String("us-east-1"),
Endpoint: aws.String("http://localstack:4566"),
}))但是,我如何在v2软件开发工具包中做到这一点呢?我想我需要在config中设置一些参数,但是我看不到任何指定端点的选项。
发布于 2021-02-09 00:13:31
这取决于您使用的服务。
要初始化Glue客户端:
cfg, err := config.LoadDefaultConfig(context.Background())
if err != nil {
panic(err)
}
glueConnection := glue.New(glue.Options{Credentials: cfg.Credentials, Region: cfg.Region})发布于 2021-08-27 14:43:20
因此,如果您费力地阅读python代码,主要是下面这段,您将看到:
然后,在使用v2 aws golang sdk时,我需要覆盖授权头,以便添加正确的结构。
我从运行aws cli工具并跟踪本地堆栈docker容器的日志记录中获得了该结构:
'Authorization': 'AWS4-HMAC-SHA256 Credential=AKIAR2X5NRNSRTCOJHCI/20210827/eu-west-1/sns/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=c69672d38631752ede15d90e7047a5183ebf3707a228decf6ec26e97fdbd02aa',在go中,我需要重写http客户端,以便将该标头添加到:
type s struct {
cl http.Client
}
func (s s) Do(r *http.Request) (*http.Response, error) {
r.Header.Add("authorization", "AWS4-HMAC-SHA256 Credential=AKIAR2X5NRNSRTCOJHCI/20210827/eu-west-1/sns/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=33fa777a3bb1241f30742419b8fab81945aa219050da6e29b34db16053661000")
return s.cl.Do(r)
}
func NewSNS(endpoint, topicARN string) (awsPubSub, error) {
cfg := aws.Config{
EndpointResolver: aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
return aws.Endpoint{
PartitionID: "aws",
URL: "http://localhost:4566",
SigningRegion: "eu-west-1",
HostnameImmutable: true,
// Source: aws.EndpointSourceCustom,
}, nil
}),
HTTPClient: s{http.Client{}},
}
....这是非常耗时和痛苦的,我很想知道一个更好的方法,但这个方法暂时有效……
https://stackoverflow.com/questions/66104655
复制相似问题