Amazon Web Services 한국 블로그

Amazon EC2 Image Builder, macOS 이미지 빌드 및 테스트 지원

Amazon EC2 Image Builder에서 macOS를 지원한다는 소식을 발표하게 되어 매우 기쁩니다. 이 새로운 기능을 사용하면 Windows 및 Linux에 대한 기존 지원 외에도 macOS 워크로드에 대한 머신 이미지를 생성하고 관리할 수 있습니다.

골든 이미지는 Amazon Machine Image(AMI)라고도 하는 부팅 가능한 디스크 이미지로, 워크로드에 필요한 운영 체제 및 모든 도구와 함께 사전 설치되어 있습니다. 지속적 통합 및 지속적 배포(CI/CD) 파이프라인의 경우 골든 이미지에는 특정 버전의 운영 체제(macOS)와 애플리케이션(Xcode, Fastlane 등)을 빌드하고 테스트하는 데 필요한 모든 개발 도구 및 라이브러리가 포함되어 있을 가능성이 큽니다.

macOS의 골든 이미지를 빌드하기 위한 파이프라인을 개발하고 수동으로 관리하는 것은 시간이 많이 걸리며 재능 있는 리소스를 다른 작업에 집중하게 합니다. Linux 또는 Windows 이미지를 빌드하기 위한 기존 파이프라인이 있는 경우 macOS 이미지를 만들 때 다른 도구를 사용해야 하므로 워크플로가 중단됩니다.

이러한 이유로 많은 사용자들이 EC2 Image Builder를 사용하여 macOS 이미지를 관리할 수 있는 기능을 요청해 왔습니다. 사용자들은 운영 체제 전반의 이미지 파이프라인을 통합하고 EC2 Image Builder가 제공하는 자동화 및 클라우드 중심 통합을 활용하고자 합니다.

macOS 지원을 EC2 Image Builder에 추가함으로써 이제 이미지 관리 프로세스를 간소화하고 macOS 이미지를 유지 관리하는 데 따르는 운영 오버헤드를 줄일 수 있습니다. EC2 Image Builder는 대규모 기본 이미지의 테스트, 버전 관리 및 검증을 처리하므로 선호하는 macOS 버전을 유지 관리하는 데 드는 비용을 절감할 수 있습니다.

작동 방식
Xcode 16을 사용하여 macOS AMI를 생성하기 위한 파이프라인을 만들어 보겠습니다. 비슷한 절차를 따라 AMI에 Fastlane을 설치할 수 있습니다.

개략적으로 보면 네 가지 주요 단계가 있습니다.

  1. 설치하려는 각 도구에 대한 구성 요소를 정의합니다. 구성 요소는 EC2 Image Builder에 어떤 애플리케이션을 어떻게 설치해야 하는지 알려주는 YAML 문서입니다. 이 예제에서는 Xcode를 설치하기 위한 사용자 지정 구성 요소를 만듭니다. Fastlane을 설치하려면 두 번째 구성 요소를 생성해야 합니다. ExecuteBash 작업을 사용하여 Xcode를 설치하는 데 필요한 쉘 명령을 입력합니다.
  2. 레시피를 정의합니다. 레시피는 기본 이미지에서 시작하여 기본 이미지를 기반으로 설치하려는 구성 요소를 나열합니다.
  3. 이미지를 빌드하는 데 사용할 인프라 구성을 정의합니다. 이는 이미지를 빌드하기 위한 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 풀을 정의합니다. 제 경우에는 계정에 EC2 Mac 전용 호스트를 할당하고 인프라 구성에서 호스트를 참조합니다.
  4. 해당 레시피와 이미지 워크플로를 사용하여 인프라에서 실행할 파이프라인과 일정을 만듭니다. 출력 AMI를 테스트하고 선택한 대상(내 계정 또는 다른 계정)에 전송합니다.

이 작업은 생각보다 훨씬 쉽습니다. AWS Management Console의 단계를 보여드리겠습니다. 또한 AWS Command Line Interface(AWS CLI)로 EC2 Image Builder를 구성하거나 AWS SDK 중 하나를 사용하여 코드를 작성할 수 있습니다.

1단계: 구성 요소 만들기
콘솔을 열고 EC2 Image Builder를 선택한 다음 구성 요소, 마지막으로 구성 요소 생성을 선택합니다.

Image Builder - 구성 요소 만들기

기본 이미지 운영 체제호환 가능한 OS 버전을 선택합니다. 그런 다음 구성 요소 이름구성 요소 버전을 입력합니다. 문서 콘텐츠 정의를 선택하고 이 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와 통합되어 인증 웹 토큰을 안전하게 저장합니다. 파이프라인을 실행하기 전에 노트북에서 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:<YOUR ACCOUNT ID>:secret:xcodeinstall*"
}

EC2 Mac 인스턴스를 시작하고 재활용하는 데 긴 주기를 기다릴 필요 없이 이러한 구성 요소를 로컬에서 테스트하고 디버그하려면 AWS Task Orchestrator 및 Executor(AWSTOE) 명령을 사용할 수 있습니다.

2단계: 레시피 만들기
다음 단계는 레시피를 만드는 것입니다. 콘솔에서 이미지 레시피이미지 레시피 생성을 선택합니다.

macOS를 기본 이미지 운영 체제로 선택합니다. 이미지 이름으로 macOS Sonoma ARM64를 선택합니다.

빌드 구성 요소 섹션에서 1단계에서 방금 만든 Xcode 16 구성 요소를 선택합니다.

마지막으로 운영 체제, Xcode 및 빌드를 저장할 수 있을 만큼 볼륨이 충분히 큰지 확인합니다. 저는 보통 500Gb gp3 볼륨을 선택합니다.

Image Builder - 레시피 만들기

3단계 및 4단계: 파이프라인(및 인프라 구성) 생성
EC2 Image Builder 페이지에서 이미지 파이프라인을 선택하고 이미지 파이프라인 생성을 선택합니다. 파이프라인에 이름을 지정하고 빌드 일정을 선택합니다. 이 데모에서는 수동 트리거를 선택합니다.Image Builder - 파이프라인 생성 1

그런 다음 방금 만든 레시피(Sonoma-Xcode)를 선택합니다.

Image Builder - 파이프라인 생성 2

이미지 생성 프로세스 정의에서 기본 워크플로를 선택했습니다(간략하게 표시하지 않음).

기존 인프라 구성을 만들거나 선택합니다. macOS 이미지를 빌드할 때는 먼저 Amazon EC2 전용 호스트를 할당해야 합니다. 여기서는 EC2 Image Builder가 AMI를 생성하는 데 사용할 인스턴스 유형을 선택합니다. 또한 이미지, 키 페어 및 EC2 인스턴스를 시작할 때 일반적으로 선택하는 모든 파라미터를 준비하는 동안 필요한 권한을 가진 가상 프라이빗 클라우드(VPC), 보안 그룹, AWS Identity and Access Management(IAM) 역할을 옵션으로 선택할 수도 있습니다.

Image Builder - 파이프라인 생성 4

마지막으로 출력 AMI를 배포할 위치를 선택합니다. 기본적으로 내 계정에는 그대로 남아 있습니다. 하지만 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