

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)
<a name="application-custom-domain"></a>

OpenSearch Aplikasi UI memiliki URL yang dibuat secara otomatis seperti`https://application-{{name}}-{{id}}.{{Region}}.opensearch.amazonaws.com`. URL ini panjang dan sulit diingat. Anda dapat mengatur URL ramah (seperti`https://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
<a name="application-custom-domain-overview"></a>

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
<a name="application-custom-domain-prerequisites"></a>
+ 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, lihat[Menyiapkan tanpa Route 53 (konfigurasi manual)](#application-custom-domain-without-route53).
+ Bucket Amazon S3 untuk menyimpan file pemetaan URL aplikasi Anda.

## Menyebarkan menggunakan AWS CloudFormation
<a name="application-custom-domain-deploy-cfn"></a>

Gunakan prosedur berikut untuk menyebarkan infrastruktur pengalihan URL ramah dengan CloudFormation template.

**Untuk mengatur URL ramah untuk aplikasi OpenSearch UI Anda**

1. Buat file JSON yang memetakan nama ramah Anda ke URL aplikasi. Setiap kunci menjadi subdomain (misalnya, kunci `prod` menjadi`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"}
     ]
   }
   ```

   Simpan file ini sebagai`opensearch-ui-friendly-url-app-mappings-v1.json`. Su `v1` fiks mengidentifikasi ini sebagai versi pertama pemetaan Anda. Anda menambah versi ini saat memperbarui pemetaan Anda.

1. 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
   ```

1. Ber CloudFront ikan izin untuk membaca file pemetaan dengan menambahkan kebijakan bucket. Ganti {{your-bucket-name}} dan {{your-account-id}} dengan nilai-nilai Anda:

   ```
   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}}"}}
       }]
     }'
   ```
**catatan**  
Kebijakan bucket ini memungkinkan CloudFront untuk membaca file pemetaan selama KeyValueStore pembuatan. Tanpanya, penerapan tumpukan gagal dengan kesalahan “SourcEarn tidak dapat diakses”.

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

   **Opsi 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
   ```

1. Jika Anda menggunakan AWS CLI (Opsi 2), gunakan tumpukan di Wil `us-east-1` ayah. CloudFront membutuhkan sertifikat ACM untuk masuk`us-east-1`. Aplikasi OpenSearch UI Anda dapat berada di Wilayah yang [ Didukung dan kuota OpenSearch UI mana pun](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/opensearch-ui-endpoints-quotas.html).

1. 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
   ```

1. Uji pengalihan. Buka browser Anda dan arahkan ke`https://{{prod}}.{{your-domain.com}}`. Anda harus diarahkan ke aplikasi OpenSearch UI Anda.

   Anda 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
   ```

### CloudFormation sumber template
<a name="application-custom-domain-template-source"></a>

Berikut ini adalah CloudFormation template lengkap yang digunakan oleh tautan Launch Stack dan perintah CLI di atas. Anda juga dapat mengunduhnya langsung dari`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)"
```

### Menambahkan atau menghapus aplikasi
<a name="application-custom-domain-add-apps"></a>

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.

1. Edit file pemetaan Anda untuk menambah atau menghapus entri. Simpan dengan akhiran versi bertambah (misalnya,`opensearch-ui-friendly-url-app-mappings-v2.json`).

1. 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
   ```

1. Perbarui tumpukan dengan yang baru `MappingsKey` dan`MappingsVersion`:

   **Menggunakan konsol: ** Buka [CloudFormation konsol](https://console.aws.amazon.com/cloudformation/), pilih tumpukan Anda, pilih Per ** barui**, pilih ** Gunakan template saat ini**, lalu perbarui `MappingsVersion` parameter `MappingsKey` dan 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` dengan`MappingsVersion=v2`) untuk kejelasan.

Untuk memutar kembali ke versi sebelumnya, perbarui tumpukan yang menunjuk ke file dan versi sebelumnya.

**Menggunakan konsol: ** Buka [CloudFormation konsol](https://console.aws.amazon.com/cloudformation/), pilih tumpukan Anda, pilih ** Perbarui**, pilih ** Gunakan template saat ini**, lalu atur `MappingsKey` 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)
<a name="application-custom-domain-without-route53"></a>

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**

1. 

**Minta sertifikat di ACM**

   1. Buka konsol ACM di [ https://console.aws.amazon.com/acm/ ](https://console.aws.amazon.com/acm/) di Wil `us-east-1` ayah.

   1. Pilih ** Minta sertifikat**.

   1. Untuk Nama ** domain**, masukkan `*.{{your-domain.com}}` (sertifikat wildcard).

   1. Untuk Metode ** Validasi**, pilih Validasi ** DNS**.

   1. Pilih **Minta**.

   1. 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.

   1. Tunggu status sertifikat berubah menjadi Diter ** bitkan ** (biasanya 5 hingga 30 menit setelah pembuatan catatan DNS).

1. 

**Buat CloudFront KeyValueStore**

   1. Buka CloudFront konsol di [ https://console.aws.amazon.com/cloudfront/](https://console.aws.amazon.com/cloudfront/).

   1. Di panel navigasi, pilih **Fungsi**. Kemudian pilih ** KeyValueStores ** tab.

   1. Pilih **Buat KeyValueStore**.

   1. Masukkan nama (misalnya,`opensearch-ui-friendly-url-app-mappings-store`).

   1. Pilih **Buat**.

   1. 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).

1. 

**Buat CloudFront fungsi**

   1. Buka CloudFront konsol di [ https://console.aws.amazon.com/cloudfront/](https://console.aws.amazon.com/cloudfront/).

   1. Di panel navigasi, pilih **Fungsi**.

   1. Pada ** tab ** Functions, pilih ** Create function**.

   1. Masukkan nama untuk fungsi (misalnya,`opensearch-ui-friendly-url-redirect-function`).

   1. Untuk ** Runtime**, pilih ** cloudfront- ** js-2.0.

   1. 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\_ID}} dengan ID yang KeyValueStore Anda buat (terlihat di halaman KeyValueStore detail).

   1. Dalam ** KeyValueStore asosiasi**, kaitkan yang KeyValueStore Anda buat.

   1. Pilih ** Simpan perubahan ** dan kemudian ** Publikasikan fungsi**.

1. 

**Buat CloudFront distribusi**

   1. Di CloudFront konsol, pilih ** Buat distribusi**.

   1. Untuk domain ** Origin**, masukkan domain yang valid (misalnya,`example.com`). Asal tidak pernah dihubungi karena fungsi mengembalikan respons sebelum mencapainya.

   1. Di bawah ** Perilaku cache default**, untuk kebijakan protokol ** Viewer**, pilih ** Arahkan HTTP ke HTTPS**.

   1. Untuk kebijakan ** Cache**, pilih ** CachingDisabled**.

   1. Di bawah ** Asosiasi fungsi**, untuk ** Permintaan Pen ** ampil, pilih CloudFront fungsi Anda.

   1. Di bawah ** Peng ** aturan, untuk Nama domain ** alternatif (CNames)**, masukkan`*.{{your-domain.com}}`.

   1. Untuk sertifikat SSL ** khusus**, pilih sertifikat yang Anda buat di ACM.

   1. Pilih **Buat Distribusi**.

   1. Perhatikan nama domain distribusi (misalnya,`d1234abcdef8.cloudfront.net`).

1. 

**Konfigurasikan DNS di penyedia Anda**

   Di penyedia DNS Anda, buat catatan CNAME yang menunjuk `*.{{your-domain.com}}` ke nama domain CloudFront distribusi Anda (misalnya,`d1234abcdef8.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
<a name="application-custom-domain-manual-add-apps"></a>

Untuk menambahkan pemetaan aplikasi baru setelah penyiapan manual awal:

1. Buka CloudFront konsol di [ https://console.aws.amazon.com/cloudfront/](https://console.aws.amazon.com/cloudfront/).

1. Di panel navigasi, pilih **Fungsi**. Kemudian pilih ** KeyValueStores ** tab.

1. Pilih KeyValueStore nama Anda (misalnya,`opensearch-ui-friendly-url-app-mappings-store`).

1. Pilih **Edit**.

1. Pilih ** Tambah pasangan**. Masukkan nama subdomain sebagai kunci dan URL aplikasi OpenSearch UI lengkap sebagai nilainya.

1. Pilih **Simpan perubahan**.

URL ramah baru tersedia segera setelah disimpan.

## Membersihkan
<a name="application-custom-domain-cleanup"></a>

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
<a name="application-custom-domain-troubleshooting"></a>

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 `dig {{your-domain}} NS` untuk memverifikasi server nama.

Browser menunjukkan kesalahan sertifikat  
Verifikasi sertifikat ACM mencakup domain Anda sebagai wildcard ()`*.your-domain.com`. Sertifikat harus di Wil `us-east-1` ayah.

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 `Deploying` status 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` izin untuk membaca file pemetaan. Juga verifikasi peran IAM yang menerapkan stack memiliki`s3:GetObject`,`s3:HeadObject`, dan `s3:GetBucketLocation` izin pada bucket.