Node 및 AWS Lambda를 사용하여 서버 없는 호그워츠 분류 서비스 구축

나의 첫 번째 웹 개발자 자리를 찾았을 때, 나는 서버 구조가 없는 지식과 경험이 대부분의 직위에 있어서 필수적이고 매우 중요하다는 것을 깨달았다.
전체 웹 개발 교육 과정에서 무서버 키트와 AWS Lambda로 인증 서버를 구축했습니다.그러나 익숙함만이 교묘함을 낳는다. 나는 내가 배운 것을 공고히 하기 위한 또 다른 프로젝트가 있다고 생각한다.
해리 포터 시리즈를 다시 읽고 있을 때, 나는 사용자를 무작위 호그워츠 학교에 배치하는 분류 서비스를 구축하는 것이 생각났다.그 밖에 이미 이 집에 살고 있는 다른 학생들을 보여 주어야 한다.문자에 대한 데이터를 얻기 위해 Harry Potter API을 사용했습니다.Node, Serverless Toolkit, AWS LambdaAPI Gateway을 사용하여 우리는 간단한 API를 구축하여 무작위 호그워츠 집과 일부 룸메이트로 돌아갈 것이다.

선결 조건


실제 프로젝트를 시작하기 전에 Nodenpm, 그리고 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 ToolkitAWS과 상호작용할 수 있도록 AWS증빙서류를 설정하고 추가해야 합니다.Serverless Toolkit을 구성하고 기능을 AWS에 직접 배치할 수 있는 액세스 키를 만들 것입니다.
이 목표를 달성하기 위해서는 다음 단계를 따라야 합니다.
  • 로그인 콘솔을 클릭하여 새로 만든 AWS 계정에 로그인합니다.
  • 오른쪽 상단에 있는 사용자 이름을 클릭하고 내 보안 증명서를 선택합니다.
  • 액세스 키를 선택하고 새 액세스 키 만들기 버튼을 클릭합니다.
  • 에서 새 액세스 키(액세스 키 ID와 비밀 액세스 키 포함)를 다운로드하여 안전한 곳에 저장합니다.
  • 터미널로 돌아가서 다음 명령을 실행합니다(자체 자격 증명 사용).
    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의 전체 코드를 찾습니다.

    좋은 웹페이지 즐겨찾기