JavaScript와 Azure 함수를 사용하여 이력서 API를 구축하는 방법은 무엇입니까?

나는 the Cloud Resume Challenge by Forest Brazeal의 계발을 받아 구름 속에 더 많은 것을 세웠다.나는 나의 구름 여행을 계속하기 위해 간단한 것을 세우고 싶다.JSON의 표준 형식 이력서를 기반으로 소스 RESTAPI를 구축하기로 했습니다.JavaScript 및 Azure 함수를 사용하고 있습니다.

프레젠테이션


너는 RESTAPI를 말아서 나의 이력서를 볼 수 있다curl -L http://rishabcloud.com/resume

설치 프로그램

  • 에는 활성 구독이 있는 Azure 계정이 있습니다.무료 계정 만들기.
  • Azure Functions Core Tools 2.7.1846 이상 버전 2.x 버전.
  • Azure CLI 버전 2.4 이상.
  • 노드.js, Active LTS 및 유지 보수 LTS 버전(8.11.1 및 10.14.1 권장).
  • 선결 조건 검사

  • 은 터미널 또는 명령 창에서 func--version을 실행하여 Azure Functions 핵심 도구가 2.7.1846 이상 버전인지 확인합니다.
  • 에서 az-version을 실행하여 Azure CLI 버전이 2.0.76 이상인지 확인합니다.
  • 에서 az 로그인을 실행하여 Azure에 로그인하고 이벤트 구독을 검증합니다.
  • JSON으로 프로필 만들기


    나는 JSON-based standard format resume schema을 복사했다. 나는 나의 정보에서 그것을 편집할 것이다.내가 JSON을 편집한 후에 나는 마침내 이것을 얻었다.
    {
            "basics": {
              "name": "Rishab Kumar",
              "label": "CloudOps/DevOps",
              "picture": "",
              "email": "[email protected]",
              "website": "http://rishabkumar.com",
              "summary": "AWS and Linux entusiast with some experience in the Cloud.",
              "location": {
                "address": "Virginia Street",
                "city": "Kingston",
                "countryCode": "CA",
                "region": "Ontario"
              },
              "profiles": [{
                "network": "Twitter",
                "username": "rishabk7",
                "url": "http://twitter.com/rishabk7"
              },
              {
                "network": "Linkedin",
                "username": "Rishab Kumar",
                "url": "https://www.linkedin.com/in/rishabkumar7/"
              },
              {
                "network": "GitHub",
                "username": "rishabkumar7",
                "url": "https://github.com/rishabkumar7"
              }]
            },
            "work": [{
              "company": "ECi Software Solutions",
              "position": "CloudOps Specialist",
              "startDate": "2013-05-01",
              "endDate": "Present",
              "summary": "Description...",
            }],
            "education": [{
              "institution": "St. Lawrence College",
              "area": "Computer Networking",
              "studyType": "Diploma",
              "startDate": "2016-05-01",
              "endDate": "2018-06-01",
            }],
            "awards": [{
              "title": "AWS Certified Developer Associate",
              "date": "2017-11-01",
              "awarder": "St. Lawrence College",
            },
            {
              "title": "AWS Certified Soultions Architect Associate",
              "date": "2017-11-01",
              "awarder": "St. Lawrence College",
            },
            {
              "title": "AWS Certified Cloud Practitioner",
              "date": "2017-11-01",
              "awarder": "St. Lawrence College",
            },
            {
              "title": "Microsoft Certified Azure Fundamentals",
              "date": "2017-11-01",
              "awarder": "St. Lawrence College",
            },
            {
              "title": "OCI Foundatios 2020 Certified Associate",
              "date": "2017-11-01",
              "awarder": "St. Lawrence College",
            }
          ],
            "skills": [
              {
                "name": "AWS",
                "level": "Intermediate",
                "keywords": [
                  "Cloud",
                  "Lambda",
                  "S3",
                  "CloudFront"
                ]
              },
              {
                "name": "Azure",
                "level": "Beginner",
                "keywords": [
                  "Azure Functions",
                  "VM",
                  "Storage"
                ]
              },
              {
                "name": "JavaScript",
                "level": "Intermediate",
                "keywords": [
                  "ECMAScript",
                  "ES6",
                  "Node.js",
                  "Web",
                  "Front End"
                ]
              },
              {
                "name": "React",
                "level": "Intermediate",
                "keywords": [
                  "SPA",
                  "Web",
                  "Front End"
                ]
              },
              {
                "name": "Vue",
                "level": "Intermediate",
                "keywords": [
                  "SPA",
                  "Web",
                  "Front End"
                ]
              },
              {
                "name": "Docker",
                "level": "Intermediate",
                "keywords": [
                  "Containers"
                ]
              }
            ],
            "interests": [{
              "name": "Volleyball",
              "keywords": [
                "Beach",
                "Court"
              ]
            }]
          }
    
    이 JSON 프로필을 저장합니다. 잠시 후에 필요합니다.

    로컬 기능 항목 만들기


    Azure 함수에서 함수 항목은 하나의 용기로 하나 이상의 단독 함수를 포함하고 모든 함수는 특정한 트리거에 응답한다.프로젝트의 모든 기능은 같은 로컬과 숙주 설정을 공유합니다.이 절에서 하나의 함수를 포함하는 함수 항목을 만들 것입니다.
    func init 명령을 실행합니다. 아래와 같이 지정한 실행을 사용할 때 LocalFunctionProj라는 폴더에 함수 항목을 만듭니다.func init LocalFunctionProj --javascript프로젝트 폴더로 이동합니다.cd LocalFunctionProj이 폴더는 로컬이라는 프로필을 포함한 프로젝트의 다양한 파일을 포함합니다.설치.json과 호스트.json.본고장이니까.설치.json은 Azure에서 다운로드한 기밀을 포함할 수 있습니다. 기본적으로 이 파일은 에서 원본 코드를 관리하지 않습니다.gitignore 파일.
    다음 명령을 사용하여 함수를 프로젝트에 추가합니다. 여기서 --name 매개 변수는 함수의 유일한 이름(resume)이고 --template 매개 변수는 함수의 트리거(HTTP)를 지정합니다.func new --name resume --template "HTTP trigger"func new은 함수 이름과 일치하는 하위 폴더를 만듭니다. 이 하위 폴더는 프로젝트에서 선택한 언어에 맞는 코드 파일과function이라는 프로필을 포함합니다.json.

    지수회사 명


    지수js는 함수의 설정에 따라 트리거하는 함수를 내보냅니다.json.
    module.exports = async function (context, req) {
        context.log('JavaScript HTTP trigger function processed a request.');
    
        const name = (req.query.name || (req.body && req.body.name));
        const responseMessage = name
            ? "Hello, " + name + ". This HTTP triggered function executed successfully."
            : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";
    
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: responseMessage
        };
    }
    
    이제 색인을 편집합니다.js, 우리 JSON 이력서로 응답할 수 있도록 합니다.다음과 같이 jsonData에서 이력서 JSON을 제공합니다.
    module.exports = function(context, req) {
        jsonData = {
            "basics": {
              "name": "Rishab Kumar",
              "label": "CloudOps/DevOps",
              "picture": "",
              "email": "[email protected]",
              "website": "http://rishabkumar.com",
              "summary": "AWS and Linux entusiast with some experience in the Cloud.",
              "location": {
                "address": "Virginia Street",
                "city": "Kingston",
                "countryCode": "CA",
                "region": "Ontario"
              },
              "profiles": [{
                "network": "Twitter",
                "username": "rishabk7",
                "url": "http://twitter.com/rishabk7"
              },
              {
                "network": "Linkedin",
                "username": "Rishab Kumar",
                "url": "https://www.linkedin.com/in/rishabkumar7/"
              },
              {
                "network": "GitHub",
                "username": "rishabkumar7",
                "url": "https://github.com/rishabkumar7"
              }]
            },
            "work": [{
              "company": "ECi Software Solutions",
              "position": "CloudOps Specialist",
              "startDate": "2013-05-01",
              "endDate": "Present",
              "summary": "Description...",
            }],
            "education": [{
              "institution": "St. Lawrence College",
              "area": "Computer Networking",
              "studyType": "Diploma",
              "startDate": "2016-05-01",
              "endDate": "2018-06-01",
            }],
            "awards": [{
              "title": "AWS Certified Developer Associate",
              "date": "2017-11-01",
              "awarder": "St. Lawrence College",
            },
            {
              "title": "AWS Certified Soultions Architect Associate",
              "date": "2017-11-01",
              "awarder": "St. Lawrence College",
            },
            {
              "title": "AWS Certified Cloud Practitioner",
              "date": "2017-11-01",
              "awarder": "St. Lawrence College",
            },
            {
              "title": "Microsoft Certified Azure Fundamentals",
              "date": "2017-11-01",
              "awarder": "St. Lawrence College",
            },
            {
              "title": "OCI Foundatios 2020 Certified Associate",
              "date": "2017-11-01",
              "awarder": "St. Lawrence College",
            }
          ],
            "skills": [
              {
                "name": "AWS",
                "level": "Intermediate",
                "keywords": [
                  "Cloud",
                  "Lambda",
                  "S3",
                  "CloudFront"
                ]
              },
              {
                "name": "Azure",
                "level": "Beginner",
                "keywords": [
                  "Azure Functions",
                  "VM",
                  "Storage"
                ]
              },
              {
                "name": "JavaScript",
                "level": "Intermediate",
                "keywords": [
                  "ECMAScript",
                  "ES6",
                  "Node.js",
                  "Web",
                  "Front End"
                ]
              },
              {
                "name": "React",
                "level": "Intermediate",
                "keywords": [
                  "SPA",
                  "Web",
                  "Front End"
                ]
              },
              {
                "name": "Vue",
                "level": "Intermediate",
                "keywords": [
                  "SPA",
                  "Web",
                  "Front End"
                ]
              },
              {
                "name": "Docker",
                "level": "Intermediate",
                "keywords": [
                  "Containers"
                ]
              }
            ],
            "interests": [{
              "name": "Volleyball",
              "keywords": [
                "Beach",
                "Court"
              ]
            }]
          }
    
        context.res = {
           body: JSON.stringify(jsonData, null, 2)
        };
        context.done();
    };
    
    HTTP 트리거에 대해 함수는 함수에 정의된 변수 req의 요청 데이터를 수신합니다.json.함수에 $return으로 정의된 대상을 되돌려줍니다.json은 응답입니다.

    작용json


    작용json은 트리거 형식을 포함한 함수의 입력과 출력 연결을 정의하는 프로필입니다.
    {
        "bindings": [
            {
                "authLevel": "anonymous",
                "type": "httpTrigger",
                "direction": "in",
                "name": "req",
                "methods": [
                    "get",
                    "post"
                ]
            },
            {
                "type": "http",
                "direction": "out",
                "name": "res"
            }
        ]
    }
    
    참고: 기본적으로 authLevel은 정상적인 작업으로 설정되어 있으며, 이력서에 누구나 접근할 수 있도록 익명으로 변경합니다.
    모든 귀속은 방향, 유형, 유일한 이름이 필요합니다.HTTP 트리거는 httpTrigger 형식의 입력 귀속과 HTTP 형식의 출력 귀속을 가지고 있습니다.

    로컬 실행 함수


    LocalFunctionProj 폴더에서 로컬 Azure Functions 실행 시 호스트를 시작하여 함수를 실행합니다.func start출력의 끝에 다음 줄을 표시해야 합니다.
    ...
    
    Now listening on: http://0.0.0.0:7071
    Application started. Press Ctrl+C to shut down.
    
    Http Functions:
    
            HttpExample: [GET,POST] http://localhost:7071/api/resume
    ...
    
    이력서 기능의 URL을 이 출력에서 브라우저로 복사합니다. 전체 URL은 http://localhost:7071/api/resume입니다.브라우저에는 다음과 같은 메시지가 표시됩니다.
    /api/http://localhost:7071/api/resume/에서 벗어나기 위해 host.json 파일에서 다음 작업을 수행할 수 있습니다.
    routePrefix 속성 추가:
      "extensions": {
        "http": {
            "routePrefix": ""
        }
      }
    
    따라서 완전한 host.json은 다음과 같이 보일 것이다.
    {
      "version": "2.0",
      "logging": {
        "applicationInsights": {
          "samplingSettings": {
            "isEnabled": true,
            "excludedTypes": "Request"
          }
        }
      },
      "extensions": {
        "http": {
            "routePrefix": ""
        }
      },
      "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[1.*, 2.0.0)"
      }
    }
    
    프로젝트를 시작하는 터미널은 요청을 보낼 때 로그 출력을 표시합니다.
    준비가 되면 Ctrl+C를 사용하고 y 정지 함수 호스트를 선택하십시오.

    기능을 위한 Azure 지원 리소스 만들기


    기능 코드를 Azure에 배포하기 전에 다음 세 가지 리소스를 생성해야 합니다.
  • 자원 그룹, 관련 자원의 논리 용기입니다.
  • 은 프로젝트의 상태 및 기타 정보를 유지하는 데 사용되는 계정을 저장합니다.
  • 함수 응용 프로그램으로 함수 코드를 실행하는 환경을 제공합니다.기능 응용 프로그램은 로컬 기능 항목에 비추고 기능을 논리 단위로 나누어 자원을 관리, 배치, 공유할 수 있도록 합니다.
  • 다음 Azure CLI 명령을 사용하여 항목을 생성합니다.각 명령은 완료 시 JSON 출력을 제공합니다.
    만약 아직 이렇게 하지 않았다면, azlogin 명령을 사용하여 Azure에 로그인하십시오.az loginaz group create 명령을 사용하여 리소스 그룹을 생성합니다.다음 예는 AzureFunctionsQuickstart-rg 영역에서 westeurope이라는 자원 그룹을 만듭니다.(일반적으로 az account list-locations 명령의 사용 가능한 영역을 사용하여 근처 영역에 자원 그룹과 자원을 생성합니다.)az group create --name AzureFunctionsQuickstart-rg --location westeuropeaz storage account create 명령을 사용하여 리소스 그룹 및 영역에 공통 스토리지 계정을 생성합니다.다음 예제에서는 <STORAGE_NAME>을 글로벌 고유 이름으로 대체합니다.이름은 3~24자의 숫자와 소문자만 포함할 수 있습니다.Standard_LRS은 일반 계정인 supported by Functions을 지정합니다.az storage account create --name <STORAGE_NAME> --location westeurope --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS스토리지 계정은 이 빠른 시작을 위해 몇 센트(USD)만 지불하면 됩니다.
    az functionapp create 명령을 사용하여 함수 응용 프로그램을 만듭니다.다음 예제에서는 <STORAGE_NAME>을 이전 단계에서 사용한 계정 이름으로 바꾸고 <APP_NAME>을 전역적으로 유일한 이름으로 바꿉니다.<APP_NAME>은 기능 응용 프로그램의 기본 DNS 도메인이기도 합니다.az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime node --runtime-version 10 --functions-version 2 --name <APP_NAME> --storage-account <STORAGE_NAME>

    Azure에 기능 프로젝트 배포


    필요한 자원이 있습니다. 현재 func azure functionapp publish 명령을 사용하여 로컬 함수 프로젝트를 Azure의 함수 프로그램에 배치할 수 있습니다.다음 예제에서는 <APP_NAME>을 응용 프로그램의 이름으로 바꿉니다.func azure functionapp publish <APP_NAME>오류가 발생하면''이라는 응용 프로그램을 찾을 수 없습니다.몇 초만 기다려 주십시오. 이전 az functionapp create 명령을 실행한 후에 Azure가 프로그램을 완전히 초기화하지 않았을 수도 있습니다.
    publish 명령은 다음과 같은 결과를 보여줍니다.
    
    Getting site publishing info...
    Creating archive for current directory...
    Performing remote build for functions project.
    
    ...
    
    Upload completed successfully.
    Deployment completed successfully.
    Syncing triggers...
    Functions in myapphttp:
        resume - [httpTrigger]
            Invoke url: https://myapphttp.azurewebsites.net/resume
    

    Azure에서 함수 호출


    함수는 HTTP 트리거를 사용하기 때문에 브라우저에서나 curl 같은 도구를 사용하여 URL에 HTTP 요청을 보내서 호출할 수 있습니다.이 두 가지 상황에서 코드 URL 매개 변수는 모두 유일한 함수 키로 권한 수여 호출 함수 단점에 사용된다.
    게시 명령 출력에 표시되는 전체 호출 URL을 브라우저 주소 표시줄에 복사합니다.브라우저는 로컬에서 함수를 실행할 때와 유사한 출력을 표시해야 합니다.

    구부리다

    저희가 해냈어요.😍, 이제 프로필이 시작되고 실행되었습니다. Azure UI에서 사용자 정의 도메인을 설정할 수 있습니다.

    사용자 정의 도메인을 설정하려면:


    Azure 포털에 접속하여 애플리케이션 서비스로 이동하는 경우:

    왼쪽에서'설정'범주 아래의'사용자 정의 도메인'설정을 볼 수 있습니다

    사용자 정의 도메인을 추가하는 옵션이 표시됩니다.

    만약 도메인 이름이 없다면, 도메인 이름을 구매하는 옵션도 볼 수 있을 것이다.

    너는 상세한 정보를 기입해서 도메인 이름을 구매할 수 있다.

    사용자 정의 도메인이 있으면 응용 프로그램에 연결할 수 있습니다.



    도메인에 SSL 바인딩을 추가하고 https을 통해 액세스 가능
    귀속을 추가하지 않았기 때문에, 제 이력서는 http://rishabcloud.com/resume에서 찾을 수 있습니다
    이 강좌를 좋아해 주셨으면 좋겠습니다. 저도 이 도전을 위해 유튜브 영상을 만들 것입니다. 여기는
    너도 날 따라와.

    좋은 웹페이지 즐겨찾기