我正在使用Golang中的aws-sdk-go程序包来连接到Amazon S3,以提供基于云的存储池。我的工作很好。我希望能够使用Snowball支持批量高速传输,因此我得到了Snowball Edge来在实验室中对其进行测试。我还没有弄清楚如何使它工作,并且Snowball Edge的文档似乎并不完整。订购了Snowball Edge而不是Snowball可能会影响此配置。
我发现Edge更具问题的原因是,正常的Snowball要求运行一个名为snowballAdapter的应用程序,该应用程序似乎可以处理一些端口映射问题。但是,此应用程序似乎与Edge设备不兼容,因为它报告说它不适用于“Snowball Edge Manifest文件”。
我查看了实际的AWS S3和nmap报告中可用的端口:
nmap -v -sT -Pn s3.us-east-1.amazonaws.com
...
Scanning s3.us-east-1.amazonaws.com (52.216.161.53) [1000 ports]
Discovered open port 443/tcp on 52.216.161.53
Discovered open port 80/tcp on 52.216.161.53
而在Snowball Edge上,端口为:
nmap -v -sT -Pn 192.168.1.4
....
Scanning 192.168.1.4 [1000 ports]
Discovered open port 8080/tcp on 192.168.1.4
Discovered open port 22/tcp on 192.168.1.4
Discovered open port 9091/tcp on 192.168.1.4
Discovered open port 8443/tcp on 192.168.1.4
....
PORT STATE SERVICE
22/tcp open ssh
8080/tcp open http-proxy
8443/tcp open https-alt
9091/tcp open xmltec-xmlmail
因此,在我看来,问题可能是我必须使aws软件包将端口8443用于Snowball Edge,而不是443用于真正的S3。连接到S3的代码非常简单:
creds := credentials.NewStaticCredentials(s3Config.S3AccessKey, s3Config.S3SecretAccessKey, s3Config.S3Token)
_, err := creds.Get()
if err != nil {
return nil, nil, err
}
if len(baseFolder) > 0 {
baseFolder = baseFolder + "/"
}
cfg := aws.NewConfig().WithRegion(s3Config.S3Region).WithCredentials(creds)
svc := s3.New(session.New(), cfg)
params := &s3.ListObjectsInput{
Bucket: aws.String(s3Config.S3BucketName),
Prefix: aws.String(baseFolder),
Delimiter: aws.String("/"),
}
resp, err := svc.ListObjects(params)
因此,问题是,如何更改代码以指向Snowball Edge?我尝试从Amazon S3终端映射到/ etc / hosts中的Snowball Edge。在了解端口不同后,我理解为什么这不起作用。我尝试添加不同形式的“WithEndpoint(” ... host ...“)都没有成功,或者,我走在完全错误的轨道上,应该能够使snowballAdapter与Snowball一起使用边缘?
顺便说一句,所有snowballEdge命令都能按预期运行,因此设备似乎运行正常,例如:
./snowballEdge list-access-keys
{
"AccessKeyIds" : [ "..." ]
}
./snowballEdge get-secret-access-key --access-key-id ....
[snowballEdge]
aws_access_key_id = ...
aws_secret_access_key = ...
而且,我使用了与设备关联的正确密钥,并且确实在其中配置了S3服务:
./snowballEdge list-services
{
"ServiceIds" : [ "s3" ]
}
最佳答案
Snowball Edge是与AWS S3完全不同的野兽。除了访问密钥和秘密访问密钥之外,它还要求端点和证书形式的其他凭据。真正的AWS S3具有证书颁发机构支持的有效证书,但是Snowball Edge具有自签名证书。
可以使用以下命令创建配置:
cfg := aws.NewConfig().WithRegion(s3Config.S3Region).WithCredentials(creds).WithEndpoint(s3Config.S3Endpoint).WithHTTPClient(httpClient)
svc = s3.New(session.New(), cfg)
端点如下所示(您在上面的问题文本中看到Snowball Edge在端口8443上响应):
https://192.168.1.4:8443
证书的格式必须与文件中的格式一样(包括所有换行符。看起来像这样)(再次,传递的字符串必须在每行之后包括换行符):
-----BEGIN CERTIFICATE-----
MIIC7zCCAdegAwIBAgIJBJZB/gkBP0B5MA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
BAMMCzE3Mi4yMC4xLjE3NB4XDTE3MDQyODIwMTMwOFoXDTE5MDQxODIwMTMwOFow
FjEUMBIGA1UEAwwLMTcyLjIwLjEuMTcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQCrLWlTfrSj9R1of5Z98EHYIEEPBgnWxnlrvA+ryAzPmiXbYomI4Tpl
PsuIA+7hGXG10H0zwlz0n22EUv4pE79toYcd3czOJUAHEuSelhtP7u91vM4GguFx
A00gosu04RFUD+BYNeaLTQfd7vdmQB3bY3KEbn7Dfrs/1MYFhKb8J77mgCuUbAPu
PNvwLoV+hBL+ndgs+bIu4MtXjUJDiigRZkacpMQaduDMqEq6seoc+JwrKNBjRBRu
3l/fcQoWf+g902oZJaXXnVGqqb7o2YAQFehUAbmCJfuKFSl5tu0B+3KvQQni7lK+
SV8WItdrPumS98BBlt6NpzgC5fTwCmapAgMBAAGjQDA+MAwGA1UdEwQFMAMBAf8w
HQYDVR0OBBYEFMAvKzKgKI+izqPX6DJjJz/0fELtMA8GA1UdEQQIMAaHBKwUAREw
DQYJKoZIhvcNAQELBQADggEBAGwyzmI+9psQu9/N/oClN7Lej7e4E8cC8vymVfPz
fdW45IMNVEYHxHbu9+JzLOtLxfuDmD6B6fEYVoPubb6tsnacuwOSMZhTvhhy9nv2
f+2Pslgj/kYTeMePbHOPTyQ4sd1BE7ALdNiL/hd08ZNhqObagixNYw9eYeHEStBy
tOADKcY9gOxek1k9t+96nATgSy0WIytwra0uEgyipKQ2gXKpgg15SI4nDxQLLEgG
lb3FtRk+PfJxQ4zbHZe/cRNflcGwVCefycLQOA2Sdr8pgHW7gvETu9i9ywF0UV6f
b9wsPcDmg3EaxBa+wrLlYSzaPhI+rZYh6bpnTn311QIFZ+s=
-----END CERTIFICATE-----
发现Snowball Edge使用S3可以非常快速地进行存储。我们能够实现大约1,100 MB /秒的复制速率。
关于go - Snowball Edge-Golang中的aws-sdk-go软件包-无法连接到S3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49284342/