Localstack: awscli работает, aws-sdk выдает ошибки

Я хочу использовать локальный стек с рубином 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

Я заметил в readme, что я пытался сейчас.

Пожалуйста посоветуй:)

1 ответ

Решение

Спасибо за предоставление подробного репо для воспроизведения вашей проблемы.
Я смог решить эту проблему, заставив конфигурацию Aws force_path_style ( основываясь на этом).
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
Другие вопросы по тегам