--- hidden: true --- #### 1. Acesse o AWS CloudShell 1. Acesse o AWS CloudShell, na barra superior do AWS Console, clique no botão ao lado direito da barra de busca. #### 2. Crie as váriaveis de configuração 1. Crie as váriaveis de configuração para facilitar o uso dos scripts ```bash ACCOUNT_ID=$(aws sts get-caller-identity | jq -r .Account) # Retorna ID da conta AWS OHIO_LAB_BUCKET=${ACCOUNT_ID}-mini-lab-cf-ohio # Nome do Bucket para a região primária OREGON_LAB_BUCKET=${ACCOUNT_ID}-mini-lab-cf-oregon # Nome do Bucket para a região secundária ``` {{% notice warning %}} *Fique atento para não perder a [sessão do AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/limits.html#session-lifecycle-limitations) por inatividade, se a sessão for perdida as variáveis serão removidas.* {{% /notice %}} #### 3. Crie os buckets no Amazon S3 para serem a origem 1. Crie um bucket na região primária, neste caso **Leste dos EUA (Ohio)**. ```bash aws s3 mb s3://${OHIO_LAB_BUCKET} --region us-east-2 ``` 2. Crie um bucket na região secundária, neste caso **Oeste dos EUA (Oregon)**. ```bash aws s3 mb s3://${OREGON_LAB_BUCKET} --region us-west-2 ``` 3. Crie os arquivos para enviar aos buckets ```bash echo "File in Ohio S3" > ohio.index.html echo "File in Oregon S3" > oregon.index.html ``` 4. Copie os arquivos para os respectivos buckets ```bash aws s3 cp ohio.index.html s3://${OHIO_LAB_BUCKET}/index.html aws s3 cp oregon.index.html s3://${OREGON_LAB_BUCKET}/index.html ``` #### 4. Crie um **Origin Access Identity** no Amazon CloudFront 1. Crie um **Origin Access Identity** para ter uma identidade e posteriormente ceder o acesso aos buckets de origem. ```bash OAI_ID=$(aws cloudfront create-cloud-front-origin-access-identity \ --cloud-front-origin-access-identity-config \ CallerReference="cloudfront-mini-lab-example",Comment="CloudFront Origin Group Example" \ | jq -r '.CloudFrontOriginAccessIdentity.Id') ``` {{% notice note %}} *É feito o uso de [Command Substitution](https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html) junto do comando [jq](https://stedolan.github.io/jq/tutorial) para armazenar o resultado do comando em uma váriavel.* {{% /notice %}} #### 5. Crie as políticas de acesso nos buckets para permitir o acesso do Amazon CloudFront 1. Crie as políticas de acesso ao bucket na região primária, neste caso **Leste dos EUA (Ohio)**. ```bash cat < ohio-s3-policy.json { "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ${OAI_ID}" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::${OHIO_LAB_BUCKET}/*" } ] } EOT ``` 2. Crie as políticas de acesso ao bucket na região secundária, neste caso **Oeste dos EUA (Oregon)**. ```bash cat < oregon-s3-policy.json { "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ${OAI_ID}" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::${OREGON_LAB_BUCKET}/*" } ] } EOT ``` 3. Aplique as politicas nos buckets ```bash aws s3api put-bucket-policy \ --bucket ${OHIO_LAB_BUCKET} --policy file://ohio-s3-policy.json aws s3api put-bucket-policy \ --bucket ${OREGON_LAB_BUCKET} --policy file://oregon-s3-policy.json ``` #### 6. Crie a distribuição do Amazon CloudFront 1. Crie o arquivo de configuração da distribuição, esta configuração já criará as duas origens (uma para cada bucket) e o grupo de origem com as duas origens, também desabilita o cache para facilitar os testes. ```bash cat < mini-lab-example.json { "CallerReference":"mini-lab-example", "Aliases":{ "Quantity":0 }, "DefaultRootObject":"index.html", "Origins":{ "Quantity":2, "Items":[ { "Id":"mini-lab-origin-ohio", "DomainName":"${OHIO_LAB_BUCKET}.s3.amazonaws.com", "S3OriginConfig":{ "OriginAccessIdentity":"origin-access-identity/cloudfront/${OAI_ID}" }, "ConnectionAttempts":1, "ConnectionTimeout":2 }, { "Id":"mini-lab-origin-oregon", "DomainName":"${OREGON_LAB_BUCKET}.s3.amazonaws.com", "S3OriginConfig":{ "OriginAccessIdentity":"origin-access-identity/cloudfront/${OAI_ID}" }, "ConnectionAttempts":1, "ConnectionTimeout":2 } ] }, "OriginGroups":{ "Quantity":1, "Items":[ { "Id":"mini-lab-origin-group-example", "FailoverCriteria":{ "StatusCodes":{ "Quantity":6, "Items":[ 404, 403, 500, 502, 503, 504 ] } }, "Members":{ "Quantity":2, "Items":[ { "OriginId":"mini-lab-origin-ohio" }, { "OriginId":"mini-lab-origin-oregon" } ] } } ] }, "DefaultCacheBehavior":{ "TargetOriginId":"mini-lab-origin-group-example", "ForwardedValues":{ "QueryString":false, "Cookies":{ "Forward":"none" }, "Headers":{ "Quantity":0 }, "QueryStringCacheKeys":{ "Quantity":0 } }, "TrustedSigners":{ "Enabled":false, "Quantity":0 }, "TrustedKeyGroups":{ "Enabled":false, "Quantity":0 }, "ViewerProtocolPolicy":"allow-all", "MinTTL":0, "MaxTTL":0, "DefaultTTL":0, "AllowedMethods":{ "Quantity":2, "Items":[ "HEAD", "GET" ], "CachedMethods":{ "Quantity":2, "Items":[ "HEAD", "GET" ] } } }, "CacheBehaviors":{ "Quantity":0 }, "Comment":"", "Enabled":true } EOT ``` 2. Crie a distribuição no Amazon CloudFront ```bash CLOUDFRONT_ID=$(aws cloudfront create-distribution \ --distribution-config file://mini-lab-example.json | jq -r '.Distribution.Id') ``` {{% notice note %}} *É feito o uso de [Command Substitution](https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html) junto do comando [jq](https://stedolan.github.io/jq/tutorial) para armazenar o resultado do comando em uma váriavel.* {{% /notice %}} {{% notice note %}} *Após solicitar a criação da distribuição é necessário aguardar alguns minutos para que a distribuição esteja disponível.* {{% /notice %}} 3. (Opcional) Você pode consultar o status da distribuição com o comando abaixo. ```bash echo "Status: " $(aws cloudfront get-distribution \ --id ${CLOUDFRONT_ID} | jq -r '.Distribution.Status') ``` #### 7. Teste o Grupo de Origin 1. Pegue a URL da distribuição criada no passo anterior. ```bash CLOUDFRONT_URL=$(aws cloudfront get-distribution --id ${CLOUDFRONT_ID} | jq -r '.Distribution.DomainName') echo ${CLOUDFRONT_URL} ``` 2. Acesse a URL ver a entrega do conteúdo da região primária. ```bash curl -s ${CLOUDFRONT_URL} # O retorno deverá ser o texto: File in Ohio S3 ``` 3. Remova o arquivo index.html da região primária ```bash aws s3 rm s3://${OHIO_LAB_BUCKET}/index.html ``` 4. Acesse novamente a URL da distribuição criada no Amazon CloudFront para ver a entrega sendo feita pela região secundária. ```bash curl -s ${CLOUDFRONT_URL} # O retorno deverá ser o texto: File in Oregon S3 ``` 5. (Opcional) copie novamente o arquivo para a região primária mas com outro nome ```bash aws s3 cp ohio.index.html s3://${OHIO_LAB_BUCKET}/ohio.html ``` 6. (Opcional) acesse o arquivo com o novo nome para ver o retorno da região primária ```bash curl -s ${CLOUDFRONT_URL}/ohio.html # O retorno deverá ser o texto: File in Oregon S3 ``` #### 8. Apagando os recursos 1. Desabilite a distribuição usando o recurso de atualizar a configuração da distribuição. ```bash CLOUDFRONT_DIST=$(aws cloudfront get-distribution-config --id ${CLOUDFRONT_ID}) # Retorna os dados da distribuição CLOUDFRONT_ETAG=$(echo $CLOUDFRONT_DIST | jq -r '.ETag') # Retorna a ETag da distribuição echo $CLOUDFRONT_DIST | jq -r '.DistributionConfig' | jq -r .Enabled="false" > mini-lab-example-disabled.json # Retorna a configuração atual alterando o parametro Enabled CLOUDFRONT_ETAG=$(aws cloudfront update-distribution \ --id ${CLOUDFRONT_ID} \ --if-match ${CLOUDFRONT_ETAG} \ --distribution-config file://mini-lab-example-disabled.json \ | jq -r .ETag) # Executa o comando para desabilitar o CloudFront e atualizar a variável de ETag ``` 2. Aguarde alguns minutos até que a distribuição seja removida. Você pode verificar a exclusão já finalizou usando o comando abaixo: ```bash aws cloudfront get-distribution --id ${CLOUDFRONT_ID} | jq -r .Distribution.Status ``` 3. Remova a distribuição do Amazon CloudFront criada para o laboratório. ```bash aws cloudfront delete-distribution --id ${CLOUDFRONT_ID} --if-match ${CLOUDFRONT_ETAG} ``` 4. Apague o Origin Access Identity usado no laboratório. ```bash OAI_ETAG=$(aws cloudfront get-cloud-front-origin-access-identity --id ${OAI_ID} | jq -r '.ETag') aws cloudfront delete-cloud-front-origin-access-identity \ --id ${OAI_ID} --if-match ${OAI_ETAG} ``` 5. Apague os buckets usados no laboratório, nas duas regiões. ```bash aws s3 rb s3://${OHIO_LAB_BUCKET} --force aws s3 rb s3://${OREGON_LAB_BUCKET} --force ``` 6. Apague os arquivos criados para o labortório. ```bash rm ohio.index.html \ oregon.index.html \ ohio-s3-policy.json \ oregon-s3-policy.json \ mini-lab-example.json \ mini-lab-example-disabled.json ```