Abe Estrada

Hugo + AWS CodeBuild

Durante aproximadamente un ano este blog ha sido hospedado en AWS utilizando Hugo y AWS CodeBuild para generar un sitio estĂĄtico cada vez que se hace un cambio en el repositorio. Sin importar donde se tenga configurado el repositorio, se puede hacer uso de CodeBuild para ejecutar hugo e incluso npm para instalar las dependencias en caso de utilizar esbuild con Hugo para algo de Javascript.

Comparto mi archivo buildspec.yml el cual en la fase install primero descarga una versiĂłn especĂ­fica de Hugo (extended) para luego ser instalada. En la fase pre_build se checan las versiones de hugo, node y npm para poder revisar que todo este en orden en caso de algĂșn error. Continuando en la fase de build se genera el sitio y se mandan los archivos generados al bucket en S3. Por Ășltimo en la fase post_build se limpia el cache de CloudFront.

El CLOUDFRONT_ID se puede agregar como una variable o en este caso se utiliza AWS Systems Manager para guardarla de forma segura y poder compatir el archivo.

version: 0.2

env:
    variables:
        HUGO_VERSION: "0.79.1"
        HUGO_ENV: "production"
    parameter-store:
        CLOUDFRONT_ID: "[NAME_GOES_HERE]"
phases:
    install:
        runtime-versions:
            golang: 1.14
        commands:
            - wget -q https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.deb
            - dpkg -i hugo_extended_${HUGO_VERSION}_Linux-64bit.deb
    pre_build:
        commands:
            - hugo version
            - node --version
            - npm --version
            - npm install
    build:
        commands:
            - hugo --minify
            - aws s3 sync public/ s3://[S3_BUCKET_GOES HERE]/ --delete --only-show-errors
    post_build:
        commands:
            - aws cloudfront create-invalidation --distribution-id ${CLOUDFRONT_ID} --paths "/*"