cli aws amazon-web-services docker aws-lambda aws-sam-cli aws-sam

amazon web services - cli - ¿Cómo me conecto para alojar MySQL desde la instancia de docker local de AWS SAM?



sam local invoke (3)

No puedo decir por qué --docker-network host produce este error, pero no creo que lo necesite. Puedo conectarme a MySQL que se ejecuta en mi máquina local desde SAM local, sin ninguna anulación de red.

Hago esto simplemente usando mi IP local (a diferencia de localhost o 127.0.0.1) para conectarme a la base de datos.

La siguiente función lambda se conecta a mi MySQL local muy bien, siempre que use mi IP local, como reveló una herramienta como ipconfig .

''use strict''; var mysql = require(''mysql''); var connection = mysql.createConnection({ host : ''192.168.1.6'', user : ''mike'', password : ''password'', database : ''logtest'' }); module.exports.hello = (event, context, callback) => { connection.connect(); connection.query(''SELECT 1 + 1 AS solution'', function (error, results, fields) { if (error) throw error; console.log(''The solution is: '', results[0].solution); const response = { statusCode: 200, body: JSON.stringify({solution: results[0].solution}) }; connection.end(); callback(null, response); }); };

Salida parcial de ipconfig :

Ethernet adapter Local Area Connection 6: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::95c2:495c:7226:8ac2%39 IPv4 Address. . . . . . . . . . . : 10.251.19.6 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : Wireless LAN adapter Wireless Network Connection: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::496a:d34d:8380:3b1c%15 IPv4 Address. . . . . . . . . . . : 192.168.1.6 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.1.1

En este caso, mi función lambda puede conectarse a MySQL local utilizando 10.251.19.6 o 192.168.1.6.

Ejemplo mínimo aquí .

Estoy intentando invocar mi función Lambda utilizando sam local invoke pero encuentro que no se puede conectar a mi host MySQL. Intenté agregar --docker-network host pero tampoco puedo conectar

Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/docker/api/client.py", line 229, in _raise_for_status response.raise_for_status() File "/usr/lib/python3.6/site-packages/requests/models.py", line 935, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http+docker://localhost/v1.35/networks/6ad3bd87e8437e8410145d169a4edf68d1b0247a67257ce7dd1208dac3664c82/connect During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/bin/sam", line 11, in <module> load_entry_point(''aws-sam-cli==0.5.0'', ''console_scripts'', ''sam'')() File "/usr/lib/python3.6/site-packages/click/core.py", line 722, in __call__ return self.main(*args, **kwargs) File "/usr/lib/python3.6/site-packages/click/core.py", line 697, in main rv = self.invoke(ctx) File "/usr/lib/python3.6/site-packages/click/core.py", line 1066, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/usr/lib/python3.6/site-packages/click/core.py", line 1066, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/usr/lib/python3.6/site-packages/click/core.py", line 895, in invoke return ctx.invoke(self.callback, **ctx.params) File "/usr/lib/python3.6/site-packages/click/core.py", line 535, in invoke return callback(*args, **kwargs) File "/usr/lib/python3.6/site-packages/click/decorators.py", line 64, in new_func return ctx.invoke(f, obj, *args[1:], **kwargs) File "/usr/lib/python3.6/site-packages/click/core.py", line 535, in invoke return callback(*args, **kwargs) File "/usr/lib/python3.6/site-packages/samcli/commands/local/invoke/cli.py", line 47, in cli docker_network, log_file, skip_pull_image, profile) # pragma: no cover File "/usr/lib/python3.6/site-packages/samcli/commands/local/invoke/cli.py", line 79, in do_cli stderr=context.stderr) File "/usr/lib/python3.6/site-packages/samcli/commands/local/lib/local_lambda.py", line 80, in invoke stdout=stdout, stderr=stderr) File "/usr/lib/python3.6/site-packages/samcli/local/lambdafn/runtime.py", line 83, in invoke self._container_manager.run(container) File "/usr/lib/python3.6/site-packages/samcli/local/docker/manager.py", line 61, in run container.create() File "/usr/lib/python3.6/site-packages/samcli/local/docker/container.py", line 115, in create network.connect(self.id) File "/usr/lib/python3.6/site-packages/docker/models/networks.py", line 57, in connect container, self.id, *args, **kwargs File "/usr/lib/python3.6/site-packages/docker/utils/decorators.py", line 19, in wrapped return f(self, resource_id, *args, **kwargs) File "/usr/lib/python3.6/site-packages/docker/api/network.py", line 248, in connect_container_to_network self._raise_for_status(res) File "/usr/lib/python3.6/site-packages/docker/api/client.py", line 231, in _raise_for_status raise create_api_error_from_http_exception(e) File "/usr/lib/python3.6/site-packages/docker/errors.py", line 31, in create_api_error_from_http_exception raise cls(e, response=response, explanation=explanation) docker.errors.APIError: 400 Client Error: Bad Request ("container cannot be disconnected from host network or connected to host network")

Noté la última línea:

docker.errors.APIError: 400 Error de cliente: solicitud incorrecta ("el contenedor no se puede desconectar de la red del host o conectar a la red del host")

¿Cómo puedo solucionar esto?


Puede comprobar los casos de la siguiente manera:

  • Si el puerto docker tiene un mapeo.
  • Compruebe el puerto del grupo de seguridad de AWS.

Si está ejecutando un mac, debería poder usar solo el nombre de host especial localmente al pasar el nombre de host para que el cliente quede en el contenedor que realiza la llamada. No se --docker-network ninguna bandera --docker-network necesaria

url = "http://docker.for.mac.localhost:3306"

O en las instalaciones más nuevas de la ventana acoplable https://docs.docker.com/docker-for-mac/release-notes/#docker-community-edition-17120-ce-mac49-2018-01-19

url = "http://docker.for.mac.host.internal:3306"

Si no está --docker-network Mac y está --docker-network enfoque de la --docker-network cuando inicia su contenedor mysql, debería tener este aspecto.

docker run -d -v "$PWD":/var/lib/mysql -p 3306:3306 / --network lambda-local / --name mysql / mysql

Entonces cuando se invoca localmente

sam local invoke --docker-network lambda-local

Tal vez te perdiste la primera parte? ¿Podría publicar cómo está iniciando contenedor mysql localmente?