La imagen de Docker se compila correctamente, pero falla cuando se ejecuta desde Lambda debido a su sistema de archivos de solo lectura.
Luminati-proxy tiene una integración docker para su administrador de proxy. Copié su archivo docker y lo agregué a mi propio archivo docker para enviar un script a AWS Lambda. La creación de la imagen de la ventana acoplable fue exitosa , pero cuando se envió a Lambda, falló debido a un error del sistema de archivos de solo lectura :
Failed to create directory /home/sbx_user1051/proxy_manager: [code=EROFS] Error: EROFS: read-only file system, mkdir '/home/sbx_user1051' 2022-02-28 19:37:22.049 FILE (8): Failed to create directory /home/sbx_user1051/proxy_manager: [code=EROFS] Error: EROFS: read-only file system, mkdir '/home/sbx_user1051'Al examinar el trackback, el error se centra en la instalación de proxy_manager y falla con los cambios de directorio (mkdir, mk_work_dir...). Estos cambios se realizan dentro de los archivos .js de GitHub que se extraen del archivo docker como la instalación de proxy_manager. Obviamente, el único directorio mutable en Lambda es el directorio /tmp , pero ¿existe alguna solución para configurar esto sin recurrir a colocar todo en el directorio /tmp mientras se borra solo durante el tiempo de ejecución? Reinstalar un proxy_manager cada ejecución no es nada ideal ...
¿Podría ser esto tan simple como establecer estipulaciones ambientales como:
ENV PATH=... ENV LD_LIBRARY_PATH=...Si es así, ¿cómo deberían configurarse? Estoy agregando el archivo docker a continuación para una referencia rápida:
FROM node:14.18.1 RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ && apt-get update \ && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf \ --no-install-recommends \ && rm -rf /var/lib/apt/lists/* USER root RUN npm config set user root RUN npm install -g npm@8.1.3 RUN npm install -g @luminati-io/luminati-proxy ENV DOCKER 1 CMD ["luminati", "--help"]Agradezco la perspicacia!
AWS Lambda proporciona la carpeta /tmp para que los usuarios escriban archivos en lambda, ya que no conozco el contexto de su pregunta, pero espero que esto ayude. Puede escribir archivos en AWS Lambda en la carpeta /tmp, por ejemplo. Quiero crear un archivo demo.txt en tiempo de ejecución/programáticamente usando AWS lambda, luego puedo escribir el archivo en /txt/demo.txt
TL;RD:
Explicación:
Según ladocumentación de las funciones de AWS Lambda:
La imagen del contenedor debe poder ejecutarse en un sistema de archivos de solo lectura. Su código de función puede acceder a un directorio grabable /tmp con 512 MB de almacenamiento.
Dado que se supone que los contenedores basados en imágenes basadas en Linux ya tienen una carpeta llamada /tmp , debería poder acceder a esa carpeta en cualquier momento desde su código para leer (recuerde, FS de solo lectura )
Si está buscando almacenar contenido, la solución de Amazon es que cree y administre cualquier contenido en un depósito S3, los depósitos son tan fáciles de usar como si leyera un archivo localmente, pero permanecerán accesibles después de que la instancia lambda finalice la carga de trabajo.
Consulte Leer archivo desde el depósito de aws s3 mediante el nodo fs y Cargar un archivo en Amazon S3 con NodeJS para obtener más detalles sobre cómo utilizar un depósito de S3. Hay muchas formas de lograrlo, independientemente del idioma que se utilice.
Todo esto se basa en una práctica recomendada promovida por AWS en su plataforma. Donde las lambdas permanecen apátridas