Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyiapkan URL ramah untuk aplikasi OpenSearch UI (layanan mandiri)
OpenSearch Aplikasi UI memiliki URL yang dibuat secara otomatis sepertihttps://application-. URL ini panjang dan sulit diingat. Anda dapat mengatur URL ramah (sepertiname-id.Region.opensearch.amazonaws.com.rproxy.goskope.comhttps://prod.example.com). URL ini dialihkan ke aplikasi Anda, sehingga Anda dapat mengakses dasbor secara langsung tanpa menavigasi melalui Kon AWS sol Manajemen.
Cara kerjanya
Solusi ini digunakan CloudFront untuk mengarahkan permintaan dari URL ramah Anda ke titik akhir aplikasi OpenSearch UI Anda. Arsitektur terdiri dari komponen-komponen berikut:
-
Sertifikat ACM - Menyediakan enkripsi HTTPS untuk URL ramah Anda.
-
CloudFront KeyValueStore— Menyimpan pemetaan antara nama subdomain dan URL aplikasi.
-
CloudFront function — Membaca KeyValueStore dan mengembalikan pengalihan 302 ke URL aplikasi yang benar.
-
CloudFront distribusi - Melayani URL ramah Anda dengan TLS dan permintaan rute melalui fungsi.
-
Catatan DNS Route 53 — Arahkan URL ramah Anda ke CloudFront distribusi.
Ketika Anda mengunjungi URL ramah Anda (misalnya,https://prod.example.com), CloudFront fungsi mencari URL aplikasi yang sesuai dan mengarahkan browser Anda ke URL tersebut. Aplikasi menangani otentikasi secara langsung.
Prasyarat
-
Satu atau lebih aplikasi OpenSearch UI dengan URL titik akhir mereka.
-
Nama domain yang Anda miliki (misalnya,
example.com). -
Zona yang dihosting publik di Route 53 untuk domain Anda. Jika Anda tidak memilikinya, untuk informasi lebih lanjut, lihatMenyiapkan tanpa Route 53 (konfigurasi manual).
-
Bucket Amazon S3 untuk menyimpan file pemetaan URL aplikasi Anda.
Menyebarkan menggunakan AWS CloudFormation
Gunakan prosedur berikut untuk menyebarkan infrastruktur pengalihan URL ramah dengan CloudFormation template.
Untuk mengatur URL ramah untuk aplikasi OpenSearch UI Anda
-
Buat file JSON yang memetakan nama ramah Anda ke URL aplikasi. Setiap kunci menjadi subdomain (misalnya, kunci
prodmenjadihttps://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"} ] }Simpan file ini sebagai
opensearch-ui-friendly-url-app-mappings-v1.json. Suv1fiks mengidentifikasi ini sebagai versi pertama pemetaan Anda. Anda menambah versi ini saat memperbarui pemetaan Anda. -
Unggah file pemetaan ke bucket Amazon S3 di akun Anda:
aws s3 cp opensearch-ui-friendly-url-app-mappings-v1.json \ s3://your-bucket-name/opensearch-ui-friendly-url-app-mappings-v1.json -
Ber CloudFront ikan izin untuk membaca file pemetaan dengan menambahkan kebijakan bucket. Ganti
your-bucket-namedanyour-account-iddengan nilai-nilai Anda: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"}} }] }'catatan
Kebijakan bucket ini memungkinkan CloudFront untuk membaca file pemetaan selama KeyValueStore pembuatan. Tanpanya, penerapan tumpukan gagal dengan kesalahan “SourcEarn tidak dapat diakses”.
-
Terapkan CloudFormation tumpukan menggunakan salah satu opsi berikut:
Opsi 1: Luncurkan Stack (disarankan)
Salin URL berikut dan tempelkan ke browser Anda untuk membuka halaman pembuatan AWS CloudFormation cepat dengan template yang sudah dimuat sebelumnya. Isi parameter dan pilih Buat tumpukan.
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=v1Opsi 2: AWS CLI
Ganti nilai placeholder dengan milik Anda sendiri:
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 -
Jika Anda menggunakan AWS CLI (Opsi 2), gunakan tumpukan di Wil
us-east-1ayah. CloudFront membutuhkan sertifikat ACM untuk masukus-east-1. Aplikasi OpenSearch UI Anda dapat berada di Wilayah yang Didukung dan kuota OpenSearch UI mana pun. -
Tunggu hingga tumpukan selesai (sekitar 15 menit). Anda dapat memantau kemajuan:
aws cloudformation wait stack-create-complete \ --stack-name opensearch-ui-friendly-url \ --region us-east-1 -
Uji pengalihan. Buka browser Anda dan arahkan ke
https://. Anda harus diarahkan ke aplikasi OpenSearch UI Anda.prod.your-domain.comAnda juga dapat memverifikasi dengan
curl:curl -I https://prod.your-domain.com# Expected: HTTP/2 302 # location: https://application-prod-abc123.us-west-2.opensearch.amazonaws.com
Berikut ini adalah CloudFormation template lengkap yang digunakan oleh tautan Launch Stack dan perintah CLI di atas. Anda juga dapat mengunduhnya langsung darihttps://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)"
Menambahkan atau menghapus aplikasi
Untuk menambah, memperbarui, atau menghapus pemetaan aplikasi, buat versi baru file pemetaan S3 Anda dan perbarui tumpukan dengan versi baru. Pendekatan berversi menjaga file S3 Anda sebagai sumber kebenaran dan memungkinkan Anda untuk melanjutkan ke konfigurasi baru atau memutar kembali ke versi sebelumnya kapan saja.
-
Edit file pemetaan Anda untuk menambah atau menghapus entri. Simpan dengan akhiran versi bertambah (misalnya,
opensearch-ui-friendly-url-app-mappings-v2.json). -
Unggah versi baru ke S3:
aws s3 cp opensearch-ui-friendly-url-app-mappings-v2.json \ s3://your-bucket-name/opensearch-ui-friendly-url-app-mappings-v2.json -
Perbarui tumpukan dengan yang baru
MappingsKeydanMappingsVersion:Menggunakan konsol: Buka CloudFormation konsol
, pilih tumpukan Anda, pilih Per barui, pilih Gunakan template saat ini, lalu perbarui MappingsVersionparameterMappingsKeydan dengan nilai-nilai baru.Menggunakan 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
penting
Anda harus mengubah MappingsVersion parameter setiap kali Anda memperbarui pemetaan. Versi mendorong KeyValueStore nama, yang memicu CloudFormation untuk mengganti KeyValueStore dengan data yang diperbarui. Simpan nama MappingsKey file dan MappingsVersion sinkron (misalnya, ...-v2.json denganMappingsVersion=v2) untuk kejelasan.
Untuk memutar kembali ke versi sebelumnya, perbarui tumpukan yang menunjuk ke file dan versi sebelumnya.
Menggunakan konsol: Buka CloudFormation
konsolMappingsKey dan MappingsVersion kembali ke nilai sebelumnya (misalnya,v1).
Menggunakan 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
Pendekatan berversi ini memberi Anda kontrol penuh untuk memutar ke depan atau memutar kembali pemetaan aplikasi Anda sesuai kebutuhan, sambil menyimpan file S3 Anda sebagai catatan definitif dari setiap versi konfigurasi.
Menyiapkan tanpa Route 53 (konfigurasi manual)
Jika domain dikelola oleh penyedia DNS selain Route 53, Anda dapat mengatur pengalihan URL ramah secara manual di Konsol AWS Manajemen. Pendekatan ini tidak menggunakan Amazon S3 untuk pemetaan — Anda mengelola pasangan kunci-nilai langsung di konsol. CloudFront
Untuk mengatur pengalihan URL yang ramah tanpa Route 53
-
Minta sertifikat di ACM
-
Buka konsol ACM di https://console.aws.amazon.com/acm/
di Wil us-east-1ayah. -
Pilih Minta sertifikat.
-
Untuk Nama domain, masukkan
*.(sertifikat wildcard).your-domain.com -
Untuk Metode Validasi, pilih Validasi DNS.
-
Pilih Minta.
-
Pada halaman detail sertifikat, catat nama dan nilai rekaman CNAME di bawah Validasi Domain. Buat catatan CNAME ini di penyedia DNS Anda untuk memvalidasi kepemilikan domain.
-
Tunggu status sertifikat berubah menjadi Diter bitkan (biasanya 5 hingga 30 menit setelah pembuatan catatan DNS).
-
-
Buat CloudFront KeyValueStore
-
Buka CloudFront konsol di https://console.aws.amazon.com/cloudfront/
. -
Di panel navigasi, pilih Fungsi. Kemudian pilih KeyValueStores tab.
-
Pilih Buat KeyValueStore.
-
Masukkan nama (misalnya,
opensearch-ui-friendly-url-app-mappings-store). -
Pilih Buat.
-
Setelah pembuatan, pilih Edit untuk menambahkan pasangan kunci-nilai. Untuk setiap aplikasi, tambahkan kunci (nama subdomain, seperti
prod) dan nilai (URL aplikasi OpenSearch UI lengkap).
-
-
Buat CloudFront fungsi
-
Buka CloudFront konsol di https://console.aws.amazon.com/cloudfront/
. -
Di panel navigasi, pilih Fungsi.
-
Pada tab Functions, pilih Create function.
-
Masukkan nama untuk fungsi (misalnya,
opensearch-ui-friendly-url-redirect-function). -
Untuk Runtime, pilih cloudfront- js-2.0.
-
Ganti kode fungsi dengan yang berikut:
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>' } }; } }Ganti
YOUR_KVS_IDdengan ID yang KeyValueStore Anda buat (terlihat di halaman KeyValueStore detail). -
Dalam KeyValueStore asosiasi, kaitkan yang KeyValueStore Anda buat.
-
Pilih Simpan perubahan dan kemudian Publikasikan fungsi.
-
-
Buat CloudFront distribusi
-
Di CloudFront konsol, pilih Buat distribusi.
-
Untuk domain Origin, masukkan domain yang valid (misalnya,
example.com). Asal tidak pernah dihubungi karena fungsi mengembalikan respons sebelum mencapainya. -
Di bawah Perilaku cache default, untuk kebijakan protokol Viewer, pilih Arahkan HTTP ke HTTPS.
-
Untuk kebijakan Cache, pilih CachingDisabled.
-
Di bawah Asosiasi fungsi, untuk Permintaan Pen ampil, pilih CloudFront fungsi Anda.
-
Di bawah Peng aturan, untuk Nama domain alternatif (CNames), masukkan
*..your-domain.com -
Untuk sertifikat SSL khusus, pilih sertifikat yang Anda buat di ACM.
-
Pilih Buat Distribusi.
-
Perhatikan nama domain distribusi (misalnya,
d1234abcdef8.cloudfront.net).
-
-
Konfigurasikan DNS di penyedia Anda
Di penyedia DNS Anda, buat catatan CNAME yang menunjuk
*.ke nama domain CloudFront distribusi Anda (misalnya,your-domain.comd1234abcdef8.cloudfront.net).catatan
Beberapa penyedia DNS tidak mendukung catatan CNAME wildcard. Dalam hal ini, buat catatan CNAME individual untuk setiap subdomain yang ingin Anda gunakan (misalnya,
prod.your-domain.com,staging.your-domain.com).
Menambahkan pemetaan aplikasi secara manual
Untuk menambahkan pemetaan aplikasi baru setelah penyiapan manual awal:
-
Buka CloudFront konsol di https://console.aws.amazon.com/cloudfront/
. -
Di panel navigasi, pilih Fungsi. Kemudian pilih KeyValueStores tab.
-
Pilih KeyValueStore nama Anda (misalnya,
opensearch-ui-friendly-url-app-mappings-store). -
Pilih Edit.
-
Pilih Tambah pasangan. Masukkan nama subdomain sebagai kunci dan URL aplikasi OpenSearch UI lengkap sebagai nilainya.
-
Pilih Simpan perubahan.
URL ramah baru tersedia segera setelah disimpan.
Membersihkan
Untuk menghapus infrastruktur pengalihan URL yang ramah, jalankan perintah berikut:
aws cloudformation delete-stack \ --stack-name opensearch-ui-friendly-url \ --region us-east-1
Perintah ini menghapus CloudFront distribusi, fungsi KeyValueStore, sertifikat ACM, dan catatan DNS. Itu tidak mempengaruhi aplikasi OpenSearch UI Anda.
Pemecahan masalah
- Sertifikat ACM tetap
Pending validation -
Pastikan DNS domain Anda didelegasikan dengan benar ke Route 53 (atau bahwa Anda membuat CNAME validasi di penyedia DNS Anda). Gunakan
diguntuk memverifikasi server nama.your-domainNS - Browser menunjukkan kesalahan sertifikat
-
Verifikasi sertifikat ACM mencakup domain Anda sebagai wildcard ()
*.your-domain.com. Sertifikat harus di Wilus-east-1ayah. - 404 Aplikasi Tidak Ditemukan
-
Subdomain yang Anda coba akses tidak memiliki pemetaan di KeyValueStore. Verifikasi kunci ada di file pemetaan Anda dan konfirmasikan bahwa Anda memperbarui tumpukan (atau menambahkan pasangan secara manual) setelah perubahan terakhir Anda.
- CloudFront distribusi menunjukkan
Deployingstatus selama lebih dari 15 menit -
CloudFront distribusi dapat memakan waktu hingga 15 menit untuk diterapkan secara global. Jika penerapan memakan waktu lebih lama, periksa CloudFront konsol untuk detail kesalahan.
- SourcEarn adalah kesalahan yang tidak dapat diakses selama pembuatan tumpukan
-
Pastikan kebijakan bucket S3 memberikan
cloudfront.amazonaws.com.rproxy.goskope.comizin untuk membaca file pemetaan. Juga verifikasi peran IAM yang menerapkan stack memilikis3:GetObject,s3:HeadObject, dans3:GetBucketLocationizin pada bucket.