CNE AWS Ready: オーバーレイを使用したOSGiモジュールまたはクライアント拡張機能の追加
Cloud Native Experience (CNE) ツールキットは、オーバーレイを使用して標準的な Liferay デプロイメントをカスタマイズします。 プロジェクト内のすべての環境で共有されるプロジェクトレベルのS3バケットにカスタムファイル(OSGiモジュール、クライアント拡張機能、構成ファイル、サイト初期化ファイルなど)をアップロードし、各環境がPodの起動時にそれらを適用するように設定します。
このアプローチにより、カスタムのLiferayビルドが不要になり、標準コンテナの上に変更が適用され、GitOpsを通じて完全に管理されます。
CNEオーバーレイバケットは、各環境ごとではなく、プロジェクトごとにスコープが設定されます。 GitOpsリポジトリに project.yaml ファイルがない場合、または環境の liferay.yaml オーバーレイブロックがまだ bucketName 値を設定している場合は、古い環境ごとのモデルを使用しています。 古い環境ごとのバケットは自動的に移行されないため、古いモデル用に構築されたオーバーレイ構成は、移行が完了するまで機能しなくなります。 オーバーレイバケットのプロビジョニング を参照してください。
CNEは、オーバーレイを介してOSGiモジュールまたはクライアント拡張機能をデプロイするための2つの方法をサポートしています。
-
手動 オーバーレイ: 場合によっては、モジュールを AWS のオーバーレイ バケットに直接アップロードし、GitOps 構成を手動で更新する必要があります。 このワークフローは、テスト、デバッグ、または単発のデプロイメントに役立ちます。
-
自動化された オーバーレイ: ブートストラップ プロセスと GitOps 同期により、リポジトリに変更がコミットされるたびにモジュールのデプロイが自動的に処理されます。 これは、ほとんどの運用環境において推奨されるアプローチです。
オーバーレイバケットのプロビジョニング
どちらのワークフローも、プロジェクトレベルのオーバーレイバケットに依存しています。 どちらのワークフローを実行する前にも、一度プロビジョニングを行ってください。
環境ごとのモデルから移行するには、4 つの変更が必要です。 project.yamlでバケットを有効にし、 base/infrastructure.yamlで環境アクセスを付与し、各環境の liferay.yamlのオーバーレイ ブロックから bucketName を削除し、アーティファクトを新しいバケットに再アップロードします。 以下の手順1と手順2では、最初の2つの変更について説明します。
-
オーバーレイバケットを有効にします。
liferay/projects/<projectId>/project.yamlで、overlay.enabledをtrueに設定します。オーバーレイ: 有効: trueこの設定のデフォルト値は
falseです。project.yamlでこの設定を `true`に設定すると、S3 バケット、バケットのライフサイクル設定、パブリックアクセスブロック、バージョン管理、アップロード専用の IAM ポリシー、CI アップローダー用の IAM ユーザー、ユーザーポリシーの添付、および Kubernetes シークレットに保存されたアクセスキーがプロビジョニングされます。注記アップロード専用の IAM ポリシーでは、
s3:DeleteObjectおよびs3:DeleteObjectVersionが明示的に拒否されるため、CI のアップロードでは、バケットから既存のオーバーレイ コンテンツを削除できません。 -
環境にバケットへのアクセス権を付与します。
liferay/projects/<projectId>/base/infrastructure.yamlで、overlay.enabledをtrueに設定します。オーバーレイ: 有効: trueこの設定もデフォルトで
falseになります。base/infrastructure.yamlはプロジェクト内のすべての環境に適用されるため、ここで設定すると、すべての環境が一度にバケットへの読み取り専用アクセスを許可されます。 あるプロジェクトのPodは、別のプロジェクトのオーバーレイバケットにアクセスできません。 個々の環境が兄弟環境とは異なるオーバーレイアクセスを持つ必要がある場合(たとえば、オプトアウトする場合)、その環境自身のinfrastructure.yamlの値を上書きします。注記この設定は
project.yamlの設定と同じ名前ですが、2 つの設定は独立しています。project.yamlの値はバケットをプロビジョニングし、base/infrastructure.yamlの値は環境にバケットへのアクセスを許可します。 両方設定してください。 -
決意を固め、変革を推進しよう。
Argo CD は、プロジェクトのリソース アプリケーション (名前空間
liferay-<projectId>-resources、例えばliferay-acme-resources) を同期し、バケットとその IAM リソースをプロビジョニングします。 バケット名は自動的に生成されるため、自分で設定する必要はありません。
手動オーバーレイワークフロー(AWS UI)
-
オーバーレイバケットを探してください。
AWSコンソールで、プロジェクトに関連付けられているS3バケットを検索してください。 プロジェクト内のすべての環境がこのバケットを共有します。 オーバーレイ バケット名には、
-overlay-に続いてプロジェクト ID と生成されたサフィックスが含まれます。たとえば、my-deployment-overlay-acme-2225ebのようになります。 -
バケット内にオーバーレイリソースを保存するための最上位フォルダを作成し、そこにOSGiモジュール、クライアント拡張機能、または設定ファイルをアップロードしてください。
-
GitOpsでオーバーレイを有効にする。
環境固有の
liferay.yaml(liferay/projects/<projectId>/environments/<environmentId>/liferay.yaml) で、オーバーレイ セクションを設定してリソースを参照します。liferay-default: overlay: copy: - from: overlay_test_1/osgi/client-extensions/* into: osgi/client-extensions enabled: true -
変更をコミットしてプッシュする。
Argo CDは環境を同期し、オーバーレイリソースをLiferayデプロイメントに適用します。
自動化されたオーバーレイワークフロー(GitOpsとCI)
-
オーバーレイバケットを探してください。
プロジェクトのリソース名前空間に切り替えます。
kubens liferay-<projectId>-リソースオーバーレイバケットリソースを一覧表示して、S3バケット名を見つけます。
kubectl get buckets.s3.aws.m.upbound.io --selector component=overlayEXTERNAL-NAME列の値をコピーします。 これは、プロジェクトのオーバーレイリソースを保存するために使用されるS3バケット名です。 -
CIアップローダーの認証情報を取得します。
プロジェクトのリソース名前空間(
liferay-<projectId>-resources)にとどまり、CI アップローダー ユーザーを特定します。kubectl get users.iam.aws.m.upbound.io --selector aws.liferay.com/usernameCIアップローダーのアクセスキーは、バケット名と同じ名前のシークレットに保存されます。 前のステップで取得した
EXTERNAL-NAMEの値を使用します。OVERLAY_BUCKET_NAME=my-deployment-overlay-acme-2225eb AWS_ACCESS_KEY_ID=$(kubectl get secret "${OVERLAY_BUCKET_NAME}-ci-uploader-access-key" -o jsonpath='{.data.username}' | base64 -d) AWS_ACCESS_KEY_SECRET=$(kubectl get secret "${OVERLAY_BUCKET_NAME}-ci-uploader-access-key" -o jsonpath='{.data.password}' | base64 -d) -
カスタマイズを作成してアップロードする。
以下のGitHub Actionsシークレットを設定してください。
AWSリージョンAWS_S3_バケット名AWS_ACCESS_KEY_IDAWS_ACCESS_KEY_SECRET
ワークフローの例:
名前: CNE Workspace Build on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up JDK 11 uses: actions/setup-java@v2 with: java-version: '11' distribution: 'adopt' - name: Build with Gradle run: cd workspace/ && ./gradlew build deploy - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_ACCESS_KEY_SECRET }} aws-region: ${{ secrets.AWS_REGION }} - name: カスタマイズを S3 バケットにアップロードします run: | aws s3 cp \ --recursive \ --region ${{ secrets.AWS_REGION }} \ workspace/bundles/osgi/ \ s3://${{ secrets.AWS_S3_BUCKET_NAME }}/workspace_build_${{ github.run_number }}/osgi/ -
GitOpsでオーバーレイを有効にする。
環境固有の
liferay.yaml(liferay/projects/<projectId>/environments/<environmentId>/liferay.yaml) で、アップロードされたアーティファクトを使用するようにオーバーレイを設定します。liferay-default: overlay: copy: - from: "workspace_build_<build-number>/osgi/client-extensions/*" into: osgi/client-extensions enabled: trueヒントYAML の解析の問題を避けるため、パス から
を常に引用符で囲みます。たとえば、workspace_build_1/osgi/client-extensions/*のように記述します。変更内容をコミットして、GitOpsリポジトリにプッシュしてください。 Argo CDは環境を同期し、オーバーレイ構成を適用します。
注記各ビルドは、以前の成果物を上書きしないように、固有のフォルダを使用します。 オーバーレイは、initコンテナを介してPodの起動時に適用されます。 GitOpsを通じてオーバーレイ構成を管理する。
-
オーバーレイの展開状況を確認してください。
Liferayポッド内のinitコンテナログを確認してください。
kubectl logs liferay-default-0 -c liferay-overlay初期化コンテナは各ステップを JSON 行としてログに記録し、
rcloneを--use-json-logとともに呼び出します。そのため、コピー操作自体もこの 2 行の間に JSON でログに記録されます。 出力例:{"メッセージ": "\":s3,env_auth=true:my-deployment-overlay-acme-2225eb/workspace_build_1/osgi/client-extensions\" から \"/temp/osgi/client-extensions\"へコピーしています。"、 "スクリプト": "overlay-sync.sh"、 "重要度": "INFO"、 "タイムスタンプ": "2026-01-01T00:00:00Z"} ... {"メッセージ": "コピーが正常に完了しました。"、 "スクリプト": "overlay-sync.sh"、 "重要度": "INFO"、 "タイムスタンプ": "2026-01-01T00:00:01Z"}注記オーバーレイファイルは、ポッドの起動時に適用されます。 新しいオーバーレイコンテンツを適用するには、ポッドを再起動してください。