# アップデート手順

Fargate環境のアップデートについて説明します。

AWS CloudFormationが提供するスタックの更新を利用します。

## 事前準備

HULFT10 for Container Servicesのアップデートにあたって、事前に確認しておく情報があります。

### アップデートユーザーの権限設定

アップデートには導入ユーザーと同じ権限が必要です。

詳細は、「AWS Marketplaceからの環境構築」-「事前準備」の「導入ユーザーの権限設定（必須）」を参照してください。

### アップデートに必要な情報の確認

CloudFormationスタックの更新に必要な情報を、アップデート作業の前に取得しておきます。

アップデート作業の流れは以下のとおりです。

図2.7 アップデート作業の流れ

### 転送コンテナおよび管理コンテナの情報取得

転送コンテナおよび管理コンテナを停止するために必要な情報を取得します。

1. 作成済みのHULFT10 for Container ServicesのCloudFormation NewDeployTemplate1の実行スタックのリソースタブをクリックします。

2. 論理IDがECSSummary1の行の物理IDをクリックします。

   ECSSummary1でネストされたスタックのリソースの画面が開きます。

3. リソースタブをクリックして、論理IDがFargateECSの行の物理IDをクリックします。

   FargateECSでネストされたスタックの情報画面が開きます。

4. リソースタブをクリックしてFargateEcsCluster、FargateEcsServiceForControl、およびFargateEcsServiceForTransferの値を取得します。

### スタック更新用テンプレートURLの取得

Marketplaceから、スタックに対応した以下のアップデート用テンプレートのAmazon S3 URLを取得します。

- UpdateTemplate1

  URLリンクはDeployment TemplateのUpdateTemplate1として記載します。

  注意

  - アップデートするHULFT10 for Container Servicesの構成はMarketplace上のオプションで選択します。

    選択しているVersionおよびDelivery optionが導入予定の構成になっていることを確認してください。

  - シングルAZ構成からマルチAZ構成へのスタックの更新は、同じバージョンでのみ実行できます。

    シングルAZ構成から上位バージョンのマルチAZ構成に変更を行う場合は、以下の手順でスタックを更新してください。

    1. 上位バージョンのシングルAZ構成のテンプレートでスタックを更新

    2. 手順1. と同じバージョンのマルチAZ構成のテンプレートでスタックを更新

### アップデートで追加されたパラメーターの確認

バージョンアップで追加された機能を使用する場合は、追加されたパラメーターを確認し用意しておきます。

詳細は、「バージョンごとのスタック更新時の変更点」を参照してください。

### データベーススナップショットの作成

HULFT10 for Container Servicesをアップデートすると、データベースもアップデートされます。

アップデートが失敗した場合にデータベースをロールバックできるように、アップデートする前にデータベースのスナップショットを作成してください。

スナップショットの作成の詳細は、以下のAWS公式ドキュメントを参照してください。

「DB クラスタースナップショットの作成」（2024年12月1日）

### バージョン特有の事前準備

一部バージョンからのアップデートでは、スタック更新前に追加の事前準備が必要になります。

対象のバージョンと必要な操作の詳細は以下を参照してください。

- Ver.10.2.0未満のバージョンからのアップデートを実施する場合の事前準備

- Ver.10.5.0未満のバージョンからのアップデートを実施する場合の事前準備

## スタックの更新

作成済みのHULFT10 for Container ServicesのNewDeployTemplate1スタックに対し、アップデート先のUpdateTemplate1を指定してスタックを更新します。

スタックの更新でFargate環境をアップデートする手順の概要は以下のとおりです。

1. 転送コンテナの停止

   事前準備で取得した情報を利用してCLIまたはECSのページでサービスの停止を行います。

   CLIで転送コンテナを停止するコマンドの例

       aws ecs update-service --cluster FargateEcsCluster --service FargateEcsServiceForTransfer --desired-count 0

   このコマンドの--clusterには、事前準備で取得したFargateEcsClusterの値を指定します。

   このコマンドの--serviceには、事前準備で取得したFargateEcsServiceForTransferの値を指定します。

2. 管理コンテナの停止

   事前準備で取得した情報を利用してCLIまたはECSのページでサービスの停止を行います。

   CLIで管理コンテナを停止するコマンドの例

       aws ecs update-service --cluster FargateEcsCluster --service FargateEcsServiceForControl --desired-count 0

   このコマンドの--clusterには、事前準備で取得したFargateEcsClusterの値を指定します。

   このコマンドの--serviceには、事前準備で取得したFargateEcsServiceForControlの値を指定します。

3. CloudFormation Template1のスタックを更新します。

   1. 作成済みのHULFT10 for Container ServicesのCloudFormation NewDeployTemplate1の実行スタックを開きます。

   2. 更新ボタンからスタックの更新画面を開きます。

   3. 既存のテンプレートを置換を選択し、テンプレートソースに「スタック更新用テンプレートURLの取得」で取得したUpdateTemplate1のAmazon S3 URLを指定します。

   4. レビュー画面で変更セットの内容を確認後、チェックを付けて実行します。

   5. およそ5分で実行が完了します。スタックの情報－ステータスがUPDATE_COMPLETEになっていることを確認します。

      注意

      スタックの更新時に選択できるスタックの失敗オプション－プロビジョニング失敗時の動作 は“すべてのスタックリソースをロールバックする”を選択してください。

      “正常にプロビジョニングされたリソースの保持”を選択するとタスク定義の更新に失敗しエラーとなります。

   スタックの更新の詳細は、以下のAWS 公式ドキュメント を参照してください。

   「AWS CloudFormationスタックの更新」（2024年12月1日）

## Ver.10.2.0未満のバージョンからのアップデートを実施する場合の事前準備

### Amazon Aurora MySQLエンジンバージョンの取得

HULFT10 for Container Services Ver.10.1.0からのアップデートを行う場合、データベースのエンジンバージョンDBEngineVersionの指定は必須となります。

アップデート先として選択できるのは、8.0.mysql_aurora.3.04.3、または特定のAmazon Aurora MySQLエンジンバージョンのみです。

特定のAmazon Aurora MySQLエンジンバージョンを取得するコマンドは以下のとおりです。

    aws rds describe-db-engine-versions --engine-version 8.0.mysql_aurora.3.04.3 --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

    8.0.mysql_aurora.3.06.1
    8.0.mysql_aurora.3.07.1

以上の事前準備が完了したら、次に「Ver.10.5.0未満のバージョンからのアップデートを実施する場合の事前準備」に進んでください。

## Ver.10.5.0未満のバージョンからのアップデートを実施する場合の事前準備

Ver.10.5.0未満のバージョンからVer.10.5.0以降のバージョンにアップデートを行う場合、事前にスタックリソースのリネームを実施する必要があります。

スタックリソースのリネームは以下の手順で実施します。

1. リネーム対象スタックIDの取得

2. スタックリファクタリング設定ファイルの作成

3. スタックリファクタリングの実行

4. 実行結果の確認

### リネーム対象スタックIDの取得

以下の手順で必要なスタックIDを2つ取得します。

1. 作成済みのHULFT10 for Container ServicesのCloudFormation NewDeployTemplate1の実行スタックのリソースタブをクリックします。

2. 論理IDがNetwork1の行の物理IDをクリックします。

   「Network1」でネストされたスタックのリソースの画面が開きます。

3. リソースタブをクリックして、論理IDがFargateSecurityGroupの行の物理IDをクリックします。

   「FargateSecurityGroup」でネストされたスタックの詳細画面が開きます。

4. 1つ目のスタックIDを取得します。

5. 手順2.に戻り、リソースタブをクリックして、論理IDがFargateVPCの行の物理IDをクリックします。

   FargateVPCでネストされたスタックの詳細画面が開きます。

6. 2つ目のスタックIDを取得します。

### スタックリファクタリング設定ファイルの作成

以下の定義ファイルをrefactor1.jsonとしてローカルに作成します。

<FargateSecurityGroupのスタックID>は「リネーム対象スタックIDの取得」の手順4.で取得した1つ目のスタックIDに置き換えてください。

定義ファイルの内容は、導入時に指定したパラメーター「SourceIP1」、「SourceIP2」、「SourceIP3」の設定により変わります。

作成済みのHULFT10 for Container ServicesのCloudFormation NewDeployTemplate1の実行スタックのパラメータタブを確認してください。

「SourceIP1」のみ指定している場合

    [
        {
            "Source": {
                "StackName": "<FargateSecurityGroupのスタックID>",
                "LogicalResourceId": "FargateSGForBastionSrever"
            },
            "Destination": {
                "StackName": "<FargateSecurityGroupのスタックID>",
                "LogicalResourceId": "FargateSGForBastionServer"
            }
        }
    ]

「SourceIP1」および「SourceIP2」のみ指定している場合

    [
        {
            "Source": {
                "StackName": "<FargateSecurityGroupのスタックID>",
                "LogicalResourceId": "FargateSGForBastionSrever"
            },
            "Destination": {
                "StackName": "<FargateSecurityGroupのスタックID>",
                "LogicalResourceId": "FargateSGForBastionServer"
            }
        },
        {
            "Source": {
                "StackName": "<FargateSecurityGroupのスタックID>",
                "LogicalResourceId": "FargateSGForBastionSreverIngress3"
            },
            "Destination": {
                "StackName": "<FargateSecurityGroupのスタックID>",
                "LogicalResourceId": "FargateSGForBastionServerIngress3"
            }
        }
    ]

「SourceIP1」、「SourceIP2」および「SourceIP3」を指定している場合

    [
        {
            "Source": {
                "StackName": "<FargateSecurityGroupのスタックID>",
                "LogicalResourceId": "FargateSGForBastionSrever"
            },
            "Destination": {
                "StackName": "<FargateSecurityGroupのスタックID>",
                "LogicalResourceId": "FargateSGForBastionServer"
            }
        },
        {
            "Source": {
                "StackName": "<FargateSecurityGroupのスタックID>",
                "LogicalResourceId": "FargateSGForBastionSreverIngress3"
            },
            "Destination": {
                "StackName": "<FargateSecurityGroupのスタックID>",
                "LogicalResourceId": "FargateSGForBastionServerIngress3"
            }
        },
        {
            "Source": {
                "StackName": "<FargateSecurityGroupのスタックID>",
                "LogicalResourceId": "FargateSGForBastionSreverIngress4"
            },
            "Destination": {
                "StackName": "<FargateSecurityGroupのスタックID>",
                "LogicalResourceId": "FargateSGForBastionServerIngress4"
            }
        }
    ]

以下の定義ファイルをrefactor2.jsonとしてローカルに作成します。

<FargateVPCのスタックID>は「リネーム対象スタックIDの取得」の手順6.で取得した2つ目のスタックIDに置き換えてください。

    [
        {
            "Source": {
                "StackName": "<FargateVPCのスタックID>",
                "LogicalResourceId": "PublicSubnetForBastionSrever"
            },
            "Destination": {
                "StackName": "<FargateVPCのスタックID>",
                "LogicalResourceId": "PublicSubnetForBastionServer"
            }
        }
    ]

### スタックリファクタリングの実行

以下の手順でCloudFormationのスタックリファクタリング機能を実施し、リソース名をリネームします。

1. スタックリファクターの作成を実施し、リファクターIDを取得します。

   CLIでスタックリファクターを作成するコマンドの例

       aws cloudformation create-stack-refactor --stack-definitions StackName=<FargateSecurityGroupのスタックID>,TemplateURL=https://hulft-marketplace-resources.s3.amazonaws.com/CFn_10.5.0_20251003/UpdateTemplates/refactoring/security-group.yaml --no-enable-stack-creation --resource-mappings file://refactor1.json

       aws cloudformation create-stack-refactor --stack-definitions StackName=<FargateVPCのスタックID>,TemplateURL=https://hulft-marketplace-resources.s3.amazonaws.com/CFn_10.5.0_20251003/UpdateTemplates/refactoring/vpc.yaml --no-enable-stack-creation --resource-mappings file://refactor2.json

   コマンド応答に含まれるStackRefactorIdは後続の手順で使用するため保管してください。

2. スタックリファクターの状態確認を実施します。

   CLIでスタックリファクターの状態を取得するコマンドの例

       aws cloudformation describe-stack-refactor --stack-refactor-id <手順1.の応答に含まれる“StackRefactorId”>

   手順1.で取得した2つのStackRefactorId両方に対して実施してください。

   レスポンスの「Status」が“CREATE_COMPLETE”であることを確認してください。

   正常に作成できていない場合は、設定値の見直しを行い、再度手順1. を実施してください。

3. スタックリファクターを実行します。

   CLIでスタックリファクターを実行するコマンドの例

       aws cloudformation execute-stack-refactor --stack-refactor-id <手順1.の応答に含まれる“StackRefactorId”>

   手順1.で取得した2つのStackRefactorId両方に対して実施してください。

### 実行結果の確認

1. 作成済みのHULFT10 for Container ServicesのCloudFormation NewDeployTemplate1の実行スタックのリソースタブをクリックします。

2. 論理IDがNetwork1の行の物理IDをクリックします。

   Network1でネストされたスタックのリソースの画面が開きます。

3. リソースタブをクリックして、論理IDがFargateSecurityGroupの行の物理IDをクリックします。

   「FargateSecurityGroup」でネストされたスタックの詳細画面が開きます。

4. リソースタブをクリックして、論理IDがFargateSGForBastionServerのリソースがあることを確認します。

5. 手順2.に戻り、リソースタブをクリックして、論理IDがFargateVPCの行の物理IDをクリックします。

   「FargateVPC」でネストされたスタックの詳細画面が開きます。

6. リソースタブをクリックして、論理IDがPublicSubnetForBastionServerのリソースがあることを確認します。