IBM Cloud Docs
데이터 검색 및 분석을 위한 서버리스 웹 앱 및 이벤트

데이터 검색 및 분석을 위한 서버리스 웹 앱 및 이벤트

이 튜토리얼에서는 비용이 발생할 수 있습니다. Cost Estimator를 사용하여 예상 사용량을 기반으로 비용 추정값을 생성하십시오.

이 튜토리얼에서는 자동으로 저장소에 대한 GitHub 트래픽 통계를 수집하고 트래픽 분석에 대한 기반을 제공하는 애플리케이션을 작성합니다. GitHub는 최근 14일 동안의 트래픽 데이터에 대한 액세스만 제공합니다. 오랜 기간에 대한 통계를 분석하려는 경우에는 해당 데이터를 직접 다운로드하고 저장해야 합니다. 이 튜토리얼에서는 IBM Cloud Code Engine 프로젝트에 서버리스 앱을 배치합니다. 이 앱은 GitHub 저장소의 메타데이터를 관리하고 데이터 분석을 위한 통계에 대한 액세스를 제공합니다. 트래픽 데이터는 앱의 요청 시 또는 Code Engine 이벤트(예: 매일)에 의해 트리거될 때 GitHub에서 수집됩니다. 이 튜토리얼에서 설명된 앱은 싱글 테넌트 모드를 지원하는 초기 기능 세트를 사용하여 멀티 테넌트 지원 솔루션을 구현합니다.

아키텍처 다이어그램 * 튜토리얼의
다이어그램

목표

  • 멀티 테넌트 지원 및 보안 액세스를 사용하여 컨테이너화된 Python 데이터베이스 앱 배치
  • App ID를 OpenID Connect 기반 인증 제공자로 통합
  • GitHub 트래픽 통계의 자동화된 서버리스 콜렉션 설정

시작하기 전에

이 튜토리얼에는 다음 항목이 필요합니다.

  • IBM Cloud CLI
    • IBM Cloud Code Engine 플러그인
    • IBM Cloud® Container Registry 플러그인
  • GitHub 계정

IBM® Cloud Shell에서 쉘이 필요한 섹션을 실행할 수 있습니다.

튜토리얼 시작하기 안내서에는 사용자 운영 체제에 맞게 이 도구를 다운로드하고 설치하기 위한 지시사항이 있습니다.

서비스 및 환경 설정(쉘)

이 절에서는 필요한 서비스를 설정하고 환경을 준비합니다. 이는 모두 쉘 환경(터미널)에서 수행할 수 있습니다.

  1. 로그인하지 않은 경우, ibmcloud login 또는 ibmcloud login --sso 을 사용하여 대화형으로 로그인하십시오.

  2. ibmcloud target 명령을 실행하여 자원 그룹 및 리젼을 작성하십시오.

    RESOURCE_GROUP_NAME=Default
    REGION=us-south
    ibmcloud target -r $REGION -g $RESOURCE_GROUP_NAME
    
  3. 무료(Lite) 플랜으로 IBM Db2 SaaS 인스턴스를 작성하고 이름을 ghstatsDB로 지정하십시오.

    ibmcloud resource service-instance-create ghstatsDB dashdb-for-transactions free $REGION
    
  4. App ID 서비스의 인스턴스를 작성하십시오. ghstatsAppID를 이름으로 사용하고 누진 계층 플랜을 사용하십시오.

    ibmcloud resource service-instance-create ghstatsAppID appid graduated-tier $REGION
    
  5. 새 네임스페이스 ghstats를 IBM Cloud® Container Registry에 추가하십시오. 컨테이너 이미지를 참조하는 데 사용합니다. 하나의 글로벌 레지스트리와 지역 레지스트리가 있습니다. 글로벌 레지스트리를 사용하십시오.

    ibmcloud cr region-set global
    NAMESPACE=ghstatsYourInitials
    ibmcloud cr namespace-add $NAMESPACE
    

Code Engine 준비(쉘)

서비스가 프로비저닝되고 일반 설정이 완료되면 다음으로 Code Engine 프로젝트를 작성하고 앱의 컨테이너 이미지를 작성하고 배치합니다.

  1. ghstats라는 Code Engine 프로젝트를 작성하십시오. 명령은 이를 현재 Code Engine 컨텍스트로 자동 설정합니다.
    ibmcloud ce project create --name ghstats
    
  2. Code Engine 빌드 구성을 작성하십시오. 즉, 프로젝트를 설정하여 컨테이너 이미지를 빌드합니다. 이 튜토리얼을 위해 GitHub 코드를 가져와 등록된 사용자 정보를 사용하여 이전에 생성된 네임스페이스의 레지스트리에 이미지를 저장합니다.
    ibmcloud ce build create --name ghstats-build --source https://github.com/IBM-Cloud/github-traffic-stats  --context-dir /backend --commit master --image private.icr.io/$NAMESPACE/codeengine-ghstats
    
  3. 빌드 작성 명령은 프로젝트가 IBM Cloud® Container Registry을 쓰고 읽을 수 있도록 허용하는 레지스트리 액세스 시크릿을 작성하는 부작용이 있습니다.
    ibmcloud ce registry list
    
  4. 그런 다음 실제 빌드 프로세스를 실행하십시오.
    ibmcloud ce buildrun submit --build ghstats-build
    
    출력은 진행 중인 빌드의 상태 로그를 따르기 위해 실행할 추가 명령을 표시합니다. 다음과 같습니다.
    ibmcloud ce buildrun logs -f -n ghstats-build-run-123456-123456789
    

앱 배치(쉘)

빌드가 준비되면 컨테이너 이미지를 사용하여 앱을 배치한 후 이전에 프로비저닝된 서비스를 바인드할 수 있습니다.

  1. 앱을 배포한다는 것은 ghstats-app이라는 Code Engine 생성하는 것을 의미합니다. 지정된 레지스트리 및 네임스페이스에서 이미지를 가져옵니다.

    ibmcloud ce app create --name ghstats-app --image private.icr.io/$NAMESPACE/codeengine-ghstats:latest --registry-secret ce-auto-icr-private-global
    

    앱이 배치되면 출력에 표시된 URL에서 사용 가능한지 확인할 수 있습니다. 앱이 구성되어 있지 않으므로 아직 사용할 수 없습니다. ibmcloud ce app list를 사용하여 배치 상태를 확인하거나 ibmcloud ce app get --name ghstats-app을 실행하여 세부사항을 확인할 수 있습니다.

    기본적으로 최소 스케일링은 0입니다. 즉, Code Engine 애플리케이션에 워크로드가 없는 경우 실행 중인 인스턴스를 0으로 줄입니다. 이렇게 하면 비용이 절감되지만 0에서 다시 스케일링 업이 수행될 때 짧은 앱 다시 시작이 필요합니다. 앱을 작성하거나 업데이트할 때 매개변수 --min 1을 사용하여 이를 방지할 수 있습니다.

  2. 프로비저닝된 서비스를 활용하려면 앱에 바인드해야 합니다. 먼저 IBM Db2 SaaS를 바인드한 다음 App ID를 바인드하십시오.

    ibmcloud ce application bind --name ghstats-app --service-instance ghstatsDB
    
    ibmcloud ce application bind --name ghstats-app --service-instance ghstatsAppID
    

    application bind 는 다음과 같은 자원 및 관계를 작성합니다.

    1. IAM Service ID.
    2. IAM API키는 IAM Service ID에서 작성됩니다.
    3. 자원 서비스 키입니다. 이를 IBM Cloud 콘솔에서서비스 인증 정보 라고 합니다. 다음 명령을 시도하여 App ID 항목을 표시하십시오.
    ibmcloud resource service-keys  --instance-name ghstatsAppID
    

    서비스를 앱에 바인딩하는 대신 시크릿 또는 configmaps 를 사용할 수도 있습니다. 파일에 저장된 값으로 채우거나 리터럴로 전달할 수 있습니다. 비밀번호와 관련된 지침에 대한 샘플 파일은 이 튜토리얼의 GitHub 있습니다.

App ID 및 GitHub 구성(브라우저)

다음과 같은 단계는 모두 인터넷 브라우저를 사용하여 수행됩니다. 먼저 Cloud Directory를 사용하고 해당 앱에 대한 작업을 수행하도록 App ID를 구성합니다. 그런 다음 GitHub 액세스 토큰을 작성합니다. 앱에서 트래픽 데이터를 검색하는 데 필요합니다.

  1. IBM Cloud® 리소스 목록에서 서비스의 개요를 여십시오. 서비스 섹션에서 App ID 서비스의 인스턴스를 찾으십시오. 해당 항목을 클릭하여 세부사항을 여십시오.

  2. 서비스 대시보드에서 왼쪽에 있는 메뉴의 인증 관리를 클릭하십시오. 그러면 Facebook, Google, SAML 2.0 Federation 및 Cloud Directory 등의 사용 가능한 ID 제공자의 목록을 가져옵니다. Cloud Directory를 사용으로 전환하고 다른 모든 제공자는 사용 안함으로 전환하십시오.

    MFA(Multi-Factor Authentication) 및 고급 비밀번호 규칙을 구성할 수 있습니다. 이에 대해서는 이 튜토리얼의 일부로 다루지 않습니다.

  3. 동일한 대화 상자에서 인증 설정 탭을 클릭하십시오. 웹 경로 재지정 URL 추가에서 애플리케이션의 url/redirect_uri를 추가하여 입력하십시오. 예를 들어, https://ghstats-app.56ab78cd90ef.us-south.codeengine.appdomain.cloud/redirect_uri입니다.

    앱을 로컬로 테스트하는 경우 경로 재지정 URL은 http://127.0.0.1:5000/redirect_uri입니다. 여러 경로 재지정 URL을 구성할 수 있습니다. 로컬로 앱을 테스트하려면 .env.local.template.env에 복사하고 수정한 다음 python3 ghstats.py를 사용하여 앱을 시작하십시오.

  4. 왼쪽의 메뉴에서 Cloud Directory를 펼치고 사용자를 클릭하십시오. 그러면 Cloud Directory에서 사용자의 목록이 열립니다. 사용자 작성 단추를 클릭하여 자신을 첫 번째 사용자로 추가하십시오. 이제 App ID 서비스 구성이 완료되었습니다.

  5. 브라우저에서 Github.com 방문하여 설정 -> 개발자 설정 -> 개인 액세스 토큰 으로 이동합니다. 새 토큰 생성(클래식 ) 버튼을 클릭합니다. 참고GHStats Tutorial 을 입력하십시오. 그런 다음 repo 카테고리 아래의 public_repoadmin:org 아래의 read:org를 사용으로 설정하십시오. 이제 해당 페이지의 맨 아래에서 토큰 생성을 클릭하십시오. 새 액세스 토큰이 다음 페이지에 표시됩니다. 이는 다음 애플리케이션 설정 중에 필요합니다.

    GitHub 액세스 토큰
    GitHub 액세스 토큰

Python 앱 구성 및 테스트

준비 후 앱을 구성하고 테스트합니다. 이 앱은 인기 있는 플라스크 마이크로프레임워크를 사용하여 Python 로 작성되었습니다. 통계 콜렉션을 위한 저장소를 추가하거나 제거할 수 있습니다. 테이블 보기 또는 선형 차트로 트래픽 데이터에 액세스할 수 있습니다.

  1. 브라우저에서 배치된 앱의 URI를 여십시오. 시작 페이지가 표시됩니다.

    시작 화면
    시작 화면

  2. 브라우저에서 /admin/initialize-app을 URI에 추가한 후 페이지에 액세스하십시오. 이는 애플리케이션 및 해당 데이터를 초기화하는 데 사용됩니다. 초기화 시작 단추를 클릭하십시오. 그러면 비밀번호로 보호된 구성 페이지로 이동합니다. 로그인하는 데 사용되는 이메일 주소를 시스템 관리자의 ID로 사용합니다. 이전에 구성한 이메일 주소 및 비밀번호를 사용하십시오.

  3. 구성 페이지에서 이름(인사를 위해 사용됨), GitHub 사용자 이름 및 이전에 생성된 액세스 토큰을 입력하십시오. 초기화를 클릭하십시오. 그러면 데이터베이스 테이블이 작성되고 일부 구성 값이 삽입됩니다. 마지막으로, 이는 시스템 관리자 및 테넌트에 대한 데이터베이스 레코드를 작성합니다.

    첫 번째 단계
    첫 번째 단계

  4. 완료되면 관리 저장소 목록으로 이동합니다. 이제 GitHub 계정 또는 조직의 이름 및 저장소의 이름을 제공하여 저장소를 추가할 수 있습니다. 데이터를 입력한 후 저장소 추가를 클릭하십시오. 새로 지정된 ID와 함께 저장소가 테이블에 표시되어야 합니다. 저장소 ID를 입력하고 저장소 삭제을 클릭하여 시스템에서 저장소를 제거할 수 있습니다.

    저장소 목록
    저장소 목록

  5. 테스트를 위해 관리를 클릭한 후 통계 수집을 클릭하십시오. 이는 요청 시 트래픽 데이터를 검색합니다. 그런 다음 저장소일별 트래픽을 클릭하십시오. 그러면 수집된 데이터가 표시됩니다.

    트래픽 데이터
    트래픽 데이터

일별 데이터 검색 설정(쉘)

앱을 배치하고 구성한 후 마지막 파트는 GitHub 트래픽 데이터의 일일 검색을 시작하는 것입니다. Cron 구독을 작성하려고 합니다. 크론 작업 과 유사하게, 이 앱은 지정된 일정에 따라 이벤트를 구독합니다(이벤트링).

  1. /collectStats 경로에서 POST 이벤트를 사용하여 매일 오전 6시(UTC)에 Cron 구독 ghstats-daily를 작성하십시오. SECRET_TOKEN_AS_IDENTIFIER를 선택한 시크릿 값으로 바꾸십시오. 앱에 대한 이벤트 제공자를 식별하는 데 사용됩니다.

    ibmcloud ce subscription cron create --name ghstats-daily --destination ghstats-app --path /collectStats --schedule '0 6 * * *' --data '{"token":"SECRET_TOKEN_AS_IDENTIFIER"}' --content-type application/json
    
  2. 시크릿 토큰을 앱에 알리려면 앱을 업데이트하십시오. SECRET_TOKEN_AS_IDENTIFIER를 이전 단계에서 선택한 값으로 바꾸십시오.

    ibmcloud ce app update --name ghstats-app --registry-secret usicr --env EVENT_TOKEN=SECRET_TOKEN_AS_IDENTIFIER
    

    이렇게 하면 새 앱 개정이 작성됩니다. 앱에서 관리로 이동한 다음 시스템 로그로 이동할 때 앱에서 이벤트를 수신하고 처리했는지 확인할 수 있습니다.

    위의 명령은 매일 UTC 오전 6시에 스케줄을 작성합니다. 이벤트가 작동하는지 직접 확인하려면 현재 시간보다 몇 분 후 UTC로 변환된 시간을 선택하십시오.

결론

이 튜토리얼에서는 IBM Cloud Code Engine에 서버리스 앱을 배치했습니다. 앱 소스는 GitHub 저장소에서 가져옵니다. 컨테이너 이미지를 빌드하고 Code Engine에 저장하도록 IBM Cloud® Container Registry에 지시했습니다. 그 다음에는 레지스트리에서 가져와 컨테이너로 배치되었습니다. 앱은 IBM Cloud 서비스에 바인드됩니다.

앱 및 연관된 이벤트를 통해 GitHub 저장소의 트래픽 데이터를 자동으로 검색할 수 있습니다. 테넌트별 액세스 토큰을 포함하여 해당 저장소에 대한 정보는 SQL 데이터베이스(IBM Db2 Warehouse SaaS)에 저장됩니다. 이 데이터베이스는 Python 앱에서 사용자 및 저장소를 관리하고 트래픽 통계를 표시하는 데 사용됩니다. 사용자는 검색 가능한 테이블에서 또는 간단한 선형 차트로 시각화된 트래픽 통계를 볼 수 있습니다(아래 이미지 참조). 저장소 목록 및 트래픽 데이터를 CSV 파일로 다운로드할 수도 있습니다.

선형 차트
선형 차트

보안: 서비스 인증 정보 순환

프로덕션에서 이 솔루션을 사용하는 경우, 정기적으로 서비스 인증 정보를 순환시켜야 합니다. 많은 보안 정책에는 90일마다 또는 유사한 빈도로 비밀번호와 인증 정보를 변경해야 하는 요구사항이 있습니다.

바인딩을 해제하여 앱에 바인딩된 서비스의 인증 정보를 다시 작성한 후 서비스를 다시 바인딩할 수 있습니다. 서비스 바인딩 대신 보안 시크릿을 사용하는 경우 먼저 서비스 키를 다시 작성한 다음 보안 시크릿을 업데이트하고 마지막 단계로 앱을 업데이트하여 더 많은 옵션을 사용할 수 있습니다.

자원 제거

이 튜토리얼에 사용된 리소스를 정리하기 위해 관련 프로젝트 및 서비스를 삭제할 수 있습니다.

  1. 프로비저닝된 서비스를 바인드 해제하십시오. 먼저 바인딩을 표시한 후 서비스 바인딩 이름 으로 삭제하십시오 (아래의 FIRST및 SECOND는 가져오기 출력에서 가져옴).
    ibmcloud ce application get --name ghstats-app
    
    ibmcloud ce application unbind --name ghstats-app --binding ghstats-app-ce-service-binding-FIRST
    
    ibmcloud ce application unbind --name ghstats-app --binding ghstats-app-ce-service-binding-SECOND
    
  2. 프로젝트 및 해당 컴포넌트를 삭제하십시오.
    ibmcloud ce project delete --name ghstats --hard -f
    
  3. 서비스를 삭제하십시오.
    ibmcloud resource service-instance-delete -f ghstatsDB
    
    ibmcloud resource service-instance-delete -f ghstatsAppID
    
  4. Container Registry 네임스페이스 삭제
    ibmcloud cr namespace-rm $NAMESPACE -f
    
  5. Github.com 토큰 삭제

리소스에 따라 즉시 삭제되지 않고 보유될 수 있습니다(기본 7일 동안). 리소스를 영구적으로 삭제하여 재확보하거나 보유 기간 내에 리소스를 복원할 수 있습니다. 리소스 재확보 사용 방법은 이 문서를 참조하십시오.

튜토리얼 확장

이 튜토리얼에 추가하거나 이 튜토리얼을 변경하시겠습니까? 몇 가지 방법은 다음과 같습니다.

  • 멀티 테넌트 지원을 위해 앱을 확장하십시오.
  • 소셜 ID 제공자를 사용하십시오.
  • 날짜 선택도구를 통계 페이지에 추가하여 표시된 데이터를 필터링하십시오.
  • App ID에 대해 사용자 정의 로그인 페이지를 사용하십시오.

관련 컨텐츠

이 튜토리얼에서 다루는 주제에 대한 추가 정보에 대한 링크는 다음과 같습니다. 이 앱 자체는 이 GitHub 저장소에서 이용 가능합니다.

문서: