View a markdown version of this page

Configuration d'une URL conviviale pour les applications d' OpenSearch interface utilisateur (libre-service) - OpenSearch Service Amazon

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration d'une URL conviviale pour les applications d' OpenSearch interface utilisateur (libre-service)

OpenSearch Les applications d'interface utilisateur ont des URL générées automatiquement, telles quehttps://application-name-id.Region.opensearch.amazonaws.com. Ces URL sont longues et difficiles à mémoriser. Vous pouvez configurer une URL conviviale (telle quehttps://prod.example.com). Cette URL redirige vers votre application afin que vous puissiez accéder directement aux tableaux de bord sans avoir à passer par la AWS console de gestion.

Comment ça marche

Cette solution permet CloudFront de rediriger les demandes de votre URL conviviale vers le point de terminaison de votre application d' OpenSearch interface utilisateur. L'architecture comprend les éléments suivants :

  • Certificat ACM  : fournit un cryptage HTTPS pour votre URL conviviale.

  • CloudFront KeyValueStore— Stocke le mappage entre les noms de sous-domaines et les URL des applications.

  • CloudFront fonction — Lit KeyValueStore et renvoie une redirection 302 vers l'URL correcte de l'application.

  • CloudFront distribution — Fournit à votre URL conviviale le protocole TLS et achemine les demandes via cette fonction.

  • Enregistrement DNS Route 53  : pointe votre URL conviviale vers la CloudFront distribution.

Lorsque vous visitez votre URL conviviale (par exemplehttps://prod.example.com), la CloudFront fonction recherche l'URL de l'application correspondante et redirige votre navigateur vers celle-ci. L'application gère directement l'authentification.

Conditions préalables

  • Une ou plusieurs applications d' OpenSearch interface utilisateur avec leurs URL de point de terminaison.

  • Un nom de domaine dont vous êtes propriétaire (par exemple,example.com).

  • Une zone hébergée publique dans Route 53 pour votre domaine. Si vous n'en avez pas, pour plus d'informations, consultezConfiguration sans Route 53 (configuration manuelle).

  • Un compartiment Amazon S3 pour stocker le fichier de mappage d'URL de votre application.

Déployez en utilisant AWS CloudFormation

Utilisez la procédure suivante pour déployer l'infrastructure conviviale de redirection d'URL à l'aide d'un CloudFormation modèle.

Pour configurer une URL conviviale pour vos applications d' OpenSearch interface utilisateur
  1. Créez un fichier JSON qui associe vos noms conviviaux aux URL des applications. Chaque clé devient un sous-domaine (par exemple, la clé prod devienthttps://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"} ] }

    Enregistrez ce fichier en tant que opensearch-ui-friendly-url-app-mappings-v1.json. Le v1 suffixe indique qu'il s'agit de la première version de vos mappages. Vous incrémentez cette version lorsque vous mettez à jour vos mappages.

  2. Téléchargez le fichier de mappages dans un compartiment Amazon S3 de votre compte :

    aws s3 cp opensearch-ui-friendly-url-app-mappings-v1.json \ s3://your-bucket-name/opensearch-ui-friendly-url-app-mappings-v1.json
  3. Accordez CloudFront l'autorisation de lire le fichier de mappages en ajoutant une politique de compartiment. Remplacez your-bucket-name et your-account-id par vos valeurs :

    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"}} }] }'
    Note

    Cette politique de compartiment permet CloudFront de lire le fichier de mappages lors de sa KeyValueStore création. Sans cela, le déploiement de la pile échoue et le message d'erreur « SourceARN est inaccessible » s'affiche.

  4. Déployez la CloudFormation pile à l'aide de l'une des options suivantes :

    Option 1 : Launch Stack (recommandé)

    Copiez l'URL suivante et collez-la dans votre navigateur pour ouvrir la page de AWS CloudFormation création rapide avec le modèle préchargé. Renseignez les paramètres et choisissez Créer une pile.

    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

    Option 2 : AWS CLI

    Remplacez les valeurs des espaces réservés par les vôtres :

    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. Si vous avez utilisé l' AWS interface de ligne de commande (option 2), déployez la pile dans la us-east-1 région. CloudFront nécessite la présence de certificats ACM. us-east-1 Vos applications d' OpenSearch interface utilisateur peuvent se trouver dans n'importe quelle région prise en charge et avoir des quotas pour l' OpenSearch interface utilisateur.

  6. Attendez que la pile soit complète (environ 15 minutes). Vous pouvez suivre les progrès :

    aws cloudformation wait stack-create-complete \ --stack-name opensearch-ui-friendly-url \ --region us-east-1
  7. Testez la redirection. Ouvrez votre navigateur et accédez àhttps://prod.your-domain.com. Vous devriez être redirigé vers votre application d' OpenSearch interface utilisateur.

    Vous pouvez également vérifier auprès de curl :

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

Voici le CloudFormation modèle complet utilisé par le lien Launch Stack et la commande CLI ci-dessus. Vous pouvez également le télécharger directement depuishttps://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)"

Ajouter ou supprimer des applications

Pour ajouter, mettre à jour ou supprimer des mappages d'applications, créez une nouvelle version de votre fichier de mappages S3 et mettez à jour la pile avec la nouvelle version. L'approche versionnée permet de conserver votre fichier S3 comme source de référence et vous permet de passer à de nouvelles configurations ou de revenir aux versions précédentes à tout moment.

  1. Modifiez votre fichier de mappages pour ajouter ou supprimer des entrées. Enregistrez-le avec un suffixe de version incrémenté (par exemple,opensearch-ui-friendly-url-app-mappings-v2.json).

  2. Téléchargez la nouvelle version sur 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. Mettez à jour la pile avec la nouvelle MappingsKey et MappingsVersion :

    À l'aide de la console : ouvrez la CloudFormation console, sélectionnez votre pile, choisissez Mettre à jour, sélectionnez Utiliser le modèle actuel, puis mettez à jour les MappingsVersion paramètres MappingsKey et avec les nouvelles valeurs.

    À l'aide de 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
Important

Vous devez modifier le MappingsVersion paramètre chaque fois que vous mettez à jour des mappages. La version détermine le KeyValueStore nom, ce qui déclenche le remplacement CloudFormation de celui-ci par KeyValueStore les données mises à jour. Conservez le nom du MappingsKey fichier et MappingsVersion synchronisez-le (par exemple, ...-v2.json avecMappingsVersion=v2) pour plus de clarté.

Pour revenir à une version précédente, mettez à jour la pile pointant vers le fichier et la version antérieurs.

À l'aide de la CloudFormation console : ouvrez la console, sélectionnez votre pile, choisissez Mettre à jour , sélectionnez Utiliser le modèle actuel, MappingsKey puis MappingsVersion revenez aux valeurs précédentes (par exemple,v1).

À l'aide de 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

Cette approche versionnée vous donne le contrôle total pour avancer ou annuler les mappages de vos applications selon vos besoins, tout en conservant vos fichiers S3 comme enregistrement définitif de chaque version de configuration.

Configuration sans Route 53 (configuration manuelle)

Si votre domaine est géré par un fournisseur DNS autre que Route 53, vous pouvez configurer manuellement des redirections d'URL conviviales dans la console AWS de gestion. Cette approche n'utilise pas Amazon S3 pour les mappages : vous gérez les paires clé-valeur directement dans la console. CloudFront

Pour configurer une redirection d'URL conviviale sans Route 53
  1. Demandez un certificat dans ACM
    1. Ouvrez la console ACM à l'adresse https://console.aws.amazon.com/acm/ In the us-east-1 Region.

    2. Choisissez Demander un certificat.

    3. Dans le champ Nom de domaine, saisissez *.your-domain.com (certificat générique).

    4. Pour Méthode de validation, choisissez Validation DNS.

    5. Cliquez sur Demander.

    6. Sur la page des détails du certificat, notez le nom et la valeur de l'enregistrement CNAME sous Validation du domaine. Créez cet enregistrement CNAME auprès de votre fournisseur DNS pour valider la propriété du domaine.

    7. Attendez que le statut du certificat passe à Émis (généralement 5 à 30 minutes après la création de l'enregistrement DNS).

  2. Créez un CloudFront KeyValueStore
    1. Ouvrez la CloudFront console à l'adresse https://console.aws.amazon.com/cloudfront/.

    2. Dans le volet de navigation, choisissez Fonctions. Choisissez ensuite l'KeyValueStoresonglet.

    3. Choisissez Créer KeyValueStore.

    4. Entrez un nom (par exemple,opensearch-ui-friendly-url-app-mappings-store).

    5. Choisissez Créer.

    6. Après la création, choisissez Modifier pour ajouter des paires clé-valeur. Pour chaque application, ajoutez une clé (le nom du sous-domaine, par exempleprod) et une valeur (l'URL complète de l'application d' OpenSearch interface utilisateur).

  3. Création d'une CloudFront fonction
    1. Ouvrez la CloudFront console à l'adresse https://console.aws.amazon.com/cloudfront/.

    2. Dans le volet de navigation, choisissez Fonctions.

    3. Dans l'onglet Fonctions, choisissez Créer une fonction.

    4. Entrez un nom pour la fonction (par exemple,opensearch-ui-friendly-url-redirect-function).

    5. Pour Runtime, choisissez cloudfront-js-2.0.

    6. Remplacez le code de fonction par le code suivant :

      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_IDRemplacez-le par l'ID KeyValueStore que vous avez créé (visible sur la page de KeyValueStore détails).

    7. Dans KeyValueStore les associations, associez celles que KeyValueStore vous avez créées.

    8. Choisissez Enregistrer les modifications, puis fonction de publication.

  4. Création d'une CloudFront distribution
    1. Dans la CloudFront console, choisissez Créer une distribution.

    2. Pour Domaine d'origine, entrez n'importe quel domaine valide (par exemple,example.com). L'origine n'est jamais contactée car la fonction renvoie une réponse avant de l'atteindre.

    3. Dans Comportement du cache par défaut, pour Politique du protocole Viewer, choisissez Rediriger HTTP vers HTTPS.

    4. Pour Politique de cache, choisissez CachingDisabled.

    5. Dans Associations de fonctions, pour la requête Viewer, sélectionnez votre CloudFront fonction.

    6. Dans Paramètres, dans la zone Noms de domaine alternatifs (CNAME), entrez*.your-domain.com.

    7. Pour le certificat SSL personnalisé, sélectionnez le certificat que vous avez créé dans ACM.

    8. Choisissez Créer une distribution.

    9. Notez le nom du domaine de distribution (par exemple,d1234abcdef8.cloudfront.net).

  5. Configurez le DNS chez votre fournisseur

    Chez votre fournisseur DNS, créez un enregistrement CNAME qui pointe *.your-domain.com vers votre nom de domaine de CloudFront distribution (par exemple,d1234abcdef8.cloudfront.net).

    Note

    Certains fournisseurs DNS ne prennent pas en charge les enregistrements CNAME génériques. Dans ce cas, créez des enregistrements CNAME individuels pour chaque sous-domaine que vous souhaitez utiliser (par exempleprod.your-domain.com,staging.your-domain.com).

Ajouter manuellement des mappages d'applications

Pour ajouter de nouveaux mappages d'applications après la configuration manuelle initiale :

  1. Ouvrez la CloudFront console à l'adresse https://console.aws.amazon.com/cloudfront/.

  2. Dans le volet de navigation, choisissez Fonctions. Choisissez ensuite l'KeyValueStoresonglet.

  3. Choisissez votre KeyValueStore nom (par exemple,opensearch-ui-friendly-url-app-mappings-store).

  4. Choisissez Modifier.

  5. Choisissez Ajouter une paire. Entrez le nom du sous-domaine comme clé et l'URL complète de l'application d' OpenSearch interface utilisateur comme valeur.

  6. Sélectionnez Enregistrer les modifications.

La nouvelle URL conviviale est disponible immédiatement après l'enregistrement.

Nettoyage

Pour supprimer l'infrastructure conviviale de redirection d'URL, exécutez la commande suivante :

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

Cette commande supprime la CloudFront distribution, la fonction KeyValueStore, le certificat ACM et l'enregistrement DNS. Cela n'affecte pas vos applications d' OpenSearch interface utilisateur.

Résolution des problèmes

Le certificat ACM reste valide Pending validation

Assurez-vous que le DNS de votre domaine est correctement délégué à Route 53 (ou que vous avez créé le CNAME de validation auprès de votre fournisseur DNS). Utilisez-le dig your-domain NS pour vérifier les serveurs de noms.

Le navigateur affiche une erreur de certificat

Vérifiez que le certificat ACM couvre votre domaine en tant que caractère générique ()*.your-domain.com. Le certificat doit être délivré dans la us-east-1 région.

404 Application introuvable

Le sous-domaine auquel vous essayez d'accéder ne possède pas de mappage dans le KeyValueStore. Vérifiez que la clé existe dans votre fichier de mappages et confirmez que vous avez mis à jour la pile (ou que vous avez ajouté la paire manuellement) après votre dernière modification.

CloudFront la distribution affiche Deploying le statut pendant plus de 15 minutes

CloudFront le déploiement des distributions dans le monde peut prendre jusqu'à 15 minutes. Si le déploiement prend plus de temps, consultez la CloudFront console pour obtenir des informations sur les erreurs.

Erreur SourceArn est inaccessible lors de la création de la pile

Assurez-vous que la politique de compartiment S3 cloudfront.amazonaws.com autorise la lecture du fichier de mappages. Vérifiez également que le rôle IAM déployant la pile possède s3:GetObjects3:HeadObject, et s3:GetBucketLocation les autorisations sur le bucket.