コンテンツにスキップ

Active/Standby#

設定#

既存のプロジェクトをActive/Standbyに対応させるためには、Lagoon APIを使用してプロジェクト設定をいくつか設定する必要があります。

  • productionEnvirommentは、現在アクティブな環境のブランチ名に設定する必要があります。
  • standbyProductionEnvironmentは、現在スタンバイ中の環境のブランチ名に設定する必要があります。
プロジェクト設定の更新
mutation updateProject {
  updateProject(input:{
    id:1234
    patch:{
      productionEnvironment:"production-brancha"
      standbyProductionEnvironment:"production-branchb"
    }
  }){
    standbyProductionEnvironment
    name
    productionEnvironment
  }
}

.lagoon.yml - production_routes#

.lagoon.ymlファイルでプロジェクトをActive/Standbyに設定するためには、active環境にアタッチしたいルートとstandby環境にアタッチしたいルートをproduction_routesセクションに設定する必要があります。Active/Standbyの切り替え時には、これらのルートは2つの環境間で移行します。

production-branchaproduction-branchbの2つのproduction環境があり、現在アクティブなproduction環境がproduction-branchaである場合:

  • production_routes.active配下のルートはproduction-branchaに向かわせます。
  • production_routes.standby配下のルートproduction-branchbに向かわせます。

Active/Standbyの切り替え時には、ルートが入れ替わります:

  • production_routes.active配下のルートはproduction-branchbに向かわせます。
  • production_routes.standby配下のルートはproduction-branchaに向かわせます。
.lagoon.yml
production_routes:
  active:
    routes:
      - nginx:
        - example.com:
            tls-acme: 'false'
        - active.example.com:
            tls-acme: 'false'
  standby:
    routes:
      - nginx:
        - standby.example.com:
            tls-acme: 'false'

情報

environments..routesセクション配下にあるルートは、Active/Standbyの一部として移動されません。これらのルートは常に定義された環境にアタッチされます。Active/Standbyの切り替え中に特定のルートを移行する必用がある場合、それらを環境セクションから削除し、Activeまたは、Standbyルート固有のproduction_routes セクションに配置してください。 .lagoon.yml のルートについて詳しくはこちらを参照してください。

切り替えイベントのトリガー#

UI経由#

環境ルートの切り替えをトリガーするには、Lagoon UIでStandby環境を訪れ、Switch Active/Standby environmentsというラベルのボタンをクリックします。アクションを確認するように求められます。

確認すると、タスクページに移動し、切り替えの進捗状況を確認することができます。

API経由#

環境を切り替えるイベントをトリガーするには、次のGraphQL mutationを実行します。これにより、Lagoonがプロセスを開始します。

アクティブスタンバイスイッチ
mutation ActiveStandby {
  switchActiveStandby(
    input:{
      project:{
        name:"drupal-example"
      }
    }
  ){
    id
    remoteId
  }
}

切り替えイベントがトリガーされると、現在のアクティブ環境の tasks タブにタスクが作成されます。ここで切り替えの状態を確認することができます。

remoteId を使用して、switchActiveStandby mutationからタスクのステータスを確認することもできます。

タスクステータスの確認
query getTask {
  taskByRemoteId(id: "<remoteId>") {
    id
    name
    created
    started
    completed
    status
    logs
  }
}

drushエイリアス#

デフォルトでプロジェクトは以下のエイリアスが作成され、Active/Standbyが有効になっている場合に利用できます。

  • lagoon-production
  • lagoon-standby

lagoon-productionエイリアスはproductionEnvironmentとして定義されているサイトを指し、lagoon-standbyは常にstandbyProductionEnvironmentとして定義されているサイトを指します。

これらのエイリアスは、プロジェクトの更新によって設定を変更することができます。ただし、それらを変更すると、それらに依存するスクリプトを更新する必要があることに注意してください。

Drushエイリアスの更新
mutation updateProject {
  updateProject(input:{
    id:1234
    patch:{
      productionAlias:"custom-lagoon-production-alias"
      standbyAlias:"custom-lagoon-standby-alias"
    }
  }){
    productionAlias
    name
    standbyAlias
  }
}

Active/Standbyの無効化#

これら2つのブランチのうち、どちらを主な環境として進めていくかを決定する必要があります。その後、 それがアクティブなブランチとして設定されていることを確認してください。(例:production-branchb)

  1. この現在アクティブなブランチの.lagoon.ymlファイルで、production_routes.active.routesセクションからルートをenvironments.production-branchbセクションに移動します。これは、そのルートがproduction-branchb environmentにのみ関連付けられることを意味します。
  2. これが完了したら、.lagoon.ymlファイルから完全にproduction_routesセクションを削除し、production-branchb環境を再デプロイできます。
  3. もう1つのブランチであるproduction-branchaが必要ない場合は削除してもかまいません。
  4. Gitにブランチを保持する場合、混乱を避けるためにそのブランチの.lagoon.ymlからもproduction_routesを削除しておきましょう。このブランチは削除して再デプロイ(すべてのストレージとデータベースなどを消去)するまでproductionタイプとして残ります。
  5. プロジェクトがproduction-branchbproduction環境のみで、他のすべての環境がdevelopment環境である状態になったら、プロジェクトを更新してstandbyProductionEnvironmentを削除し、環境のActive/Standbyラベルを消去します。
アクティブ/スタンバイをオフにする
mutation updateProject {
  updateProject(input:{
    id:1234
    patch:{
      productionEnvironment:"production-branchb"
      standbyProductionEnvironment:""
    }
  }){
    standbyProductionEnvironment
    name
    productionEnvironment
  }
}

ノート#

Active/Standbyトリガーが実行されたとき、productionEnvironmentstandbyProductionEnvironmentsはLagoon API内で切り替わります。両方の環境はまだproduction環境タイプとして分類されています。productionEnvironmentはどちらがactiveとラベル付けされているかを決定するために使用します。環境タイプの違いについての詳細は、environment typesのドキュメントをご覧ください。

GraphQLを使って環境を取得する
query projectByName {
  projectByName(name:"drupal-example"){
    productionEnvironment
    standbyProductionEnvironment
  }
}

環境を切り替える前

環境クエリの結果
{
  "data": {
    "projectByName": {
      "productionEnvironment": "production-brancha",
      "standbyProductionEnvironment": "production-branchb"
    }
  }
}

環境を切り替えた後

環境クエリの結果
{
  "data": {
    "projectByName": {
      "productionEnvironment": "production-branchb",
      "standbyProductionEnvironment": "production-brancha"
    }
  }
}