Localstack:awscli工作,aws-sdk引发错误

时间:2017-11-17 15:07:24

标签: aws-sdk aws-sdk-ruby atlassian-localstack

我想将localstack与ruby aws-sdk一起使用。似乎aws sdk错过了一些配置或有一个bug,它引发了错误:

之后

Aws::S3::Resource.new.bucket('mybucket').exists?

它提出了一个:

/usr/local/lib/ruby/2.2.0/net/http.rb:879:in `initialize': unable to connect to 
`mybucket.localstack`; SocketError: getaddrinfo: Name or service not known
(Seahorse::Client::NetworkingError)

在同一个容器上,如果我使用awscli完全没问题:

root@35afc611394b:/app/user# aws --endpoint-url=http://localstack:4572 s3 mb s3://test1
  make_bucket: test1
root@35afc611394b:/app/user# aws --endpoint-url=http://localstack:4572 s3 ls
  2006-02-03 16:45:09 test1

我创建了一个docker-compose.yml来帮助解决问题:

https://github.com/ook/localstack-s3-problem

我在自述文件中注意到我现在尝试了什么。

请建议:)

1 个答案:

答案 0 :(得分:1)

感谢您提供详细的回购以重现您的问题 我可以通过强制Aws配置到force_path_stylebased off of this)来解决这个问题 TLDR:

  

如果在客户端上启用路径样式访问,则不会附加   存储桶名称为您的域名

所以配置最终看起来像这样:

Aws.config.update(endpoint: localstack, credentials: Aws::Credentials.new('sofake', 'solie'), region: 'eu-west-1', force_path_style: true)

下一个问题是由于存储桶还没有存在(至少在我的机器上)。所以,我必须在Aws::S3::Resource.new.create_bucket(bucket: 'mybucket')

之后运行此命令

之后,您的脚本按预期工作:

   Setting endpoint to http://localstack:4572/
   Aws.config={:endpoint=>"http://localstack:4572/", :credentials=>#
   <Aws::Credentials access_key_id="sofake">, :region=>"eu-west-1", 
:force_path_style=>true}
   sleeping 1s
   setting aws endpoint
   Aws::S3::Resource.new.bucket('mybucket').exists?
   #<Aws::S3::Bucket:0x00559716b95a20 @name="mybucket", @data=nil, @client=#<Aws::S3::Client>>
   true