2 回答

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
因此,我逐步了解了 AWS 開(kāi)發(fā)工具包 V2,該函數(shù)是導(dǎo)致主機(jī)異常的原因。我要提到這一點(diǎn),這取決于AWS看看這是否是一個(gè)錯(cuò)誤。不過(guò)有辦法解決這個(gè)問(wèn)題!moveBucketNameToHost(req.URL, bucket)
您需要將“端點(diǎn)解析器”屬性設(shè)置為 。這將阻止它被此功能更改。HostnameImmutabletrue
示例:創(chuàng)建自定義沖突解決程序時(shí)
// for custom localstack endpoint
customResolver := aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
if service == s3.ServiceID {
return aws.Endpoint{
PartitionID: "aws",
URL: "http://localhost:4566",
SigningRegion: "eu-west-1",
HostnameImmutable: true, // This must be set to true to disable the host changing
}, nil
}
// returning EndpointNotFoundError will allow the service to fallback to it's default resolution
return aws.Endpoint{}, &aws.EndpointNotFoundError{}
})
config, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("eu-west-1"), config.WithEndpointResolver(customResolver))
if err != nil {
log.Fatalf("unable to load SDK config, %v", err)
}
client := s3.NewFromConfig(config)
更新
默認(rèn)情況下,S3 使用虛擬主機(jī)路徑樣式對(duì)存儲(chǔ)桶進(jìn)行尋址。這就是主機(jī)名被突變?yōu)?{bucketname}.localhost:4566 的原因。
S3 對(duì)有效存儲(chǔ)桶名稱的要求很少。因此,根據(jù)要求,camelCase 是一個(gè)無(wú)效的存儲(chǔ)桶名稱,因此 SDK 回退到路徑樣式的 url。因此,主機(jī)名不會(huì)發(fā)生突變,您會(huì)看到 localhost:4566/camelCase。
根據(jù)解決方法,如果 HostnameImmutable 屬性設(shè)置為 true,則 SDK API 客戶端將不會(huì)修改 URL 的主機(jī)名。如果 API 要求客戶端使用特定于操作的主機(jī)名值,這可能會(huì)導(dǎo)致 API 客戶端無(wú)法正常運(yùn)行。
在您的情況下,更好的解決方案是直接在S3選項(xiàng)上啟用UsePathStyle選項(xiàng)
result, err := client.CreateBucket(ctx, &input, func(o *s3.Options) {
o.UsePathStyle = true
})

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
我相信這是由于對(duì)SDK進(jìn)行了更改,以刪除對(duì)基于路徑的存儲(chǔ)桶路由的支持:http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html
您可以更新 的配置,將存儲(chǔ)桶名稱作為子域(默認(rèn))或路徑。https://docs.aws.amazon.com/sdk-for-go/api/aws/#ConfigConfig.S3ForcePathStyle
- 2 回答
- 0 關(guān)注
- 261 瀏覽
添加回答
舉報(bào)