Node 및 AWS Lambda를 사용하여 서버 없는 호그워츠 분류 서비스 구축
9360 단어 serverlessnodecodenewbieaws
전체 웹 개발 교육 과정에서 무서버 키트와 AWS Lambda로 인증 서버를 구축했습니다.그러나 익숙함만이 교묘함을 낳는다. 나는 내가 배운 것을 공고히 하기 위한 또 다른 프로젝트가 있다고 생각한다.
해리 포터 시리즈를 다시 읽고 있을 때, 나는 사용자를 무작위 호그워츠 학교에 배치하는 분류 서비스를 구축하는 것이 생각났다.그 밖에 이미 이 집에 살고 있는 다른 학생들을 보여 주어야 한다.문자에 대한 데이터를 얻기 위해 Harry Potter API을 사용했습니다.
Node
, Serverless Toolkit
, AWS Lambda
과 API Gateway
을 사용하여 우리는 간단한 API를 구축하여 무작위 호그워츠 집과 일부 룸메이트로 돌아갈 것이다.선결 조건
실제 프로젝트를 시작하기 전에
Node
과 npm
, 그리고 create and activate our own AWS account을 설치해야 합니다.서버 없는 키트 설치 및 서버 없는 서비스 만들기
여기서
Serverless Toolkit
을 사용하는 이유는 나중에 axios
을 설치하여 포트 API에서 데이터를 얻어야 하기 때문입니다. Serverless
을 사용하면 이 작업을 쉽게 수행할 수 있습니다.Serverless
을 사용할 때 저도 AWS
을 좋아합니다. 왜냐하면 이것은 로컬에서 코드나 배치 함수를 실현하기 쉽고 AWS
의 내장 코드 편집기를 사용할 필요가 없기 때문입니다.Serverless
을 전체적으로 설치하고 Node
템플릿을 만들려면 다음 명령을 실행합니다.npm install -g serverless
serverless create --template aws-nodejs --path random-sorting-service
cd random-sorting-service
npm init // creates a package.json
이제 우리의 디렉토리 구조는 다음과 같아야 합니다.📦random-sorting-service
┣ 📜.gitignore
┣ 📜handler.js // here we'll write our sorting function
┣ 📜package.json
┗ 📜serverless.yml // here we'll configure our function
AWS 자격 증명 구성
Serverless Toolkit
이 AWS
과 상호작용할 수 있도록 AWS
증빙서류를 설정하고 추가해야 합니다.Serverless Toolkit
을 구성하고 기능을 AWS
에 직접 배치할 수 있는 액세스 키를 만들 것입니다.이 목표를 달성하기 위해서는 다음 단계를 따라야 합니다.
AWS
계정에 로그인합니다.serverless config credentials --provider aws --key ACCESS_KEY_ID --secret SECRET_ACCESS_KEY
서버가 없는 구성 및 설정yml
현재 코드 편집기에서
serverless.yml
파일을 열고 다음과 같이 설명합니다.Lambda 함수 쓰기
란덴 서점 발전기
handler.js
파일을 열고 위조 코드를 삭제하고 다음 내용으로 대체합니다.위의 코드 예제를 살펴보겠습니다.
이 함수는
getRandomHouseAndHousemates
으로 Step 2에서 관련 하원 구성원들의 데이터를 얻을 수 있기 때문이다.우선, 우리는 호그워츠의 네 채의 집을 모두 한 진열 안에 두었다.그리고 랜덤으로
index
을 만들어서 랜덤으로 집을 표시합니다.우리는 Math.random()
함수를 사용하여 0 (포함) 과 1 (배제) 사이의 부동 소수점 위조 무작위 수를 되돌려줍니다.우리는 부동점 형식이 아닌 정수를 얻기 위해 Math.floor()
함수가 필요하다.Math.floor()
은 지정된 숫자보다 작거나 같은 최대 정수를 나타내는 숫자를 되돌려주기 때문에 Math.random()
을 매개 변수로 Math.floor()
에 전달하면 우리는 정수를 얻을 수 있다.그러나 우리가 해결해야 할 문제가 하나 더 있다.
Math.floor()
은 항상 가장 가까운 소수점에 반올림하기 때문에 0에서 1보다 작은 모든 소수점(Math.random()
은 되돌아오는 것)은 시종일관 0이 될 것이다.0에서 4 사이의 무작위수(houses
수조의 길이)를 얻으려면 Math.random()
을 randomHouse.length
에 곱해야 한다.이 index
은 현재 란덴서점에 신청할 수 있습니다.만약에 우리가 다른 응용 프로그램에서 우리의 서비스를 사용하고 싶다면, 우리는 크로스 소스 요청이 있기 때문에, 우리는
Access-Control-Allow-Origin
헤더를 handler.js
의return 문장에 추가해야 한다Random House 생성기 테스트
배치하기 전에, 우리는 현지에서 우리의 기능을 테스트할 수 있다.이제, 그것은 무작위 호그워츠의 집으로만 돌아갈 것이다.프로젝트 디렉토리에서 다음을 실행합니다.
serverless invoke local --function getRandomHouseAndHousemates
만일 모든 것이 정상이라면 우리는 단말기에서 다음과 같은 내용을 보아야 한다.{
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*"
},
"body": "{\"randomHouse\":\"Hufflepuff\"}"
}
만약 이렇게 하면, 우리는 계속해서 새로운 룸메이트에 대한 데이터를 가져오고 되돌릴 수 있는 추가 논리를 실현할 수 있다.타사 API에서 데이터 가져오기
Harry Potter API에 요청할 수 있도록
random-sorting-service
폴더에서 실행합니다.npm install axios
handler.js
에서는 룸메이트 데이터를 가져오고 반환하는 데 필요한 코드가 추가되었습니다.우리도 이 코드의 예시를 자세히 살펴보자.
우리의
handler.js
에서 우리는 반드시 axios
을 요구해야 한다.그런 다음 첫 번째 단계에서 설명한 randomHouse
변수를 사용하여 URL을 생성하여 필요한 API 엔드포인트에 도달합니다.그런 다음 API 요청을 보냅니다.getRandomHouseAndHousemates
은 이미 async
함수이기 때문에 try...catch
블록을 사용하여 axios
에 발생할 수 있는 요청 오류를 처리할 것입니다.우리는 같은 집에서 온 학생만 돌아갈 계획이지만, 주어진 단점은 교사와 학생에게만 돌아갈 계획이기 때문에, 우리도 반드시
filter()
방법을 API 응답에 응용해야 한다.API 요청 테스트
이제 로컬에서 우리의 기능을 다시 테스트한 후에 최종적으로 배치할 때가 되었다.
serverless invoke local --function getRandomHouseAndHousemates
우리는 터미널에서 유사한 것을 보아야 한다.{
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*"
},
"body": "{\"randomHouse\":\"Ravenclaw\",\"housemates\":[{\"name\":\"Cho Chang\",\"species\":\"human\",\"gender\":\"female\",\"house\":\"Ravenclaw\",\"dateOfBirth\":\"\",\"yearOfBirth\":\"\",\"ancestry\":\"\",\"eyeColour\":\"brown\",\"hairColour\":\"black\",\"wand\":{\"wood\":\"\",\"core\":\"\",\"length\":\"\"},\"patronus\":\"swan\",\"hogwartsStudent\":true,\"hogwartsStaff\":false,\"actor\":\"Katie Leung\",\"alive\":true,\"image\":\"http://hp-api.herokuapp.com/images/cho.jpg\"},{\"name\":\"Luna Lovegood\",\"species\":\"human\",\"gender\":\"female\",\"house\":\"Ravenclaw\",\"dateOfBirth\":\"13-02-1981\",\"yearOfBirth\":1981,\"ancestry\":\"\",\"eyeColour\":\"grey\",\"hairColour\":\"blonde\",\"wand\":{\"wood\":\"\",\"core\":\"\",\"length\":\"\"},\"patronus\":\"hare\",\"hogwartsStudent\":true,\"hogwartsStaff\":false,\"actor\":\"Evanna Lynch\",\"alive\":true,\"image\":\"http://hp-api.herokuapp.com/images/luna.jpg\"}]}"
}
AWS에 배포
가능한 경우 다음과 같이 배포할 수 있습니다.
serverless deploy
Serverless Toolkit
은 현재 AWS
에서 제공한 인프라 요구 사항을 사용하여 우리의 기능을 serverless.yml
에 인계할 것입니다.성공적으로 완료되면 터미널에서 다음 정보를 볼 수 있습니다.endpoints
출력에서 함수를 호출하는 데 필요한 (API Gateway
-) 생성 URL을 볼 수 있습니다.경로 /dev/house
에는 기본적으로 /house
환경에 서버를 배치하지 않으므로 serverless.yml
뿐만 아니라 /dev/
도 포함됩니다. 기본적으로 dev
환경에는 서버를 배치하지 않기 때문입니다.이제 모든 파일이
--stage
에 성공적으로 배치되었는지 확인할 수 있습니다.AWS 관리 콘솔에서 serverless deploy --stage prod
을 검색하고 Lambda
을 선택했습니다.우리는 반드시 이런 상황을 보아야 한다.테스트 엔드포인트
터미널에서 단점을 간단하게 복사해서 브라우저의 주소 표시줄에 붙여넣을 수 있습니다.
만약 우리가 우체부를 사용한다면 우리는 더욱 깔끔한 결과를 얻을 수 있을 것이다.
현재, 서버가 없는 기능이 시작되고 실행되고 있으며, 모든 웹 프로그램에서 새로 만든 API에 접근할 수 있습니다. (React와 TypeScript로 정렬모 프로그램을 구축할 계획이지만, 이것은 다른 이야기입니다.)
이 Random Sorting Service on GitHub의 전체 코드를 찾습니다.
Reference
이 문제에 관하여(Node 및 AWS Lambda를 사용하여 서버 없는 호그워츠 분류 서비스 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/evagrean/building-a-serverless-hogwarts-sorting-service-with-node-and-aws-lambda-4ahm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)