翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
OpenSearch UI アプリケーションのフレンドリ URL の設定 (セルフサービス)
OpenSearch UI アプリケーションには、 のような自動生成された URLs がありますhttps://application-。これらの URLsは長く、覚えにくいです。わかりやすい URL ( などname-id.Region.opensearch.amazonaws.comhttps://prod.example.com) を設定できます。この URL はアプリケーションにリダイレクトされるため、 AWS マネジメントコンソールを移動せずにダッシュボードに直接アクセスできます。
仕組み
このソリューションでは、CloudFront を使用して、わかりやすい URL から OpenSearch UI アプリケーションエンドポイントにリクエストをリダイレクトします。このアーキテクチャは、次のコンポーネントで構成されます。
-
ACM 証明書 – フレンドリ URL の HTTPS 暗号化を提供します。
-
CloudFront KeyValueStore – サブドメイン名とアプリケーション URLs間のマッピングを保存します。
-
CloudFront 関数 – KeyValueStore を読み取り、正しいアプリケーション URL への 302 リダイレクトを返します。
-
CloudFront ディストリビューション – TLS を使用してフレンドリ URL を提供し、 関数を介してリクエストをルーティングします。
-
Route 53 DNS レコード – CloudFront ディストリビューションへのフレンドリ URL を指定します。
わかりやすい URL ( などhttps://prod.example.com) にアクセスすると、CloudFront 関数は対応するアプリケーション URL を検索し、ブラウザをリダイレクトします。アプリケーションは認証を直接処理します。
前提条件
-
エンドポイント URLs を持つ 1 つ以上の OpenSearch UI アプリケーション。
-
所有しているドメイン名 (例:
example.com)。 -
ドメインの Route 53 のパブリックホストゾーン。お持ちでない場合は、「」を参照してくださいRoute 53 を使用しないセットアップ (手動設定)。
-
アプリケーション URL マッピングファイルを保存する Amazon S3 バケット。
を使用してデプロイする AWS CloudFormation
テンプレートを使用してわかりやすい URL リダイレクトインフラストラクチャをデプロイするには、次の手順に従います CloudFormation 。
OpenSearch UI アプリケーションのフレンドリ URL を設定するには
-
フレンドリ名をアプリケーション URLs にマッピングする JSON ファイルを作成します。各キーはサブドメインになります (たとえば、キーは
prodになります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"} ] }opensearch-ui-friendly-url-app-mappings-v1.jsonという名前でこのファイルを保存します。v1サフィックスは、これをマッピングの最初のバージョンとして識別します。マッピングを更新すると、このバージョンが増加します。 -
マッピングファイルをアカウントの Amazon S3 バケットにアップロードします。
aws s3 cp opensearch-ui-friendly-url-app-mappings-v1.json \ s3://your-bucket-name/opensearch-ui-friendly-url-app-mappings-v1.json -
バケットポリシーを追加してマッピングファイルを読み取るアクセス許可を CloudFront に付与します。
your-bucket-nameとyour-account-idを自分の値に置き換えます。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"}} }] }'注記
このバケットポリシーにより、CloudFront は KeyValueStore の作成中にマッピングファイルを読み取ることができます。これがないと、スタックのデプロイはSourceARN にアクセスできません」というエラーで失敗します。
-
次のいずれかのオプションを使用して CloudFormation スタックをデプロイします。
オプション 1: スタックを起動する (推奨)
次の URL をコピーしてブラウザに貼り付け、テンプレートがプリロードされた AWS CloudFormation クイック作成ページを開きます。パラメータを入力し、スタックの作成を選択します。
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=v1オプション 2: AWS CLI
プレースホルダー値を独自の値に置き換えます。
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 -
CLI (オプション 2) AWS を使用した場合は、
us-east-1リージョンにスタックをデプロイします。CloudFront では、ACM 証明書が にある必要がありますus-east-1。OpenSearch UI アプリケーションは、OpenSearch UI でサポートされている任意のリージョンとクォータに配置できます。 -
スタックが完了するまで待ちます (約 15 分)。進行状況をモニタリングできます。
aws cloudformation wait stack-create-complete \ --stack-name opensearch-ui-friendly-url \ --region us-east-1 -
リダイレクトをテストします。ブラウザを開き、 に移動します
https://。OpenSearch UI アプリケーションにリダイレクトされます。prod.your-domain.comで検証することもできます
curl。curl -I https://prod.your-domain.com# Expected: HTTP/2 302 # location: https://application-prod-abc123.us-west-2.opensearch.amazonaws.com
以下は、上記の Launch Stack リンクと CLI コマンドで使用される完全な CloudFormation テンプレートです。から直接ダウンロードすることもできますhttps://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)"
アプリケーションの追加または削除
アプリケーションマッピングを追加、更新、または削除するには、S3 マッピングファイルの新しいバージョンを作成し、新しいバージョンでスタックを更新します。バージョニングアプローチでは、S3 ファイルを信頼できるソースとして保持し、いつでも新しい設定にロールフォワードしたり、以前のバージョンにロールバックしたりできます。
-
マッピングファイルを編集して、エントリを追加または削除します。増分バージョンサフィックス (例: ) で保存します
opensearch-ui-friendly-url-app-mappings-v2.json。 -
新しいバージョンを S3 にアップロードします。
aws s3 cp opensearch-ui-friendly-url-app-mappings-v2.json \ s3://your-bucket-name/opensearch-ui-friendly-url-app-mappings-v2.json -
新しい
MappingsKeyと でスタックを更新しますMappingsVersion。コンソールの使用: CloudFormation コンソール
を開き、スタックを選択し、更新を選択し、現在のテンプレートを使用するを選択し、 パラメータ MappingsKeyとMappingsVersionパラメータを新しい値で更新します。CLI AWS の使用:
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
重要
マッピングを更新するたびに MappingsVersionパラメータを変更する必要があります。バージョンは KeyValueStore 名を駆動し、KeyValueStore を更新されたデータに置き換え CloudFormation るようにトリガーします。わかりやすいように、MappingsKeyファイル名と を ( など...-v2.jsonでMappingsVersion=v2) MappingsVersion同期させます。
以前のバージョンにロールバックするには、以前のファイルとバージョンを指すスタックを更新します。
コンソールの使用: CloudFormation コンソールMappingsKey を設定して前の値MappingsVersionに戻します (例: v1)。
CLI AWS の使用:
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
このバージョニングアプローチにより、S3 ファイルを各設定バージョンの決定的なレコードとして保持しながら、必要に応じてアプリケーションマッピングをロールフォワードまたはロールバックする完全な制御が可能になります。
Route 53 を使用しないセットアップ (手動設定)
ドメインが Route 53 以外の DNS プロバイダーによって管理されている場合は、 AWS マネジメントコンソールでフレンドリ URL リダイレクトを手動で設定できます。このアプローチでは、マッピングに Amazon S3 を使用しません。CloudFront コンソールでキーと値のペアを直接管理します。
Route 53 を使用せずにわかりやすい URL リダイレクトを設定するには
-
ACM で証明書をリクエストする
-
us-east-1リージョンの https://console.aws.amazon.com/acm/で ACM コンソールを開きます。 -
証明書のリクエストを選択します。
-
ドメイン名には、
*.(ワイルドカード証明書) と入力します。your-domain.com -
検証方法では、DNS 検証を選択します。
-
[リクエスト] を選択します。
-
証明書の詳細ページで、ドメイン検証で CNAME レコード名と値を書き留めます。DNS プロバイダーでこの CNAME レコードを作成して、ドメインの所有権を検証します。
-
証明書のステータスが発行済み (通常は DNS レコードの作成から 5~30 分後) に変わるまで待ちます。
-
-
CloudFront KeyValueStore を作成する
-
CloudFront コンソール (https://console.aws.amazon.com/cloudfront/
) を開きます。 -
ナビゲーションペインで、[関数] を選択します。次に、KeyValueStores タブを選択します。
-
[KeyValueStore を作成] を選択します。
-
名前を入力します (例:
opensearch-ui-friendly-url-app-mappings-store)。 -
[作成] を選択します。
-
作成後、編集 を選択してキーと値のペアを追加します。アプリケーションごとに、キー ( などのサブドメイン名
prod) と値 (完全な OpenSearch UI アプリケーション URL) を追加します。
-
-
CloudFront 関数を作成する
-
CloudFront コンソール (https://console.aws.amazon.com/cloudfront/
) を開きます。 -
ナビゲーションペインで、[関数] を選択します。
-
Functions タブで、Create function を選択します。
-
関数の名前を入力します (例:
opensearch-ui-friendly-url-redirect-function)。 -
Runtime で cloudfront-js-2.0 を選択します。
-
関数コードを以下に置き換えます。
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_IDを、作成した KeyValueStore の ID に置き換えます (KeyValueStore の詳細ページを参照)。 -
KeyValueStore の関連付けで、作成した KeyValueStore を関連付けます。
-
変更を保存 を選択し、関数をパブリッシュします。
-
-
CloudFront ディストリビューションを作成する
-
CloudFront コンソールで、ディストリビューションの作成を選択します。
-
オリジンドメインには、有効なドメイン ( など
example.com) を入力します。関数は、オリジンに到達する前にレスポンスを返すため、オリジンには連絡されません。 -
デフォルトのキャッシュ動作のビューワープロトコルポリシーで、HTTP を HTTPS にリダイレクトを選択します。
-
キャッシュポリシーで、CachingDisabled を選択します。
-
関数の関連付けで、ビューワーリクエストで CloudFront 関数を選択します。
-
「設定」の「代替ドメイン名 (CNAMEs「」と入力します
*.。your-domain.com -
カスタム SSL 証明書の場合は、ACM で作成した証明書を選択します。
-
[ディストリビューションの作成] を選択します。
-
ディストリビューションドメイン名 ( など
d1234abcdef8.cloudfront.net) を書き留めます。
-
-
プロバイダーで DNS を設定する
DNS プロバイダーで、CloudFront ディストリビューションドメイン名 ( など
d1234abcdef8.cloudfront.net)*.を指す CNAME レコードを作成します。your-domain.com注記
一部の DNS プロバイダーは、ワイルドカード CNAME レコードをサポートしていません。この場合、使用するサブドメインごとに個別の CNAME レコードを作成します (例:
prod.your-domain.com、staging.your-domain.com)。
アプリケーションマッピングを手動で追加する
最初の手動セットアップ後に新しいアプリケーションマッピングを追加するには:
-
CloudFront コンソール (https://console.aws.amazon.com/cloudfront/
) を開きます。 -
ナビゲーションペインで、[関数] を選択します。次に、KeyValueStores タブを選択します。
-
KeyValueStore 名 ( など
opensearch-ui-friendly-url-app-mappings-store) を選択します。 -
[編集] を選択します。
-
ペアの追加 を選択します。キーとしてサブドメイン名を入力し、値として完全な OpenSearch UI アプリケーション URL を入力します。
-
[Save changes] (変更の保存) をクリックします。
新しいフレンドリ URL は、保存後すぐに使用できます。
クリーンアップ
わかりやすい URL リダイレクトインフラストラクチャを削除するには、次のコマンドを実行します。
aws cloudformation delete-stack \ --stack-name opensearch-ui-friendly-url \ --region us-east-1
このコマンドは、CloudFront ディストリビューション、 関数、KeyValueStore、ACM 証明書、DNS レコードを削除します。OpenSearch UI アプリケーションには影響しません。
トラブルシューティング
- ACM 証明書は にとどまる
Pending validation -
ドメインの DNS が Route 53 に適切に委任されていることを確認します (または、DNS プロバイダーで検証 CNAME を作成しました)。
digを使用してネームサーバーを検証します。your-domainNS - ブラウザに証明書エラーが表示される
-
ACM 証明書がドメインをワイルドカード () としてカバーしていることを確認します
*.your-domain.com。証明書はus-east-1リージョンにある必要があります。 - 404 アプリケーションが見つかりません
-
アクセスしようとしているサブドメインに KeyValueStore にマッピングがありません。キーがマッピングファイルに存在することを確認し、前回の変更後にスタックを更新した (またはペアを手動で追加した) ことを確認します。
- CloudFront ディストリビューションに 15 分以上
Deployingのステータスが表示される -
CloudFront ディストリビューションがグローバルにデプロイされるまでに最大 15 分かかる場合があります。デプロイに時間がかかる場合は、CloudFront コンソールでエラーの詳細を確認してください。
- スタックの作成中に SourceARN にアクセスできないエラー
-
S3 バケットポリシーがマッピングファイルを読み取る
cloudfront.amazonaws.comアクセス許可を付与していることを確認します。また、スタックをデプロイする IAM ロールに、バケットに対するs3:GetObject、s3:HeadObject、および アクセスs3:GetBucketLocation許可があることを確認します。