localstack / localstack/localstack-python-client

[Feature] Support virtual host S3 API calls

オープン
#52 コメント 0 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Python
スター
191
フォーク
31
PR マージ指標
30日以内にマージされた PR はありません

説明

After struggling for several hours with Docker Compose, I noticed my problem was actually in this library, which does not seem to support the virtual host addressing for the `s3` client.

Looking at `boto3` in debug mode, I noticed that when using Virtual host addressing, the HTTP request was aimed towards `http://.:`. This is not a valid endpoint, and it should be `http://.s3.:`, as described [here](https://docs.localstack.cloud/user-guide/aws/s3/#path-style-and-virtual-hosted-style-requests).

After delving deeper I noticed `localstack_client.config.get_endpoint` it is not handling `s3` in any special way. I manually patched the function and noticed that with a simple

```python3
def new_get_service_endpoint(
service: str, localstack_host: Optional[str] = None
) -> Optional[str]:
endpoints = localstack_client.config.get_service_endpoints(localstack_host=localstack_host)
endpoint = endpoints.get(service)
if service == "s3":
endpoint = "http://s3." + endpoint.split("http://")[1]
return endpoint
```

I know this doesn't handle SSL, it's just a draft. It works for both virtual and path based addressing.

I see three ways simple about this:
1. Do not support virtual host addressing. This is a problem, as in theory AWS is deprecating path based addressing (also it has been deprecating it for 4 years, so...)
2. Do a hack like the one proposed.
3. Honor AWS service specific endpoints through envars (for instance `AWS_ENDPOINT_URL_S3`) and leave it up to the user to set it up (with appropriate documentation, at least in the `README.md`).

What are your thoughts on this?

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず localstack_client.config.get_endpoint と get_service_endpoints を読み、次に boto3 のデバッグログと Docker Compose を使って S3 リクエストを再現します。README.md のエンドポイントに関するガイダンスを確認し、プロジェクトが提案された 3 つのアプローチのどれを採用すべきか判断します。done には、決定済みで動作する virtual-host addressing の方法と、それに対応するドキュメントを含める必要があります。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
aws, python
領域
api, cloud
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
30/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。