노드에서 Azure 함수를 작성합니다.js 구현 웹훅

본문은 #ServerlessSeptember의 일부분이다.이 allthings Serverless 내용에 집중하면 다른 유용한 글, 상세한 강좌, 동영상을 발견할 수 있습니다.월요일부터 목요일부터 9월까지 매주 지역사회 구성원과 클라우드 창도자들의 새로운 글이 발표된다.
icrosoft Azure에서 서버 없는 기능을 활성화하는 방법에 대한 자세한 내용은 를 참조하십시오https://docs.microsoft.com/azure/azure-functions/

소개


Zegami에서는 Hubspot을 사용하여 실제 고객 및 잠재 고객과의 관계를 추적합니다.그러나 우리의 클라우드 플랫폼에서 새로운 테스트 사용자 계정을 제공하는 과정은 우리의 CRM과 완전히 끊어진다.부족한 것은 간단한 자동화 방법이다. 이렇게 하면 우리 판매팀은 전체 과정을 관리할 수 있고 핵심 개발팀의 참여가 필요하지 않다.
우리의 최초의 계획은 사용자 계정을 만들기 위한 단독 백엔드 관리 포털을 만드는 것이었지만, 우리 판매팀은 원하지 않았다.그들은 생활과 호흡이 매우 긴장되어 다른 고객 정보 라이브러리를 더 이상 관리하고 싶지 않다.따라서 다음 작업은 Hubspot을 사용자 등록의 입구점으로 사용하고 사용자가 저희 Wordpress 사이트의 Hubspot 폼을 통해 등록할 때 자동으로 계정을 설정하는 과정입니다.

Hubspot을 관리 API에 연결


우리의 API는 사용자 계정을 제공하기 위한 관리 노드가 있습니다.이것은 승재 영패가 있어야만 조작을 허가할 수 있다.
Hubspot의 작업 흐름은 새 사용자가 등록할 때 웹 훅을 터치할 수 있도록 합니다.
그러면 Hubspot에서 끝점을 터치할 수 있습니까?아니요. Hubspot에서 보내는 웹 훅 요청을 설정할 옵션이 없습니다.우리는 필요한 영패를 제공할 수도 없고, API의 기대에 맞는 부하를 만들 수도 없습니다.
웹 훅을 처리하기 위해 API에 새로운 단점을 추가하는 것이 선택입니다.그러나 이렇게 하면 우리가 원래 간소화한 API의 표면적을 증가시키고 필요하지 않은 결합을 Hubspot에 도입할 수 있다.
반대로 우리는 웹 훅 트리거를 수신하고 API 요청을 보내는 간단한 브리지를 실현하기로 선택했다.Azure 기능은 이런 경량급 특정 서비스를 탑재하는 완벽한 방식이다.

Azure 기능


우리의 Azure 함수를 만들기 위해 Visual Studio 코드에 사용되는 Azure 도구를 광범위하게 사용했습니다.초기 설정부터 로컬 테스트와 배치까지 이 도구들은 기능 응용 프로그램을 쉽게 설정하는 데 없어서는 안 된다.
우선 어떤 언어를 사용할지 선택해야 한다.Azure 함수는 우리가 Zegami에서 익숙한 많은 언어, 즉 Javascript,Python, C를 지원한다.icrosoft technologies의 주요 언어는 C#이기 때문에 일부 Azure 함수 기능은 우선 이 언어에서 사용할 수 있거나 더욱 완전하게 실현될 수 있다.
그럼에도 불구하고 우리는 자바스크립트를 선택했다. 왜냐하면 그것은 우리가 가장 유창한 언어이기 때문이다. 특히 비동기적인 흐름과 네트워크를 처리할 때이다.필요한 모든 기능이 지원되지만 C 이외의 언어를 선택하면 현재 특성에 대한 언어 지원을 확인하는 것이 좋습니다.우리는 이전에 Javascript를 사용할 때 더 높은 트리거와 귀속 기능을 같은 방식으로 사용할 수 없다는 것을 발견했다.

설치


시작하고 실행하려면 Microsoft에서 제공하는 excellent guide 만 따릅니다.

함수 작성


함수 자체가 매우 간단하다.웹 훅 요청체에서 관련 필드를 추출하고 API에 요청만 하면 됩니다.
module.exports = async function (context, req) { 
  body = req.body; 

  // Get relevant details from body 
  const email = body.properties.email.value; 
  const firstname = body.properties.firstname && req.body.properties.firstname.value; 
  const lastname = body.properties.lastname && req.body.properties.lastname.value; 
  const name = `${firstname} ${lastname}`; 
  const company = body.properties.company && req.body.properties.company.value; 

  // Construct body for request to our API 
  payload = {name, email, company}; 
  body = JSON.stringify(payload); 

  // TODO - Execute request to our API 

  // Set webhook response details 
  context.res = { status: 200 } 
} 
지금 우리는 우리의 대기 사항을 기입해야만 진정으로 요청을 발송할 수 있다.노드js에는 내장된 http 모듈이 하나 있지만, 우리는 더욱 간결한 문법과 다른 코드와의 완전한 일치성을 실현하기 위해 노드 획득 모듈을 사용하기를 선호하기로 결정했다.
지침에 따르면 함수 응용 프로그램은 이미 package.json 파일을 첨부했기 때문에 우리는 npm install node-fetch 을 실행하기만 하면 이 패키지를 사용할 수 있다.
이제 파일 맨 위에 노드를 가져와서 얻을 수 있습니다.
const fetch = require(‘node-fetch’);
다음 사항으로 교체하십시오.
const signupUrl = process.env.API_SIGNUP_URL; 

const response = await fetch( 
  signupUrl, 
  { 
    method: 'POST', 
    body: signupBody, 
    headers: { 
      'Content-Type': 'application/json', 
    }, 
  },
); 
위에 호출해야 할 곳이 하나 더 있습니다. 그것이 바로 등록 URL의 출처입니다.함수 응용 프로그램은 외부에서 환경 변수를 지정하고 실행할 때 사용할 수 있도록 합니다.이것들은 모두 Azure 포털이나 Visual Studio 코드에서 유용한 Azure 도구를 통해 관리된다.
이 시스템은 원본 코드 관리 외에 기밀을 관리할 수 있고 로컬 테스트나 임시 저장/생산 실례의 다른 설정도 지원한다.
N, B. 간단하게 보기 위해서 나는 오류 응답을 적절하게 처리하고 메시지의 진실성을 검증하는 등 다른 중요한 세부 사항을 건너뛰었다.

국부 테스트


코드를 작성한 후, 우리는 지금 그것의 행동이 기대에 부합되는 것을 확보할 수 있다.다시 한 번, Visual Studio 코드는 여기에서 없어서는 안 되거나 없어서는 안 된다는 것이 증명되어 매우 간단하다. 디버깅 도구는 Google Chrome에서 익숙한 도구와 필적할 수 있다.

1단계: 디버거를 통해 함수 앱 실행



2단계: 기능 수행



그런 다음 수행에 필요한 바디를 제공할 수 있습니다.

유익한 것은 모든 테스트 요청에 기본 주체를 제공하기 위해 sample.dat 파일을 제공할 수 있다는 것이다.

ngrok와의 통합 검증


우리의 함수는 유효한 것 같지만, Hubspot이 보낸 데이터에 대해 어려운 가설을 했습니다.
나는 지금까지 나의 코드가 현실 세계의 데이터와 함께 일하는 것을 보았고 이상적인 상황은 작은 걸음으로 나의 가설을 검증하는 것을 볼 때까지 완전히 만족한 적이 없다.
이를 위해, 나는ngrok라는 실용 프로그램을 사용하여 터널을 열어 나의 로컬 운행 기능을 현실 생활의Hubspot이 촉발할 수 있는 곳에서 사용할 수 있도록 했다.다음 작업만 수행하면 됩니다.
npm install –g ngrok 
ngrok http 7071 
나의 로컬 환경은 현재 임시적이고 무작위로 생성된 공공 URL을 통해 접근할 수 있다.이런 방법을 사용하면 사이트에서 표를 작성하는 것부터 이 새로운 기능을 통과하는 절차를 검증할 수 있다.이외에, 이것은 우리로 하여금 Hubspot 웹hook 트리거가 제공하는 유효한 부하를 정확하게 볼 수 있게 하고, 우리의 메인 API를 호출하여 어떠한 의외의 문제를 디버깅할 수 있게 한다.

드워프스


우리는 지금 업무 기능이 하나 있는데, 우리가 해야 할 일은 바로 배치이다.다행히도 Visual Studio 코드는 다시 한 번 간단한 과정이 되었습니다. 몇 번만 누르면 저희 기능이 Azure 구독에 배치됩니다.위의 링크된 문서에서 이 과정을 설명합니다.
그러나 우리는 여기서 멈추지 않았다.비록 이것은 단지 작은 코드일 뿐이지만, 그것은 우리에게 매우 중요하기 때문에, 우리는 다른 서비스를 관리하는 것처럼 그것의 전체 생명 주기를 꼼꼼히 관리한다.
  • 대들보 건너기
  • 모든 코드는pull 요청
  • 을 통해master에 추가해야 합니다
  • 우리는 Azure Pipelines 우리의 eslint 규칙에 따라 코드를 자동으로 실행하도록 설정했습니다.이렇게 하면 스타일이 다른 모든 Javascript 코드와 일치합니다.
  • 배포
  • 아무리 편리해도 배치를 원할 때마다 VS 코드 GUI를 조작하는 것을 원하지 않습니다.다행히도 Azure CLI 우리가 Jenkins를 중심으로 하는 배치 과정의 나머지 부분과 통합하는 방식으로 자동화를 간단하게 한다.
  • 주의해야 할 것은 노드 모듈은 반드시 트리거 배치 환경에 설치해야 한다는 것이다.배포할 때 전체 node_modules 폴더가 Azure로 복사됩니다.
  • 모니터링
  • 우리는 Grafana를 사용하여 우리의 모든 생산 서비스를 감시한다.우수한 Grafana Azure plugin 덕분에 이 새로운 서비스에 계기판을 추가하는 것은 매우 쉬워졌다. 이것은 우리에게 사용 상황 통계 데이터를 표시하고 오류를 일깨워 줄 수 있다.
  • 찾았습니다.적은 노력으로 CRM 시스템을 API에 연결합니다.우리가 이 시스템을 내놓은 이래로 이 시스템은 줄곧 잘 운영되고 있으며, 우리는 Azure 기능을 사용하여 신속하게 기능을 개발하고 배치할 수 있는 다른 기회를 찾고 있다.

    좋은 웹페이지 즐겨찾기