Me gustaría actualizar la distribución frente a la nube con la última función lambda@edge usando CLI.
Vi esta documentación https://docs.aws.amazon.com/cli/latest/reference/cloudfront/update-distribution.html
pero no pude averiguar cómo actualizar el lambda arn solamente.
alguien puede ayudar
Aquí está el script, que está haciendo exactamente eso. Se implementa en base a la respuesta de @cloudbud. No hay comprobación de argumentos. Se ejecutaría así: ./script QF234ASD342FG my-lambda-at-edge-function us-east-1
. En mi caso, el tiempo de ejecución es inferior a 10 seg. Ver actualización-distribución para más detalles.
#!/bin/bash set -xeuo pipefail export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin distribution_id="$1" function_name="$2" region="$3" readonly lambda_arn=$( aws lambda list-versions-by-function \ --function-name "$function_name" \ --region "$region" \ --query "max_by(Versions, &to_number(to_number(Version) || '0'))" \ | jq -r '.FunctionArn' ) readonly tmp1=$(mktemp) readonly tmp2=$(mktemp) aws cloudfront get-distribution-config \ --id "$distribution_id" \ > "$tmp1" readonly etag=$(jq -r '.ETag' < "$tmp1") cat "$tmp1" \ | jq '(.DistributionConfig.CacheBehaviors.Items[] | select(.PathPattern=="dist/sxf/*") | .LambdaFunctionAssociations.Items[] | select(.EventType=="origin-request") | .LambdaFunctionARN ) |= "'"$lambda_arn"'"' \ | jq '.DistributionConfig' \ > "$tmp2" # the dist config has to be in the file # and be referred in specific way. aws cloudfront update-distribution \ --id "$distribution_id" \ --distribution-config "file://$tmp2" \ --if-match "$etag" rm -f "$tmp1" "$tmp2"
no pude averiguar cómo actualizar el arn lambda solamente.
El enlace que proporcionaste explica el proceso:
El proceso de actualización incluye obtener la configuración de distribución actual , actualizar el documento XML que se devuelve para realizar los cambios y luego enviar una solicitud UpdateDistribution para realizar las actualizaciones .
Esto significa que no puede simplemente actualizar lambda arn directamente. Tú tienes:
Llame a get-distribution-config para obtener la configuración actual completa.
Cambiar el lambda arn en los datos de configuración obtenidos.
Cargue toda la nueva configuración usando update-distribution .
El proceso requiere atención adicional, que también se explica en los documentos bajo Advertencia :
Debe eliminar el parámetro ETag que se devuelve.
Se requieren campos adicionales cuando actualiza una distribución.
y más.
El proceso es ciertamente complejo . Por lo tanto, si puede, le recomendaría probar esto en alguna distribución de CloudFront de prueba/ficticia en lugar de hacerlo directamente en la versión de producción.
Algo como esto:
#!/bin/bash set -x TEMPDIR=$(mktemp -d) CONFIG=$(aws cloudfront get-distribution-config --id CGSKSKLSLSM) ETAG=$(echo "${CONFIG}" | jq -r '.ETag') echo "${CONFIG}" | jq '.DistributionConfig' > ${TEMPDIR}/orig.json echo "${CONFIG}" | jq '.DistributionConfig | .DefaultCacheBehavior.LambdaFunctionAssociations.Items[0].LambdaFunctionARN= "arn:aws:lambda:us-east-1:xxxxx:function:test-func:3"' > ${TEMPDIR}/updated.json aws cloudfront update-distribution --id CGSKSKLSLSM --distribution-config file://${TEMPDIR}/updated.json --if-match "${ETAG}"