es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Compila un ejecutable GO enlazado estáticamente para su uso en AWS Lambda.

Contexto: Estoy tratando de compilar un programa en Go (Específicamente, el go-sigma-rule-engine de Markus Kont) para obtener un ejecutable que pueda cargar en AWS Lambda (que es Amazon Linux 2 en realidad, según este post.) e incluirlo/ejecutarlo a través de una función Lambda en Python que emite comandos de shell/sistema operativo hacia el programa del motor de reglas.

Problema: Este programa depende de muchas dependencias y para que funcione con el menor número de problemas posibles, me gustaría enlazar estáticamente el programa y compilarlo antes de cargarlo en AWS Lambda, de manera que todas las dependencias necesarias estén incluidas dentro del propio ejecutable.

Pregunta: ¿Cómo puedo enlazar estáticamente y luego compilar un programa en Go para que apunte al sistema operativo de AWS Lambda?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para vincular y compilar de forma estática un programa Go dirigido al sistema operativo AWS Lambda, puedes seguir estos pasos:

    1. Instala Go y configura las variables de entorno correspondientes.
    2. Clona el repositorio go-sigma-rule-engine utilizando `git clone https://github.com/markuskont/go-sigma-rule-engine.git`.
    3. Navega hasta el directorio raíz del repositorio clonado utilizando cd go-sigma-rule-engine.
    4. Asegúrate de que las dependencias necesarias estén instaladas ejecutando go get -d ./....
    5. Construye el programa utilizando el comando GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -a -tags netgo -ldflags '-w -extldflags "-static"' -o sigma_engine main.go.
    6. El ejecutable generado ahora se puede subir a AWS Lambda.

    Explicación:

    • GOOS=linux especifica que el sistema operativo de destino es Linux (que es en lo que se ejecuta AWS Lambda).
    • GOARCH=amd64 especifica la arquitectura de destino (x86_64).
    • CGO_ENABLED=0 deshabilita el uso de cgo, lo que significa que no puedes importar bibliotecas C y debes utilizar solo pure Go.
    • -a fuerza la reconstrucción de paquetes que ya están actualizados.
    • -tags netgo fuerza el uso del paquete net de Go, que es necesario para AWS Lambda.
    • -ldflags '-w -extldflags "-static"' elimina cualquier información de depuración innecesaria del ejecutable e indica al enlazador que incluya todas las dependencias necesarias en el ejecutable resultante (ya que se estableció CGO_ENABLED=0).
    • -o sigma_engine especifica el nombre binario de salida como “sigma_engine”.

Comments are closed.