Introducción a una distribución estándar (AWS CLI)
Los procedimientos de esta sección le muestran cómo utilizar AWS CLI con CloudFront para definir una configuración básica que incluye lo siguiente:
-
Creación de un bucket de Amazon S3 para utilizarlo como origen de la distribución.
-
Almacenamiento de las versiones originales de los objetos en el bucket de S3.
Uso del control de acceso de origen (OAC) para enviar solicitudes autenticadas al origen de Amazon S3. El OAC envía las solicitudes a través de CloudFront para evitar que los lectores accedan directamente al bucket de S3. Para obtener más información sobre OAC, consulte Restricción del acceso a un origen de Amazon S3.
Uso del nombre de dominio de CloudFront en las URL de los objetos (por ejemplo,
https://d111111abcdef8.cloudfront.net/index.html
).-
Mantenimiento de los objetos en ubicaciones periféricas de CloudFront durante el período predeterminado de 24 horas (la duración mínima es de 0 segundos).
La mayoría de estas opciones pueden personalizarse. Para obtener información acerca de cómo personalizar sus opciones de distribución de CloudFront, consulte Creación de una distribución.
Requisitos previos
Antes de comenzar, asegúrese de que ha completado los pasos que se detallan en Configuración de su Cuenta de AWS.
Instale la AWS CLI y configúrela con las credenciales. Para obtener más información, consulte Cómo empezar a trabajar con AWS CLI en la Guía del usuario de AWS CLI.
Crear un bucket de Amazon S3
Un bucket de Amazon S3 es un contenedor para archivos (objetos) o carpetas. CloudFront puede distribuir casi cualquier tipo de archivo por usted cuando un bucket de S3 es el origen. Por ejemplo, CloudFront puede distribuir texto, imágenes y vídeos. No hay un máximo para la cantidad de datos que puede almacenar en Amazon S3.
En este tutorial, creará un bucket de S3 y cargará un archivo HTML que utilizará para crear una página web básica.
aws s3 mb s3://
amzn-s3-demo-bucket
/ --regionus-east-1
Reemplace amzn-s3-demo-bucket
por un nombre de bucket único globalmente. En la Región de AWS, le recomendamos que elija una región que esté geográficamente cerca de usted. Esto reduce la latencia y los costos, pero también puede elegir una región diferente. Por ejemplo, puede hacerlo para cumplir los requisitos normativos.
Carga del contenido en el bucket
En este tutorial, descargue y extraiga los archivos de contenido de muestra para una página web básica “Hello World”.
# Create a temporary directory mkdir -p ~/cloudfront-demo # Download the sample Hello World files curl -o ~/cloudfront-demo/hello-world-html.zip https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/samples/hello-world-html.zip # Extract the zip file unzip ~/cloudfront-demo/hello-world-html.zip -d ~/cloudfront-demo/hello-world
Esto crea un directorio con un archivo index.html
y una carpeta css
. Cargue estos archivos en el bucket de S3.
aws s3 cp ~/cloudfront-demo/hello-world/ s3://
amzn-s3-demo-bucket
/ --recursive>
Creación de un control de acceso de origen (OAC)
En este tutorial, creará un control de acceso de origen (OAC). OAC lo ayuda a enviar solicitudes autenticadas de forma segura al origen de Amazon S3. Para obtener más información sobre OAC, consulte Restricción del acceso a un origen de Amazon S3.
aws cloudfront create-origin-access-control \ --origin-access-control-config Name="
oac-for-s3
",SigningProtocol=sigv4,SigningBehavior=always,OriginAccessControlOriginType=s3
Guarde el ID de OAC de la salida como una variable de entorno. Reemplace el valor de ejemplo por un ID de OAC propio. Lo utilizará en el siguiente paso.
OAC_ID="
E1ABCD2EFGHIJ
"
Creación de una distribución estándar
Cree un archivo de configuración de distribución denominado distribution-config.json
. Reemplace el nombre del bucket de ejemplo con el nombre del bucket para los valores Id
, DomainName
y TargetOriginId
.
cat > distribution-config.json << EOF { "CallerReference": "cli-example-$(date +%s)", "Origins": { "Quantity": 1, "Items": [ { "Id": "S3-
amzn-s3-demo-bucket
", "DomainName": "amzn-s3-demo-bucket
.s3.amazonaws.com", "S3OriginConfig": { "OriginAccessIdentity": "" }, "OriginAccessControlId": "$OAC_ID" } ] }, "DefaultCacheBehavior": { "TargetOriginId": "S3-amzn-s3-demo-bucket
", "ViewerProtocolPolicy": "redirect-to-https", "AllowedMethods": { "Quantity": 2, "Items": ["GET", "HEAD"], "CachedMethods": { "Quantity": 2, "Items": ["GET", "HEAD"] } }, "DefaultTTL": 86400, "MinTTL": 0, "MaxTTL": 31536000, "Compress": true, "ForwardedValues": { "QueryString": false, "Cookies": { "Forward": "none" } } }, "Comment": "CloudFront distribution for S3 bucket", "Enabled": true } EOF
Cree la distribución estándar.
aws cloudfront create-distribution --distribution-config file://distribution-config.json
Guarde el ID de distribución y el nombre de dominio de la salida como variables de entorno. Sustituya los valores de ejemplo por sus propios valores. Los utilizará más adelante en este tutorial.
DISTRIBUTION_ID="
EABCD1234XMPL
" DOMAIN_NAME="d111111abcdef8.cloudfront.net
"
Antes de usar la distribución y el bucket de S3 de este tutorial en un entorno de producción, asegúrese de configurarlos para que se ajusten a sus necesidades específicas. Para obtener información sobre cómo configurar el acceso en un entorno de producción, consulte Configuración de acceso seguro y restricción de acceso a contenido.
Actualización de la política de bucket de S3
Actualice la política de bucket de S3 para permitir que CloudFront acceda a los objetos. Reemplace el nombre de bucket de ejemplo por el nombre del bucket.
# Get your AWS account ID ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text) # Create the bucket policy cat > bucket-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipal", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::$ACCOUNT_ID:distribution/$DISTRIBUTION_ID" } } } ] } EOF # Apply the bucket policy aws s3api put-bucket-policy \ --bucketamzn-s3-demo-bucket
\ --policy file://bucket-policy.json
Confirmación de la implementación de la distribución
Después de crear la distribución, la implementación tardará un tiempo en completarse. Cuando el estado de la distribución cambie de InProgress
a Deployed
, continúe con el siguiente paso.
aws cloudfront get-distribution --id $DISTRIBUTION_ID --query 'Distribution.Status'
De forma alternativa, puede utilizar el comando wait
para esperar a que se implemente la distribución.
aws cloudfront wait distribution-deployed --id $DISTRIBUTION_ID
Acceso al contenido a través de CloudFront
Para acceder a su contenido a través de CloudFront, combine el nombre de dominio de la distribución de CloudFront con la página principal de su contenido. Reemplace el nombre de dominio de CloudFront de ejemplo por el suyo propio.
https://
d111111abcdef8.cloudfront.net
/index.html
Si ha seguido los pasos anteriores y ha creado el archivo HTML, debería ver una página web donde se muestre Hello world!
Cuando carga más contenido en el bucket de S3, puede acceder al contenido a través de CloudFront combinando el nombre de dominio de distribución de CloudFront con la ruta al objeto en el bucket de S3. Por ejemplo, si carga un nuevo archivo llamado new-page.html
a la raíz de su bucket de S3, la URL tendrá el siguiente aspecto:
https://d111111abcdef8.cloudfront.net/new-page.html
.
Limpieza
Si creó la distribución y el bucket de S3 solo como ejercicio de aprendizaje, elimínelos para no seguir acumulando cargos. Desactive y elimine primero la distribución.
Desactivación y eliminación de una distribución estándar (AWS CLI)
En primer lugar, desactive la distribución.
# Get the current configuration and ETag ETAG=$(aws cloudfront get-distribution-config --id $DISTRIBUTION_ID --query 'ETag' --output text) # Create a modified configuration with Enabled=false aws cloudfront get-distribution-config --id $DISTRIBUTION_ID | \ jq '.DistributionConfig.Enabled = false' > temp_disabled_config.json # Update the distribution to disable it aws cloudfront update-distribution \ --id $DISTRIBUTION_ID \ --distribution-config file://<(jq '.DistributionConfig' temp_disabled_config.json) \ --if-match $ETAG
Espere a que se desactive la distribución.
aws cloudfront wait distribution-deployed --id $DISTRIBUTION_ID
Elimine la distribución.
# Get the current ETag ETAG=$(aws cloudfront get-distribution-config --id $DISTRIBUTION_ID --query 'ETag' --output text) # Delete the distribution aws cloudfront delete-distribution --id $DISTRIBUTION_ID --if-match $ETAG
Eliminación de un bucket de S3 (AWS CLI)
Elimine el bucket de S3 y el contenido. Reemplace el nombre del bucket de ejemplo por el suyo.
# Delete the bucket contents aws s3 rm s3://
amzn-s3-demo-bucket
--recursive # Delete the bucket aws s3 rb s3://amzn-s3-demo-bucket
Para limpiar los archivos locales creados para este tutorial, ejecute los siguientes comandos:
# Clean up local files rm -f distribution-config.json bucket-policy.json temp_disabled_config.json rm -rf ~/cloudfront-demo
Si lo desea, puede eliminar el OAC que ha creado para este tutorial.
# Get the OAC ETag OAC_ETAG=$(aws cloudfront get-origin-access-control --id $OAC_ID --query 'ETag' --output text) # Delete the OAC aws cloudfront delete-origin-access-control --id $OAC_ID --if-match $OAC_ETAG