[AWS] Lambda: Rust ์ฌ๋ฆฌ๊ธฐ
AWS์ ๋๋ค๋ ์ ํด์ง ๋ฐํ์ ์ด์ธ์๋ ๋ค์ํ ์ธ์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ๋ ์ปค์คํ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
์ผ๋จ ํจ์๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ์ ์ง์ ๋ฐํ์์ผ๋ก ์ค์ ํด์ ์์ฑํด์ผ ํ๋ค.
1์ด๋ 2๋ ๋๋ค ์ ๋๋ ๊ฒ ๊ฐ๋ค.
์ฌ์ฉ์ ์ง์ ๋ฐํ์์ด ๋์ํ๋ ์๋ฆฌ๋ ๊ทธ๋ฅ ๋ณต์กํ์ง ์๋ค.
๊ทธ๋ฅ bootstrap์ด๋ผ๋ ์คํํ์ผ์ด ์์ ์์ผ๋ฉด ๊ทธ๊ฑธ ์คํ์์ผ์ค๋ค.
๋น์ฐํ ์คํํ์ผ์ ๋๋ค ๊ท๊ฒฉ์ ๋ง๊ฒ ํต์ ์ ์ํํ ์ ์์ด์ผ ํ๊ณ ...
์ด์ ์ ๊ธฐ ์ฌ๋ฆด ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ๋น๋ํด๋ณด์.
๋น๋๋ ๋๋๋ก ๋ฆฌ๋
์ค์์ ํ๋๊ฑธ ๊ถํ๋ค. ์๋์ฐ์ฆ์์๋ ๋น๋์ ๋ง์ปค ๊ด๋ จํด์ ๋ฌธ์ ๊ฐ ์๋ค.
๋จผ์ ํ๋ก์ ํธ๋ฅผ ํ๋ ํ๊ณ

๋ฆฌ๋
์ค ํ๊ฒ์ ์ถ๊ฐํ๋ค.
๋๋ค๋ ๋ด๋ถ์ ์ผ๋ก ๋ฆฌ๋
์ค๋ก ๋์ํด์, ๋ฐ์ด๋๋ฆฌ๋ ๊ฑฐ๊ธฐ์ ๋ง์ถฐ์ ๋ฟ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
rustup target add x86_64-unknown-linux-musl

cargo.toml์ ์ด๋ ๊ฒ ํ๋ค.
[package]
name = "lambda_start"
version = "0.1.0"
authors = ["myyrakle <sssang97@naver.com>"]
edition = "2018"
autobins = false
[dependencies]
lambda_runtime = "^0.2"
serde = "^1"
serde_json = "^1"
serde_derive = "^1"
log = "^0.4"
simple_logger = "^1"
simple-error = "0.2.2"
[[bin]]
name = "bootstrap"
path = "src/main.rs"
[[bin]] ์์ฑ์ ์ฌ์ฉํด ์ถ๋ ฅํ์ผ๋ช ์ด boostrap์ด ๋๋๋ก ์ง์ ํ๋ค.
์์ค๋ ์ด๋ ๊ฒ ์ง๋ฉด ๋๋ค.
use std::error::Error;
use lambda_runtime::{error::HandlerError, lambda, Context};
use log::{self, error};
use serde_derive::{Deserialize, Serialize};
use simple_error::bail;
use simple_logger;
#[derive(Deserialize)]
struct CustomEvent {
#[serde(rename = "firstName")]
first_name: String,
}
#[derive(Serialize)]
struct CustomOutput {
message: String,
}
fn main() -> Result<(), Box<dyn Error>> {
simple_logger::init_with_level(log::Level::Debug)?;
lambda!(my_handler);
Ok(())
}
fn my_handler(e: CustomEvent, c: Context) -> Result<CustomOutput, HandlerError> {
if e.first_name == "" {
error!("Empty first name in request {}", c.aws_request_id);
bail!("Empty first name");
}
Ok(CustomOutput {
message: format!("Hello, {}!", e.first_name),
})
}
๊ทธ๋ฅ firstName์ด๋ ๊ฐ์ ์ ๋ฌ๋ฐ์์ ์ถ๋ ฅํ๋๊ฒ ๋ค๋ค.
https://github.com/myyrakle/aws-lambda-rust
๋ง๋ค๊ณ ๋ณต๋ถํ๋๊ฒ ๊ท์ฐฎ๋ค๋ฉด ์ด๊ฑธ ํด๋ก ๋ฐ์์ ๋๋ ค๋ ๋๋ค.
๋น๋๋ ์ด๋ฐ์์ผ๋ก ํ๋ฉด ๋๋ค.
cargo build --release --target x86_64-unknown-linux-musl

๊ทธ๋ฌ๋ฉด ์ ๊ธฐ์ boostrap์ด๋ ์ด๋ฆ์ผ๋ก ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด ์์ฑ๋ ๊ฒ์ด๋ค.

์ ๊ฑธ zip์ผ๋ก ์ ์์ถํ๋ค.
zip -j rust.zip ./target/x86_64-unknown-linux-musl/release/bootstrap

๊ทธ๋ฆฌ๊ณ ์ด๊ฑธ๋ก ์ฌ๋ฆฌ๊ณ ๋ฐฐํฌํ๋ฉด ๋์ด๋ค.

์ฌ๋ฆฌ๊ณ
ํ ์คํธ๋ฅผ ํด๋ณธ๋ค.

์ง์
์ฐธ์กฐ
https://aws.amazon.com/ko/blogs/opensource/rust-runtime-for-aws-lambda/
https://github.com/awslabs/aws-lambda-rust-runtime
https://crates.io/crates/lambda_runtime