首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将aws-sdk-go-v2与localstack一起使用?

如何将aws-sdk-go-v2与localstack一起使用?
EN

Stack Overflow用户
提问于 2021-02-08 23:37:00
回答 2查看 718关注 0票数 1

我正在尝试从aws-sdk-go迁移到aws-sdk-go-v2。但是,我在本地使用本地堆栈来模仿一些亚马逊网络服务,比如sqs和s3。我不确定如何将新的sdk配置为使用localstack端点而不是真正的端点。

例如,在v1 SDK中,我可以通过在此处设置端点来将其指向本地堆栈:

代码语言:javascript
复制
session.Must(session.NewSession(&aws.Config{
    Region:   aws.String("us-east-1"),
    Endpoint: aws.String("http://localstack:4566"), 
}))

但是,我如何在v2软件开发工具包中做到这一点呢?我想我需要在config中设置一些参数,但是我看不到任何指定端点的选项。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-09 00:13:31

这取决于您使用的服务。

要初始化Glue客户端:

代码语言:javascript
复制
cfg, err := config.LoadDefaultConfig(context.Background())
if err != nil {
    panic(err)
}
glueConnection := glue.New(glue.Options{Credentials: cfg.Credentials, Region: cfg.Region})
票数 0
EN

Stack Overflow用户

发布于 2021-08-27 14:43:20

因此,如果您费力地阅读python代码,主要是下面这段,您将看到:

https://github.com/localstack/localstack/blob/25ba1de8a8841af27feab54b8d55c80ac46349e2/localstack/services/edge.py#L115

然后,在使用v2 aws golang sdk时,我需要覆盖授权头,以便添加正确的结构。

我从运行aws cli工具并跟踪本地堆栈docker容器的日志记录中获得了该结构:

代码语言:javascript
复制
'Authorization': 'AWS4-HMAC-SHA256 Credential=AKIAR2X5NRNSRTCOJHCI/20210827/eu-west-1/sns/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=c69672d38631752ede15d90e7047a5183ebf3707a228decf6ec26e97fdbd02aa',

在go中,我需要重写http客户端,以便将该标头添加到:

代码语言:javascript
复制
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{}},
    }

....

这是非常耗时和痛苦的,我很想知道一个更好的方法,但这个方法暂时有效……

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66104655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档