

# Conceitos básicos de uma distribuição padrão (AWS CLI)
<a name="get-started-cli-tutorial"></a>

Os procedimentos nesta seção mostram como usar a AWS CLI com o CloudFront para definir uma configuração básica que envolve o seguinte:
+ Criar um bucket do Amazon S3 para usar como sua origem de distribuição.
+ Armazenar as versões originais dos seus objetos no bucket do S3.
+ Usar o controle de acesso à origem (OAC) para enviar solicitações autenticadas à sua origem do Amazon S3. O OAC envia solicitações por meio do CloudFront para impedir que os visualizadores acessem seu bucket do S3 diretamente. Para ter mais informações sobre OAC, consulte [Restringir o acesso a uma origem do Amazon S3](private-content-restricting-access-to-s3.md).
+ Usar o nome de domínio do CloudFront em URLs para seus objetos (por exemplo, `https://d111111abcdef8.cloudfront.net/index.html`).
+ Armazenar seus objetos nos locais da borda do CloudFront pela duração padrão de 24 horas (a duração mínima é de 0 segundo).

É possível personalizar a maioria dessas opções. Para obter informações sobre como personalizar as opções de distribuição do CloudFront, consulte [Criar uma distribuição](distribution-web-creating-console.md).

## Pré-requisitos
<a name="get-started-cli-prereqs"></a>

Antes de começar, certifique-se de que você concluiu as etapas em [Configurar a Conta da AWS](setting-up-cloudfront.md).

Instale a AWS CLI e configure-a com suas credenciais. Para obter mais informações, consulte [Conceitos básicos do AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) no *Manual do usuário do AWS CLI*.



## Criar um bucket do Amazon S3
<a name="get-started-cli-create-bucket"></a>

Um bucket do Amazon S3 é um contêiner destinado a arquivos (objetos) ou pastas. O CloudFront pode distribuir praticamente qualquer tipo de arquivo quando um bucket do S3 é a origem. Por exemplo, o CloudFront pode distribuir texto, imagens e vídeos. Não há máximo para a quantidade de dados que você pode armazenar no Amazon S3.

Para este tutorial, crie um bucket do S3 e faça upload de um arquivo HTML que você usará para criar uma página da web básica.

```
aws s3 mb s3://amzn-s3-demo-bucket/ --region us-east-1
```

Substitua *amzn-s3-demo-bucket* por um nome de bucket globalmente exclusivo. Para Região da AWS, recomendamos escolher uma Região que esteja geograficamente perto de você. Isso reduz a latência e os custos, mas escolher uma Região diferente também funciona. Por exemplo, você pode fazer isso para atender aos requisitos regulamentares.

## Fazer upload do conteúdo no bucket
<a name="get-started-cli-upload-content"></a>

Para este tutorial, baixe e extraia os arquivos de conteúdo de amostra para uma página da 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
```

Isso cria um diretório com um arquivo `index.html` e uma pasta `css`. Faça upload desses arquivos no bucket do S3.

```
aws s3 cp ~/cloudfront-demo/hello-world/ s3://amzn-s3-demo-bucket/ --recursive
```

## Criar um controle de acesso à origem (OAC)
<a name="get-started-cli-create-oac"></a>

Para este tutorial, você criará um controle de acesso à origem (OAC). O OAC ajuda a enviar com segurança solicitações autenticadas à sua origem do Amazon S3. Para ter mais informações sobre OAC, consulte [Restringir o acesso a uma origem do 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
```

Salve o ID do OAC da saída como uma variável de ambiente. Substitua o valor de exemplo pelos seu próprio ID do OAC. Ele será usado na próxima etapa.

```
OAC_ID="E1ABCD2EFGHIJ"
```

## Criar uma distribuição padrão
<a name="get-started-cli-create-classic"></a>

Crie um arquivo de configuração denominado `distribution-config.json`. Substitua o nome do bucket de exemplo pelo nome do seu bucket para os valores `Id`, `DomainName` e `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
```

Crie a distribuição padrão.

```
aws cloudfront create-distribution --distribution-config file://distribution-config.json
```

Salve o ID de distribuição e o nome de domínio da saída como variáveis de ambiente. Substitua os valores de exemplo pelos seus próprios. Você precisará disso posteriormente neste tutorial.

```
DISTRIBUTION_ID="EABCD1234XMPL"
DOMAIN_NAME="d111111abcdef8.cloudfront.net"
```

Antes de usar a distribuição e o bucket do S3 deste tutorial em um ambiente de produção, certifique-se de configurá-los para atender às suas necessidades específicas. Para ter mais informações sobre como configurar o acesso em um ambiente de produção, consulte [Configurar o acesso seguro e restringir o acesso ao conteúdo](SecurityAndPrivateContent.md).

## Atualizar a política de bucket do S3
<a name="get-started-cli-update-bucket-policy"></a>

Atualize sua política de bucket do S3 para permitir que o CloudFront acesse os objetos. Substitua o nome do bucket de exemplo pelo nome do 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
```

## Confirme a implantação da distribuição
<a name="get-started-cli-confirm-deployment"></a>

Depois de criar sua distribuição, levará algum tempo para concluir a implantação. Quando o status da distribuição mudar de `InProgress` para `Deployed`, prossiga para a próxima etapa.

```
aws cloudfront get-distribution --id $DISTRIBUTION_ID --query 'Distribution.Status'
```

Como alternativa, você pode usar o comando `wait` para aguardar a implantação da distribuição.

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

## Acessar o conteúdo por meio do CloudFront
<a name="get-started-cli-access-content"></a>

Para acessar o conteúdo por meio do CloudFront, combine o nome de domínio da distribuição do CloudFront com o a página principal do conteúdo. Substitua o nome de domínio de exemplo do CloudFront pelo seu próprio.

```
https://d111111abcdef8.cloudfront.net/index.html
```

Se você seguiu as etapas anteriores e criou o arquivo HTML, deverá ver uma página da web com a mensagem **Hello world\$1**.

Ao fazer upload de mais conteúdo para esse bucket do S3, você consegue acessar o conteúdo por meio do CloudFront combinando o nome de domínio da distribuição do CloudFront com o caminho para o objeto no bucket do S3. Por exemplo, se você fizer upload de um novo arquivo chamado `new-page.html` na raiz do bucket do S3, o URL será semelhante a:

`https://d111111abcdef8.cloudfront.net/new-page.html`.

## Limpeza
<a name="get-started-cli-cleanup"></a>

Se tiver criado a distribuição e o bucket do S3 apenas como exercício de aprendizado, poderá excluí-los, de maneira que deixe de acumular cobranças. Primeiro desabilite e exclua a distribuição.

**Para desabilitar e excluir uma distribuição padrão (AWS CLI)**

1. Primeiro, desabilite a distribuição.

   ```
   # 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. Aguarde até que a distribuição seja desabilitada.

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

1. Excluir a distribuição.

   ```
   # 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
   ```

**Para excluir um bucket do S3 (AWS CLI)**
+ Exclua o bucket do S3 e seu conteúdo. Substitua o nome do bucket de exemplo pelo seu próprio.

  ```
  # 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 limpar os arquivos locais criados para este tutorial, execute os seguintes comandos:

```
# Clean up local files
rm -f distribution-config.json bucket-policy.json temp_disabled_config.json
rm -rf ~/cloudfront-demo
```

Opcionalmente, você pode excluir o OAC que você criou 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
```