Rust를 사용하여 AWS S3에 콘텐츠 업로드 🦀

소개



이 게시물에서는 AWS SDK for Rust를 사용하여 S3 버킷에 콘텐츠를 업로드하는 방법을 설명하겠습니다.

나는 당신이 이미 Rust를 설치했다고 가정할 것입니다. 그렇지 않다면 당신은 this guide 을 따를 수 있습니다.

설정



Cargo로 새 패키지를 생성하여 시작하십시오.

cargo new s3_uploader --bin


다음 구조로 새 패키지를 초기화합니다.

s3_uploader
├── Cargo.toml
└── src
    └── main.rs

Cargo.toml는 프로젝트의 매니페스트 파일이며 프로젝트를 컴파일하는 데 필요한 모든 메타데이터를 포함합니다. Node.js에 익숙하다면 package.json 파일의 Rust 버전입니다.

이제 작업할 기본 프로젝트가 있으므로 코딩을 시작할 준비가 되었습니다.

AWS와 러스트



AWS는 현재 개발자 프리뷰인 Rust용 SDK를 최근에 출시했습니다. 시작하기 쉽고 GitHub 에서 찾을 수 있습니다.

AWS SDK를 사용하려면 [dependencies]Cargo.toml 아래에 SDK를 포함해야 합니다. AWS 서비스에 대해 쉽게 인증할 수 있도록 aws-config 크레이트를 사용하고 비동기 코드를 실행할 수 있도록 종속 항목에 Tokio도 추가합니다.

이제 Cargo.toml가 다음과 같이 보일 것입니다.

[package]
name = "s3_uploader"
version = "0.1.0"
edition = "2018"

[dependencies]
aws-config = "0.3.0"
aws-sdk-s3 = "0.3.0"

tokio = { version = "1", features = ["full"] }


구현


src 폴더에 새 파일을 만들고 이름을 s3_uploader.rs 로 지정합니다. 새로 생성된 파일에서 다음을 가져옵니다.

use std::path::Path;
use std::process;

use aws_sdk_s3::{ByteStream, Client, Error};


이제 콘텐츠 업로드 기능을 구현할 준비가 되었습니다.

새 비동기 함수를 만듭니다.

pub async fn upload(path: &str, bucket: &str, key: &str) -> ResultResult<aws_sdk_s3::output::PutObjectOutput, Error> {...}


이 함수는 S3에 업로드할 때 경로, 입력 버킷 이름 및 파일 이름을 사용합니다. 반환 유형은 PutObject 작업의 출력 또는 오류가 있는 열거형입니다.
aws_config 를 통해 필요한 환경 변수를 로드하는 것으로 시작합니다. 그런 다음 새 클라이언트를 만들고 path 에서 소스 파일을 로드할 수 있습니다.

let config = aws_config::load_from_env().await;
let client = Client::new(&config);
let file = ByteStream::from_path(Path::new(path)).await;


다음 단계는 AWS의 응답을 저장할 수 있는 변수를 만드는 것입니다.

let resp;


이제 파일을 S3에 업로드하는 데 필요한 모든 것이 준비되었습니다.

match file {
  Ok(f) => {
    resp = client
      .put_object()
      .bucket(bucket)
      .key(key)
      .body(f)
      .send()
      .await?;
  },
  Err(e) => {
    panic!("Error uploading file: {:?}", e);
  }
};
Ok(resp)

match 표현식은 콘텐츠를 업로드할 때 put_object()가 성공적인 응답이나 오류를 반환할 것으로 예상한다는 것을 의미합니다. 모든 것이 예상대로 작동하면 AWS에서 응답을 반환합니다.

이제 업로드 기능이 완료되었으며 아래와 같이 사용할 수 있습니다.

mod s3_uploader;

#[tokio::main]
async fn main() {
  let upload = s3_uploader::upload(
    "path-to-file",
    "S3-bucket",
    "filename-in-bucket",
  ).await;
  println!("{:?}", upload);
}

#[tokio::main] 매크로는 기본 비동기를 만드는 데 사용됩니다.

결론



이 작은 기능은 물론 더 확장할 수 있지만 이 작은 소개가 Rust 언어를 계속 사용하고 탐구하려는 호기심을 불러일으킬 수 있기를 바랍니다.

이를 개발하고 구현하는 데 도움이 필요하면 비디오 개발자 팀이 기꺼이 도와드리겠습니다. 질문이나 의견이 있는 경우 이 게시물의 의견 섹션에 한 줄만 남겨주세요.

좋은 웹페이지 즐겨찾기