

# Introducción a una distribución estándar (AWS CLI)
<a name="get-started-cli-tutorial"></a>

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](private-content-restricting-access-to-s3.md).
+ 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](distribution-web-creating-console.md).

## Requisitos previos
<a name="get-started-cli-prereqs"></a>

Antes de comenzar, asegúrese de que ha completado los pasos que se detallan en [Configuración de su Cuenta de AWS](setting-up-cloudfront.md).

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](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) en la *Guía del usuario de AWS CLI*.



## Crear un bucket de Amazon S3
<a name="get-started-cli-create-bucket"></a>

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/ --region us-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
<a name="get-started-cli-upload-content"></a>

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)
<a name="get-started-cli-create-oac"></a>

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](private-content-restricting-access-to-s3.md).

```
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
<a name="get-started-cli-create-classic"></a>

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](SecurityAndPrivateContent.md).

## Actualización de la política de bucket de S3
<a name="get-started-cli-update-bucket-policy"></a>

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 \
    --bucket amzn-s3-demo-bucket \
    --policy file://bucket-policy.json
```

## Confirmación de la implementación de la distribución
<a name="get-started-cli-confirm-deployment"></a>

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
<a name="get-started-cli-access-content"></a>

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\$1**

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
<a name="get-started-cli-cleanup"></a>

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)**

1. 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
   ```

1. Espere a que se desactive la distribución.

   ```
   aws cloudfront wait distribution-deployed --id $DISTRIBUTION_ID
   ```

1. 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
```