Snowball Edge - Golang中的aws-sdk-go软件包 - 无法连接到S3

时间:2018-03-14 17:36:38

标签: go amazon-s3 snowball

我正在使用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包使用Snowball Edge的端口8443而不是真正的S3的443。连接到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(”...主机......“)并没有成功。或者,我是在完全错误的轨道上,并且应该能够让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" ]
}

1 个答案:

答案 0 :(得分:0)

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-----

使用S3发现Snowball Edge是非常快速的存储。我们能够达到大约1,100 MB /秒的复制率。