カスタムイメージのセキュリティを確保するには、できるだけ早く更新することが重要です。これには、最新のオペレーティングシステム パッチのインストール、ミドルウェアのアップグレード、イメージへの最新バージョンのサードパーティ製ソフトウェアのインストールが含まれます。CloudOps Orchestration Service (OOS) によって提供されるパブリック テンプレートを使用して、イメージを自動的に更新できます。これにより、O&M コストを削減できます。
ソリューション
OOS は、カスタムイメージを更新するためのパブリック テンプレートを提供しています。テンプレートに基づいて実行を作成すると、OOS はイメージを自動的に更新します。OOS を使用してカスタムイメージを更新するには、更新するソースイメージを選択し、Linux インスタンスイメージを更新するためのシェルコマンドなどの必須パラメーターを指定し、[実行の作成] をクリックするだけです。OOS を使用したイメージの更新には、追加のツールは必要ありません。さらに、Elastic Compute Service (ECS) インスタンスを手動で作成、ログイン、編集、リリースしたり、環境変数や AccessKey ペアを設定したりする必要はありません。OOS では、カスタム テンプレートを作成して、イメージの自動更新をスケジュールしたり、複数のイメージを一括で更新したりすることもできます。
カスタムイメージを作成および更新するさまざまな方法の比較
方法 | 要件 | 利点 | 欠点 |
OOS を使用してカスタムイメージを作成および更新する | OOS をアクティブ化するだけで済みます。他のツールは必要ありません。 |
| なし。 |
| 他のツールは必要ありません。 | この方法は、ECS コンソールで簡単かつ便利な操作を提供します。 |
|
Packer を使用してカスタムイメージを作成する | Packer をインストールする必要があります。 | Packer は、さまざまなクラウド サービス プロバイダーでサポートされているオープンソース ツールです。 |
|
手順
CloudOps Orchestration Service コンソールにログインします。
左側のナビゲーションウィンドウで、
を選択します。[イメージの更新] セクションで、[実行の作成] をクリックします。
[タスクの作成] ページで、[基本情報] ステップのパラメーターを構成します。次に、[次のステップ: パラメーター設定] をクリックします。
パラメーター設定ステップで、パラメーターを構成します。
[ソースイメージの選択] セクションで、更新するソースイメージを指定します。
[イメージの設定] セクションで、更新後の新しいイメージの名前とタグを指定します。
[ECS インスタンスの設定] セクションで、イメージの更新に使用する一時的な ECS インスタンスのタイプと仕様を指定します。
[イメージの更新設定] セクションで、更新方法、コマンドタイプ、およびコマンドスクリプトを指定します。
[制御オプション] セクションで、[現在のアカウントの既存の権限を使用] がデフォルトで選択されています。これは、OOS が現在のアカウントに付与されている権限を使用することを示します。RAM ロールが指定されている場合、OOS はこのロールを引き受けて O&M タスクを実行します。
[次のステップ: OK] をクリックします。OK ステップで、高リスクの操作を確認し、[作成] をクリックします。
左側のナビゲーションウィンドウで、
を選択します。[タスク実行管理] ページで、作成した実行を見つけます。実行が「実行中」状態の場合、イメージの更新が進行中です。実行が成功状態になるまで待ちます。これは、イメージが更新されたことを示します。実行の詳細ページで新しいイメージの ID を確認できます。
イメージの更新プロセスを表示するには、作成した実行の [アクション] 列にある [詳細] をクリックします。[実行ログ] タブで、実行の進捗状況とステータスを確認できます。
付録 1: パブリック テンプレートとロジック
パブリック テンプレート ACS-ECS-UpdateImage には、次のコードが含まれています。
FormatVersion: OOS-2019-06-01
Description: Updates an existing ECS image via ECS Cloud Assistant then creates a
ECS image.
Parameters:
sourceImageId:
Description: The image ID for the ECS instances, centos_6_10_64_20G_alibase_20190326.vhd,
for example.
Type: String
AllowedPattern: '[A-Za-z0-9_\-\.]*'
MinLength: 1
MaxLength: 40
instanceType:
Description: The instance type for the ECS instances, ecs.g5.large, for example.
Type: String
AllowedPattern: ecs\.[A-Za-z0-9\.\-]*
MinLength: 1
MaxLength: 30
securityGroupId:
Description: The security group ID for the ECS instances, sg-xxxxxxxxxxxxxxxxxxxx,
for example.
Type: String
AllowedPattern: sg-[A-Za-z0-9]*
MinLength: 1
MaxLength: 30
vSwitchId:
Description: The virtual switch ID for the ECS instances, vsw-xxxxxxxxxxxxxxxxxxxx,
for example.
Type: String
AllowedPattern: vsw-[A-Za-z0-9]*
MinLength: 1
MaxLength: 30
commandContent:
Description: The content of command.
Type: String
commandType:
Description: The type of command to run in ECS instance.
Type: String
AllowedValues:
- RunBatScript
- RunPowerShellScript
- RunShellScript
MinLength: 1
MaxLength: 30
targetImageName:
Description: The name of image.
Type: String
AllowedPattern: '[A-Za-z0-9\-_]*'
MinLength: 1
MaxLength: 30
OOSAssumeRole:
Description: The RAM role to be assumed by OOS.
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: checkNewImageName
Action: ACS::CheckFor
Description: Check image name is available.
Properties:
Service: ECS
API: DescribeImages
Parameters:
ImageName: '{{ targetImageName }}'
DesiredValues:
- 0
PropertySelector: TotalCount
- Name: runInstances
Action: ACS::ECS::RunInstances
Description: Create a ECS instance for the cloud assistant.
Properties:
imageId: '{{ sourceImageId }}'
instanceType: '{{ instanceType }}'
securityGroupId: '{{ securityGroupId }}'
vSwitchId: '{{ vSwitchId }}'
Outputs:
instanceId:
ValueSelector: instanceIds[0]
Type: String
- Name: installCloudAssistant
Action: ACS::ECS::InstallCloudAssistant
Description: Install cloud assostant for ECS instance.
OnError: deleteInstance
Properties:
instanceId: '{{ runInstances.instanceId }}'
- Name: runCommand
Action: ACS::ECS::RunCommand
Description: Run command on ECS instance.
OnError: deleteInstance
Properties:
commandContent: '{{ commandContent }}'
commandType: '{{ commandType }}'
instanceId: '{{ runInstances.instanceId }}'
- Name: stopInstance
Action: ACS::ECS::StopInstance
Description: Stops the ECS instance by the instance ID.
Properties:
instanceId: '{{ runInstances.instanceId }}'
- Name: createImage
Action: ACS::ECS::CreateImage
Description: Create image with the specified image name and instance ID.
OnError: deleteInstance
Properties:
imageName: '{{ targetImageName }}'
instanceId: '{{ runInstances.instanceId }}'
Outputs:
imageId:
ValueSelector: imageId
Type: String
- Name: deleteInstance
Action: ACS::ExecuteAPI
Description: Deletes the ECS instance by the instance ID.
Properties:
Service: ECS
API: DeleteInstance
Risk: Normal
Parameters:
InstanceId: '{{ runInstances.instanceId }}'
Force: true
Outputs:
imageId:
Type: String
Value: '{{ createImage.imageId }}'
テンプレートは、次のタスクを順番に実行します。
新しいイメージの名前が有効かどうかを確認します。
一時的な ECS インスタンスを作成して実行します。インスタンスは、指定したパラメーターに基づいて作成されます。これは、インスタンスで使用されるイメージが更新されるソースイメージであり、インスタンスの属性が指定されたパラメーターに基づいて定義されていることを示します。
一時的な ECS インスタンスに クラウドアシスタント クライアントがインストールされていない場合はインストールします。
一時的な ECS インスタンスでイメージ更新用の クラウドアシスタント コマンドを実行し、コマンドが実行されるまで待ちます。
一時的な ECS インスタンスを停止します。
一時的な ECS インスタンスのイメージを作成し、作成が完了するまで待ちます。
一時的な ECS インスタンスをリリースします。