초 폭속 Lambda에서 Deno를 움직여보십시오.
14832 단어 에서TypeScript람다Node.jsAWS
이제 모두 Lambda로 움직이면 좋지 않을까? (적어도 API는 APIGateway + Lambda로 충분하다고 생각합니다.)
그건 그렇다.
그런 Lambda에서 Deno를 폭속으로 움직이는 방법을 정리해 보았다.
전제 조건
1.Layer 등록
deno-lambda-layer.zip 다운로드
$ curl -OL https://github.com/hayd/deno-lambda/releases/download/1.11.0/deno-lambda-layer.zip
※ 공식 사이트 보다 최신의 아카이브 파일을 다운로드하는 것을 추천
deno-lambda-layer 등록
$ aws lambda publish-layer-version \
--layer-name deno-lambda-layer \
--zip-file fileb://deno-lambda-layer.zip
실행 결과 .json{
"Content": {
"Location": "xxx",
"CodeSha256": "xxx",
"CodeSize": 31586895
},
"LayerArn": "arn:aws:lambda:ap-northeast-1:xxx:layer:deno-lambda-layer",
"LayerVersionArn": "arn:aws:lambda:ap-northeast-1:xxx:layer:deno-lambda-layer:1",
"Description": "",
"CreatedDate": "9999-99-99T99:99:99.999+0000",
"Version": 1
}
LayerVersionArn을 사용하기 때문에 삼가하십시오.
2. 실행 Role 만들기
role 작성된 경우 SKIP
정의 파일 작성
$ vim role.json
role.json{
"Version": "2012-10-17",
"Statement":[
{
"Effect": "Allow",
"Principal":{
"Service":"lambda.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
role 만들기
$ aws iam create-role \
--role-name deno-function-exec-role \
--assume-role-policy-document file://role.json
실행 결과 .json{
"Role": {
"Path": "/",
"RoleName": "deno-function-exec-role",
"RoleId": "xxxx",
"Arn": "arn:aws:iam::xxxx:role/deno-function-exec-role",
"CreateDate": "9999-99-99T99:99:99.999+0000",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
}
}
Arn을 사용하기 때문에 삼가하십시오.
3.LambdaDeploy
Create index.ts
$ vim index.ts
index.tsimport { Context, Event } from "https://deno.land/x/lambda/mod.ts";
export function handler(event: Event, context: Context) {
const message:String = `Hey deno ${Deno.version.deno}.`
console.log(message)
return {
statusCode: 200,
body: message
}
}
Deploy
$ zip index.zip index.ts
$ aws lambda create-function \
--function-name DenoFunction \
--runtime provided.al2 \
--handler index.handler \
--zip-file fileb://index.zip \
--role arn:aws:iam::xxxx:role/deno-function-exec-role \
--region ap-northeast-1
--role에 2. 실행 롤로 작성에서 앞둔 Arn을 정의하고 실행
실행 결과.割愛。
エラーが発生していなければOK。
레이어 등록
$ aws lambda update-function-configuration \
--function-name DenoFunction \
--layers \
"arn:aws:lambda:ap-northeast-1:xxx:layer:deno-lambda-layer:1"
--layers에 1.Layer 등록에서 삼가 LayerVersionArn 정의하고 실행
실행 결과.割愛。
エラーが発生していなければOK。
동작 확인
$ aws lambda invoke \
--function-name DenoFunction \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
실행 결과.START RequestId: xxxx Version: $LATEST
Hey deno 1.11.0.d: xxxx
END RequestId: xxxx
REPORT RequestId: xxxx Duration: 76.08 ms Billed Duration: 1804 ms Memory Size: 128 MB Max Memory Used: 76 MB Init Duration: 1727.22 ms
제대로 움직인,
이것으로 완료.
번외편
역시 Deno 같은 코드에서도 시도하고 싶지요.
메인 로직을 분리하는 가정에서,
index.tsimport { Context, Event } from "https://deno.land/x/lambda/mod.ts";
import { execute } from "./usecase.ts";
export function handler(event: Event, context: Context) {
const message:String = execute()
console.log(message)
return {
statusCode: 200,
body: message
}
}
usecase.tsexport function execute(): String {
return 'My son is an angel'
}
그냥 업데이트
$ zip index.zip *.ts
$ aws lambda update-function-code \
--function-name DenoFunction \
--zip-file fileb://index.zip
마지막으로 실행
aws lambda invoke \
--function-name DenoFunction \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
실행 결과.START RequestId: xxxx Version: $LATEST
My son is an angel xxxx
END RequestId: xxxx
REPORT RequestId: xxxx Duration: 74.14 ms Billed Duration: 1360 ms Memory Size: 128 MB Max Memory Used: 76 MB Init Duration: 1285.37 ms
할 수 있었다.
요약
・TypeScript의 기법으로 실장할 수 있거나, node_modules 관리가 없어지거나, await의 사용성이 좋아지거나와 편리성이 높기 때문에 진지하게 도입하는 것도 개미라고.
다음은 좀 더 실무에 견딜 수 있는 설계나, CI/CD의 도입 등 고려해 보고 싶다.
· 데노 아이콘은 친아나고?
Reference
이 문제에 관하여(초 폭속 Lambda에서 Deno를 움직여보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yamachita0109/items/17baca2978e372c90c47
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ curl -OL https://github.com/hayd/deno-lambda/releases/download/1.11.0/deno-lambda-layer.zip
$ aws lambda publish-layer-version \
--layer-name deno-lambda-layer \
--zip-file fileb://deno-lambda-layer.zip
{
"Content": {
"Location": "xxx",
"CodeSha256": "xxx",
"CodeSize": 31586895
},
"LayerArn": "arn:aws:lambda:ap-northeast-1:xxx:layer:deno-lambda-layer",
"LayerVersionArn": "arn:aws:lambda:ap-northeast-1:xxx:layer:deno-lambda-layer:1",
"Description": "",
"CreatedDate": "9999-99-99T99:99:99.999+0000",
"Version": 1
}
role 작성된 경우 SKIP
정의 파일 작성
$ vim role.json
role.json
{
"Version": "2012-10-17",
"Statement":[
{
"Effect": "Allow",
"Principal":{
"Service":"lambda.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
role 만들기
$ aws iam create-role \
--role-name deno-function-exec-role \
--assume-role-policy-document file://role.json
실행 결과 .json
{
"Role": {
"Path": "/",
"RoleName": "deno-function-exec-role",
"RoleId": "xxxx",
"Arn": "arn:aws:iam::xxxx:role/deno-function-exec-role",
"CreateDate": "9999-99-99T99:99:99.999+0000",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
}
}
Arn을 사용하기 때문에 삼가하십시오.
3.LambdaDeploy
Create index.ts
$ vim index.ts
index.tsimport { Context, Event } from "https://deno.land/x/lambda/mod.ts";
export function handler(event: Event, context: Context) {
const message:String = `Hey deno ${Deno.version.deno}.`
console.log(message)
return {
statusCode: 200,
body: message
}
}
Deploy
$ zip index.zip index.ts
$ aws lambda create-function \
--function-name DenoFunction \
--runtime provided.al2 \
--handler index.handler \
--zip-file fileb://index.zip \
--role arn:aws:iam::xxxx:role/deno-function-exec-role \
--region ap-northeast-1
--role에 2. 실행 롤로 작성에서 앞둔 Arn을 정의하고 실행
실행 결과.割愛。
エラーが発生していなければOK。
레이어 등록
$ aws lambda update-function-configuration \
--function-name DenoFunction \
--layers \
"arn:aws:lambda:ap-northeast-1:xxx:layer:deno-lambda-layer:1"
--layers에 1.Layer 등록에서 삼가 LayerVersionArn 정의하고 실행
실행 결과.割愛。
エラーが発生していなければOK。
동작 확인
$ aws lambda invoke \
--function-name DenoFunction \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
실행 결과.START RequestId: xxxx Version: $LATEST
Hey deno 1.11.0.d: xxxx
END RequestId: xxxx
REPORT RequestId: xxxx Duration: 76.08 ms Billed Duration: 1804 ms Memory Size: 128 MB Max Memory Used: 76 MB Init Duration: 1727.22 ms
제대로 움직인,
이것으로 완료.
번외편
역시 Deno 같은 코드에서도 시도하고 싶지요.
메인 로직을 분리하는 가정에서,
index.tsimport { Context, Event } from "https://deno.land/x/lambda/mod.ts";
import { execute } from "./usecase.ts";
export function handler(event: Event, context: Context) {
const message:String = execute()
console.log(message)
return {
statusCode: 200,
body: message
}
}
usecase.tsexport function execute(): String {
return 'My son is an angel'
}
그냥 업데이트
$ zip index.zip *.ts
$ aws lambda update-function-code \
--function-name DenoFunction \
--zip-file fileb://index.zip
마지막으로 실행
aws lambda invoke \
--function-name DenoFunction \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
실행 결과.START RequestId: xxxx Version: $LATEST
My son is an angel xxxx
END RequestId: xxxx
REPORT RequestId: xxxx Duration: 74.14 ms Billed Duration: 1360 ms Memory Size: 128 MB Max Memory Used: 76 MB Init Duration: 1285.37 ms
할 수 있었다.
요약
・TypeScript의 기법으로 실장할 수 있거나, node_modules 관리가 없어지거나, await의 사용성이 좋아지거나와 편리성이 높기 때문에 진지하게 도입하는 것도 개미라고.
다음은 좀 더 실무에 견딜 수 있는 설계나, CI/CD의 도입 등 고려해 보고 싶다.
· 데노 아이콘은 친아나고?
Reference
이 문제에 관하여(초 폭속 Lambda에서 Deno를 움직여보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yamachita0109/items/17baca2978e372c90c47
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ vim index.ts
import { Context, Event } from "https://deno.land/x/lambda/mod.ts";
export function handler(event: Event, context: Context) {
const message:String = `Hey deno ${Deno.version.deno}.`
console.log(message)
return {
statusCode: 200,
body: message
}
}
$ zip index.zip index.ts
$ aws lambda create-function \
--function-name DenoFunction \
--runtime provided.al2 \
--handler index.handler \
--zip-file fileb://index.zip \
--role arn:aws:iam::xxxx:role/deno-function-exec-role \
--region ap-northeast-1
割愛。
エラーが発生していなければOK。
$ aws lambda update-function-configuration \
--function-name DenoFunction \
--layers \
"arn:aws:lambda:ap-northeast-1:xxx:layer:deno-lambda-layer:1"
割愛。
エラーが発生していなければOK。
$ aws lambda invoke \
--function-name DenoFunction \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: xxxx Version: $LATEST
Hey deno 1.11.0.d: xxxx
END RequestId: xxxx
REPORT RequestId: xxxx Duration: 76.08 ms Billed Duration: 1804 ms Memory Size: 128 MB Max Memory Used: 76 MB Init Duration: 1727.22 ms
역시 Deno 같은 코드에서도 시도하고 싶지요.
메인 로직을 분리하는 가정에서,
index.ts
import { Context, Event } from "https://deno.land/x/lambda/mod.ts";
import { execute } from "./usecase.ts";
export function handler(event: Event, context: Context) {
const message:String = execute()
console.log(message)
return {
statusCode: 200,
body: message
}
}
usecase.ts
export function execute(): String {
return 'My son is an angel'
}
그냥 업데이트
$ zip index.zip *.ts
$ aws lambda update-function-code \
--function-name DenoFunction \
--zip-file fileb://index.zip
마지막으로 실행
aws lambda invoke \
--function-name DenoFunction \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
실행 결과.
START RequestId: xxxx Version: $LATEST
My son is an angel xxxx
END RequestId: xxxx
REPORT RequestId: xxxx Duration: 74.14 ms Billed Duration: 1360 ms Memory Size: 128 MB Max Memory Used: 76 MB Init Duration: 1285.37 ms
할 수 있었다.
요약
・TypeScript의 기법으로 실장할 수 있거나, node_modules 관리가 없어지거나, await의 사용성이 좋아지거나와 편리성이 높기 때문에 진지하게 도입하는 것도 개미라고.
다음은 좀 더 실무에 견딜 수 있는 설계나, CI/CD의 도입 등 고려해 보고 싶다.
· 데노 아이콘은 친아나고?
Reference
이 문제에 관하여(초 폭속 Lambda에서 Deno를 움직여보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yamachita0109/items/17baca2978e372c90c47
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(초 폭속 Lambda에서 Deno를 움직여보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yamachita0109/items/17baca2978e372c90c47텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)