[pt-BR] Terraform을 사용하지 않고 HTTP를 사용하려면

Parte de uma série de posts curtos com conhecimentos que podem ser úteis no dia a dia e quero compartilhar. Muitas vezes eles exigem um conhecimento prévio da ferramenta ou da linguagem.

Esses textos curtos são publicados sob a tag #quick.



엔드포인트를 온라인으로 제어할 수 있는 정확한 위치가 존재합니다.

예를 들어 JWT 시대의 토큰은 AWS Cognito에 기반을 두고 있습니다. 클라이언트가 토큰을 받을 때 정당성을 보장하고, API에 액세스할 수 있는 자유를 허용하고, Cognito를 통해 토큰을 확인하는 데 필요한 토큰을 확인해야 합니다.

Para isso, todo User Pool do Cognito gera um documento público que pode ser consumido pelo seu código. Esse documento fica em https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json
변경된 문서를 계속 확인하려면 HTTP 토큰이 필요한 경우에만 필요한 문서를 사용해야 합니다. Como a validação precisa ser rápida e, no contexto de um recurso serverless, somos cobrados pelos tempo de uso, esse acesso extra causa um aumento desnecessário de custos.

Para resolver isso, a requisição HTTP é feita um única vez, durante o build da aplicação, e esse valor é passado para o código como uma ú variável de ambiente.

Usando Terraform, bastou fazer assim:


# Aqui criamos o User Pool onde serão armazenadas 
# as credenciais dos usuários
resource "aws_cognito_user_pool" "exemplo" {
  name = "exemplo"

  # um monte de configurações
}

# Aqui armazenamos os dados da região AWS atual
data "aws_region" "current" {}

# E aqui fazemos a requisição HTTP, que terá os 
# parâmetros automaticamente atualizados se você
# mudar de região ou recriar seu User Pool
data "http" "cognito_jwks" {
  url = "https://cognito-idp.${data.aws_region.current.name}.amazonaws.com/${aws_cognito_user_pool.exemplo.id}/.well-known/jwks.json"

  request_headers = {
    Accept = "application/json"
  }
}

# Finalmente, exportamos o conteúdo da requisição 
# para que seja usada em outros módulos do seu projeto
output "cognito_jwks" {
  value = tostring(data.http.cognito_jwks.body)
}


E, no modulo onde você definiu a Lambda, você faz assim:

# essa variável terá um valor atribuído
variable "cognito_jwks" {
  type = string
}

resource "aws_lambda_function" "exemplo" {
  environment {
    variables = {
      COGNITO_JWKS = var.cognito_jwks
    }
  }


Isso funciona com qualquer outro recurso que você criar, não precisa ser necessariamente uma Lambda. COGNITO_JWKS contém um texto e você pode usá-lo da maneira que for melhor para o seu caso.

Ao gerar a Lambda, o conteúdo do arquivo estará disponível como uma variável de ambiente, podendo ser acessado no código comprocess.env.COGNITO_JWKS , caso você esteja usando JavaScript.

좋은 웹페이지 즐겨찾기