1. Managed Cloudの構成

チュートリアル:Horizonモジュールの追加

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

Horizonは、Sitecore Experience Platformの次世代エディターです。Horizonモジュールを追加するには、特定のDockerイメージを作成し、それらをAzure Container Registry (ACR) に追加してから、Mssqlコンテナーを実行する前にアプリケーション リポジトリ内の項目を変更する必要があります。また、Front Doorの構成を拡張して、公開サービス名を追加で追加する必要があります。

このチュートリアルでは、すでにデプロイされているManaged Cloudコンテナ環境の上にHorizonモジュールをデプロイする場合に適用する必要があるインフラストラクチャの変更について説明します。

このチュートリアルでは、次の方法について説明します。

  • ドメイン名の登録

  • Front Doorの構成を拡張する

  • Dockerファイルを準備する

  • イメージをAzure Container Registry (ACR) にプッシュする

  • Horizon Container Deploymentパッケージのダウンロード

  • 基本のHorizon Kubernetes構成ファイルのコピー

  • Horizon構成オーバーレイの定義

  • アプリケーションリポジトリ内のイメージを変更する

  • mssql_init_hrzコンテナを実行する

  • イングレスの設定

  • Horizonコンポーネントの有効化

  • 変更を適用する

ドメイン名の登録

Horizonは別の一般公開されているサービスであるため、ドメイン名を登録する必要があります。

ドメイン名を登録するには:

  1. DNS名の管理元であるポータルに移動します。

  2. Azure Front Doorを指すHorizonの追加のCNAMEレコードを作成します: {infrastructure_id}fdr.azurefd.net

    ここで、infrastructureIdmccで始まる環境識別子です。

  3. Azureポータルに移動し、環境のKey Vault内にシークレットを作成します。

    • Secret name - sitecore-hrz-host-name

    • Secret value - 前の手順で作成したHorizonホスト名。

Front Doorの構成を拡張する

Front Doorの構成を拡張して、公開サービス名を追加する必要があります。

Front Doorの構成を拡張するには:

  1. frontdoor\backend-config.jsonに移動し、Horizonバックエンド構成を定義します。

    {
            "name": "hrz-ingress",
            "probe_path": "/healthz/live",
            "backend_list": [
                {
                    "host_header": "hrz.sitecore"
                }
              ]
    }
  2. frontdoor\main.tf 」に移動し、「 locals 」セクションで新しい変数を追加します "sitecore_hrz_host_name“

    sitecore_hrz_host_name = data.azurerm_key_vault_secret.sitecore_hrz_host_name.value
  3. Key VaultからHorizonホスト名を取得するためのdataリソースを定義します。

    data "azurerm_key_vault_secret" "sitecore_hrz_host_name" {
    name         = "sitecore-hrz-host-name"
    key_vault_id = data.azurerm_key_vault.this.id
    }
  4. "azurerm_frontdoor"リソースで、追加のrouting_ruleを定義します。

    routing_rule {
        name               = "HTTPS-hrz"
        accepted_protocols = ["Https"]
        patterns_to_match  = ["/*"]
        frontend_endpoints = ["hrz-frontend-endpoint"]
        forwarding_configuration {
          forwarding_protocol = "MatchRequest"
          backend_pool_name   = "hrz-ingress"
        }
      }
  5. "azurerm_frontdoor"リソースで、frontend_endpointを定義します。

    frontend_endpoint {
        name      = "hrz-frontend-endpoint"
        host_name =  local.sitecore_hrz_host_name
    }
  6. HTTPS-hrzルーティングルールをカバーするようにHttpToHttpsを調整します。

  7. ここで、プルリクエストで変更をInfrastructureリポジトリに適用してから、次の手順に進む必要があります。

  8. FrontDoorパイプラインを実行して変更を適用し、パイプラインが正常に実行されるまで待ちます。

  9. “azurerm_frontdoor_custom_https_configuration”リソースを定義します。

    resource "azurerm_frontdoor_custom_https_configuration" "hrz_https_configuration" {
      frontend_endpoint_id              = azurerm_frontdoor.this.frontend_endpoints["hrz-frontend-endpoint"]
      custom_https_provisioning_enabled = true
    
      custom_https_configuration {
        certificate_source                      = "AzureKeyVault"
        azure_key_vault_certificate_secret_name = data.azurerm_key_vault_certificate.sitecore_ingress_certificate.name
        azure_key_vault_certificate_vault_id    = data.azurerm_key_vault.this.id
        azure_key_vault_certificate_secret_version = data.azurerm_key_vault_certificate.sitecore_ingress_certificate.version
      }
    
      depends_on = [azurerm_frontdoor.this]
    }
  10. インフラストラクチャリポジトリへのプルリクエストを使用して、環境への変更を適用します。

    期待される結果:

  11. FrontDoorパイプラインを実行して変更を適用し、パイプラインが正常に実行されるまで待ちます。

Dockerファイルを準備する

Horizonサービスと連携するようにSitecoreプラットフォーム イメージを準備するには:

  • Horizon統合アセット イメージをSitecoreコンテンツ管理 (CM) イメージとMSSQL-INITイメージの上にインストールします。

対応するカスタム イメージを構築する方法については、Sitecore HorizonのKubernetesデプロイ ガイド を参照してください。

イメージをAzure Container Registry (ACR) にプッシュする

画像をACRにプッシュするには:

Horizon Container Deploymentパッケージのダウンロード

Horizonモジュールを追加するための前提条件は、Horizon Container Deploymentパッケージです。

パッケージをダウンロードするには:

  1. dev.sitecore.netで、使用している特定のSitecoreバージョンのページに移動し、Download optionsセクションでContainer Deployment Packageに移動します。

  2. SitecoreHorizonContainerDeployment zipパッケージをダウンロードし、ローカル フォルダーに解凍します。

基本のHorizon Kubernetes構成ファイルのコピー

Horizon設定ファイルをコピーするには、次の手順を実行します。

  1. ローカルでApplication repositoryフォルダに移動し、次のパスでフォルダを作成します。

    roles\sitecore-{topology}\bases\components\horizon
  2. 次のHorizon基本設定ファイルをSitecoreHorizonContainerDeploymentパッケージから、前に作成したフォルダーにコピーします。

    • k8s\ltsc2019\horizon\hrz.yaml

    • * k8s\ltsc2019\horizon\ patch-hrz-enable-dam.yaml

    • * k8s\ltsc2019\horizon\ patch-hrz-enable-sxa.yaml

    • overrides\{topology}\patch-cm.yaml

    • overrides\{topology}\patch-id.yaml

      メモ

      * でマークされたファイルはオプションです。SXAやDamとの統合が必要な場合に必要です。SXA/Dam統合の詳細については、Horizon展開ガイドを参照してください。

    Horizon base files
  3. 手順1で作成したフォルダーに、次の内容のkustomization.yamlファイルを作成します。

    apiVersion: kustomize.config.k8s.io/v1alpha1
    kind: Component
    
    resources:
      - hrz.yaml
    
    patchesStrategicMerge:
    - patch-id.yaml
    - patch-cm.yaml
    # Uncomment following line to enable DAM integration in the Horizon
    #- patch-hrz-enable-dam.yaml
    # Uncomment following line to enable SXA integration in the Horizon
    #- patch-hrz-enable-sxa.yaml

Horizon構成オーバーレイの定義

Horizonモジュール構成をManaged Cloud Containers環境と統合するには、Horizon基本構成の上にオーバーレイ レイヤーを定義する必要があります。この抽象化により、将来のリリースでのHorizonモジュール アップグレードでHorizon基本構成を簡単に置き換えることができます。

オーバーレイを定義するには:

  1. 次の内容でroles\sitecore-{topology}\overlays\components\horizon\cm.yamlファイルを作成します。

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cm
    spec:
      progressDeadlineSeconds: 3600
      template:
        spec:
          containers:
          - name: sitecore-xp1-cm
            image: "{{ docker_images.sitecore.cm }}"
            env:
            - name: SITECORE_HOSTNAME_HRZ
              valueFrom:
                secretKeyRef:
                  key: hrz
                  name: sitecore-hostname
            - name: Sitecore_Horizon_ClientHost
              value: "https://$(SITECORE_HOSTNAME_HRZ)"
  2. 次の内容でroles\sitecore-{topology}\overlays\components\horizon\id.yamlファイルを作成します。

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: id
    spec:
      progressDeadlineSeconds: 3600
      template:
        spec:
          containers:
          - name: sitecore-xp1-id
            image: "{{ docker_images.sitecore.id }}"
            env:
            - name: SITECORE_HOSTNAME_CM
              valueFrom:
                secretKeyRef:
                  key: cm
                  name: sitecore-hostname
            - name: SITECORE_HOSTNAME_ID
              valueFrom:
                secretKeyRef:
                  key: id
                  name: sitecore-hostname
            - name: SITECORE_HOSTNAME_HRZ
              valueFrom:
                secretKeyRef:
                  key: hrz
                  name: sitecore-hostname
            - name: Sitecore_Sitecore__IdentityServer__AccountOptions__PasswordRecoveryUrl
              value: "https://$(SITECORE_HOSTNAME_CM)/sitecore/login?rc=1"
            - name: Sitecore_Sitecore__IdentityServer__Clients__DefaultClient__AllowedCorsOrigins__AllowedCorsOriginsGroup1
              value: "https://$(SITECORE_HOSTNAME_CM)"
            - name: Sitecore_Sitecore__IdentityServer__PublicOrigin
              value: "https://$(SITECORE_HOSTNAME_ID)"
            - name: SITECORE_ENVIRONMENT_TYPE
              value: "{{ sitecore_environment_type }}"
            - name: Sitecore_Sitecore__IdentityServer__Clients__DefaultClient__AllowedCorsOrigins__AllowedCorsOriginsGroup2
              value: "https://$(SITECORE_HOSTNAME_HRZ)"
    
    
  3. 次の内容でroles\sitecore-{topology}\overlays\components\horizon\hrz.yamlファイルを作成します。

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hrz
    spec:
      progressDeadlineSeconds: 3600
      template:
        spec:
          containers:
          - name: sitecore-horizon
            image: "{{ docker_images.sitecore.hrz }}"
            env:
            - name: SITECORE_HOSTNAME_HRZ
              valueFrom:
                secretKeyRef:
                  key: hrz
                  name: sitecore-hostname
            - name: SITECORE_HOSTNAME_CM
              valueFrom:
                secretKeyRef:
                  key: cm
                  name: sitecore-hostname
            - name: SITECORE_HOSTNAME_ID
              valueFrom:
                secretKeyRef:
                  key: id
                  name: sitecore-hostname
            - name: Sitecore_Sitecore__Authentication__OpenIdConnectOptions__CallbackAuthority
              value: "https://$(SITECORE_HOSTNAME_HRZ)"
            - name: Sitecore_SitecorePlatform__ContentManagementInternalUrl
              value: http://cm.{{ solution_id }}.svc.cluster.local
            - name: Sitecore_SitecorePlatform__ContentManagementUrl
              value: "https://$(SITECORE_HOSTNAME_CM)"
            - name: Sitecore_Sitecore__Authentication__OpenIdConnectOptions__Authority
              value: "https://$(SITECORE_HOSTNAME_ID)"
            - name: Sitecore_Sitecore__Authentication__BearerAuthenticationOptions__Authority
              value: "https://$(SITECORE_HOSTNAME_ID)"
    
  4. 次の内容でroles\sitecore-{topology}\overlays\components\horizon\kustomization.yamlファイルを作成します。

    ---
    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    
    resources:
    - sitecore-roles.yaml
    
    patchesStrategicMerge:
    - cm.yaml
    - id.yaml
    - hrz.yaml
    
  5. オーバーレイを実行するには、roles\sitecore-{topology}\tasks\main.yamlに移動し、以下を追加します。

    - name: Copy Sitecore roles configuration into Horizon overlay
      template:
        src: roles/sitecore-xp/templates/sitecore-roles.yaml
        dest: roles/sitecore-xp/overlays/components/horizon/sitecore-roles.yaml
    
    - name: Run Kustomization for Horizon integration
      shell: |
          kustomize build roles/sitecore-xp/overlays/components/horizon > roles/sitecore-xp/templates/sitecore-roles.yaml

    期待される結果:

手記

このコード例は、XPトポロジ用です。XMの場合は、 ‘sitecore-xp’‘sitecore-xm’に置き換えます。

アプリケーションリポジトリ内のイメージを変更する

これで、Horizon固有のイメージと2つの新しいプロパティをアプリケーション リポジトリに追加できます。

アプリケーションリポジトリ内のイメージを変更するには:

  • アプリケーション リポジトリで、config/docker-imagesに移動し、次のようにdocker-images.jsonファイルを編集します。

    • cmイメージを、前に作成したcm-hrzに置き換えます。

    • 前に作成したmssql_init_hrzプロパティを追加します。

    • hrzプロパティを追加し、Sitecoreのバージョンに対応するHorizonサービスの公開イメージを指定します。この値は、前にダウンロードしたHorizonアーティファクトから見つけることができます。

      k8s\ltsc2019\horizon\kustomization.yamlに移動して、実際の画像名とタグを見つけます。例えば:

mssql_init_hrzコンテナを実行する

mssql-init-horizonコンテナを実行するには:

  1. roles\sitecore-{topology}\templates\ に移動し、次の内容でmssql-init-horizonジョブ ファイルをmssql-init-horizon.yamlという名前で追加します。

    apiVersion: batch/v1
    kind: Job
    metadata:
     name: horizon-mssql-init
    spec:
      template:
        spec:
          nodeSelector:
            kubernetes.io/os: windows
          imagePullSecrets:
            - name: sitecore-docker-registry
          containers:
          - name: mssql-init-horizon
            image: "{{ docker_images.sitecore.mssql_init_hrz }}"
            env:
            - name: sitecore_admin_password
              valueFrom:
                secretKeyRef:
                  name: sitecore-admin
                  key: sitecore-adminpassword.txt
            - name: SQL_ADMIN_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: sitecore-database
                  key: sitecore-databasepassword.txt
            - name: SQL_ADMIN_LOGIN
              valueFrom:
                secretKeyRef:
                  name: sitecore-database
                  key: sitecore-databaseusername.txt
            - name: SQL_SERVER
              valueFrom:
                secretKeyRef:
                  name: sitecore-database
                  key: sitecore-databaseservername.txt
            - name: SQL_ELASTIC_POOL_NAME
              valueFrom:
                secretKeyRef:
                  name: sitecore-database
                  key: sitecore-database-elastic-pool-name.txt
            - name: DATABASES_TO_DEPLOY
              value: hrz
          restartPolicy: Never
      backoffLimit: 5
    
  2. mssql-init-horizonジョブを実行するAnsibleタスクを追加するには、roles\sitecore-{topology}\tasks\init.yamlに移動し、ファイルの最後に次のスクリプトを追加します。

    - name: Execute horizon mssql-init jobs
      k8s:
        apply: true
        namespace: "{{ solution_id }}"
    
        state: present
        definition: "{{ lookup('template', 'mssql-init-horizon.yaml') }}"
    
    - name: 'Wait - Horizon Mssql-init job'
      k8s_info:
        kind: Job
        name: horizon-mssql-init
        namespace: "{{ solution_id }}"
    
      register: horizon_mssql_init_result
      until: (horizon_mssql_init_result.resources[0].status.conditions[0].type | default('')) == 'Complete'
      retries: 60
      delay: 60
    
    - name: Get all Horizon Mssql completed pods
      k8s_info:
        kind: Pod
        namespace: "{{ solution_id }}"
    
        label_selectors:
          - job-name = horizon-mssql-init
      no_log: true
      register: horizon_mssql_pod_list
    
    - name: Remove Horizon Mssql job's pods
      k8s:
        kind: Pod
        name: "{{ item.metadata.name }}"
        namespace: "{{ solution_id }}"
    
        state: absent
      no_log: true
      with_items: "{{ horizon_mssql_pod_list.resources }}"
    

イングレスの設定

次に、Ingress構成を定義して適用し、シークレットを定義する必要があります。

Ingressを設定するには:

  1. アプリケーションリポジトリで、roles\sitecore-{topology}\templates\ フォルダに移動し、次の内容でingress-hrz.yamlファイルを作成します。

    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: hrz-external
    spec:
      type: ExternalName
      externalName: hrz.{{ solution_id }}.svc.cluster.local
      ports:
      - port: 80
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: sitecore-hrz-ingress
      annotations:
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
        nginx.ingress.kubernetes.io/rewrite-target: /
        nginx.ingress.kubernetes.io/proxy-buffering: "on"
        nginx.ingress.kubernetes.io/proxy-buffers-number: "4"
        nginx.ingress.kubernetes.io/proxy-buffer-size: "256k"
    spec:
      rules:
      - host: "hrz.sitecore"
        http:
          paths:
          - path: /
            backend:
              serviceName: hrz-external
              servicePort: 80
    
  2. シークレットを定義するには、roles\sitecore-{topology}\templates\secrets.yamlに移動し、sitecore-secret-providersitecore-hrz-host-nameシークレットを定義します。

  3. sitecore-hostnameシークレットを拡張します。

    - key: hrz
          objectName: sitecore-hrz-host-name
    

    期待される結果

  4. sitecore-hrz-host-namesecret-providerパラメーターとして追加します。

    - |
              objectName: sitecore-hrz-host-name
              objectType: secret
    

    期待される結果:

  5. 新しいタスクをroles\sitecore-{topology}\tasks\main.yamlに追加します。

    - name: Install external horizon ingress service
      k8s:
        apply: true
        namespace: "nginx"
        state: present
        definition: "{{ lookup('template', 'ingress-hrz.yaml') }}"
        validate:
          fail_on_error: yes

Horizonコンポーネントの有効化

Horizonコンポーネントを有効にするには:

  • アプリケーション リポジトリで、roles\sitecore-{topology}\overlays\platform\kustomization.yamlファイルに移動し、components要素を使用してHorizonを有効にし、Horizonモジュール構成スクリプト フォルダーを指定します。

    components:
    -  ../../bases/components/horizon

変更を適用する

Horizonモジュールを追加するために必要なすべての変更を行ったので、変更を適用する必要があります。

変更を適用するには:

  1. アプリケーションリポジトリへのプルリクエストを使用して、アプリケーションの変更を環境に適用します。

  2. HorizonドキュメントのKubernetesデプロイ ガイドに従って、デプロイ後にSolrCloud検索インデックスを構成します。

この記事を改善するための提案がある場合は、 お知らせください!