localstack / localstack/localstack-python-client

[Feature] Support virtual host S3 API calls

Abierto
#52 0 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Python
Estrellas
191
Forks
31
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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?

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Empieza leyendo localstack_client.config.get_endpoint y get_service_endpoints; después, reproduce la solicitud S3 con el registro de depuración de boto3 y Docker Compose. Revisa las indicaciones sobre endpoints en README.md y determina cuál de los tres enfoques propuestos debería adoptar el proyecto; done debe incluir un camino decidido y funcional para virtual-host addressing, junto con la documentación correspondiente.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
aws, python
Área
api, cloud
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
30/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.