AWS 기술 블로그

AWS CloudFormation을 활용하여 AWS Graviton에 Android Automotive OS 배포하기

이 글은 AWS for Industries 블로그에 게시된 글 (Deploy Android Automotive on AWS Graviton Using AWS CloudFormation)를 한국어로 번역 및 편집하였습니다.

AWS for Automotive는 자동차 산업에서 증가하는 소프트웨어 복잡성을 처리하고 비용 통제를 개선하며 제품 품질을 향상시키는 데 도움을 드리기 위해 소프트웨어 정의 차량(SDV) 솔루션을 제공합니다. AWS는 가상화된 자동차 하드웨어 및 소프트웨어 스택을 AWS에 배포할 수 있는 SDV 솔루션을 혁신적으로 개발하고 있으며, 여기에는 자동차 콕핏 소프트웨어에 사용되는 Google의 오픈 소스 Android Automotive Operating System(AAOS)을 AWS에 구축하고 배포하는 것이 포함됩니다.

이 블로그는 여러 부분으로 구성된 시리즈의 첫 번째로, AWS에서 AAOS 및 차량 내 인포테인먼트(in-vehicle infotainment, IVI) 애플리케이션을 위한 지속적 통합/지속적 배포(CI/CD) 파이프라인을 구축하는 데 중점을 둡니다. 이를 통해 더 많은 협업 워크플로우 기회를 창출하고 OEM과 공급업체의 로컬 물리적 하드웨어 의존도를 최소화할 수 있습니다.

첫 번째 부분에서는 AWS CloudFormation을 사용하여 OEM과 그들의 공급업체가 차량 사용자 경험 및 IVI 애플리케이션을 개발하기 위해 AWS Graviton 인스턴스에서 실행되는 AAOS 스택의 인프라를 자동화, 테스트, 배포하는 방법을 설명합니다. 이 블로그 시리즈의 후속 편에서는 다음과 같은 추가 주제를 다룰 예정입니다:

  1. AWS Cloud Development Kit (AWS CDK)AWS CodeBuild를 사용하여 AWS에서 AAOS를 배포하는 방법
  2. 잘 알려진 개발 도구를 사용하여 IVI 스택에 IVI 애플리케이션을 빌드하고 배포하는 CI/CD 파이프라인

최근 차량은 1억 개 이상의 코드 라인을 포함하고 있으며, 수백 개의 독립적인 전자 제어 장치(ECU)에 의해 실행됩니다. ECU는 하나 이상의 시스템 온 칩(SoC) 구성 요소와 마이크로컨트롤러 유닛(MCU)을 포함한 임베디드 시스템입니다. 자동차 소프트웨어 개발 팀에게는 비용을 절감하고 품질을 향상시켜야 한다는 압박이 점점 커지고 있으며, 이와 동시에 더 엄격한 안전 및 보안 규정도 적용되고 있습니다. 이러한 모든 요소들은 소프트웨어 개발 생명 주기(SDLC)에서 테스트가 더욱 중요해지고 있습니다. 소프트웨어가 기능, 비용, 안전 및 품질의 중요한 부분이 되면서 하드웨어를 교체하는 것보다 소프트웨어 업데이트가 더 일반화되었습니다. 자동차 소프트웨어 개발 및 유지보수에서 이러한 현대적인 문제를 처리하는 최선의 접근 방식은 애자일 방법론, 지속적 테스트 및 자동화를 사용하는 것이며, 이는 AWS 클라우드에서 ECU를 개발함으로써 더 쉽게 촉진될 수 있습니다.

AWS CloudFormation을 사용하여 Graviton에서 AAOS(Android Automotive OS)를 실행하기

AWS 서비스를 활용하는 경우, 문제에 대한 단 하나의 해결책만 있는 경우가 드물고, 대신 다양한 상황에 적합한 여러 가지 해결책이 있습니다. AAOS를 AWS에 배포하는 경우도 마찬가지입니다. 빌드 프로세스를 간소화하기 위해 AWS CloudFormation의 기능을 활용할 수 있습니다.

AWS CloudFormation은 AWS 계정에 인프라 배포를 자동화하여 리소스의 프로비저닝과 해제를 단순화합니다. 다음 그림은 CloudFormation을 사용하여 Graviton 기반 인스턴스에 AAOS의 빌드 및 배포를 완전히 자동화하는 방법을 보여주는 아키텍처 다이어그램입니다.

제공된 CloudFormation 템플릿은 Amazon S3 버킷과 두 개의 EC2 인스턴스를 비롯하여 빌드를 완료하는 데 필요한 리소스를 생성합니다. 비용과 편의성에 따라 선택할 수 있는 두 가지 버전의 CloudFormation 템플릿이 제공됩니다.

  1. 이 버전은 AWS EC2 스팟 인스턴스를 사용하여 시작합니다(비용 절감을 위해). 스팟 인스턴스는 사용 및 관리에 더 많은 감독이 필요하지만 비용이 적게 듭니다.
  2. 이 버전은 AWS EC2 온디맨드 인스턴스를 사용하여 시작합니다(AWS의 가격 세부 정보 참조). 환경에 지속적으로 액세스할 수 있지만 가격 세부 정보를 참조하세요.

이 두 가지 CloudFormation 템플릿 중 하나를 사용하여 (둘 다 사용하지 말고 필요에 따라 하나만 선택하세요), 첫 번째 EC2 인스턴스가 AAOS를 다운로드하고 빌드 단계를 수행하며, 완성된 빌드 이미지를 Amazon S3 버킷에 복사합니다. 두 번째 인스턴스는 Amazon S3에 파일이 나타날 때까지 기다리다가 파일이 준비되면 AAOS를 구성하여 실행을 시작하고 HTTP 인터페이스를 노출시킵니다.

그림 1 – AAOS를 빌드/배포하는 AWS 아키텍처

전제 조건

리전 리전 이름 리전 리전 이름
eu-west-1 Europe (Ireland) eu-west-2 Europe (London)
ap-sourtheast-1 Asia Pacific (Singapore) eu-central-1 Europe (Frankfurt)
us-west-2 US West (Oregon) us-east-1 US East (N.Virginia)
us-east-2 US East (Ohio) ap-northeast-1 Asia Pacific (Tokyo)

참고: 이 솔루션은 비용이 발생합니다. 예상 비용을 계산하는 방법에 대한 자세한 정보는 https://calculator.aws/를사용하시기 바랍니다.

(추가 참고 내용) 한국에 있는 리전인 ap-northeast-2에 배포하기 위해서는 CloudFormation 템플릿을 아래에 굵은 글씨처럼 수정해주어야 합니다.

  1. RegionMap에 ap-northeast-2의 buildami와 targetami를 추가해주어야 합니다.
  2. AAOSBuildInstance의 InstanceType을 c6a.8xlarge를 한국리전에 가능한 인스턴스 타입으로 변경해주어야 합니다. 하기 예제에서는 c5a.16xlarge를 사용하였습니다.
    생략
    ....
    Mappings:
      RegionMap:
        ap-northeast-2:
          buildami: ami-0c9c942bd7bf113a2
          targetami: ami-03c09d51371cd494c
    ....
    생략
    ....
     AAOSBuildInstance:
        Type: AWS::EC2::Instance
        Properties:
          ImageId: 
            Fn::FindInMap: 
              - RegionMap
              - !Ref "AWS::Region"
              - buildami
          # InstanceType: "c6a.8xlarge"
          InstanceType: "c5a.16xlarge"
    ...
    생략

솔루션 단계

AWS Graviton에서 AAOS 스택 구축, 배포 및 액세스

1. 먼저 CloudFormation 스택 yaml 파일을 다운로드하고 AWS Management Console에 로그인한 후 CloudFormation 랜딩 페이지로 이동합니다.

그림 2 – AWS CloudFormation 콘솔 시작 페이지

2. 오른쪽 상단에서 ‘스택 생성’을 선택합니다. 그러면 아래 그림과 같이 스택 생성 화면으로 들어갑니다. 1단계 스택 생성 화면에서 ‘기존 템플릿 선택’을 선택하고, ‘템플릿 파일 업로드’를 선택합니다. “파일 선택”을 클릭하고, 다운로드하고 “create-aaos-ondemand-cf.yaml” 파일을 찾아 선택한 후 “다음”을 클릭합니다. (단, ap-northeast-2에 배포하기 위해서는 위 (추가 참고 내용)을 기반으로 수정한 파일을 활용하여야 합니다.)

그림 3 – 제공된 CloudFormation YAML 파일을 활용하여 AWS CloudFormation 콘솔에서 스택 생성하기

3. “2단계 스택 세부 정보 지정” 화면에서 고유한 스택 이름을 제공하고 Amazon S3 버킷과 동일한 명명 규칙을 따르는지 확인한 후 “다음”을 클릭하합니다. 아래 예제에서는 “cicdstack”이라는 이름을 선택했습니다.

그림 4 – AWS CloudFormation 스택 이름 명세하기

4. “3단계 스택 옵션 구성” 화면에서 모든 옵션을 기본값으로 두고 “다음”을 클릭합니다. 아래 그림을 참조하세요.

그림 5 – AWS CloudFormation에서 스택 옵션 조정하기

5. “4단계 검토 및 작성” 화면에서 CloudFormation 스택 세부 정보를 검토하고, IAM 리소스 생성에 관한 메시지를 확인한 후 “전송”을 클릭합니다. 아래 그림을 참조하세요.

그림 6 – AWS CloudFormation 스택 상세 설정 리뷰하기

6. CloudFormation은 이제 AAOS 스택을 빌드하고 실행하는 데 필요한 모든 리소스를 생성합니다. 이 과정은 약 2시간 정도 소요될 수 있습니다. 스택 생성이 완료되면, CloudFormation 콘솔 인터페이스에서 생성 상태를 확인할 수 있습니다. 아래 그림을 참조하세요.

그림 7 – AAOS 스택 배포 및 실행을 확인하기 위하여 AWS CloudFormation 스택 상태 확인하기

7. 리소스 탭에서 스택에 배포된 모든 리소스와 그 생성 상태 목록을 볼 수 있습니다. 아래 그림을 참조하세요.

그림 8 – AAOS를 배포하는 AWS CloudFormation 스택에서 배포된 모든 리소스 확인하기

8. Amazon CloudWatch Logs의 “AAOSLogs-*리전*” 로그 그룹에서 진행 상황을 볼 수 있습니다. 여기서 *리전*은 솔루션을 배포하기로 선택한 AWS 리전입니다. 빌드 인스턴스와 타겟 인스턴스 각각이 자체 스트림에 출력합니다. 모든 과정이 완료되면 타겟 인스턴스는 AAOS 인터페이스에 접근할 수 있는 HTTP 주소를 “AAOSTarget-*리전*-*스택이름*” 로그 스트림에 생성합니다. 이는 아래 그림과 같이 “https://인스턴스-IP:8443″와 유사한 형태일 것입니다.

그림 9 – Amazon CloudWatch Log에 솔루션 배포 상태 확인하기

9. 스택 생성이 원하는 결과를 산출했는지 확인하기 위해, 빌드 프로세스가 완료되면 웹 주소를 확인하고 AAOS 인스턴스에 접근할 수 있습니다. CloudFormation 인터페이스의 출력(Outputs) 탭에서 AAOS 웹 인터페이스 주소를 볼 수 있습니다. 아래 그림을 참조하세요.

그림 10 – AAOS 인스턴스 WebRTC 연결 주소를 확인하기 위해 CloudFormation에 출력 탭을 참조하기

10. “AAOSWebInterface” 링크에 접속하여 “연결”을 클릭하면 다음 그림에 표시된 화면을 볼 수 있습니다. 최상의 호환성을 위해 Chrome 브라우저를 사용하는 것을 권장합니다. 연결이 안전하지 않다는 것을 인정해야 합니다(예: “고급”을 클릭). 웹 브라우저에서 AAOS에 접근할 때의 HTTPS 보안 측면은 이 블로그 시리즈의 향후 편에서 다룰 예정입니다.

그림 11 – Web Browser에서 AAOS 사용자 인터페이스 접속하기

AAOS 인스턴스에 기본 Android 애플리케이션 개발 및 배포

위의 단계에서는 AAOS 인스턴스를 구축, 배포 및 액세스하는 방법을 설명했습니다. 그러나 개발자들은 종종 AAOS 스택에서 실행할 애플리케이션을 설계, 구축 및 배포하기를 원합니다.
다음 단계들은 Android Studio에서 기본 Android 앱을 만들고, 인스턴스에 연결한 후, 해댕 앱을 AAOS 스택에 배포하고 실행하는 방법을 설명합니다.
1. 이 경우, 우리는 다음 스크린샷에 보이는 Android Studio를 사용하여 AAOS 스택에서 개발하고 있습니다. 다운로드 및 설치 중에 제공되는 지침을 따라 선호하는 개발 환경에 Android Studio를 다운로드하고 설치하십시오. Android Studio를 설치할 때, Android SDK도 함께 설치해야 합니다. AAOS 기기를 위한 개발에는 SDK의 플랫폼 도구가 필요하기 때문입니다.

그림 12 – Android Studio를 이용하여 애플리케이션 개발하고 AAOS Device에 배포하기 

2. 운영 체제의 명령줄 도구를 사용하여 Android Studio를 설치한 디렉토리로 이동합니다. 우리는 Android Studio가 AWS의 원격 기기와 통신할 수 있도록 Android Debug Bridge (ADB)를 사용합니다. 명령줄에 다음 명령을 입력하세요:

“.\adb connect x.x.x.x:6520”
Note: 여기서 x.x.x.x는 CloudFormation Outputs 탭에 표시된 EC2 인스턴스의 IP이며, 6520 포트를 사용하여 ADB 프로토콜로 통신합니다.

(추가 참고 내용) adb가 식별되지 않는다면 adb가 설치되어 있는 경로를 찾아서 PATH에 추가하여 주세요.

아래 그림을 참조하세요. Android SDK 플랫폼 도구에서 adb.exe 실행 파일과 ‘connect’ 명령이 사용됩니다. 성공적으로 연결되면 “connected to your IP x.x.x.x:6520″라는 응답이 표시됩니다.

그림 13 – ADB를 사용하여 Android Studio를 AWS의 AAOS 기기에 연결

3. 이전 그림과 같이 AAOS 기기의 ADB 포트에 대한 연결을 확인했다면, 원격 기기가 Android Studio의 Device Manager의 “Physical devices” 탭에도 나타나야 합니다. 아래 그림과 같이 “Google Cuttlefish arm64 auto”로 표시되며, 연결 성공을 나타내는 녹색 표시가 있을 것입니다.

그림 14 – Android Device Manager에 Physical Device로 연결된 원격 AAOS Device 확인하기

4. 이제 아래 그림과 같이 Android 애플리케이션 개발을 시작할 수 있습니다. 간단히 우리는 Android “apk” 애플리케이션 형식으로 “Hello from AWS!” 앱을 배포하고 있습니다. 더 자세한 내용은 Android Studio와 함께 제공되는 문서에서 확인할 수 있습니다.그림 15 - Android Studio에서 기본 애플리케이션 개발하기

그림 15 – Android Studio에서 기본 애플리케이션 개발하기

5. 애플리케이션 개발을 완료하면, 이전 이미지의 Android Studio 상단에 있는 녹색 재생(녹색 화살표) 버튼을 클릭하여 배포할 수 있습니다. 애플리케이션을 컴파일하고 원격 AAOS 기기에 배포하는 데 약간의 시간이 걸릴 수 있습니다.
다음 이미지에서 볼 수 있듯이, 컴파일되고 ADB를 통해 배포된 후 곧 브라우저의 AAOS 인스턴스에 새로운 애플리케이션이 나타나야 합니다.그림 17 - Amazon EC2 Graviton에서 실행되는 AAOS Device 위에서 실행되는 기본 Android 애플리케이션 확인하기

그림 16 – Amazon EC2 Graviton에서 실행되는 AAOS Device 위에서 실행되는 기본 Android 애플리케이션 확인하기

축하합니다! Amazon EC2 Graviton에서 실행되는 AAOS 기기에서 첫 번째 Android Automotive 애플리케이션을 개발하고 사용하게 되었습니다!

AAOS 타겟 EC2 인스턴스를 사용하지 않을 때 비용 절감을 위해 중지하는 방법

비용을 절감하기 위해, AAOS 타겟 EC2 인스턴스를 사용하지 않을 때는 중지하는 것이 좋습니다.
기기 이미지의 손상을 방지하기 위해, EC2 인스턴스를 중지하기 전에 Cuttlefish Virtual Device (CVD) 서비스를 먼저 중지하는 것을 권장합니다. EC2 인스턴스에 명령을 실행하려면 제공된 지침을 따르기 바랍니다.

그 다음, AWS 콘솔에서 타겟 EC2 인스턴스로 이동하여 ‘인스턴스 상태’, ‘인스턴스 중지’를 선택하세요. AAOS 타겟 EC2 인스턴스를 다시 시작할 때, 새로운 IP 주소가 할당될 가능성이 높습니다. AAOS 기기에 다시 연결하려면 이 IP 주소를 메모해 두세요. 또한 CVD를 다시 시작하려면 재시작 지침을 따라야 합니다. Android Studio를 AAOS 기기에 다시 연결하려면, 이전에 따랐던 지침대로 ADB를 다시 시작해야 합니다.

리소스 정리

생성된 리소스를 제거하려면 먼저 Amazon S3 버킷을 비워야 합니다. AWS 콘솔에서 S3로 이동하여 스택에 의해 생성된 “aaos-build-output-리전-계정ID-스택이름” 버킷을 찾아 해당 버킷 내의 모든 객체를 삭제하여야 합니다. 버킷이 비워지면 AWS CloudFormation 콘솔로 돌아가 생성한 스택을 찾아 “삭제”를 클릭하고 모든 리소스를 삭제할 것인지를 확인합니다.

결론

시장 출시 시간을 단축하고 비용을 절감하며 개발을 단순화하는 방법은 자동차 소프트웨어 개발에 중요합니다. Android Automotive 스택은 오늘날 개발자들이 사용하는 자동차 인포테인먼트 시스템(OS)의 큰 부분을 차지합니다. Amazon EC2에서 인스턴스를 가상화하여 AAOS에서 IVI 개발을 단순화할 수 있습니다. 이를 통해 개발 프로세스를 병렬화하고, 더 많은 협업 워크플로우 기회를 창출하며, OEM 및 공급업체의 로컬 물리적 하드웨어 의존도를 최소화하여, 소프트웨어를 물리적 하드웨어에서 테스트하기 전에 대부분 테스트하고 완성할 수 있습니다.

TAGS: software defined vehicle

Duwan Cheun

Duwan Cheun

천두완 솔루션즈 아키텍트는 소프트웨어 공학을 전공하였으며 IoT 및 데이터 플랫폼 관련 개발/운영 업무를 10년 이상 수행해 왔습니다. 현재는 현대자동차그룹 고객을 대상으로 효율적인 AWS 아키텍처를 구성할 수 있도록 지원하고 있으며, 특히 SDV, 자율 주행, R&D 영역의 문제를 해결할 수 있도록 도움을 드리고 있습니다.