我正在使用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/

10-10 04:25