Rust Lambda Hello World 로깅
일부 로깅을 추가할 수 있습니다.
Rust 코드로 훨씬 더 진행하기 전에 몇 가지 로깅을 추가해 보겠습니다. 우리는 이미 많은 람다 종속성에 통합된 tracing library을 활용하고 있습니다.
Details about the tracing library are out of scope for this article, but you can learn more from the tracing crate docs
로거 초기화
로거를 설정하려면 추적 구독자 라이브러리를 초기화해야 합니다. AWS Lambda Rust Runtime Examples에는 시작하는 방법에 대한 몇 가지 세부 정보가 포함된 예제가 있습니다.
추가해야 할 코드는 다음과 같습니다.
fn init_lambda_tracing() {
tracing_subscriber::fmt()
.with_max_level(tracing::Level::INFO)
// this needs to be set to false, otherwise ANSI color codes will
// show up in a confusing manner in CloudWatch logs.
.with_ansi(false)
// disabling time is handy because CloudWatch will add the ingestion time.
.without_time()
.init();
}
로깅 설정에 대한 모든 세부 정보가 포함된 작은 기능
init_lambda_tracing()
을 만들었습니다. 이 함수는 로그를 표준 출력으로 인쇄하는 기본값tracing_subscriber
을 설정합니다. 빌더에서 호출되는 추가 메서드는 기본 로깅 수준을 "정보"로 설정하고 일부 기본값을 비활성화하여 Lambda 환경에서 더 나은 환경을 만듭니다. 마지막으로 main()
에 추가 코드를 추가하여 람다 런타임 설정 전에 이 함수를 호출했습니다.컴파일 문제 수정
추가
import ...
행을 추가하지 않았지만 코드가 빌드되기 전에 새 추적 라이브러리 종속성을 Cargo.toml
에 추가해야 합니다.The reason we did not add
import..
statements is that we fully qualified the crate directly in the code with the prefixtracing_subscriber::...
.
계속해서 tracing 및 tracing-subscriber 2개의 종속성을 추가하겠습니다.
cargo add tracing
cargo add tracing-subscriber
그것을 테스트하자!
이제 로깅 설정이 완료되었으므로 일부 로그를 추가하고 사용해 보겠습니다. 추적 라이브러리는
debug!
, info!
, warn!
, error!
등의 로깅 매크로를 제공합니다.func
메서드에 새 "정보"로그를 추가합니다.info!("Going to say hello to {}!", first_name);
우리는 또한 수입해야 할 것입니다
use tracing::info;
이제 기능을 업데이트하고 테스트할 수 있습니다.
함수 컴파일 및 업데이트
이전 기사에서와 마찬가지로 람다 환경에 대해 컴파일하고 함수를 업데이트해야 합니다.
엮다
cargo zigbuild --release --target x86_64-unknown-linux-gnu
기존 기능 업데이트
aws lambda update-function-code --function-name rustTest \
--zip-file fileb://./lambda.zip
테스트 호출 및 로그 확인
이제 람다가 새 코드로 업데이트되었으므로 새 로그를 테스트하고 확인할 수 있습니다.
부르다
aws lambda invoke \
--cli-binary-format raw-in-base64-out \
--function-name rustTest \
--payload '{"firstName": "James"}' \
output.json
이제 Cloudwatch 로그를 다시 확인하십시오.
START RequestId: 93bcbe8c-4b2e-4af3-b00d-3b4b27083ebe Version: $LATEST
INFO lambda_test: going to say hello to James
END RequestId: 93bcbe8c-4b2e-4af3-b00d-3b4b27083ebe
REPORT RequestId: 93bcbe8c-4b2e-4af3-b00d-3b4b27083ebe Duration: 1.16 ms Billed Duration: 33 ms Memory Size: 128 MB Max Memory Used: 17 MB Init Duration: 31.20 ms
XRAY TraceId: 1-622553a3-5644934610a4952626f10403 SegmentId: 3b7b79993cba7894 Sampled: true
성공! 이제 로그가 있습니다.
INFO lambda_test: going to say hello to James
로거 재구성
동적 로그 수준에 대한 코드 업데이트
이제 로깅이 작동하므로 로그 수준을 읽도록 다시 구성해 보겠습니다.
환경 변수에서. 이는 훨씬 더 유연하며 코드를 다시 컴파일하지 않고도 개발 및 디버깅하는 동안 로깅 수준을 높이거나 낮출 수 있는 기능을 제공합니다.
다음과 같이
init_lambda_tracing
를 업데이트할 수 있습니다.fn init_lambda_tracing() {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
// this needs to be set to false, otherwise ANSI color codes will
// show up in a confusing manner in CloudWatch logs.
.with_ansi(false)
// disabling time is handy because CloudWatch will add the ingestion time.
.without_time()
.init();
}
하드코딩된
set_max_level...
을 다음으로 교체했습니다..with_env_filter(EnvFilter::from_default_env())
이것은 로그에서 로깅 수준을 읽습니다.
환경 변수
RUST_LOG
. 이제 실행 중인 코드를 다시 컴파일하고 업데이트하지 않고도 동적으로 로그 수준을 변경할 수 있습니다.또한
Cargo.toml
라이브러리에서 "EnvFilter"기능을 사용할 수 있도록 tracing_subscriber
를 업데이트해야 합니다.tracing-subscriber = {version = "0.3.9", features = ["env-filter"]}
함수 구성 컴파일 및 업데이트
이제 코드가 업데이트되었으므로 기능을 다시 빌드하고 업데이트한 다음 구성도 수행해야 합니다.
새
"RUST_LOG"
환경 변수를 추가합니다. 테스트를 위해 로깅 수준을 "DEBUG"로 설정해 보겠습니다.엮다
cargo zigbuild --release --target x86_64-unknown-linux-gnu
기존 기능 업데이트
aws lambda update-function-code --function-name rustTest \
--zip-file fileb://./lambda.zip
기존 기능 구성 업데이트
aws lambda update-function-configuration \
--function-name rustTest \
--environment Variables="{RUST_BACKTRACE=1,RUST_LOG=debug}"
테스트 호출 다시
aws lambda invoke \
--cli-binary-format raw-in-base64-out \
--function-name rustTest \
--payload '{"firstName": "James"}' \
output.json
Cloudwatch 로그를 다시 확인하십시오.
로그는 훨씬 더 장황하며 포함된 종속성에서 많은 새 로그를 볼 수 있습니다.
START RequestId: 9ebad5dc-3cee-4302-a0f8-0e592e432f41 Version: $LATEST
DEBUG hyper::client::connect::http: connecting to 127.0.0.1:9001
DEBUG hyper::client::connect::http: connected to 127.0.0.1:9001
DEBUG hyper::proto::h1::io: flushed 109 bytes
DEBUG hyper::proto::h1::io: parsed 7 headers
DEBUG hyper::proto::h1::conn: incoming body is content-length (21 bytes)
DEBUG hyper::proto::h1::conn: incoming body completed
DEBUG hyper::client::pool: pooling idle connection for ("http", 127.0.0.1:9001)
INFO lambda_test: going to say hello to James
DEBUG hyper::client::pool: reuse idle connection for ("http", 127.0.0.1:9001)
DEBUG hyper::proto::h1::io: flushed 198 bytes
DEBUG hyper::proto::h1::io: parsed 3 headers
DEBUG hyper::proto::h1::conn: incoming body is content-length (16 bytes)
DEBUG hyper::client::connect::http: connecting to 127.0.0.1:9001
DEBUG hyper::proto::h1::conn: incoming body completed
DEBUG hyper::client::pool: reuse idle connection for ("http", 127.0.0.1:9001)
DEBUG hyper::proto::h1::io: flushed 109 bytes
END RequestId: 9ebad5dc-3cee-4302-a0f8-0e592e432f41
REPORT RequestId: 9ebad5dc-3cee-4302-a0f8-0e592e432f41 Duration: 1.46 ms Billed Duration: 38 ms Memory Size: 128 MB Max Memory Used: 17 MB Init Duration: 36.11 ms
XRAY TraceId: 1-622551be-6d58480b496655162937c59c SegmentId: 03a6c5576dc28250 Sampled: true
DEBUG hyper::client::connect::http: connected to 127.0.0.1:9001
DEBUG hyper::client::pool: pooling idle connection for ("http", 127.0.0.1:9001)
결론
"hello world"람다에 성공적으로 로깅을 추가할 수 있었고 환경 변수를 기반으로 로깅 수준을 동적으로 변경할 수 있게 되었습니다. 추적 라이브러리를 사용하면 이 작업이 쉬워지고 코드가 간단해집니다.
마지막으로 소스 코드
전체 프로젝트는 내 github repohttps://github.com/millerjam/rust_lambda_hello_world에 있습니다.
다음번
다음에는 단위 테스트를 추가하는 방법을 살펴보고 마지막으로 x86 빌드에서 ARM으로 전환하여 람다 실행을 훨씬 더 절약해 보겠습니다.
Reference
이 문제에 관하여(Rust Lambda Hello World 로깅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/millerjam/rust-lambda-hello-world-logging-4c1p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)