Usar várias origens com distribuições do CloudFront - Amazon CloudFront

Usar várias origens com distribuições do CloudFront

Ao criar uma distribuição, especifique a origem onde o CloudFront enviará solicitações para os arquivos. É possível usar vários tipos diferentes de origens com o CloudFront. Por exemplo, você pode usar um bucket do Amazon S3, um contêiner do MediaStore, um canal do MediaPackage, um Application Load Balancer ou um URL da função do AWS Lambda.

Usar um bucket do Amazon S3

Os tópicos a seguir descrevem as diferentes maneiras de usar um bucket do Amazon S3 como a origem de uma distribuição do CloudFront.

Usar um bucket padrão do Amazon S3

Ao usar o Amazon S3 como origem para a distribuição, coloque os objetos que deseja que o CloudFront entregue em um bucket do Amazon S3. É possível usar qualquer método compatível com o Amazon S3 para colocar os objetos no Amazon S3. Por exemplo, você pode usar o console ou a API do Amazon S3 ou uma ferramenta de terceiros. É possível criar uma hierarquia no bucket para armazenar os objetos, da mesma forma que você faria com qualquer outro bucket padrão do Amazon S3.

Usar um bucket do Amazon S3 existente como seu servidor de origem do CloudFront não altera o bucket. Ainda é possível usá-lo normalmente como você faria para armazenar e acessar objetos do Amazon S3 no preço padrão do Amazon S3. Você será cobrado o valor normal do Amazon S3 para armazenar os objetos no bucket. Para obter mais informações sobre as cobranças para usar o CloudFront, consulte Preço do Amazon CloudFront. Para obter mais informações sobre como usar o CloudFront com um bucket do S3 existente, consulte Adicionar o CloudFront a um bucket existente do Amazon S3.

Importante

Para que seu bucket funcione com o CloudFront, o nome deve estar de acordo com os requisitos de nomenclatura do DNS. Para obter mais informações, acesse Regras de atribuição de nomes de buckets no Manual do usuário do Amazon Simple Storage Service.

Ao especificar um bucket do Amazon S3 como uma origem do CloudFront, recomendamos que você use o seguinte formato:

bucket-name.s3.region.amazonaws.com

Ao especificar o nome do bucket nesse formato, é possível usar os seguintes recursos do CloudFront:

Não especifique o bucket usando os seguintes formatos:

  • O estilo de caminho do Amazon S3: s3.amazonaws.com/bucket-name

  • O CNAME do Amazon S3

Usar o Amazon S3 Object Lambda

Quando você cria um ponto de acesso do Object Lambda, o Amazon S3 gera automaticamente um alias exclusivo para seu ponto de acesso do Object Lambda. É possível usar esse alias em vez de um nome de bucket do Amazon S3 como uma origem de sua distribuição do CloudFront.

Ao usar um alias de ponto de acesso do Object Lambda como uma origem do CloudFront, recomendamos que você use o seguinte formato:

alias.s3.region.amazonaws.com

Para obter informações sobre como encontrar o alias, consulte Como usar um alias em estilo de bucket para seu ponto de acesso do S3 Object Lambda no Guia do usuário do Amazon S3.

Importante

Ao usar um ponto de acesso do Object Lambda como origem para o CloudFront, você deverá usar o controle de acesso de origem.

Para ver um exemplo de caso de uso, consulte Usar o Amazon S3 Object Lambda com o Amazon CloudFront para personalizar o conteúdo para usuários finais.

O CloudFront trata uma origem de ponto de acesso do Object Lambda da mesma forma que uma origem de bucket padrão do Amazon S3.

As quatro permissões a seguir devem ser configuradas ao usar o Amazon S3 Object Lambda como origem para sua distribuição.

Object Lambda Access Point
Para adicionar permissões para o ponto de acesso Object Lambda
  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. No painel de navegação à esquerda, escolha Pontos de Acesso Object Lambda.

  3. Escolha o Ponto de Acesso Object Lambda que deseja usar.

  4. Escolha a aba Permissões.

  5. Escolha Editar na seção Política de ponto de acesso do Object Lambda.

  6. Cole a política a seguir no campo Política.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3-object-lambda:Get*", "Resource": "arn:aws:s3-object-lambda:region:AWS-account-ID:accesspoint/Object-Lambda-Access-Point-name", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudfront::AWS-account-ID:distribution/CloudFront-distribution-ID" } } } ] }
  7. Escolha Salvar alterações.

Amazon S3 Access Point
Para adicionar permissões para o Ponto de Acesso Amazon S3
  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. No painel de navegação, escolha Pontos de acesso.

  3. Escolha o Ponto de Acesso Amazon S3 que deseja usar.

  4. Escolha a aba Permissões.

  5. Escolha Editar na seção Política de ponto de acesso.

  6. Cole a política a seguir no campo Política.

    { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "s3objlambda", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:region:AWS-account-ID:accesspoint/Access-Point-name", "arn:aws:s3:region:AWS-account-ID:accesspoint/Access-Point-name/object/*" ], "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "s3-object-lambda.amazonaws.com" } } } ] }
  7. Escolha Salvar.

Amazon S3 bucket
Como adicionar permissões para o bucket do Amazon S3
  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. No painel de navegação, escolha Buckets.

  3. Escolha o bucket do Amazon S3 que deseja usar.

  4. Escolha a aba Permissões.

  5. Na seção Política do bucket, escolha Editar.

  6. Cole a política a seguir no campo Política.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "*", "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ], "Condition": { "StringEquals": { "s3:DataAccessPointAccount": "AWS-account-ID" } } } ] }
  7. Escolha Salvar alterações.

AWS Lambda function
Como adicionar permissões para a função do Lambda
  1. Faça login no AWS Management Console e abra o console do AWS Lambda em https://console.aws.amazon.com/lambda/.

  2. No painel de navegação, escolha Funções.

  3. Escolha a função do AWS Lambda que deseja publicar.

  4. Escolha a guia Configuração e, depois, Permissões.

  5. Escolha Adicionar permissões na seção Declarações de políticas baseadas em recursos.

  6. Selecione Conta da AWS.

  7. Insira um nome para o ID da declaração.

  8. Insira cloudfront.amazonaws.com em Entidade principal.

  9. Escolha lambda:InvokeFunction no menu suspenso Ação.

  10. Escolha Salvar.

Usar Ponto de Acesso Amazon S3

Quando você usa um ponto de acesso do S3, o Amazon S3 gera um alias exclusivo para você. É possível usar esse alias em vez de um nome de bucket do Amazon S3 como uma origem de sua distribuição do CloudFront.

Ao usar um alias de Ponto de Acesso Amazon S3 como uma origem do CloudFront, recomendamos que você use o seguinte formato:

alias.s3.region.amazonaws.com

Para ter mais informações sobre como encontrar o alias, consulte Usar um alias em estilo de bucket para seu ponto de acesso do S3 no Guia do usuário do Amazon S3.

Importante

Ao usar um Ponto de Acesso Amazon S3 como origem para o CloudFront, você deverá usar o controle de acesso à origem.

O CloudFront trata uma origem de Ponto de Acesso Amazon S3 da mesma forma que uma origem de bucket padrão do Amazon S3.

As duas permissões a seguir devem ser configuradas ao usar o Amazon S3 Object Lambda como origem para sua distribuição.

Amazon S3 Access Point
Para adicionar permissões para o Ponto de Acesso Amazon S3
  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. No painel de navegação, escolha Pontos de acesso.

  3. Escolha o Ponto de Acesso Amazon S3 que deseja usar.

  4. Escolha a aba Permissões.

  5. Escolha Editar na seção Política de ponto de acesso.

  6. Cole a política a seguir no campo Política.

    { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "s3objlambda", "Effect": "Allow", "Principal": {"Service": "cloudfront.amazonaws.com"}, "Action": "s3:*", "Resource": [ "arn:aws:s3:region:AWS-account-ID:accesspoint/Access-Point-name", "arn:aws:s3:region:AWS-account-ID:accesspoint/Access-Point-name/object/*" ], "Condition": { "StringEquals": {"aws:SourceArn": "arn:aws:cloudfront::AWS-account-ID:distribution/CloudFront-distribution-ID"} } } ] }
  7. Escolha Salvar.

Amazon S3 bucket
Como adicionar permissões para o bucket do Amazon S3
  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. No painel de navegação, escolha Buckets.

  3. Escolha o bucket do Amazon S3 que deseja usar.

  4. Escolha a aba Permissões.

  5. Na seção Política do bucket, escolha Editar.

  6. Cole a política a seguir no campo Política.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "*", "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ], "Condition": { "StringEquals": { "s3:DataAccessPointAccount": "AWS-account-ID" } } } ] }
  7. Escolha Salvar alterações.

Usar um bucket do Amazon S3 configurado como um endpoint do site

É possível usar um bucket do Amazon S3 configurado como um endpoint de site como uma origem personalizada com o CloudFront. Ao configurar a distribuição do CloudFront, para a origem, insira o endpoint de hospedagem de site estático do Amazon S3 para seu bucket. Esse valor é exibido no console do Amazon S3, na guia Properties (Propriedades), no painel Static website hosting (Hospedagem de site estático). Por exemplo:

http://bucket-name.s3-website-region.amazonaws.com

Para obter mais informações sobre como especificar endpoints de site estáticos do Amazon S3, consulte Endpoints de site no Manual do usuário do Amazon Simple Storage Service.

Ao especificar o nome do bucket nesse formato como sua origem, é possível usar redirecionamentos e documentos de erro personalizados do Amazon S3. Para obter mais informações, consulte Configurar um documento de erro personalizado e Configurar um redirecionamento no Guia do usuário do Amazon Simple Storage Service. (O CloudFront também fornece páginas de erro personalizadas. Para obter mais informações, consulte Criar uma página de erro personalizada para códigos de status HTTP específicos.)

Usar um bucket do Amazon S3 como servidor de origem do CloudFront não o altera o bucket de forma alguma. Ainda é possível usá-lo como você faria normalmente e o Amazon S3 será cobrado pelos valores normais. Para obter mais informações sobre as cobranças para usar o CloudFront, consulte Preço do Amazon CloudFront.

nota

Se usar a API do CloudFront para criar sua distribuição com um bucket do Amazon S3 que está configurado como o endpoint de um site, você deverá configurá-lo usando CustomOriginConfig, mesmo que o site esteja hospedado em um bucket do Amazon S3. Para mais informações sobre a criação de distribuições usando a API do CloudFront, consulte CreateDistribution na Referência da API do Amazon CloudFront.

Adicionar o CloudFront a um bucket existente do Amazon S3

Se armazenar os objetos em um bucket do Amazon S3, você poderá fazer com que os usuários os obtenham diretamente no S3 ou poderá configurar o CloudFront para obtê-los no S3 e distribuí-los para seus usuários. Usar o CloudFront pode ser mais econômico se os seus usuários acessarem seus objetos com frequência. Com um uso maior, o preço da transferência de dados do CloudFront é menor que o do Amazon S3. Além disso, os downloads são mais rápidos com o CloudFront do que só com o Amazon S3 porque seus objetos são armazenados mais próximos dos usuários.

nota

Se quiser que o CloudFront respeite as configurações de compartilhamento de recursos entre origens do Amazon S3, configure o CloudFront para encaminhar o cabeçalho Origin para o Amazon S3. Para ter mais informações, consulte Armazenar conteúdo em cache com base nos cabeçalhos de solicitação.

Se você distribui conteúdo diretamente do bucket do Amazon S3 usando seu próprio nome de domínio (como example.com) em vez do nome de domínio do bucket do Amazon S3 (como DOC-EXAMPLE-BUCKET.s3.us-west-2.amazonaws.com), é possível adicionar o CloudFront sem interrupção usando o procedimento a seguir.

Como adicionar o CloudFront quando você já estiver distribuindo seu conteúdo pelo Amazon S3
  1. Crie uma distribuição na do CloudFront. Para ter mais informações, consulte Etapas para criar uma distribuição (visão geral).

    Ao criar a distribuição, especifique o nome do seu bucket do Amazon S3 como o servidor de origem.

    Importante

    Para que seu bucket funcione com o CloudFront, o nome deve estar de acordo com os requisitos de nomenclatura do DNS. Para obter mais informações, acesse Regras de atribuição de nomes de buckets no Manual do usuário do Amazon Simple Storage Service.

    Se estiver usando um CNAME com o Amazon S3, especifique-o para a distribuição.

  2. Crie uma página da web de teste que contenha links para objetos publicamente legíveis no bucket do Amazon S3 e teste os links. Para esse teste inicial, use o nome de domínio do CloudFront da distribuição nos URLs dos objetos, por exemplo, https://d111111abcdef8.cloudfront.net/images/image.jpg.

    Para mais informações sobre o formato dos URLs do CloudFront, consulte Personalizar o formato do URL para arquivos no CloudFront.

  3. Se estiver usando CNAMEs do Amazon S3, a aplicação usará seu nome de domínio (por exemplo, exemplo.com) para fazer referência aos objetos do bucket do Amazon S3, em vez de usar o nome do bucket (por exemplo, DOC-EXAMPLE-BUCKET.s3.amazonaws.com). Para continuar usando seu nome de domínio para fazer referência aos objetos, em vez do nome de domínio do CloudFront para sua distribuição (por exemplo, d111111abcdef8.cloudfront.net), é necessário atualizar as configurações com seu provedor de serviço de DNS.

    Para que os CNAMEs do Amazon S3 funcionem, o provedor de serviço de DNS deve ter um conjunto de registros de recurso CNAME para seu domínio que encaminhe consultas para o domínio do seu bucket do Amazon S3. Por exemplo, se um usuário solicitar este objeto:

    https://example.com/images/image.jpg

    A solicitação será roteada novamente de forma automática, e o usuário verá este objeto:

    https://DOC-EXAMPLE-BUCKET.s3.amazonaws.com/images/image.jpg

    Para rotear consultas para a distribuição do CloudFront, em vez do bucket do Amazon S3, use o método fornecido por seu provedor de serviço de DNS para atualizar o conjunto de registros de recurso CNAME do seu domínio. Esse registro CNAME atualizado redirecionará as consultas de DNS do domínio para o nome de domínio do CloudFront da distribuição. Para obter mais informações, consulte a documentação fornecida por seu provedor de serviço de DNS.

    nota

    Se estiver usando o Route 53 como o serviço de DNS, você poderá usar um conjunto de registros de recurso CNAME ou um conjunto de registros de recurso de alias. Para obter informações sobre como editar conjuntos de registros do recurso, consulte Editar registros. Para obter informações sobre conjuntos de registros do recurso de alias, consulte Escolher entre registros de alias e não alias. Ambos os tópicos estão no Guia do desenvolvedor do Amazon Route 53.

    Para mais informações sobre como usar CNAMEs com o CloudFront, consulte Uso de URLs personalizados adicionando nomes de domínio alternativos (CNAMEs).

    Depois de atualizar o conjunto de registros de recurso CNAME, pode levar até 72 horas para que as alterações sejam propagadas em todo o sistema DNS, embora normalmente ocorra mais rápido. Durante esse período, algumas solicitações do seu conteúdo continuarão sendo roteadas para o bucket do Amazon S3 e outras serão direcionadas para o CloudFront.

Mover um bucket do Amazon S3 para uma Região da AWS diferente

Se estiver usando o Amazon S3 como a origem de uma distribuição do CloudFront e mover o bucket para uma Região da AWS diferente, o CloudFront poderá levar até uma hora para atualizar os registros para usar uma nova região quando ocorrer ambas as situações:

  • Você estiver usando uma identidade de acesso de origem (OAI) do CloudFront para restringir o acesso ao bucket

  • Você mover o bucket para uma região do Amazon S3 que requer o Signature versão 4 para autenticação.

Quando estiver usando OAIs, o CloudFront você usará a região (entre outros valores) para calcular a assinatura usada para solicitar objetos do seu bucket. Para obter mais informações sobre OAIs, consulte Usar uma identidade do acesso de origem (herdada, não recomendada). Para obter uma lista de Regiões da AWS compatíveis com o Signature versão 2, consulte Processo de assinatura do Signature versão 2 na Referência geral da Amazon Web Services.

Para forçar uma atualização mais rápida dos registros do CloudFront, é possível atualizar a distribuição do CloudFront, por exemplo, atualizando o campo Description (Descrição) na guia General (Geral) do console do CloudFront. Quando você atualiza uma distribuição, o CloudFront verifica imediatamente a região em que o bucket está. A propagação da alteração para todos os locais de borda deve levar apenas alguns minutos.

Usar um contêiner do MediaStore ou um canal do MediaPackage

Para fazer uma transmissão de vídeo usando o CloudFront, é possível configurar um bucket do Amazon S3 definido como um contêiner do MediaStore, ou criar um canal e endpoints com o MediaPackage. Depois, você poderá criar e configurar uma distribuição no CloudFront para transmitir o vídeo.

Para obter mais informações e instruções de todas as etapas, consulte os tópicos a seguir:

Usar um Application Load Balancer

Se a origem for um ou mais servidores HTTP (servidores Web) hospedados em uma ou mais instâncias do Amazon EC2, você poderá usar um Application Load Balancer para distribuir o tráfego para as instâncias. Para obter mais informações sobre como usar um Application Load Balancer como a origem para o CloudFront, incluindo como garantir que os visualizadores só possam acessar os servidores Web por meio do CloudFront e não acessando o balanceador de carga diretamente, consulte Restringir o acesso aos Application Load Balancers.

Usar um URL da função do Lambda

Um URL da função do Lambda é um endpoint HTTPS dedicado para uma função do AWS Lambda. Você pode usar um URL da função do Lambda para construir uma aplicação Web sem servidor inteiramente dentro do AWS Lambda. Você pode invocar a aplicação Web do Lambda diretamente por meio do URL da função, sem a necessidade de se integrar ao API Gateway ou a um Application Load Balancer.

Se construir uma aplicação Web sem servidor usando funções do Lambda com URLs de função, você poderá adicionar o CloudFront para obter os seguintes benefícios:

  • Acelerar a aplicação armazenando conteúdo em cache mais próximo dos visualizadores

  • Usar um nome de domínio personalizado para a aplicação Web

  • Encaminhar diferentes caminhos de URL para diferentes funções do Lambda usando comportamentos de cache do CloudFront

  • Bloquear solicitações específicas usando restrições geográficas do CloudFront ou o AWS WAF (ou ambos)

  • Usar o AWS WAF com o CloudFront para ajudar a proteger a aplicação contra bots mal-intencionados, ajudar a evitar violações comuns de aplicações e aprimorar a proteção contra ataques DDoS

Para usar um URL da função do Lambda como a origem de uma distribuição do CloudFront, especifique o nome de domínio completo do URL da função do Lambda como o domínio de origem. Um nome de domínio do URL da função do Lambda usa o seguinte formato:

function-URL-ID.lambda-url.AWS-Region.on.aws

Quando você usa um URL da função do Lambda como origem para uma distribuição do CloudFront, o URL da função deverá estar acessível publicamente. Para fazer isso, defina o parâmetro AuthType do URL da função como NONE e permita que a permissão lambda:InvokeFunctionUrl em uma política baseada em recurso. Para obter mais informações, consulte Usar o AuthType NONE no Guia do desenvolvedor do AWS Lambda. No entanto, você também pode adicionar um cabeçalho de origem personalizado às solicitações que o CloudFront envia à origem e escrever o código da função para retornar uma resposta de erro se o cabeçalho não estiver presente na solicitação. Isso ajuda a garantir que os usuários só possam acessar a aplicação Web por meio do CloudFront, e não usar diretamente o URL da função do Lambda.

Para obter mais informações sobre os URLs de função do Lambda, consulte os seguintes tópicos no Guia do desenvolvedor do AWS Lambda:

Usar o Amazon EC2 (ou outra origem personalizada)

Uma origem personalizada é um servidor HTTP, por exemplo, um servidor da web. O servidor HTTP pode ser uma instância do Amazon EC2 ou um servidor HTTP hospedado em outro lugar. Uma origem do Amazon S3 configurada como um endpoint do site também é considerada como uma origem personalizada.

Ao usar seu próprio servidor HTTP como uma origem personalizada, especifique o nome DNS do servidor, além das portas HTTP e HTTPS e o protocolo que o CloudFront deve usar para obter objetos da origem.

A maioria dos recursos do CloudFront são compatíveis ao usar uma origem personalizada com a exceção de conteúdo privado. Embora seja possível usar um URL assinado para distribuir conteúdo de uma origem personalizada, para que o CloudFront acesse a origem personalizada, ela deve permanecer publicamente acessível. Para ter mais informações, consulte Veicular conteúdo privado com signed URLs e cookies.

Siga essas diretrizes de como usar instâncias do Amazon EC2 e outras origens personalizadas com o CloudFront.

  • Hospede e forneça o mesmo conteúdo em todos os servidores que estão fornecendo conteúdo da mesma origem do CloudFront. Para obter mais informações, consulte Configurações de origemValores especificados ao criar ou atualizar uma distribuição no tópico.

  • Registre as entradas do cabeçalho X-Amz-Cf-Id em todos os servidores, caso você precise que o AWS Support ou o CloudFront use esse valor para depuração.

  • Restrinja as solicitações às portas HTTP e HTTPS em que a origem personalizada escuta.

  • Sincronizar os relógios de todos os servidores na sua implementação. Observe que o CloudFront usa o Tempo Universal Coordenado (UTC) para signed URLs assinados e cookies assinados, para logs e relatórios. Além disso, se você monitorar a atividade do CloudFront usando métricas do CloudWatch. Observe que o CloudWatch também usa UTC.

  • Use servidores redundantes para lidar com falhas.

  • Para obter informações sobre como usar uma origem personalizada para fornecer conteúdo privado, consulte Restringir o acesso a arquivos em origens personalizadas.

  • Para obter informações sobre o comportamento da solicitação e da resposta e os códigos de status HTTP compatíveis, consulte Comportamento de solicitações e respostas.

Se você usa o Amazon EC2 para uma origem personalizada, recomendamos que faça o seguinte:

  • Use uma imagem de máquina da Amazon que instala automaticamente o software para um servidor da web. Para mais informações, consulte a documentação do Amazon EC2.

  • Use um balanceador de carga do Elastic Load Balancing para lidar com o tráfego em várias instâncias do Amazon EC2 e isolar sua aplicação das alterações nas instâncias do Amazon EC2. Por exemplo, se usar um balanceador de carga, você poderá adicionar e excluir instâncias do Amazon EC2 sem alterar a aplicação. Para mais informações, consulte a documentação do Elastic Load Balancing.

  • Ao criar sua distribuição do CloudFront, especifique o URL do balanceador de carga para o nome de domínio do seu servidor de origem. Para ter mais informações, consulte Criar uma distribuição.

Usar grupos de origem do CloudFront

É possível especificar um grupo de origens para sua origem do CloudFront se, por exemplo, você quiser configurar o failover de origem para cenários quando precisar de alta disponibilidade. Use o failover de origem para designar uma origem principal para o CloudFront mais uma segunda origem para o qual p CloudFront muda automaticamente quando a origem primária retorna respostas específicas de falha com código de status HTTP.

Para obter mais informações, incluindo as etapas para configurar um grupo de origens, consulte Otimizar a alta disponibilidade com o failover de origem do CloudFront.