View a markdown version of this page

Impostazione di un URL intuitivo per le applicazioni OpenSearch dell'interfaccia utente (self-service) - OpenSearch Servizio Amazon

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Impostazione di un URL intuitivo per le applicazioni OpenSearch dell'interfaccia utente (self-service)

OpenSearch Le applicazioni dell'interfaccia utente hanno URL generati automaticamente come. https://application-name-id.Region.opensearch.amazonaws.com Questi URL sono lunghi e difficili da ricordare. Puoi impostare un URL descrittivo (ad esempiohttps://prod.example.com). Questo URL reindirizza alla tua applicazione, quindi puoi accedere direttamente alle dashboard senza navigare nella console di gestione. AWS

Come funziona

Questa soluzione viene utilizzata CloudFront per reindirizzare le richieste dall'URL descrittivo all'endpoint dell'applicazione UI. OpenSearch L'architettura è composta dai seguenti componenti:

  • Certificato ACM: fornisce la crittografia HTTPS per il tuo URL intuitivo.

  • CloudFront KeyValueStore— Memorizza la mappatura tra i nomi dei sottodomini e gli URL delle applicazioni.

  • CloudFront funzione: legge KeyValueStore e restituisce un reindirizzamento 302 all'URL dell'applicazione corretto.

  • CloudFront distribuzione: fornisce l'URL descrittivo con TLS e indirizza le richieste tramite la funzione.

  • Record DNS Route 53: indirizza l'URL descrittivo alla CloudFront distribuzione.

Quando visiti il tuo URL amichevole (ad esempiohttps://prod.example.com), la CloudFront funzione cerca l'URL dell'applicazione corrispondente e reindirizza il browser ad esso. L'applicazione gestisce direttamente l'autenticazione.

Prerequisiti

  • Una o più applicazioni OpenSearch dell'interfaccia utente con i relativi URL degli endpoint.

  • Un nome di dominio di tua proprietà (ad esempio,example.com).

  • Una zona pubblica ospitata in Route 53 per il tuo dominio. Se non ne hai una, per ulteriori informazioni, consultaConfigurazione senza Route 53 (configurazione manuale).

  • Un bucket Amazon S3 per archiviare il file di mappatura degli URL dell'applicazione.

Implementa utilizzando AWS CloudFormation

Utilizza la seguente procedura per implementare l'infrastruttura di reindirizzamento URL intuitiva con un modello. CloudFormation

Per impostare un URL descrittivo per le tue applicazioni UI OpenSearch
  1. Crea un file JSON che associa i tuoi nomi descrittivi agli URL delle applicazioni. Ogni chiave diventa un sottodominio (ad esempio, la chiave prod diventa). https://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"} ] }

    Salva questo file come opensearch-ui-friendly-url-app-mappings-v1.json. Il v1 suffisso la identifica come la prima versione delle tue mappature. Questa versione viene incrementata quando si aggiornano le mappature.

  2. Carica il file di mappatura in un bucket Amazon S3 nel tuo account:

    aws s3 cp opensearch-ui-friendly-url-app-mappings-v1.json \ s3://your-bucket-name/opensearch-ui-friendly-url-app-mappings-v1.json
  3. Concedi CloudFront il permesso di leggere il file di mappatura aggiungendo una bucket policy. Sostituisci your-bucket-name e your-account-id con i tuoi valori:

    aws s3api put-bucket-policy \ --bucket your-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

    Questa policy del bucket consente di CloudFront leggere il file di mappatura durante la creazione. KeyValueStore Senza di essa, la distribuzione dello stack fallisce con un errore «SourceARN is inaccessible».

  4. Distribuisci lo CloudFormation stack utilizzando una delle seguenti opzioni:

    Opzione 1: Avvia Stack (consigliata)

    Copia il seguente URL e incollalo nel browser per aprire la pagina di AWS CloudFormation creazione rapida con il modello precaricato. Inserisci i parametri e scegli Crea stack.

    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&param_MappingsVersion=v1

    Opzione 2: AWS CLI

    Sostituisci i valori segnaposto con i tuoi:

    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
  5. Se hai utilizzato la AWS CLI (opzione 2), distribuisci lo stack nella regione. us-east-1 CloudFront richiede l'installazione dei certificati ACM. us-east-1 Le applicazioni OpenSearch dell'interfaccia utente possono trovarsi in qualsiasi regione supportata e con qualsiasi quota per OpenSearch l'interfaccia utente.

  6. Attendi il completamento dello stack (circa 15 minuti). Puoi monitorare i progressi:

    aws cloudformation wait stack-create-complete \ --stack-name opensearch-ui-friendly-url \ --region us-east-1
  7. Prova il reindirizzamento. Apri il browser e vai a. https://prod.your-domain.com Dovresti essere reindirizzato alla tua applicazione OpenSearch UI.

    Puoi anche verificare concurl:

    curl -I https://prod.your-domain.com # Expected: HTTP/2 302 # location: https://application-prod-abc123.us-west-2.opensearch.amazonaws.com

Quello che segue è il CloudFormation modello completo utilizzato dal collegamento Launch Stack e dal comando CLI sopra riportato. Puoi anche scaricarlo direttamente dahttps://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)"

Aggiungere o rimuovere applicazioni

Per aggiungere, aggiornare o rimuovere le mappature delle applicazioni, create una nuova versione del file di mappatura S3 e aggiornate lo stack con la nuova versione. L'approccio basato sulle versioni mantiene il file S3 come fonte di verità e consente di passare a nuove configurazioni o ripristinare le versioni precedenti in qualsiasi momento.

  1. Modifica il file di mappatura per aggiungere o rimuovere voci. Salvalo con un suffisso di versione incrementato (ad esempio,). opensearch-ui-friendly-url-app-mappings-v2.json

  2. Carica la nuova versione su S3:

    aws s3 cp opensearch-ui-friendly-url-app-mappings-v2.json \ s3://your-bucket-name/opensearch-ui-friendly-url-app-mappings-v2.json
  3. Aggiorna lo stack con il nuovo MappingsKey eMappingsVersion:

    Uso della console: apri la CloudFormation console, seleziona lo stack, scegli Aggiorna, seleziona Usa modello corrente, quindi aggiorna i MappingsVersion parametri MappingsKey e con i nuovi valori.

    Utilizzando la 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

È necessario modificare il MappingsVersion parametro ogni volta che si aggiornano le mappature. La versione determina il KeyValueStore nome, che attiva CloudFormation la sostituzione KeyValueStore con i dati aggiornati. Mantieni il nome del MappingsKey file e MappingsVersion sincronizzati (ad esempio, ...-v2.json conMappingsVersion=v2) per maggiore chiarezza.

Per tornare a una versione precedente, aggiorna lo stack che punta al file e alla versione precedenti.

Uso della console: apri la CloudFormation console, seleziona lo stack, scegli Aggiorna, seleziona Usa modello corrente, quindi imposta MappingsKey e MappingsVersion torna ai valori precedenti (ad esempio,v1).

Utilizzando la 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

Questo approccio basato sulle versioni offre il pieno controllo per avanzare o ripristinare le mappature delle applicazioni in base alle esigenze, mantenendo i file S3 come record definitivo di ogni versione di configurazione.

Configurazione senza Route 53 (configurazione manuale)

Se il tuo dominio è gestito da un provider DNS diverso da Route 53, puoi impostare reindirizzamenti URL amichevoli manualmente nella AWS Console di gestione. Questo approccio non utilizza Amazon S3 per le mappature: puoi gestire le coppie chiave-valore direttamente nella console. CloudFront

Per impostare un reindirizzamento URL intuitivo senza Route 53
  1. Richiedi un certificato in ACM
    1. Apri la console ACM all'indirizzo https://console.aws.amazon.com/acm/ in the us-east-1 Region.

    2. Scegli Richiedi certificato.

    3. Per Nome di dominio, inserisci *.your-domain.com (certificato wildcard).

    4. Per il metodo di convalida, scegli la convalida DNS.

    5. Scegli Richiedi.

    6. Nella pagina dei dettagli del certificato, annota il nome e il valore del record CNAME in Convalida del dominio. Crea questo record CNAME presso il tuo provider DNS per convalidare la proprietà del dominio.

    7. Attendi che lo stato del certificato passi a Emesso (in genere da 5 a 30 minuti dopo la creazione del record DNS).

  2. Crea un CloudFront KeyValueStore
    1. Apri la CloudFront console all'indirizzo https://console.aws.amazon.com/cloudfront/.

    2. Nel riquadro di navigazione, seleziona Funzioni. Quindi scegli la KeyValueStores scheda.

    3. Scegli Create KeyValueStore (Crea).

    4. Inserisci un nome (ad esempio,opensearch-ui-friendly-url-app-mappings-store).

    5. Scegli Create (Crea).

    6. Dopo la creazione, scegli Modifica per aggiungere coppie chiave-valore. Per ogni applicazione, aggiungi una chiave (il nome del sottodominio, ad esempioprod) e un valore (l'URL completo dell'applicazione OpenSearch UI).

  3. Crea una funzione CloudFront
    1. Apri la CloudFront console all'indirizzo https://console.aws.amazon.com/cloudfront/.

    2. Nel riquadro di navigazione, seleziona Funzioni.

    3. Nella scheda Funzioni, scegli Crea funzione.

    4. Inserisci un nome per la funzione (ad esempio,opensearch-ui-friendly-url-redirect-function).

    5. Per Runtime, scegli cloudfront-js-2.0.

    6. Sostituisci il codice della funzione con quanto segue:

      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>' } }; } }

      Sostituisci YOUR_KVS_ID con l'ID KeyValueStore che hai creato (visibile nella pagina dei KeyValueStore dettagli).

    7. Nelle KeyValueStore associazioni, associa quelle KeyValueStore che hai creato.

    8. Scegli Salva modifiche e poi la funzione Pubblica.

  4. Crea una CloudFront distribuzione
    1. Nella CloudFront console, scegli Crea distribuzione.

    2. Per il dominio Origin, inserisci un dominio valido (ad esempio,example.com). L'origine non viene mai contattata perché la funzione restituisce una risposta prima di raggiungerla.

    3. In Comportamento predefinito della cache, per i criteri del protocollo Viewer, scegli Reindirizza HTTP a HTTPS.

    4. Per la politica della cache, scegli CachingDisabled.

    5. In Associazioni di funzioni, per la richiesta di Viewer, seleziona la tua CloudFront funzione.

    6. In Impostazioni, per Nomi di dominio alternativi (CNAME), inserisci. *.your-domain.com

    7. Per il certificato SSL personalizzato, seleziona il certificato che hai creato in ACM.

    8. Scegli Create Distribution (Crea distribuzione).

    9. Annota il nome del dominio di distribuzione (ad esempio,d1234abcdef8.cloudfront.net).

  5. Configura il DNS presso il tuo provider

    Nel tuo provider DNS, crea un record CNAME che punti *.your-domain.com al tuo nome di dominio di CloudFront distribuzione (ad esempio,). d1234abcdef8.cloudfront.net

    Nota

    Alcuni provider DNS non supportano i record CNAME wildcard. In tal caso, crea singoli record CNAME per ogni sottodominio che desideri utilizzare (ad esempio,,). prod.your-domain.com staging.your-domain.com

Aggiungere manualmente le mappature delle applicazioni

Per aggiungere nuove mappature delle applicazioni dopo la configurazione manuale iniziale:

  1. Apri la CloudFront console all'indirizzo. https://console.aws.amazon.com/cloudfront/

  2. Nel riquadro di navigazione, seleziona Funzioni. Quindi scegli la KeyValueStores scheda.

  3. Scegli il tuo KeyValueStore nome (ad esempio,opensearch-ui-friendly-url-app-mappings-store).

  4. Scegli Modifica.

  5. Scegli Aggiungi coppia. Inserisci il nome del sottodominio come chiave e l'URL completo dell'applicazione OpenSearch UI come valore.

  6. Scegli Save changes (Salva modifiche).

Il nuovo URL descrittivo è disponibile subito dopo il salvataggio.

Pulizia

Per rimuovere l'infrastruttura di reindirizzamento URL amichevole, esegui il seguente comando:

aws cloudformation delete-stack \ --stack-name opensearch-ui-friendly-url \ --region us-east-1

Questo comando rimuove la CloudFront distribuzione, la funzione KeyValueStore, il certificato ACM e il record DNS. Non influisce sulle applicazioni OpenSearch dell'interfaccia utente.

Risoluzione dei problemi

Il certificato ACM rimane valido Pending validation

Assicurati che il DNS del tuo dominio sia correttamente delegato a Route 53 (o che tu abbia creato il CNAME di convalida presso il tuo provider DNS). dig your-domain NSUsalo per verificare i nameserver.

Il browser mostra un errore nel certificato

Verifica che il certificato ACM copra il tuo dominio come wildcard ()*.your-domain.com. Il certificato deve essere nella Regione. us-east-1

404 Domanda non trovata

Il sottodominio a cui stai tentando di accedere non ha una mappatura in. KeyValueStore Verifica che la chiave esista nel tuo file di mappatura e conferma di aver aggiornato lo stack (o aggiunto la coppia manualmente) dopo l'ultima modifica.

CloudFront la distribuzione mostra Deploying lo stato per più di 15 minuti

CloudFront le distribuzioni possono richiedere fino a 15 minuti per essere distribuite a livello globale. Se la distribuzione richiede più tempo, controlla la CloudFront console per i dettagli dell'errore.

SourceARN è un errore inaccessibile durante la creazione dello stack

Assicurati che la policy del bucket S3 conceda l'autorizzazione a leggere il file di mappatura. cloudfront.amazonaws.com Verifica inoltre il ruolo IAM di distribuzione dello stack e le autorizzazioni sul s3:GetObject s3:HeadObject bucket. s3:GetBucketLocation