Amazon Web Services ブログ

EC2 Image Builder が macOS イメージのビルドとテストをサポートするようになりました

EC2 Image Builder での macOS サポートを発表できることを嬉しく思います。この新機能により、Windows と Linux の既存のサポートに加えて、macOS ワークロード用のマシンイメージを作成および管理できます。

ゴールデンイメージは、Amazon マシンイメージ (AMI) とも呼ばれる起動可能なディスクイメージで、オペレーティングシステムとワークロードに必要なすべてのツールがあらかじめインストールされています。継続的インテグレーションと継続的デプロイ(CI/CD)パイプラインのコンテキストでは、ゴールデンイメージにはほとんどの場合、特定のバージョンのオペレーティングシステム(macOS)と、アプリケーションのビルドとテストに必要なすべての開発ツールとライブラリ(XcodeFastlane など)が含まれています。

macOS のゴールデンイメージを構築するためのパイプラインを開発して手動で管理するのは時間がかかり、有能なリソースを他のタスクからそらしてしまいます。また、Linux または Windows イメージを構築するための既存のパイプラインがある場合は、macOS イメージの作成にさまざまなツールを使用する必要があるため、ワークフローがばらばらになります。

このような理由から、EC2 Image Builder を使用して macOS イメージを管理できる機能を求める声が多く寄せられています。複数のオペレーティングシステム間でイメージパイプラインを統合し、EC2 Image Builder が提供する自動化とクラウド中心の統合を活用したい。

EC2 Image Builder に macOS サポートを追加することで、イメージ管理プロセスを合理化し、macOS イメージを維持するための運用オーバーヘッドを削減できるようになりました。EC2 Image Builder は、ベースイメージを大規模にテスト、バージョニング、検証するので、お好みの macOS バージョンを維持するためのコストを節約できます。

実際の動作を見てみましょう
Xcode 16 で macOS AMI を作成するためのパイプラインを作成しましょう。同様の手順で AMI に Fastlane をインストールできます。

高いレベルでは、4 つの主要なステップがあります。

  1. 私はインストールしたいツールごとにコンポーネントを定義します。コンポーネントは、インストールするアプリケーションとその方法を EC2 Image Builder に指示する YAML ドキュメントです。この例では、Xcode をインストールするためのカスタムコンポーネントを作成します。Fastlane をインストールする場合は、2 つ目のコンポーネントを作成します。ExecuteBash アクションを使用して、Xcode のインストールに必要なシェルコマンドを入力します。
  2. レシピを定義します。レシピはベースイメージから始まり、そこにインストールするコンポーネントが一覧表示されます。
  3. イメージを構築するために使用するインフラストラクチャ構成を定義します。これにより、イメージを構築するための Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのプールが定義されます。私の場合は、アカウントに EC2 Mac 専有ホストを割り当て、それをインフラストラクチャ設定で参照します。
  4. 与えられたレシピとイメージワークフローを使って、インフラストラクチャ上で実行するパイプラインとスケジュールを作成します。出力 AMI をテストし、選択した宛先(自分のアカウントまたは別のアカウント)に配信します

思ったよりずっと簡単です。AWS マネジメントコンソールの手順を紹介します。また、AWS コマンドラインインターフェイス (AWS CLI) を使用して EC2 Image Builder を設定したり、AWS SDK のいずれかを使用してコードを記述したりすることもできます。

ステップ 1: コンポーネントの作成
コンソールを開き、「EC2 Image Builder」、「コンポーネント」、「コンポーネントの作成」の順に選択します。

イメージビルダー - コンポーネントの作成

ベースイメージオペレーティングシステム互換性のある OS バージョンを選択します。次に、コンポーネント名コンポーネントバージョンを入力します。「ドキュメントコンテンツを定義」を選択し、この YAML をコンテンツとして入力します。

name: Xcode ドキュメントをインストール
description: Xcode をダウンロードしてインストールします。まず、必ずラップトップから「xcodeinstall authenticate -s us-east-1」を実行してください。
schemaVersion: 1.0

phases:
  - name: ビルド
    steps:
      - name: Xcode をインストール
        action: Bash を実行
        inputs:
          commands:
             - sudo -u ec2-user /opt/homebrew/bin/brew tap sebsto/macos
             - sudo -u ec2-user /opt/homebrew/bin/brew install xcodeinstall
             - sudo -u ec2-user /opt/homebrew/bin/xcodeinstall download -s us-east-1 --name "Xcode 16.xip"
             - sudo -u ec2-user /opt/homebrew/bin/xcodeinstall install --name "Xcode 16.xip"
  
  - name: 検証
    steps:
      - name: Xcode をテスト
        action: Bash を実行
        inputs:
          commands:
            -  xcodebuild -version && xcode-select -p   

私が書いたツールを使って、コマンドラインから Xcode をダウンロードしてインストールします。xcodeinstallAWS Secrets Manager と統合され、認証ウェブトークンを安全に保存します。パイプラインを実行する前に、ラップトップから xcodeinstall authenticate -s us-east-1 コマンドを使用して認証します。このコマンドは Apple サーバーとのセッションを開始し、セッショントークンを Secrets Manager に保存します。xcodeinstall は、イメージ作成パイプライン中にこのトークンを使用して Xcode をダウンロードします。

Secrets Manager で xcodeinstall を使用する場合、シークレットにアクセスするための権限をパイプラインに付与する必要があります。これは、EC2 Image Builder が使用する EC2 インスタンスにアタッチされたロールに追加したポリシードキュメントです (以下のインフラストラクチャ構成)。

{
	"Sid": "xcodeinstall",
	"Effect": "Allow",
	"Action": [
            "secretsmanager:GetSecretValue"
            "secretsmanager:PutSecretValue"
        ],
	"Resource": "arn:aws:secretsmanager:us-east-1:<アカウントID>:secret:xcodeinstall*"
}

EC2 Mac インスタンスの起動とリサイクルを長時間待たずに、これらのコンポーネントをローカルでテストおよびデバッグするには、AWS Task Orchestrator and Executor (AWSTOE) コマンドを使用できます。

ステップ 2: レシピの作成
次のステップはレシピを作成することです。コンソールで「イメージレシピ」と「イメージレシピの作成 」を選択します。

ベースイメージオペレーティングシステムとして macOS を選択します。イメージ名として macOS Sonoma ARM64 を選択します。

ビルドコンポーネント」セクションで、ステップ 1 で作成した Xcode 16 コンポーネントを選択します。

最後に、ボリュームがオペレーティングシステム、Xcode、およびビルドを保存するのに十分な大きさであることを確認します。私は通常 500 Gb gp3 ボリュームを選択します。

イメージビルダー - レシピの作成

ステップ 3 と 4: パイプライン (およびインフラストラクチャ構成) の作成
EC2 Image Builder ページで、「イメージパイプライン」と「イメージパイプラインの作成」を選択します。パイプラインに名前を付け、ビルドスケジュールを選択します。このデモでは、手動トリガーを選択します。イメージビルダー - パイプライン 1 の作成

次に、先ほど作成したレシピ (Sonoma-Xcode) を選択します。

イメージビルダー - パイプライン 2 の作成

イメージ作成プロセスの定義デフォルトワークフローを選択しました(簡潔にするために示していません)。

既存のインフラストラクチャ構成を作成または選択します。macOS イメージを構築する場合、最初に Amazon EC2 専有ホストを割り当てる必要があります。ここで、EC2 Image Builder が AMI の作成に使用するインスタンスタイプを選択します。仮想プライベートクラウド (VPC)、セキュリティグループ、AWS Identity and Access Management (IAM) ロール、イメージの準備中に必要な権限、キーペア、EC2 インスタンスの起動時に通常選択するすべてのパラメータをオプションで選択することもできます。

イメージビルダー - パイプライン 4 の作成

最後に、出力 AMI を配信する場所を選択します。デフォルトでは、私のアカウントに残ります。ただし、他のアカウントと共有またはコピーすることもできます。

イメージビルダー - パイプライン 5 の作成

パイプラインを実行
これで、パイプラインを実行する準備ができました。イメージパイプラインを選択し、次に作成したパイプライン(Sonoma-Xcode)を選択します。アクションメニューから「パイプラインを実行」を選択します。

イメージビルダー - パイプラインの起動

Amazon CloudWatch から進捗状況と詳細なログを確認できます。

しばらくすると、AMI が作成され、使用できる状態になります。

イメージビルダー - AMI のビルドが成功

AMI をテスト
デモを終了するために、先ほど作成した AMI で EC2 Mac インスタンスを起動します (最初に専有ホストを割り当てるか、EC2 Image Builder で使用したホストを再利用することを忘れないでください)。

インスタンスが起動したら、Secure Shell (SSH) を使用してインスタンスに接続し、Xcode が正しくインストールされていることを確認します。

イメージビルダー - 新しい AMI に接続

料金と利用可能なリージョン
EC2 Mac インスタンスが利用可能なすべての AWS リージョンで、EC2 Image Builder for macOS が利用可能になりました:米国東部 (オハイオ、バージニア北部)、米国西部 (オレゴン)、アジアパシフィック (ムンバイ、ソウル、シンガポール、シドニー、東京)、ヨーロッパ (フランクフルト、アイルランド、ロンドン、ストックホルム) (すべてのリージョンですべての Mac インスタンスタイプを利用できるわけではありません)。

追加コストは発生せず、パイプラインの実行中に使用されたリソース、つまり EC2 Mac 専有ホストが割り当てられた時間に対してのみ課金されます (最低 24 時間)。

EC2 Image Builder の macOS サポートのプレビューでは、イメージパイプラインを統合し、ゴールデンイメージ作成プロセスを自動化し、AWS でのクラウド重視の統合のメリットを活用できます。EC2 Mac プラットフォームがインスタンスタイプを増やして拡大し続けるにつれて、この新機能により EC2 Image Builder は Windows、Linux、macOS にわたるイメージ管理のための包括的なソリューションとしての地位を確立しています。

最初のパイプラインを今すぐ作成しましょう!

— seb

原文はこちらです。