나만의 GeoIP 서비스 1/2: Maxmind GeoIP + AWS SAM

8793 단어 lambdageoipmaxmindaws

요건



이것은 start-from-subzero 자습서가 아니므로 이 첫 번째 게시물을 시작하기 전에 컴퓨터에 몇 가지 설치 및 작업이 필요합니다.
  • 시스템에 Docker가 설치됨
  • AWS 활성 계정
  • 시스템에서 작동하는 AWS SAM CLIhttps://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html

  • GeoIP 타사 서비스 사용에 대한 많은 문헌이 있지만 프로젝트에서 사용할 DIY GeoIP 엔드포인트를 플레이하고 테스트하고 싶다면 두 개의 게시물을 통해 저를 팔로우하고 수행 방법을 확인해 보겠습니다.

    최종 목표인 "IP를 쿼리 매개변수로 수신하고 국가 및 도시와 같은 위치 정보를 반환하는 내 엔드포인트"에 대해 명확히 합시다. 이 목표를 달성하기 위해 다음 기술/서비스를 사용할 것입니다.

    맥스마인드



    우선, Maxmind(https://dev.maxmind.com/geoip/geoip2/geolite2/)는 사용할 수 있는 무료 GeoIP(제한된) 데이터베이스 그룹을 제공합니다. 위 URL의 지침에 따라 "GeoLite2 City"를 다운로드하십시오.





    나중에 사용할 수 있도록 "GeoLite2-City.mmdb"파일을 찾습니다.

    이제 https://github.com/maxmind/GeoIP2-node에서 API의 NodeJS 사용량을 확인하겠습니다. 걱정하지 마세요. 잠시 후 몇 줄의 코드를 추가할 것입니다.

    AWS 서버리스 애플리케이션 관리자(SAM)



    SAM을 사용하면 적은 노력으로 서버리스 애플리케이션을 구축하고 배포할 수 있습니다. SAM은 전체 애플리케이션을 구축하기 위해 완전한 REST 기능을 제공하는 데 중점을 두고 있지만 Lambda 함수를 관리, 호출 및 배포하는 데만 SAM을 사용할 것입니다.

    SAM을 설치하고 시작하는 것은 이 게시물의 범위를 벗어나므로 공식 문서를 따라 수행할 수 있습니다https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html.

    컴퓨터에서 SAM이 작동할 때마다 다음 단계를 따르십시오.
  • dev 플레이그라운드 폴더 및 exec로 이동합니다sam init. 다음 스크린샷과 같이 프로젝트를 설정합니다.
  • 임원 cd geoIPNode
  • Execsam local invoke 이것은 template.yml에서 기본값을 실행하므로 다음 출력이 표시되어야 합니다(참고: 컴퓨터에 Docker가 필요합니다):
  • 우리는 이미 시스템에서 Lambda 함수를 성공적으로 실행했습니다. 좋습니다. 정말 좋습니다.

  • 다시 맥마인드



    https://github.com/maxmind/GeoIP2-node으로 돌아가 해당 페이지에서 NodeJS 코드를 확인합니다. Buffer 예를 사용합니다.

    const fs = require('fs');
    const Reader = require('@maxmind/geoip2-node').Reader;
    // Typescript:
    // import { Reader } from '@maxmind/geoip2-node';
    
    const dbBuffer = fs.readFileSync('/usr/local/city-database.mmdb');
    const reader = Reader.openBuffer(dbBuffer);
    
    console.log(reader.city('1.1.1.1'));
    


    *.mmdb 파일이 어디에 있는지 기억하십니까? 다음과 같은 폴더 구조를 얻기 위해 프로젝트 폴더 안에 넣어야 합니다.



    이제 이에 대한 초기 코드 교체를 추가합니다(귀하의 IP에 대해 1.1.1.1 교체).

    const fs = require('fs');
    const Reader = require('@maxmind/geoip2-node').Reader;
     exports.helloFromLambdaHandler = async () => {
        let response={};
    
        const dbBuffer = fs.readFileSync('GeoLite2-City.mmdb');
        const reader = Reader.openBuffer(dbBuffer);
    
        try {
            // const ret = await axios(url);
            response = {
                'statusCode': 200,
                'body': JSON.stringify({
                    message: 'hello world',
                    city: reader.city('1.1.1.1').city
                })
            }
        } catch (err) {
            console.log(err);
            return err;
        }
    
        return response
    }
    


    참고: Yarn 또는 NPM을 사용하여 설치@maxmind/geoip2-node하는 것을 잊지 마십시오. 예를 들면 다음과 같습니다.
    npm install @maxmind/geoip2-node
    간부 다시 sam local invoke :



    그것은 쉽다.

    두 번째 부분은 이미 .

    좋은 웹페이지 즐겨찾기