Como faço para usar o Amazon S3 para hospedar um site estático que usa o API Gateway como proxy?
Quero usar o Amazon API Gateway para criar uma API como proxy para meu site estático e hospedar o site no Amazon Simple Storage Service (Amazon S3).
Resolução
Integração do proxy HTTP
Se o seu site estático estiver acessível publicamente, use a integração HTTP e forneça o URL do site estático do S3 para a API.
Primeiro, configure um site estático no Amazon S3. Em seguida, use o console do API Gateway para criar uma API REST e um método para o recurso raiz, e implante sua API REST.
Criar uma API REST
Conclua as etapas a seguir:
- Em API REST, escolha Criar.
- Em Nome da API, insira um nome para sua API REST.
- No menu Tipo de endpoint, escolha seu tipo de endpoint e escolha Criar API.
- No painel de navegação, escolha Recursos abaixo do nome da sua API.
- No menu Ações, escolha Criar recurso.
- Em Nome do recurso, insira um nome, por exemplo, chave.
- Em Resource rath, insira um parâmetro de caminho, por exemplo, {key}.
- Escolha Criar recurso.
Criar o método para o recurso raiz
Conclua as etapas a seguir:
- Escolha o nome do recurso {key}b.
- No menu Ações, escolha Criar método.
- No menu {key}, escolha GET e, em seguida, 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
Conclua as etapas a seguir:
-
No menu Ações, escolha Implantar API.
-
No menu Estágio de implantação, escolha [New Stage].
-
Em Nome do estágio, insira um nome, por exemplo, Dev.
-
Escolha Implantar.
-
Em Dev Stage Editor, anote o URL de invocação para testar sua API.
-
Execute o comando a seguir para testar o proxy da API para seu site do Amazon S3:
curl -X GET https://API_ID.execute-api.REGION.amazonaws.com/index.html
Observação: Substitua o URL de exemplo pelo seu URL de invocação.
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.
Conclua as etapas a seguir:
-
Configure um site estático no Amazon S3.
Observação: Ao configurar o site estático, pule a etapa 3. Mantenha a configuração padrão Bloquear todo o acesso público ativada. -
Modifique a política do bucket na etapa 4 para permitir que o proxy da API acesse somente o bucket do Amazon S3:
{ "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 (AWS IAM) para permitir que a API GetObject no 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 anterior do IAM.
-
Anote o ARN do perfil do IAM para usar em uma etapa posterior.
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" }] }
Use o console do API Gateway para concluir as etapas a seguir.
Criar um proxy da API REST para o serviço do Amazon S3
Conclua as etapas a seguir:
- 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 com base na 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
Para configurar o método raiz para solicitações de proxy para sites estáticos do Amazon S3, conclua as seguintes etapas:
- Selecione o recurso raiz “/”.
- No menu Ações, escolha Criar método.
- Escolha GET e, em seguida, escolha o ícone de marca de seleção.
- Em Tipo de integração, selecione Serviço AWS.
- No menu Região da AWS, escolha sua região.
- No menu Serviços da AWS, escolha Simple Storage Service (S3).
- Em Subdomínio da AWS, mantenha o campo 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, por exemplo, BUCKET_NAME/index.html.
- Em Perfil de execução, insira o ARN do perfil do IAM.
- Escolha Salvar.
Essa configuração integra a solicitação da API GET de front-end https://your-api-host/stage/ ao back-end 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 front-end. Por exemplo, mapeie GET https://your-api-host/stage/home.html para o GET de back-end do S3 https://your-s3-host/home.html.
Conclua as etapas a seguir:
- Escolha Recursos.
- No menu Ações, escolha 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
Conclua as etapas a seguir:
- Selecione o {object}.
- No menu Ações, escolha Criar método.
- Escolha GET e, em seguida, escolha o ícone de marca de seleção.
- Em Tipo de integração, selecione Serviço AWS.
- No menu Região da AWS, escolha sua região.
- No menu Serviços da AWS, escolha Simple Storage Service (S3).
- Em Subdomínio da AWS, mantenha o campo em branco.
- Em Método HTTP, escolha GET.
- Em Tipo de ação, escolha Usar substituição de caminho.
- Em Substituição de caminho, insira seu caminho de bucket do Amazon S3, por exemplo, BUCKET_NAME/{object}.
- Em Perfil de execução, insira o ARN do perfil do IAM.
- 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 o valor mapeado de method.request.path.object e, em seguida, 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 de back-end para a contraparte de front-end, para que o navegador processe com êxito a resposta com o tipo de conteúdo.
Conclua as etapas a seguir:
- 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, escolha Adicionar cabeçalho.
- Escolha o cabeçalho Name como Content-Type e, em seguida, selecione a caixa de seleção para salvar.
- Escolha Execução de método.
- Escolha Resposta de integração e então expanda a seta ao lado de Regex de status HTTP.
- Expanda os mapeamentos de cabeçalho.
- Em 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 deste artigo.
Testar o proxy da API
Para testar o proxy da API do seu site estático do Amazon S3, use um navegador ou um comando curl:
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: Crie uma API REST como um proxy do Amazon S3
Hospedagem de um site estático usando o Amazon S3
Conteúdo relevante
- feita há 21 diaslg...
- Resposta aceitafeita há 5 diaslg...
- feita há 7 diaslg...
- feita há 7 diaslg...
- AWS OFICIALAtualizada há 4 meses
- AWS OFICIALAtualizada há 6 meses
- AWS OFICIALAtualizada há 2 meses