AWS SAM 사용(nodejs Type Script Edition)
13702 단어 AWSNode.jsTypeScriptsamtech
개요
AWS를 가져오기 위한 서버 유틸리티가 없는 SAM
AWS Serverless Application Model
을 사용합니다.정식 프로그램 등 실행 시간 환경은 파이톤이지만, 노드입니다.js의 Type Script(공용 미리 보기) 항목을 만듭니다.
AWS SAM 설치
AWS SAM은 공식 프로그램을 참조하여 설치하십시오.
AWS의 CLI를 사용하려면 IAM에서 필요한 설정이 필요합니다.또한 로컬 환경에서 작업을 확인할 때 Docker 설치를 선택할 수 있습니다.
AWS CLI 및 Docker를 이미 사용한 경우 SAM만 설치하면 됩니다.
기본적으로 AWS 공식 절차에 따라 조작하는 형식에는 문제가 없다.
Linux 버전 설치 단계(공식)
Windows Edition 설치 단계(공식)
MacOS 버전 설치 단계(공식)
AWS CLI에 대한 인증 정보 설정
AWS CLI에 대한 인증 정보가 설정되지 않은 경우 를 설정합니다.
AWS CLI 인증 정보 설정 단계(공식)
AWS CLI에 대한 인증 정보가 설정되어 있지 않으면
sam build
장애가 발생합니다.SAM 프로젝트 제작
SAM 프로젝트를 제작합니다.이번에는 메인 카탈로그 바로 아래에서 제작한다.
sam init
에서 항목 이름을 묻습니다. 이것은 폴더 이름이고 홈 디렉터리에서 실행됩니다.shell
cd ~
sam init --runtime nodejs14.x
이번엔 --runtime nodejs14.x
노드.js의 14가지 옵션을 선택했습니다.사용할 수 있는 런타임 옵션은 다음과 같습니다.
대화로 질문을 받기 때문에 순서대로 대답한다.
shell
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
이번 선택1 - AWS Quick Start Templates
.shell
Choose an AWS Quick Start application template
1 - Hello World Example
2 - Multi-step workflow
3 - Standalone function
4 - Scheduled task
5 - Data processing
6 - Serverless API
Quick Start application template
에 나오는 내용은 운행 시간에 따라 달라진다.이번 선택
1 - Hello World Example
.shell
Select your starter template
1 - Hello World Example
2 - Hello World Example TypeScript
Node.js
를 선택하면 Type Script를 사용하여 템플릿을 만들 것인지 묻는 메시지가 나타납니다.이번에는 선택
2 - Hello World Example TypeScript
을 해보자.shell
Project name [sam-app]:
프로젝트 이름을 설정합니다.이번에는 기본sam-app
로 제작되었습니다.프로젝트 폴더는 다음과 같이 확장됩니다.
.
|-- .gitignore
|-- README.md
|-- events
| `-- event.json
|-- hello-world
| |-- .eslintignore
| |-- .eslintrc.js
| |-- .npmignore
| |-- .prettierrc.js
| |-- app.ts : Lambda handlerのロジックが含まれます。
| |-- jest.config.ts
| |-- package.json :アプリケーションの依存ライブラリが定義されています。sam buildで使用されます。
| |-- tests
| | `-- unit
| | `-- test-handler.test.ts
| `-- tsconfig.json
`-- template.yaml : AWSリソースに関する定義が含まれます。
테스트 코드의 설정 등 디렉터리 구성은 운행 시간에 따라 다르다.구축 실행
다음 명령을 사용하여 구문을 실행합니다.
shell
sam build
공개 미리보기가 진행 중이기 때문에 다음과 같은 질문을 받을 수 있다.shell
You can also enable this beta feature with 'sam build --beta-features'. [y/N]:
y
를 선택하고 구축을 계속합니다.구축을 실행하면 파일이 다음 경로에서 생성됩니다.
.
|-- .aws-sam
| |-- build
| | |-- HelloWorldFunction
| | | |-- app.js
| | | `-- app.js.map
| | `-- template.yaml
| `-- build.toml
로컬 환경에서의 개발 환경 준비
함수가 설정된 디렉터리에 따라 의존 모듈을 정의한 파일을 생성했다(예:
hello-world/package.json
. 그러면 의존 프로그램 라이브러리에 존재하지 않고 IDE에 참고 오류가 있기 때문에 함수의 디렉터리에 실행한다npm install
종속 모듈을 설치합니다.shell
cd hello-world
npm install
로컬 환경에서의 동작 확인(함수)
로컬 환경에서 함수를 확인할 때 다음 명령을 실행합니다.
shell
sam local invoke
실행 후 Docker를 통해 실행 환경 이미지를 호출하고 함수를 실행합니다.함수 실행 결과
{ "statusCode": 200, "body": "{\"message\":\"hello world\"}" }
기본적으로 함수는 event
내용이 없는 상태에서 호출되지만 다음과 같이 -e
옵션을 통해 이벤트 대상을 정의한 json 파일을 지정하고 테스트 데이터 등을 지정하여 함수를 실행할 수 있습니다.shell
sam local invoke -e events/event.json
로컬 환경에서의 작업 확인(APIGateway)
로컬 환경에서 APIGateway를 통한 작업을 확인할 때 다음 명령을 사용하여 로컬에서 API를 시작할 수 있습니다.
shell
sam local start-api
다음 URL에 액세스하여 작업을 확인할 수 있습니다.shell
http://127.0.0.1:3000/hello
확인이 끝나면 Ctrl
+C
등으로 정지한다.실행 프로그램
다음 명령을 실행하고 디버깅을 시작합니다.
shell
sam deploy --guided
대화식에서 질문을 받기 때문에 대답할 거예요.shell
Stack Name [sam-app]:
CloudFormation
스택의 이름을 지정합니다.기본 항목 이름과 같은 이름
Enter
이 좋을 것 같습니다.shell
AWS Region [ap-northeast-1]:
구역을 묻다.기본값은 AWSCLI의 인증 정보에 설정된 영역입니다.이번에도 묵인Enter
입니다.shell
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [y/N]:
입력y
Enter
.shell
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]:
집행용 IAM 캐릭터를 제작하느냐는 질문을 받았다.입력
Y
Enter
.shell
#Preserves the state of previously provisioned resources when an operation fails
Disable rollback [y/N]:
만약 자원 공급이 실패한다면 원래의 상태로 되돌아갈 것이다.입력
y
Enter
.shell
HelloWorldFunction may not have authorization defined, Is this okay? [y/N]:
인증을 설정하지 않은 기능에 문제가 없느냐는 질문을 받았다.(일반인 방문이 가능하기 때문)입력
y
Enter
.shell
Save arguments to configuration file [Y/n]:
이번에 입력한 값이 설정 파일에 저장되었는지 물었습니다.입력
Y
Enter
.shell
SAM configuration file [samconfig.toml]:
저장할 프로파일 이름을 입력합니다.기본값은 samconfig.toml
입니다.이번엔 그냥 눌러
Enter
.shell
SAM configuration environment [default]:
SAM에 대한 설정은 환경별로 분류하여 설정할 수 있으며, 이 설정에 따라samconfig.toml
에서 [default.deploy.parameters]
,text.deploy.parameters]
방식으로 파라미터를 분리하여 설정할 수 있다.deploy를 실행할 때 지정한
--config-env
옵션을 통해 default
이외의 deploy를 실행할 수 있습니다.또한 --config-file
옵션에서 사용하는toml 파일을 전환할 수 있습니다.이번에는default
Enter
를 누르세요.shell
Deploy this changeset? [y/N]:
입력y
Enter
.리소스 사전 설정 및 함수 사전 설정을 수행합니다.
콘솔에 배치된 리소스
Outputs
가 표시됩니다.CloudFormation outputs from deployed stack
-------------------------------------------------------------------------------------------------------------------------------
Outputs
-------------------------------------------------------------------------------------------------------------------------------
Key HelloWorldFunctionIamRole
Description Implicit IAM Role created for Hello World function
Value arn:aws:iam::<ACCOUNT ID>role/sam-app-HelloWorldFunctionRole-UZPLZBVT71MY
Key HelloWorldApi
Description API Gateway endpoint URL for Prod stage for Hello World function
Value https://xxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/
Key HelloWorldFunction
Description Hello World Lambda Function ARN
Value arn:aws:lambda:ap-northeast-1:<ACCOUNT ID>:function:sam-app-HelloWorldFunction-xxxxxxxxxx
-------------------------------------------------------------------------------------------------------------------------------
Successfully created/updated stack - sam-app in ap-northeast-1
SAM의 Deploy를 실행하여 AWS에 다음과 같은 자원을 만들었습니다.sam-app-HelloWorldFunctionRole-xxxxxxxx
등의 이름으로 생성됩니다.xxxxxxxx
부분에 자동으로 발생하는 해시 값을 설정합니다.sam-app
라는 이름으로 제작되었습니다.sam-app-HelloWorldFunction-xxxxxxxx
라는 이름으로 lambda 함수를 만듭니다.xxxxxxxx
부분에 자동으로 발생하는 해시 값을 설정합니다.Stack Name [sam-app]:
에 설정된 이름으로 생성됩니다.삭제한 후에 만든 자원 클래스도 삭제됩니다.--guided
옵션 없이 실행할 수 있습니다.shell
sam deploy
동작 확인
SAM의 deploy를 확인할 때 콘솔에 표시되는
API Gateway endpoint URL
값이나 AWS 콘솔에서 제작된 API Gateway의 URL을 확인하고 브라우저를 통해 접근합니다.URL 만들기 예
https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/hello
응답{ "message": "hello world" }
API가 성공적으로 디버깅되었음을 확인합니다.자원 삭제
AWS에 대한 디버깅과 동작 확인을 완료하고 자원을 삭제합니다.
AWS SAM에서의 자원 생성은 CloudFormation 창고에서 이루어지기 때문에 창고를 삭제하면 링크된 자원을 삭제할 수 있지만 SAM에서는 프로젝트 폴더에서 다음과 같은 작업을 통해 자원을 삭제할 수 있습니다.
sam delete
IAM 스크롤, API Gateway, Lambda 함수를 삭제합니다.총결산
AWS SAM을 사용하면 로컬 환경/명령줄로부터의 조작을 통해 함수 제작, 로컬 환경의 동작 확인, AWS 환경의 디자인 등을 간단하게 조작할 수 있다.
Servales가 개발한 생산성을 높이면서 프로젝트의 발전을 추진하는 데 필요한 기술이라고 생각한다.
다음에도 로컬 다이나모DB와 협업한 개발 환경을 시도해 보고 싶다.
Reference
이 문제에 관하여(AWS SAM 사용(nodejs Type Script Edition)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ttani/articles/aws-sam-setup텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)