我正在使用 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" ]
}