Localstack:awscli 工作,aws-sdk 引发错误
Localstack: awscli works, aws-sdk raise errors
我想将 localstack 与 ruby aws-sdk
一起使用。似乎 aws sdk 缺少某些配置或有错误,它会引发错误:
之后
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
我在自述文件中注意到了我现在尝试的内容。
请指教:)
感谢您提供详细的 repo 来重现您的问题。
我能够通过将 Aws 配置强制为 force_path_style
(based off of this).
来解决这个问题
TLDR:
If you enable path style access on your client, it will not append the
bucket name to your domain name
所以配置最终看起来像这样:
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
我想将 localstack 与 ruby aws-sdk
一起使用。似乎 aws sdk 缺少某些配置或有错误,它会引发错误:
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
我在自述文件中注意到了我现在尝试的内容。
请指教:)
感谢您提供详细的 repo 来重现您的问题。
我能够通过将 Aws 配置强制为 force_path_style
(based off of this).
来解决这个问题
TLDR:
If you enable path style access on your client, it will not append the bucket name to your domain name
所以配置最终看起来像这样:
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