AWS Lambda 런타임 API 이해
AWS Lambda extensions 발표는 플랫폼을 사용하는 일반인에 불과한 시스템의 일부를 보여줍니다.Lambda가 실행될 때 API, Lambda 로그 API, Lambda 확장 API를 말합니다.
이 블로그에서는 Lambda가 실행될 때 API를 중점적으로 소개하고, Lambda가 실행될 때 API가 무엇인지, 함수가 실행되는 Lambda가 실행될 때 어떻게 사용하는지 탐색합니다.
런타임 API
AWS 람바다의 컨텍스트에서 런타임 API는 람바다 서비스와 함수를 배치하는 람바다 런타임 사이의 다리입니다.
Lambda가 실행될 때 API는 HTTP 레이어를 통해 Lambda가 실행될 때 통신합니다.
이런 통신 방식은'구'가 운행할 때의 운행 방식과 대비된다.예를 들어
go1.x
실행할 때 UDP 전송층을 사용하는데 이 전송층은 Go프로그래밍 언어에 특정한 전용 데이터 인코딩 방안을 가지고 있다go1.x
가 실행할 때 Lambda 확장을 지원하지 않는 이유가 아닌가 의심된다).Lambda는 런타임 시 이벤트 모음 런타임 API를 실행하고 이 이벤트로 코드를 호출합니다.통신이 양방향이기 때문에, Lambda가 실행될 때 호출 결과와 오류를 실행될 때 API로 되돌려줍니다.내 관점에서 볼 때 이것은 흐름도이다.
Please note that this illustration is most likely a simplification. I'm in no way associated with the AWS Lambda team, and I do not know the service's technical inner workings. This is my mental model of how the AWS Lambda Runtime API communicates with Lambda runtime.
런타임 및 런타임 API 사용자 정의
설명된 Lambda 런타임과 런타임 API 사이의 통신 메커니즘을 통해 사용자 정의 Lambda 런타임을 비교적 쉽게 만들 수 있습니다.나는 이것이 가능하다는 것을 처음 보았다. use bash as a Lambda runtime my mind was blown
AWS는 사용자가 매일 사용할 수 있는 일부 Lambda 런타임을 공개했습니다.GitHub에서 Go, Python, Node 및 Lambda가 실행되는 동안 확인할 수 있습니다.나는 너희들이 나가서 이 지식고를 탐색하도록 격려한다.당신이 작성하고 배치하고 있는 코드가 어떻게 실행되는지에 대해 더 많은 것을 알아야 합니다.
실행 중인 로컬 개발 사용자 정의
클라우드에서 개발할 때 실제 환경에서 코드를 실행하고 실제 서비스와 통신하는 것은 대체할 수 없는 것이다.
이는 사용자 정의 람바다 실행 시 개발에도 적용되지만, 로컬에서 람바다 실행 시 API를 시뮬레이션해 배치 간 피드백 사이클을 단축할 수 있는 두 가지 방법이 있다.
AWS SAM CLI AWS SAM CLI 사용
Docker 용기를 로컬에서 지정한 처리 프로그램을 호출할 수 있도록 허용합니다.만약 우리가 로컬 사용 AWS SAM 에서 맞춤형 AWS Lambda 실행을 개발하기로 결정했을 때, 우리가 해야 할 일은 AWS Lambda 실행시 API 규범을 준수하고 YAML 몇 줄을 작성하는 것이다.
AWS SAM 템플릿을 시작하겠습니다.
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: An example serverless API and worker written in Golang.
Resources:
Hello:
Type: AWS::Serverless::Function
Properties:
# The custom runtime will be written in Go, thus the `provided.al2` runtime.
Runtime: provided.al2
Handler: bootstrap
CodeUri: ./
다음은 운행시 자체다.예시적인 고려에서 운행 시 순환을 실현하지 못했다.package main
import (
"bytes"
"context"
"fmt"
"net/http"
"os"
)
// Huge simplification. Should not be used in production setting in any shape or form.
func main() {
// As per documentation: https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html
baseUrl := fmt.Sprintf("http://%v/2018-06-01/runtime/invocation", os.Getenv("AWS_LAMBDA_RUNTIME_API"))
res, err := http.Get(baseUrl + "/next")
if err != nil {
panic(err)
}
defer res.Body.Close()
reqId := res.Header.Get("Lambda-Runtime-Aws-Request-Id")
out := handler(context.TODO())
_, err = http.Post(fmt.Sprintf("%v/%v/response", baseUrl, reqId), "text/plain", bytes.NewReader([]byte(out)))
if err != nil {
panic(err)
}
}
// Your deployed code.
func handler(ctx context.Context) string {
return "Hello"
}
코드가 AWS Lambda runtime API documentation 뒤를 따르다.사용자 정의 실행을 호출하기 전에, 우리는 그것을 컴파일해야 한다.
GOARCH=amd64 GOOS=linux go build -o ./bootstrap bootstrap.go
실제 배치된 상하문에서 바이너리 파일의 명칭은 중요하지 않다는 것을 주의하십시오.나는 무작위로 고르지 않았다boostrap
.이름 지정에 대한 자세한 내용은 revenant documentation의 사용자 정의 런타임 사용 섹션을 참조하십시오.
생성된 바이너리 파일에 대해 우리가 해야 할 일은 코드를 테스트하는 것이다.이를 위해
sam local invoke
명령을 사용하겠습니다.sam local invoke --no-event Hello
만약 이 절차를 자세히 따른다면, 호출 결과는 보통 문자열 Hello
이어야 한다.시뮬레이터 사용
입력aws-lambda-runtime-interface-emulator.이 도구는 AWS Lambda가 로컬에서 실행될 때 API를 시뮬레이션할 수 있도록 해 줍니다. (AWS SAM도 배후에서 이 도구를 사용하고 있다고 의심합니다.)
aws-lambda-runtime-interface-emulator
디자인은 Docker에 사용된다.그럼에도 불구하고 우리가 개발을 위해 코드를 봉인하는 것을 막을 수 있는 것은 아무것도 없다. 그리고 우리가 준비가 되면 우리가 원하는 방식으로 배치할 것이다.이 로컬 작업 흐름은 이전 작업 흐름보다 좀 복잡하지만, AWS SAM을 사용하지 않거나 용기를 사용해서 lambda를 배치하고 있는 사람들에게는 효과적인 대안이 될 수 있습니다.official AWS documentation site에 설정
aws-lambda-runtime-interface-emulator
에 관한 좋은 글이 있습니다.우리가 이전에 작성한 코드는 안내서와 완전히 호환된다.시도해 보시려면 "RIE 추가 그림"부분을 건너뛰지 마십시오.요약
저는 이 AWS Lambda가 실행될 때 API 여행이 당신과 저에게 유익하기를 바랍니다.여기에 소개된 지식이 AWS Lambda 기반 어플리케이션을 효과적으로 개발하는 데 필요하다고 생각하지는 않지만, 어떤 경우에는 유용할 수 있다고 믿습니다.
이상한 변두리 상황이 발생할 수 있습니다. 선택한 언어가 어떻게 작동하는지 알면 디버깅을 더욱 효과적으로 할 수 있습니다.
망설이지 말고 도움의 손길을 내밀어 주세요.너는 트위터에서 나를 찾을 수 있어-
시간 내주셔서 감사합니다.
Reference
이 문제에 관하여(AWS Lambda 런타임 API 이해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/wojciechmatuszewski/understanding-the-aws-lambda-runtime-api-286n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)