亚马逊AWS官方博客

EC2 Image Builder 现在支持构建和测试 macOS 映像



我很高兴地宣布 EC2 Image Builder 支持 macOS。除了对 Windows 和 Linux 的现有支持外,这项新功能还允许您为 macOS 工作负载创建和管理机器映像。

黄金映像也称为亚马逊机器映像 (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。

总体而言,主要有四个步骤。

  1. 我为每个要安装的工具定义一个组件。组件是一个 YAML 文档,它告诉 EC2 Image Builder 要安装什么应用程序以及如何安装。在此示例中,我创建了一个自定义组件来安装 Xcode。如果您想安装 Fastlane,可以创建第二个组件。我使用 ExecuteBash 操作来输入安装 Xcode 所需的 shell 命令。
  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,然后选择组件,最后选择创建组件

Image Builder - 创建组件

我选择了基本映像操作系统兼容操作系统版本。然后,我输入组件名称组件版本。我选择定义文档内容,将此 YAML 作为内容输入。

名称:InstallXCodeDocument
描述:此组件将下载并安装 Xcode。一定要先在笔记本电脑上运行 “xcodeinstall authenticate -s us-east-1”。
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: InstallXcode
        action: ExecuteBash
        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: validate
    steps:
      - name: TestXcode
        action: ExecuteBash
        inputs:
          commands:
            -  xcodebuild -version && xcode-select -p   

我使用自己编写的工具从命令行下载并安装 Xcode。xcodeinstallAWS Secrets Manager 集成,可安全地存储身份验证 Web 令牌。在运行管道之前,我使用 xcodeinstall authenticate-s us-east-1 命令在笔记本电脑上进行身份验证。此命令启动与 Apple 服务器的会话,并将会话令牌存储在 Secrets Manager 中。xcodeinstall 在映像创建管道中使用此令牌下载 Xcode。

在将 xcodeinstall 与 Secrets Manager 结合使用时,您必须授予管道访问密钥的权限。下面是我添加到 EC2 实例所附角色中的策略文档,该实例由 EC2 Image Builder 使用(在以下基础设施配置中)。

{
	"Sid": "xcodeinstall",
	"Effect": "Allow",
	"Action": [
            "secretsmanager:GetSecretValue"
            "secretsmanager:PutSecretValue"
        ],
	"Resource": "arn:aws:secretsmanager:us-east-1:<YOUR ACCOUNT ID>:secret:xcodeinstall*"
}

要在本地测试和调试这些组件,无需等待很长时间才能启动和回收 EC2 Mac 实例,您可以使用 AWS Task Orchestrator and Executor (AWSTOE) 命令

第 2 步:创建配方
下一步是创建配方。在控制台上,我选择映像配方创建映像配方

我选择 macOS 作为基础映像操作系统。我选择 macOS Sonoma ARM64 作为映像名称

构建组件部分中,我选择了在第 1 步中刚刚创建的 Xcode 16 组件。

最后,我确保容量足够大,可以存储操作系统、Xcode 和我的版本。我通常选择 500 Gb 的 gp3 容量。

Image Builder - 创建配方

第 3 步和第 4 步:创建管道(和基础架构配置)
EC2 Image Builder 页面上,我选择映像管道创建映像管道。我为管道命名,然后选择构建计划。在本演示中,我选择手动触发器。Image Builder - 创建管道 1

然后,我选择刚刚创建的配方(Sonoma-Xcode)。

Image Builder - 创建管道 2

我为定义映像创建过程选择了默认工作流(为简洁起见未显示)。

我创建或选择现有基础架构配置。在构建 macOS 映像的背景下,您必须先分配 Amazon EC2 专属主机。我在这里选择 EC2 Image Builder 用于创建 AMI 的实例类型。我还可以选择我的虚拟私有云 (VPC)、安全组、AWS Identity and Access Management (IAM) 角色,以及在准备映像、密钥对时所需的权限和在启动 EC2 实例时通常选择的所有参数。

Image Builder - 创建管道 4

最后,我选择要将输出的 AMI 发送到哪些地方。默认情况下,它会保留在我的账户上。但我也可以共享或复制到其他账户。

Image Builder-创建管道 5

运行管道
现在我已经准备好运行管道了。我选择映像管道,然后选择刚刚创建的管道(Sonoma-Xcode)。我从操作菜单选择运行管道

Image Builder - 启动管道

我可以观察来自 Amazon CloudWatch 的进度和详细日志。

一段时间后,AMI 即可创建并投入使用。

Image Builder - AMI 构建成功

测试我的 AMI
为了完成演示,我使用刚刚创建的 AMI 启动一个 EC2 Mac 实例(请记住先分配一个专属主机,或重复使用用于 EC2 Image Builder 的专属主机)。

实例启动后,我使用 Secure Shell (SSH) 与之连接,并验证 Xcode 是否已正确安装。

Image Builder - 连接新的 AMI

定价和可用性
支持 macOS 的 EC2 Image Builder 现已在所有提供 EC2 Mac 实例的 AWS 区域推出:美国东部(俄亥俄州、弗吉尼亚北部)、美国西部(俄勒冈州)、亚太地区(孟买、首尔、新加坡、悉尼、东京)和欧洲(法兰克福、爱尔兰、伦敦、斯德哥尔摩)(并非所有 Mac 实例类型在所有区域都可用)。

它不会额外收费,您只需支付管道执行期间所使用的资源费用,也就是 EC2 Mac 专属主机的分配时间,最低消费时长为24小时。

EC2 Image Builder 中对 macOS 支持的预览允许您整合映像管道、自动化黄金映像创建流程,并利用 AWS 云端集成的优势。随着 EC2 Mac 平台不断扩展,增加了更多的实例类型,这项新功能使 EC2 Image Builder 成为跨 Windows、Linux 和 macOS 进行映像管理的综合解决方案。

立即创建您的第一个管道!

— seb


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。