[Windows] TypeScript로 Amplify의 Lambda function(+Layer)(로컬 TS→JS) 쓰기
이루고 싶은 일.
저번 보도
Amplify CLI를 사용하여 TypeScript를 사용하여 Lambda 함수를 인코딩하는 방법을 썼습니다.
하지만 다음과 같은 과제가 있다.
따라서 다음과 같은 방침을 논의한다.
컨디션
본 보도는 다음과 같은 환경에서 실시된다.
app
layer
※ 인식용 Amplify Project Name+Lambda Layer Nameapplayer
func
절차.
Step1. Lambda Layer 만들기
1. amplify add function을 통해 추가
Powershell
$ amplify add function
? Select which capability you want to add: Lambda layer (shared code & resource used across functions)
? Provide a name for your Lambda layer: layer
? Choose the runtime that you want to use: NodeJS
? The current AWS account will always have access to this layer.
Optionally, configure who else can access this layer. (Hit <Enter> to skip) Specific AWS accounts
? Provide a list of comma-separated AWS account IDs: <AWSアカウントID>
✅ Lambda layer folders & files created:
amplify\backend\function\applayer
2. TS 파일 그룹을 관리하는 폴더 만들기
다음 폴더로 이동
$ cd amplify\backend\function\applayer
!경로에 포함된
applayer
는 환경에 따라 다릅니다.ts 폴더를 생성합니다. 그 중에서 tsconfig입니다.json 만들기
$ New-Item ts -ItemType Directory
$ cd ts
$ tsc --init
개작은 다음과 같다.tsconfig.json
{
"compilerOptions": {
"target": "es2017",
"noImplicitAny": false,
"allowJs": true,
"noImplicitUseStrict": true,
"types": ["node"],
"moduleResolution": "node",
"module": "CommonJS"
},
"include": ["."],
"exclude": ["node_modules", "**/*.spec.ts"]
}
이어서 (layer 폴더)/lib/nodejs 아래의 "package.json"복사위에서 작성한 ts 폴더에 붙여넣습니다.
PowerShell 명령을 사용하면 다음과 같습니다.
복사된 패키지입니다.json을 열면main을 적당히 고칩니다.
그 다음에'layer.ts'파일을 만듭니다. 여기는'layer.js'입니다.
package.json
Copy-Item -Path ..\lib\nodejs\package.json -Destination .\
이어서 (ts 폴더 내) 일반적인 패키지를 설치합니다.이번에는 "date-fns"를 설치해 보도록 하겠습니다.
{
"version": "1.0.0",
"description": "",
"main": "layer.js",
"dependencies": {},
"devDependencies": {}
}
다음에 ts 파일을 새로 만듭니다.$ npm install date-fns
TS에 기술하십시오.layer.ts
$ New-Item layer.ts
3. 중간 폴더 구성
여기까지의 폴더 구성
import { format as _format } from "date-fns";
import ja from "date-fns/locale/ja";
export const formatJa = (date: Date, format: string): string => {
return _format(date, format, { locale: ja });
};
Step2. Lambda Function 만들기
1. amplify add function을 통해 추가
? Provide existing layers or select layers in this project to access from this function
에서 1단계에서 제작한 람바다 레이어(여기는applayer
를 선택한다.Powershell
<プロジェクルート>\amplify\backend\function\applayer
│ applayer-awscloudformation-template.json
│ layer-configuration.json
│ parameters.json
│
├─lib
│ └─nodejs
│ package.json
│ README.txt
│
├─opt
└─ts
│ layer.ts
│ package-lock.json
│ package.json
│ tsconfig.json
│
└─node_modules
└─date-fns
2. TS 파일 그룹을 관리하는 폴더 만들기
다음 폴더로 이동
$ amplify add function
? Select which capability you want to add: Lambda function (serverless function)
? Provide an AWS Lambda function name: func
? Choose the runtime that you want to use: NodeJS
? Choose the function template that you want to use: Hello World
Available advanced settings:
- Resource access permissions
- Scheduled recurring invocation
- Lambda layers configuration
- Environment variables configuration
- Secret values configuration
? Do you want to configure advanced settings? Yes
? Do you want to access other resources in this project from your Lambda function? No
? Do you want to invoke this function on a recurring schedule? No
? Do you want to enable Lambda layers for this function? Yes
? Provide existing layers or select layers in this project to access from this function (pick up to 5): applayer
? Do you want to configure environment variables for this function? No
? Do you want to configure secret values this function can access? No
? Do you want to edit the local lambda function now? Yes
Edit the file in your editor: <プロジェクトルート>amplify\backend\function\func\src\index.js
? Press enter to continue
Successfully added resource func locally.
!경로에 포함된
func
는 환경에 따라 다릅니다.ts 폴더를 생성합니다. 그 중에서 tsconfig입니다.json 만들기
$ cd amplify\backend\function\func
이후에 TS 파일을 만들기 때문에 tsconfig를 먼저 사용합니다.미리 만들기$ New-Item ts -ItemType Directory
$ cd ts
$ tsc --init
내용을 적절하게 개작하다tsconfig.json
$ tsc --init
!경로에 포함된
layer
및 applayer
는 환경에 따라 다릅니다.이어서 (lambda 함수의 폴더)/src의 "패키지. json"을 복사합니다.
위에서 작성한 ts 폴더에 붙여넣습니다.
PowerShell 명령을 사용하면 다음과 같습니다.
{
"compilerOptions": {
"target": "es2017",
"noImplicitAny": false,
"allowJs": true,
"noImplicitUseStrict": true,
"types": ["node"],
"module": "CommonJS",
"baseUrl": ".",
"paths": {
"/opt/layer": ["../../applayer/ts/layer"],
"*": [
"../../applayer/ts/node_modules/@types/*",
"../../applayer/ts/node_modules/*"
]
}
},
"include": ["."],
"exclude": ["node_modules", "**/*.spec.ts"]
}
3. index.ts 만들기
그런 다음 TS 파일을 만듭니다.
Copy-Item -Path ..\src\package.json -Destination .\
index.ts 쓰기 처리index.ts
$ New-Item index.ts
aws-lambda에서 TS 오류가 발생할 것 같습니다. (ts 폴더 안에서) npm install
제거할 수 있습니다.여기까지의 폴더 구성
import { formatJa } from "/opt/layer";
import { Callback, Context, Handler } from "aws-lambda";
interface IEvent {
arguments: {
input: {
message: string;
};
};
}
interface IResult {
statusCode: number;
body: string;
}
/**
* @type {import('@types/aws-lambda').APIGatewayProxyHandler}
*/
export const handler: Handler<IEvent, IResult> = async (
event: IEvent,
context: Context,
callback: Callback<IResult>
) => {
const { message } = event.arguments.input;
return {
statusCode: 200,
body: `${message} ${formatJa(new Date(), "yyyy-MM-dd")}`,
};
};
Step3. 로컬 컴파일 TS 파일
마지막으로 위에서 작성한 TS 파일을 JS 파일로 컴파일합니다.
프로젝트 루트의 "package.json"에 다음 스크립트를 추가합니다.
package.json
<プロジェクトルート>\amplify\backend\function\func
│ custom-policies.json
│ func-cloudformation-template.json
│ parameters.json
│
├─src
│ event.json
│ index.js
│ package.json
│
└─ts
│ index.ts
│ package-lock.json
│ package.json
│ tsconfig.json
│
└─node_modules
위에서 설명한 대로 프로젝트 경로에서 각 TS 파일을 컴파일할 수 있습니다.layer를 컴파일할 때
...
"scripts": {
...
"layer-tsc": "cd amplify\\backend\\function\\%npm_config_folder%\\ts && tsc && move /Y %npm_config_file%.js ..\\opt && xcopy package.json ..\\lib\\nodejs /Y && cd ..\\lib\\nodejs && del package-lock.json && npm install --production && npm prune --production",
"lambda-tsc": "cd amplify\\backend\\function\\%npm_config_name%\\ts && tsc && move /Y index.js ..\\src && xcopy package.json ..\\src /Y && cd ..\\src && del package-lock.json && npm install --production && npm prune --production"
},
...
lambda 함수를 컴파일할 때npm run layer-tsc -folder=applayer -file=layer
이후 GiitHub 등과 합작하면 원본 코드의 정시에 함수를 자동으로 생성합니다.
Reference
이 문제에 관하여([Windows] TypeScript로 Amplify의 Lambda function(+Layer)(로컬 TS→JS) 쓰기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/shibad/articles/ff15dab04c034c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)