Como posso usar o Amazon S3 para hospedar um site estático que usa o API Gateway como proxy?
Quero usar o Amazon API Gateway como proxy para meu site estático hospedado com o Amazon Simple Storage Service (Amazon S3).
Resolução
Você pode usar o Amazon S3 para hospedar sites estáticos. Você também pode usar a integração do proxy HTTP ou a integração de serviços da AWS para configurar o API Gateway como um proxy para o site estático do Amazon S3.
Integração do proxy HTTP
Se o seu site estático do Amazon S3 estiver acessível publicamente, use a integração HTTP e forneça o URL do site estático do S3 para o API Gateway.
Se ainda não tiver feito isso, siga o tutorial para configurar um site estático no Amazon S3.
Criar uma API REST
- Abra o Console do API Gateway.
- Em API REST, escolha Criar.
- Em Nome da API, insira um nome para sua API REST.
- Escolha a lista suspensa Tipo de endpoint, selecione o tipo de endpoint e, em seguida, escolha Criar API.
- No painel de navegação, escolha Recursos abaixo do nome da sua API.
- Escolha a lista suspensa Ações e, em seguida, selecione Criar recurso.
- Em Nome do recurso, insira um nome. Por exemplo, key.
- Em Caminho do recurso, insira um parâmetro de caminho. Por exemplo, {key}.
- Escolha Criar recurso.
Criar o método para o recurso raiz
- Escolha o nome do recurso {key}, selecione a lista suspensa Ações e, em seguida, escolha Criar método.
- Na lista suspensa {key}, selecione GET e escolha o ícone de marca de seleção.
- Em Tipo de integração, escolha HTTP, selecione Usar a integração de proxy HTTP e mantenha o Método HTTP como GET.
- No URL do endpoint, insira http://BUCKET_NAME.s3-website.REGION.amazonaws.com/{key} e escolha Salvar.
Implantar a API REST
- Na lista suspensa Ações, escolha Implantar API.
- Na lista suspensa Estágio de implantação, escolha [Novo estágio].
- Em Nome do estágio, insira um nome. Por exemplo, Dev.
- Escolha Implantar. No Editor de estágios de desenvolvimento, anote o URL Invoke. Você precisará dele mais tarde para testar sua API.
- Use um comando curl semelhante ao seguinte para testar o proxy da API para o seu site do Amazon S3:
curl -X GET https://API_ID.execute-api.REGION.amazonaws.com/index.html
Integração de serviços da AWS
Configurar o site estático do Amazon S3
Se o seu site estático do Amazon S3 estiver bloqueado para acesso público, configure o site para que ele seja acessado somente pelo proxy da API.
-
Se ainda não tiver feito isso, siga o tutorial para configurar um site estático no Amazon S3.
Observação: pule a Etapa 3 do tutorial e mantenha a configuração padrão Bloquear todo o acesso público habilitada. -
Modifique a política de bucket na Etapa 4 do tutorial para permitir que o proxy da API acesse somente o bucket do Amazon S3, semelhante ao seguinte exemplo:
{ "Version": "2012-10-17", "Statement": [{ "Sid": "APIProxyBucketPolicy", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::BUCKET_NAME/*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:execute-api:REGION:ACCOUNT:API_ID/*/GET/" } } }] }
-
Crie uma política do AWS Identity and Access Management (IAM) com a permissão para a API GetObject para o bucket do Amazon S3.
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "*" }] }
-
Crie um perfil do IAM e anexe a política do IAM criada na etapa anterior a esse novo perfil.
-
Copie o ARN de perfis do IAM. Você precisará disso em outra etapa.
O perfil do IAM deve conter a seguinte política de confiança para que o API Gateway assuma o perfil:{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "sts:AssumeRole" }] }
Criar um proxy da API REST para o serviço do Amazon S3
- Abra o Console do API Gateway.
- Escolha Criar API.
- Escolha API REST e, em seguida, Criar.
- Em Nome da API, insira um nome para sua API REST.
- Em Tipo de endpoint, escolha o tipo de endpoint dependendo da origem da maior parte do tráfego do cliente.
Observação: é uma prática recomendada usar endpoints otimizados para borda para serviços públicos acessados pela Internet. Endpoints regionais são usados principalmente para APIs que são acessadas na mesma região da AWS. - Escolha Criar API.
Criar o método GET para o recurso raiz
O método raiz é configurado para solicitações de proxy de sites estáticos do Amazon S3.
- Com o recurso raiz "/" selecionado, escolha a lista suspensa Ações e, em seguida, Criar método.
- Selecione GET na lista suspensa e escolha o ícone de marca de seleção.
- Em Tipo de integração, selecione Serviço da AWS.
- Escolha a lista suspensa Regiões da AWS e, em seguida, selecione sua região.
- Escolha a lista suspensa Serviço da AWS e, em seguida, selecione Simple Storage Service (S3).
- Deixe o campo Subdomínio da AWS em branco.
- Em Método HTTP, selecione GET.
- Em Tipo de ação, escolha Usar substituição de caminho.
- Em Substituição de caminho, insira o caminho do bucket do Amazon S3 semelhante a BUCKET_NAME/index.html.
- Em Perfil de execução, cole o ARN do perfil do IAM que você criou anteriormente.
- Escolha Salvar.
Essa configuração integra a solicitação da API de frontend GET https://your-api-host/stage/ ao backend do S3 GET https://your-s3-host/index.html.
Criar um objeto de recurso de API
Para acessar objetos específicos de um bucket do S3, crie um recurso chamado {object} que mapeie o caminho do objeto na solicitação da API de frontend. Por exemplo, GET https://your-api-host/stage/home.html para o backend do S3 GET https://your-s3-host/home.html.
- Em Recursos, escolha a lista suspensa Ações e, em seguida, selecione Criar recurso.
- Em Nome do recurso, insira um nome. Por exemplo, {object}.
- Em Caminho do recurso, insira um caminho. Por exemplo, {object}.
- Escolha Criar recurso.
Configurar um método GET para o recurso
- Com o recurso {object} selecionado, escolha a lista suspensa Ações e, em seguida, selecione Criar método.
- Escolha GET na lista suspensa e, em seguida, o ícone de marca de seleção.
- Em Tipo de integração, selecione Serviço da AWS.
- Escolha a lista suspensa Regiões da AWS e, em seguida, selecione sua região.
- Escolha a lista suspensa Serviço da AWS e, em seguida, selecione Simple Storage Service (S3).
- Deixe o campo Subdomínio da AWS em branco.
- Em Método HTTP, escolha GET.
- Em Tipo de ação, escolha Usar substituição de caminho.
- Para Substituição de caminho, insira seu caminho de bucket do Amazon S3, semelhante a BUCKET_NAME/{object}.
- Em Perfil de execução, cole o ARN do perfil do IAM que você criou anteriormente.
- Escolha Salvar.
- Escolha GET para Nome do recurso {object} e selecione Solicitação de integração.
- Expanda Parâmetros de caminho de URL, insira informações em Objeto de valor de nome e Mapeado do valor method.request.path.object e marque a caixa de seleção para salvar.
Configurar os mapeamentos do cabeçalho de resposta do método GET
Mapeie o valor do parâmetro do cabeçalho do tipo de conteúdo backend para a contraparte frontend. Isso garante que o navegador processe a resposta exitosamente com o tipo de conteúdo.
- Escolha GET, em Recursos /, escolha Resposta do método.
- Expanda a seta ao lado de HTTP Status 200, em Cabeçalhos de resposta para 200 e escolha Adicionar cabeçalho.
- Escolha o cabeçalho Name como Content-Type e, em seguida, marque a caixa de seleção para salvar.
- Escolha Execução de método.
- Escolha Resposta de integração e expanda a seta ao lado de Regex de status HTTP.
- Expanda Mapeamentos de cabeçalho, para Content-Type, insira o valor do mapeamento como integration.response.header.Content-Type.
- Repita as etapas de 1 a 6 para o método GET em Recurso /{object}.
- Repita as etapas na seção Implantar a API REST.
Testar o proxy da API
Você pode testar o proxy da API do seu site estático do Amazon S3 usando um navegador ou um comando curl semelhante ao seguinte:
Root (/) resource
curl -X GET https://API_ID.execute-api.REGION.amazonaws.com/STAGE_NAME/
{Object} resource
curl -X GET https://API_ID.execute-api.REGION.amazonaws.com/STAGE_NAME/home.html
Informações relacionadas
Tutorial: Criar uma API REST como um proxy do Amazon S3 no API Gateway
Hospedagem de um site estático usando o Amazon S3
Conteúdo relevante
- AWS OFICIALAtualizada há 8 meses
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos