Rust Lambda Hello World 로깅

10537 단어 rustserverlessaws
이전 기사에서 나는 Rust에서 람다를 생성하는 방법에 대한 튜토리얼을 시작했습니다. 놓친 경우 여기에서 해당 기사를 확인할 수 있습니다 -> 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 prefix tracing_subscriber::....



계속해서 tracingtracing-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으로 전환하여 람다 실행을 훨씬 더 절약해 보겠습니다.

좋은 웹페이지 즐겨찾기