SW/클라우드 서비스 아키텍처

AWS의 Rust 오픈 소스 프로젝트 17개

얇은생각 2023. 5. 29. 07:30
반응형

최근 많은 사람들이 러스트를 조사하고 있습니다. 중요한 질문을 제기합니다. "러스트가 실제로 나에게 유용한가?" 사용 사례에 적합한지 여부는 말씀드릴 수 없지만, 어디에서 유용했는지에 대한 몇 가지 예를 공유할 수 있습니다.

이 프로젝트들은 우리가 지금까지 만들어 온 것의 대표적인 샘플이며 Rust의 사용법을 엿볼 수 있습니다. 우리는 코드를 검사함으로써 당신이 우리의 작업에서 배우고 당신의 직장에서 러스트를 실험하도록 영감을 받을 수 있기를 바랍니다.

이 목록은 전체 목록이 아닙니다. 특히 GitHub의 AWS 및 AWS Lab 조직 내에서 조사해야 할 오픈 소스 프로젝트가 더 많습니다. 

 

AWS의 Rust 오픈 소스 프로젝트 17개

  

 

시스템 프로그래밍

Rust는 C 및 C++와 같은 동종 언어에서는 사용할 수 없는 메모리 안전 이점을 제공하면서 시스템 프로그래밍 언어로 유명해졌습니다. 이 분야, 특히 가상화는 AWS가 대규모 프로젝트에 Rust를 처음 사용한 분야입니다.

 

Bottlerocket

병로켓은 컨테이너를 호스팅하기 위해 설계된 운영 체제입니다. 컨테이너를 실행하는 데 필요한 필수 소프트웨어만 포함되어 있으며 기본 소프트웨어의 보안이 항상 유지됩니다. 예를 들어, Bottlerocket에서 실행되는 컨테이너에 SSH를 넣는 것은 불가능합니다. 실행 중인 컨테이너에는 sshd는 말할 것도 없고 셸도 없습니다.

 

Firecracker

firecracker은 AWS 람다와 AWS 파게이트에 동력을 공급합니다. 마이크로 VM이라고 하는 경량 가상 머신에서 워크로드를 실행합니다. 마이크로 VM은 컨테이너에서 사용하는 속도와 유연성을 가상 머신에서 사용하는 보안 및 격리 기능과 결합합니다.

 

웹 서비스

Rust가 AWS 내에서 점점 더 보편화되면서 초기 시스템 프로그래밍 도메인보다 더 광범위한 프로젝트가 나타나기 시작했습니다. 그것은 이제 웹 대면 서비스를 개발하는 강력한 사용자 기반을 가진 언어입니다.

 

AWS 람다의 러스트 런타임

서버리스는 기술 산업에서 점점 더 주류가 되고 있으며 서버리스 러스트는 이 새로운 패러다임을 활용하는 훌륭한 방법입니다. Rust Runtime for AWS Lambda는 인체공학적으로 사용할 수 있는 맞춤형 런타임을 제공하며 다른 런타임에 비해 성능이 향상됩니다.

 

smith-rs

API가 변경될 때 서버와 클라이언트를 최신 상태로 유지하는 것은 어려운 작업입니다. Smithy Interface Definition Language(IDL)는 부기를 소프트웨어에 위임하여 이 작업을 단순화합니다. 러스트 구현을 smithy-rs라고 합니다. Rust에서 클라이언트와 서버를 생성하면서 Python과 같은 개발자가 선호하는 언어 내에서 비즈니스 로직을 구현할 수 있습니다. smithy-rs는 동일한 코드 기반 내에서 Kotlin과 Rust를 사용하는 예이기 때문에 내부적으로 흥미로운 프로젝트입니다. smithy-rs는 AWS SDK for Rust에 속하는 오픈 소스 상자를 생성하는 데 사용됩니다.

 

러스트용 AWS SDK

AWS SDK for Rust를 사용하면 Rust 프로그램에서 AWS 서비스에 프로그래밍 방식으로 액세스할 수 있습니다. 전체 SDK에는 AWS 서비스에 해당하는 수십 개의 상자가 포함되어 있으며, 이 모든 상자는 SDK의 GitHub 저장소 내에서 검사할 수 있습니다.

 

테스트

러스트의 유형 시스템은 많은 보장을 제공하지만 모든 버그를 방지하지는 않습니다. 소프트웨어의 견고성을 전사적으로 그리고 전사적으로 확장할 수 있는 몇 가지 도구를 만들었습니다.

 

카니 러스트 검증기

Kani Rust Verifier는 소프트웨어에 대한 수학적 추론을 가능하게 하는 "모델 체커"라는 도구 제품군의 일부입니다. Kani는 Rust 프로젝트 내에서 가벼운 공식 검증을 제공합니다. 사실, 폭죽의 보안은 카니와 공식적으로 검증됩니다. 자체 프로그램에서 Kani를 사용하여 단위 및 통합 테스트에서 놓칠 수 있는 오류에 대한 견고성을 높일 수 있습니다.

 

셔틀

셔틀은 각 스레드의 스케줄링을 제어하고 해당 스레드를 랜덤하게 스케줄링함으로써 작동하는 동시 코드를 테스트하는 도구입니다. Shuttle은 일정을 제어함으로써 실패한 테스트를 결정적으로 재현할 수 있습니다.

 

CLI 유틸리티

Amazon의 개발자들은 또한 Rust에서 CLI를 작성하는 것이 매우 가치 있다는 것을 발견했습니다. 유형 시스템은 개발 중에 많은 까다로운 런타임 오류를 방지합니다. Rust로 작성된 CLI는 배포가 쉽고 매우 빠르게 실행되며 메모리를 거의 사용하지 않습니다.

 

아마존 이온

Amazon Ion은 Rust로 작성된 CLI와 함께 제공되는 데이터 형식입니다. 데이터 형식이 무엇입니까? JSON을 본 적이 있을 것입니다. 이는 데이터 형식의 예입니다. JSON은 읽기 쉽지만 불필요한 공간을 차지할 수 있는 텍스트 기반입니다. 파일이 올바른 필드와 데이터 유형을 포함하고 있는지 여부도 파일을 수신할 때 명확하지 않을 수 있습니다.

JSON과 달리, Ion은 데이터 모델의 텍스트와 이진 형식을 모두 제공하여 데이터를 즉시 쉽게 검사할 수 있습니다. CLI를 사용하면 스키마에 대해 파일의 유효성을 검사할 수도 있습니다.

 

AWS 클라우드 형성 가드

AWS CloudFormation Guard는 CloudFormation 사양을 검증합니다. 이를 통해 코드 방법론으로 인프라를 따르는 사용자가 운영 환경에 실수를 입력하는 것을 방지할 수 있습니다. 이를 커밋 전 후크로 포함하면 됩니다.

 

Nitro Enclaves 명령줄 인터페이스(Nitro CLI)

Nitro CLI는 Nitro Enclaves의 수명 주기를 관리하는 도구입니다. 인클레이브는 AWS 고객이 격리되고 강화되며 제약이 심한 환경에 데이터를 보관함으로써 가장 중요한 데이터를 보호할 수 있도록 지원합니다.

 

기타 유틸리티

또한 Rust는 덜 눈에 띄는 위치에서도 가치가 있는 것으로 입증되었습니다. coldsnap은 명령행에서 스냅샷을 업로드하고 EBS 다운로드를 쉽게 할 수 있게 해주는 반면, dynein은 Amazon DynamoDB에 대한 CLI를 제공합니다. Flowger는 여러 소스에서 로그를 수집, 변환 및 내보낼 수 있습니다. 오류 제한 타임스탬프를 제공하기 위해 ClockBound는 만성 NTP 서버와 함께 작동하여 소스의 지리적 위치에 관계없이 서로 다른 이벤트를 정렬할 수 있습니다.

 

라이브러리 및 개발자 도구

경험이 쌓이면서, 사람들은 그들이 배운 것을 공유하는 것이 일반적입니다. AWS와 AWS Labs Github 조직을 조사해 보면 Rust로 작성된 라이브러리의 수가 증가하고 있음을 알 수 있습니다.

 

s2n-quic

암호화 애플리케이션은 러스트와 함께 초기 실험을 수행한 또 다른 분야였습니다. 그 작업의 다운스트림 결과 중 하나는 s2n-quic QUIC 구현에서 발견되는 TLS를 위한 양자 후 키 교환의 오픈 소스 구현입니다.

 

cargo-check-external-types

cargo-check-external-types는 러스트 라이브러리 작성자를 위한 카고 플러그인입니다. 따라서 종속성이 변경되더라도 라이브러리의 API가 일관성을 유지할 수 있습니다. 기본적으로 다른 라이브러리의 어떤 유형이 공용 API의 일부가 될 수 있는지 확인하므로 종속성 변경으로 라이브러리가 손상되지 않습니다.

 

DCV 색상 기본값

서로 다른 응용 프로그램에서 색상 모델 간에 변환하려면 공통 라이브러리가 매우 유용합니다. DCV Color Primitives 라이브러리는 여러 픽셀 형식 간에 변환할 수 있는 동시에 ARM(Graviton 제품군 CPU 포함) 및 WebAssembly를 포함한 여러 대상 아키텍처로 쉽게 컴파일할 수 있습니다.

반응형