As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Configurando um URL amigável para aplicativos de OpenSearch interface do usuário (autoatendimento)
OpenSearch Os aplicativos de interface do usuário têm URLs gerados automaticamente, como. https://application- Esses URLs são longos e difíceis de lembrar. Você pode configurar um URL amigável (comoname-id.Region.opensearch.amazonaws.comhttps://prod.example.com). Esse URL redireciona para seu aplicativo, para que você possa acessar os painéis diretamente sem precisar navegar pelo Management Console. AWS
Como funciona
Essa solução é usada CloudFront para redirecionar solicitações do seu URL amigável para o endpoint do aplicativo de OpenSearch interface do usuário. A arquitetura consiste nos seguintes componentes:
-
Certificado ACM — Fornece criptografia HTTPS para sua URL amigável.
-
CloudFront KeyValueStore— Armazena o mapeamento entre nomes de subdomínios e URLs de aplicativos.
-
CloudFront função — Lê KeyValueStore e retorna um redirecionamento 302 para a URL correta do aplicativo.
-
CloudFront distribuição — Serve seu URL amigável com TLS e encaminha as solicitações por meio da função.
-
Registro DNS do Route 53 — aponta seu URL amigável para a CloudFront distribuição.
Quando você visita seu URL amigável (por exemplo,https://prod.example.com), a CloudFront função procura o URL do aplicativo correspondente e redireciona seu navegador para ele. O aplicativo lida diretamente com a autenticação.
Pré-requisitos
-
Um ou mais aplicativos de OpenSearch interface do usuário com seus URLs de endpoint.
-
Um nome de domínio que você possui (por exemplo,
example.com). -
Uma zona pública hospedada no Route 53 para seu domínio. Se você não tiver um, para obter mais informações, consulteConfiguração sem o Route 53 (configuração manual).
-
Um bucket do Amazon S3 para armazenar o arquivo de mapeamento de URL do seu aplicativo.
Implante usando AWS CloudFormation
Use o procedimento a seguir para implantar a infraestrutura amigável de redirecionamento de URL com um CloudFormation modelo.
Para configurar um URL amigável para seus aplicativos de OpenSearch interface do usuário
-
Crie um arquivo JSON que mapeie seus nomes amigáveis para URLs de aplicativos. Cada chave se torna um subdomínio (por exemplo, chave
prodse tornahttps://prod.example.com).{ "data": [ {"key": "prod", "value": "https://application-prod-abc123.us-west-2.opensearch.amazonaws.com"}, {"key": "staging", "value": "https://application-staging-def456.us-east-1.opensearch.amazonaws.com"}, {"key": "analytics", "value": "https://application-analytics-ghi789.eu-west-1.opensearch.amazonaws.com"} ] }Salve esse arquivo como
opensearch-ui-friendly-url-app-mappings-v1.json. Ov1sufixo identifica isso como a primeira versão dos seus mapeamentos. Você incrementa essa versão ao atualizar seus mapeamentos. -
Faça o upload do arquivo de mapeamento para um bucket do Amazon S3 em sua conta:
aws s3 cp opensearch-ui-friendly-url-app-mappings-v1.json \ s3://your-bucket-name/opensearch-ui-friendly-url-app-mappings-v1.json -
Conceda CloudFront permissão para ler o arquivo de mapeamento adicionando uma política de bucket.
your-bucket-nameyour-account-idSubstitua e por seus valores:aws s3api put-bucket-policy \ --bucketyour-bucket-name\ --policy '{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowCloudFrontKVSImport", "Effect": "Allow", "Principal": {"Service": "cloudfront.amazonaws.com"}, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*", "Condition": {"StringEquals": {"aws:SourceAccount": "your-account-id"}} }] }'nota
Essa política de bucket CloudFront permite ler o arquivo de mapeamento durante a KeyValueStore criação. Sem isso, a implantação da pilha falha com o erro “sourceARN está inacessível”.
-
Implante a CloudFormation pilha usando uma das seguintes opções:
Opção 1: Launch Stack (recomendado)
Copie o URL a seguir e cole-o em seu navegador para abrir a página de AWS CloudFormation criação rápida com o modelo pré-carregado. Preencha os parâmetros e escolha Criar pilha.
https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/quickcreate?templateURL=https://opensearch-ui-quickstart-sample-cfn-templates.s3.us-west-2.amazonaws.com/opensearch-ui-friendly-url/main.yaml&stackName=opensearch-ui-friendly-url¶m_MappingsVersion=v1Opção 2: AWS CLI
Substitua os valores do espaço reservado pelos seus próprios:
aws cloudformation create-stack \ --stack-name opensearch-ui-friendly-url \ --template-url https://opensearch-ui-quickstart-sample-cfn-templates.s3.us-west-2.amazonaws.com/opensearch-ui-friendly-url/main.yaml \ --parameters \ ParameterKey=DomainName,ParameterValue=your-domain.com\ ParameterKey=HostedZoneId,ParameterValue=Z0123456789ABCDEFG\ ParameterKey=MappingsBucket,ParameterValue=your-bucket-name\ ParameterKey=MappingsKey,ParameterValue=opensearch-ui-friendly-url-app-mappings-v1.json \ ParameterKey=MappingsVersion,ParameterValue=v1 \ --region us-east-1 -
Se você usou a AWS CLI (Opção 2), implante a pilha na
us-east-1região. CloudFront exige que os certificados ACM estejam presentesus-east-1. Seus aplicativos de OpenSearch interface de usuário podem estar em qualquer região com suporte e cotas de OpenSearch interface do usuário. -
Aguarde a conclusão da pilha (aproximadamente 15 minutos). Você pode monitorar o progresso:
aws cloudformation wait stack-create-complete \ --stack-name opensearch-ui-friendly-url \ --region us-east-1 -
Teste o redirecionamento. Abra seu navegador e navegue até
https://. Você deve ser redirecionado para seu aplicativo de OpenSearch interface do usuário.prod.your-domain.comVocê também pode verificar com
curl:curl -I https://prod.your-domain.com# Expected: HTTP/2 302 # location: https://application-prod-abc123.us-west-2.opensearch.amazonaws.com
Veja a seguir o CloudFormation modelo completo usado pelo link do Launch Stack e pelo comando CLI acima. Você também pode baixá-lo diretamente dehttps://opensearch-ui-quickstart-sample-cfn-templates.s3.us-west-2.amazonaws.com/opensearch-ui-friendly-url/main.yaml.
AWSTemplateFormatVersion: '2010-09-09' Metadata: TemplateVersion: '1.0.0' LastUpdated: '2026-08-05' Author: 'OpenSearch UI Team' Description: > OpenSearch UI Friendly URL - Creates a CloudFront distribution with a CloudFront Function that redirects friendly subdomain URLs to OpenSearch Application endpoints. Deploy this template in us-east-1 (required for ACM certificates used with CloudFront). Parameters: DomainName: Type: String Description: "Your domain name (e.g., example.com or subdomain.example.com)" AllowedPattern: "^[a-zA-Z0-9][a-zA-Z0-9-]*(\\.[a-zA-Z0-9][a-zA-Z0-9-]*)+$" HostedZoneId: Type: AWS::Route53::HostedZone::Id Description: "Route 53 Hosted Zone ID for your domain" MappingsBucket: Type: String Description: "S3 bucket name containing your app mappings JSON file" MappingsKey: Type: String Description: "S3 key (path) to your app mappings JSON file" Default: "opensearch-ui-friendly-url-app-mappings.json" MappingsVersion: Type: String Description: "Version identifier for your mappings (change this when updating mappings, e.g., v1, v2, v3)" Default: "v1" AllowedPattern: "^[a-zA-Z0-9-]+$" Resources: # 1. Wildcard TLS Certificate (DNS validated via Route 53) Certificate: Type: AWS::CertificateManager::Certificate Properties: DomainName: !Sub "*.${DomainName}" ValidationMethod: DNS DomainValidationOptions: - DomainName: !Sub "*.${DomainName}" HostedZoneId: !Ref HostedZoneId # 2. CloudFront KeyValueStore with S3 import for app mappings AppMappingStore: Type: AWS::CloudFront::KeyValueStore Properties: Name: !Sub "${AWS::StackName}-kvs-${MappingsVersion}" Comment: !Sub "OpenSearch UI app mappings ${MappingsVersion} for ${DomainName}" ImportSource: SourceType: S3 SourceArn: !Sub "arn:aws:s3:::${MappingsBucket}/${MappingsKey}" # 3. CloudFront Function (reads KVS, returns 302 redirect) RedirectFunction: Type: AWS::CloudFront::Function Properties: Name: !Sub "${AWS::StackName}-fn" AutoPublish: true FunctionConfig: Comment: !Sub "Redirects friendly URLs to OpenSearch Application endpoints (${MappingsVersion})" Runtime: cloudfront-js-2.0 KeyValueStoreAssociations: - KeyValueStoreARN: !GetAtt AppMappingStore.Arn FunctionCode: !Sub | import cf from 'cloudfront'; const kvsHandle = cf.kvs("${AppMappingStore.Id}"); async function handler(event) { var request = event.request; var host = request.headers.host.value; // Extract subdomain prefix (e.g., "app1" from "app1.example.com") var subdomain = host.split('.')[0]; try { var targetUrl = await kvsHandle.get(subdomain); return { statusCode: 302, statusDescription: 'Found', headers: { 'location': { value: targetUrl }, 'cache-control': { value: 'no-cache, no-store, must-revalidate' } } }; } catch (e) { // Key not found - return 404 return { statusCode: 404, statusDescription: 'Not Found', headers: { 'content-type': { value: 'text/html' } }, body: { encoding: 'text', data: '<html><body><h1>Application Not Found</h1><p>No OpenSearch application is mapped to the requested subdomain.</p></body></html>' } }; } } # 4. CloudFront Distribution Distribution: Type: AWS::CloudFront::Distribution DependsOn: Certificate Properties: DistributionConfig: Enabled: true Comment: !Sub "OpenSearch UI Friendly URL for ${DomainName}" Aliases: - !Sub "*.${DomainName}" ViewerCertificate: AcmCertificateArn: !Ref Certificate SslSupportMethod: sni-only MinimumProtocolVersion: TLSv1.2_2021 DefaultCacheBehavior: ViewerProtocolPolicy: redirect-to-https AllowedMethods: - GET - HEAD CachedMethods: - GET - HEAD CachePolicyId: "4135ea2d-6df8-44a3-9df3-4b5a84be39ad" # AWS managed CachingDisabled policy TargetOriginId: dummy-origin FunctionAssociations: - EventType: viewer-request FunctionARN: !GetAtt RedirectFunction.FunctionMetadata.FunctionARN Origins: - Id: dummy-origin DomainName: "example.com" CustomOriginConfig: OriginProtocolPolicy: https-only HttpVersion: http2and3 IPV6Enabled: true PriceClass: PriceClass_All # 5. Wildcard DNS record pointing to CloudFront WildcardDnsRecord: Type: AWS::Route53::RecordSet Properties: HostedZoneId: !Ref HostedZoneId Name: !Sub "*.${DomainName}" Type: A AliasTarget: HostedZoneId: Z2FDTNDATAQYW2 # CloudFront's fixed hosted zone ID (constant for all distributions) DNSName: !GetAtt Distribution.DomainName EvaluateTargetHealth: false Outputs: CloudFrontDomain: Description: "CloudFront distribution domain name" Value: !GetAtt Distribution.DomainName CertificateArn: Description: "ACM Certificate ARN" Value: !Ref Certificate KeyValueStoreArn: Description: "CloudFront KeyValueStore ARN" Value: !GetAtt AppMappingStore.Arn ExampleUrl: Description: "Example friendly URL" Value: !Sub "https://prod.${DomainName}" MappingsFileLocation: Description: "S3 location of your app mappings file" Value: !Sub "s3://${MappingsBucket}/${MappingsKey}" CurrentMappingsVersion: Description: "Current mappings version deployed" Value: !Ref MappingsVersion TemplateVersion: Description: "Template version and last updated date" Value: "1.0.0 (2026-08-05)"
Adicionar ou remover aplicativos
Para adicionar, atualizar ou remover mapeamentos de aplicativos, crie uma nova versão do seu arquivo de mapeamento do S3 e atualize a pilha com a nova versão. A abordagem versionada mantém seu arquivo S3 como a fonte da verdade e permite que você avance para novas configurações ou reverta para versões anteriores a qualquer momento.
-
Edite seu arquivo de mapeamento para adicionar ou remover entradas. Salve-o com um sufixo de versão incrementado (por exemplo,
opensearch-ui-friendly-url-app-mappings-v2.json). -
Faça o upload da nova versão para o S3:
aws s3 cp opensearch-ui-friendly-url-app-mappings-v2.json \ s3://your-bucket-name/opensearch-ui-friendly-url-app-mappings-v2.json -
Atualize a pilha com a nova
MappingsKeyeMappingsVersion:Usando o console: abra o CloudFormation console
, selecione sua pilha, escolha Atualizar, selecione Usar modelo atual e MappingsKeyatualizeMappingsVersionos parâmetros e com os novos valores.Usando a AWS CLI:
aws cloudformation update-stack \ --stack-name opensearch-ui-friendly-url \ --use-previous-template \ --parameters \ ParameterKey=DomainName,UsePreviousValue=true \ ParameterKey=HostedZoneId,UsePreviousValue=true \ ParameterKey=MappingsBucket,UsePreviousValue=true \ ParameterKey=MappingsKey,ParameterValue=opensearch-ui-friendly-url-app-mappings-v2.json \ ParameterKey=MappingsVersion,ParameterValue=v2 \ --region us-east-1
Importante
Você deve alterar o MappingsVersion parâmetro sempre que atualizar os mapeamentos. A versão determina o KeyValueStore nome, que CloudFormation aciona a substituição pelos KeyValueStore dados atualizados. Mantenha o nome do MappingsKey arquivo MappingsVersion em sincronia (por exemplo, ...-v2.json comMappingsVersion=v2) para maior clareza.
Para reverter para uma versão anterior, atualize a pilha apontando para o arquivo e a versão anteriores.
Usando o console: abra o CloudFormation
consoleMappingsKey e MappingsVersion volte aos valores anteriores (por exemplo,v1).
Usando a AWS CLI:
aws cloudformation update-stack \ --stack-name opensearch-ui-friendly-url \ --use-previous-template \ --parameters \ ParameterKey=DomainName,UsePreviousValue=true \ ParameterKey=HostedZoneId,UsePreviousValue=true \ ParameterKey=MappingsBucket,UsePreviousValue=true \ ParameterKey=MappingsKey,ParameterValue=opensearch-ui-friendly-url-app-mappings-v1.json \ ParameterKey=MappingsVersion,ParameterValue=v1 \ --region us-east-1
Essa abordagem com controle de versão oferece controle total para avançar ou reverter os mapeamentos do aplicativo conforme necessário, mantendo os arquivos do S3 como o registro definitivo de cada versão de configuração.
Configuração sem o Route 53 (configuração manual)
Se seu domínio for gerenciado por um provedor de DNS diferente do Route 53, você poderá configurar redirecionamentos de URL amigáveis manualmente no AWS Management Console. Essa abordagem não usa o Amazon S3 para mapeamentos — você gerencia pares de valores-chave diretamente no console. CloudFront
Para configurar um redirecionamento de URL amigável sem o Route 53
-
Solicite um certificado no ACM
-
Abra o console do ACM em https://console.aws.amazon.com/acm/
na us-east-1região. -
Escolha Solicitar certificado.
-
Em Nome de domínio, insira
*.(certificado curinga).your-domain.com -
Em Método de validação, escolha Validação de DNS.
-
Escolha Solicitar.
-
Na página de detalhes do certificado, observe o nome e o valor do registro CNAME em Validação de domínio. Crie esse registro CNAME no seu provedor de DNS para validar a propriedade do domínio.
-
Aguarde até que o status do certificado mude para Emitido (normalmente 5 a 30 minutos após a criação do registro DNS).
-
-
Crie um CloudFront KeyValueStore
-
Abra o CloudFront console em https://console.aws.amazon.com/cloudfront/
. -
Selecione Funções no painel de navegação. Em seguida, escolha a KeyValueStores guia.
-
Escolha Criar KeyValueStore.
-
Insira um nome (por exemplo,
opensearch-ui-friendly-url-app-mappings-store). -
Escolha Criar.
-
Após a criação, escolha Editar para adicionar pares de valores-chave. Para cada aplicativo, adicione uma chave (o nome do subdomínio, como
prod) e um valor (a URL completa do aplicativo de OpenSearch interface do usuário).
-
-
Crie uma CloudFront função
-
Abra o CloudFront console em https://console.aws.amazon.com/cloudfront/
. -
Selecione Funções no painel de navegação.
-
Na guia Funções, escolha Criar função.
-
Insira um nome para a função (por exemplo,
opensearch-ui-friendly-url-redirect-function). -
Em Runtime, escolha cloudfront-js-2.0.
-
Substitua o código da função pelo seguinte:
import cf from 'cloudfront'; const kvsHandle = cf.kvs("YOUR_KVS_ID"); async function handler(event) { var request = event.request; var host = request.headers.host.value; var subdomain = host.split('.')[0]; try { var targetUrl = await kvsHandle.get(subdomain); return { statusCode: 302, statusDescription: 'Found', headers: { 'location': { value: targetUrl }, 'cache-control': { value: 'no-cache, no-store, must-revalidate' } } }; } catch (e) { return { statusCode: 404, statusDescription: 'Not Found', headers: { 'content-type': { value: 'text/html' } }, body: { encoding: 'text', data: '<html><body><h1>Application Not Found</h1><p>No OpenSearch application is mapped to the requested subdomain.</p></body></html>' } }; } }YOUR_KVS_IDSubstitua pelo ID do KeyValueStore que você criou (visível na página de KeyValueStore detalhes). -
Nas KeyValueStore associações, associe as KeyValueStore que você criou.
-
Escolha Salvar alterações e, em seguida, função Publicar.
-
-
Crie uma CloudFront distribuição
-
No CloudFront console, escolha Criar distribuição.
-
Para domínio Origin, insira qualquer domínio válido (por exemplo,
example.com). A origem nunca é contatada porque a função retorna uma resposta antes de alcançá-la. -
Em Comportamento de cache padrão, para Política de protocolo do Viewer, escolha Redirecionar HTTP para HTTPS.
-
Em Política de cache, escolha CachingDisabled.
-
Em Associações de funções, para Solicitação do visualizador, selecione sua CloudFront função.
-
Em Configurações, em Nomes de domínio alternativos (CNAMEs), insira
*..your-domain.com -
Em Certificado SSL personalizado, selecione o certificado que você criou no ACM.
-
Escolha Create distribution (Criar distribuição).
-
Anote o nome do domínio de distribuição (por exemplo,
d1234abcdef8.cloudfront.net).
-
-
Configure o DNS em seu provedor
No seu provedor de DNS, crie um registro CNAME que aponte
*.para seu nome de domínio de CloudFront distribuição (por exemplo,your-domain.comd1234abcdef8.cloudfront.net).nota
Alguns provedores de DNS não oferecem suporte a registros CNAME curinga. Nesse caso, crie registros CNAME individuais para cada subdomínio que você deseja usar (por exemplo,
prod.your-domain.com,staging.your-domain.com).
Adicionar mapeamentos de aplicativos manualmente
Para adicionar novos mapeamentos de aplicativos após a configuração manual inicial:
-
Abra o CloudFront console em https://console.aws.amazon.com/cloudfront/
. -
Selecione Funções no painel de navegação. Em seguida, escolha a KeyValueStores guia.
-
Escolha seu KeyValueStore nome (por exemplo,
opensearch-ui-friendly-url-app-mappings-store). -
Escolha Editar.
-
Escolha Adicionar par. Insira o nome do subdomínio como chave e o URL completo do aplicativo de OpenSearch interface do usuário como valor.
-
Escolha Salvar alterações.
O novo URL amigável está disponível imediatamente após o salvamento.
Limpeza
Para remover a infraestrutura amigável de redirecionamento de URL, execute o seguinte comando:
aws cloudformation delete-stack \ --stack-name opensearch-ui-friendly-url \ --region us-east-1
Esse comando remove a CloudFront distribuição, a função KeyValueStore, o certificado ACM e o registro DNS. Isso não afeta seus aplicativos de OpenSearch interface do usuário.
Solução de problemas
- O certificado ACM permanece em vigor
Pending validation -
Certifique-se de que o DNS do seu domínio esteja adequadamente delegado ao Route 53 (ou que você tenha criado o CNAME de validação no seu provedor de DNS). Use
digpara verificar os servidores de nomes.your-domainNS - O navegador mostra um erro de certificado
-
Verifique se o certificado ACM cobre seu domínio como curinga ()
*.your-domain.com. O certificado deve estar naus-east-1Região. - 404 Aplicativo não encontrado
-
O subdomínio que você está tentando acessar não tem um mapeamento no KeyValueStore. Verifique se a chave existe em seu arquivo de mapeamento e confirme se você atualizou a pilha (ou adicionou o par manualmente) após a última alteração.
- CloudFront a distribuição mostra
Deployingo status por mais de 15 minutos -
CloudFront as distribuições podem levar até 15 minutos para serem implantadas globalmente. Se a implantação demorar mais, verifique os detalhes do erro no CloudFront console.
- SourceArn é um erro inacessível durante a criação da pilha
-
Certifique-se de que a política de bucket do S3 conceda
cloudfront.amazonaws.compermissão para ler o arquivo de mapeamento. Verifique também se a função do IAM que está implantando a pilha tems3:GetObjects3:HeadObject, es3:GetBucketLocationpermissões no bucket.