주:

OCI 로드 밸런서 HTTP 요청을 기반으로 Oracle Cloud Infrastructure 인스턴스 풀 자동 스케일링

소개

이 사용지침서에서는 OCI 로드 밸런서가 수신한 HTTP 요청 수를 기반으로 OCI(Oracle Cloud Infrastructure) 인스턴스 풀을 자동으로 확장하는 방법을 알아봅니다. 세 가지 주요 주제를 다룰 것입니다.

OCI 모니터링: OCI 모니터링 서비스를 사용하면 측정 지표 및 알람 기능을 통해 클라우드 리소스를 능동적이고 수동적으로 모니터링할 수 있습니다. OCI Monitoring 서비스는 측정항목을 사용하여 리소스 및 알람을 모니터링하여 해당 측정항목이 알람 지정 트리거를 충족할 때 통지합니다.

OCI Notifications: OCI의 리소스 관련 문제가 발생하면, 알람, 이벤트 규칙, 커넥터를 사용해 이메일 및 문자 메시지(SMS)를 포함한 지원되는 엔드포인트를 통해 사람이 읽을 수 있는 메시지를 얻을 수 있습니다. 또한 커스텀 HTTPS 엔드포인트 및 OCI Functions를 통해 작업을 자동화할 수 있습니다.

OCI Functions: OCI Functions는 확장성이 뛰어난 완전 관리형 다중 테넌트, 온디맨드 FaaS(Functions-as-a-Service) 플랫폼입니다. 엔터프라이즈급 OCI를 기반으로 구축되었으며 Fn Project 오픈 소스 엔진을 기반으로 합니다. 비즈니스 요구사항을 충족하기 위해 코드를 작성하는 데 집중하려면 OCI Functions(Functions라고도 부르기도 하고 Oracle Functions라고도 부르기도 함)를 사용하십시오.

높은 수준의 아키텍처

T3_1

참고:

목표

필요 조건

작업 1: 동적 그룹 설정

도메인으로 이동하여 동적 그룹을 누르고 다음 그룹을 생성합니다.

동적 그룹 이름: MyFunctions.

ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}

태스크 2: 정책 생성

정책으로 이동하여 다음 정책을 생성합니다.

정책 이름: FunctionsPolicies.

Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage compute-management-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage load-balancers in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read metrics in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read alarms in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-pools in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read app-catalog-listing in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use volume-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use virtual-network-family in compartment YOUR-COMPARTMENT-NAME

작업 3: OCI 컨테이너 레지스트리 생성

  1. 개발자 서비스로 이동하여 컨테이너 레지스트리를 누르고 Fn 이미지에 대한 전용 저장소를 생성합니다.

    저장소 이름: lab/fn-autoscale-instance-pool.

    T3_1

  2. 저장소를 확인하고 네임스페이스를 확인합니다.

    T3_1

  3. OCI CLI 및 Docker가 설치된 터미널 셸을 열고 레지스트리에서 로그인을 계속합니다. 해당 지역의 올바른 URL을 확인하십시오. 이 자습서에서는 레지스트리 URL이 gru.ocir.io브라질 동부(상파울로) 지역을 사용합니다.

    docker login gru.ocir.io
    Username: <your container namespace>/youruser
    Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
    

    T3_3

작업 4: Python OCI 함수를 생성하여 인스턴스 풀 자동 스케일 조정

주: 스트림 풀과 동일한 서브넷인 전용 서브넷을 선택했는지 확인하십시오.

  1. OCI 콘솔로 이동하고 개발자 서비스를 누릅니다. 함수에서 애플리케이션애플리케이션 생성을 누릅니다.

    T9_1

  2. 몇 가지 구성을 작성하여 축척 크기를 설정합니다.

    주: 이러한 구성 변수는 함수가 인스턴스 풀을 스케일 인 및 스케일 아웃하는 데 사용할 값을 결정하는 데 사용됩니다.

    암호 이름
    INSTANCE_POOL_TARGET_SIZE 새 인스턴스 풀 크기에 대한 값 설정
    INSTANCE_POOL_DESIRED_SIZE 일반 인스턴스 풀 크기 설정

    이 자습서에서는 인스턴스 1개 풀을 사용하고 2로 스케일 아웃합니다.

    T4_2

  3. Docker, OCI CLI, Fn Project CLI가 설치된 터미널 셸로 이동하고 다음 명령을 실행하여 기능을 초기화합니다.

    주: 작업을 수행한 경우 현재 Docker 로그인 명령이 이미 실행되어 있으면 작업 3.3에서 Docker 로그를 계속 진행하십시오.

    mkdir lab
    cd lab
    fn create context oci-cloud --provider oracle
    fn use context oci-cloud
    fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID
    fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com
    fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab
    fn init --runtime python fn-autoscale-instance-pool
    cd fn-autoscale-instance-pool
    ls -lrt
    

    주: 이 자습서에서는 브라질 동부(상파울로) 지역을 사용하고 있습니다. 다른 지역을 사용하는 경우 api-urlregistry 위치를 변경해야 합니다.

    T4_3

    init 명령은 func.py에 Hello World 함수를 생성합니다. 이 코드를 덮어씁니다.

  4. func.py에서 Python 함수 샘플 코드를 가져오고 init 함수 명령 중 생성된 로컬 func.py을 덮어씁니다.

    # Copy the function code from this lab and save it on /tmp/func.py in your shell machine
    ls -lrt /tmp/func.py
    
    # Overwrite the func.py with tha lab's code
    cp /tmp/func.py func.py
    
    # Add the OCI package on the requirements.txt file, this will be needed to work with OCI.
    echo -e "\noci" >> requirements.txt
    
    # Check if requirements.txt has two lines
    cat requirements.txt
    

    T9_1

  5. 새 코드를 작성하고 함수를 배치합니다.

    ls -lrt
    fn deploy --app MyApp
    

    T4_1

작업 5: OCI 통지 생성

  1. OCI 콘솔로 이동하고 개발자 서비스를 누릅니다. 애플리케이션 통합에서 통지를 선택하고 항목 생성을 누릅니다.

    이름: AutoScaleTopic.

    T5_1

  2. 구독을 눌러 새 구독을 생성하고 태스크 4에서 생성된 함수를 선택합니다.

    T5_2

작업 6: 스케일 아웃할 알람 정의 생성(대상 값으로 인스턴스 풀 크기 조정)

  1. OCI 콘솔로 이동하고 관찰성 및 관리를 누릅니다. 모니터링에서 알람 정의를 선택하고 알람 생성을 누릅니다.

    주: 튜토리얼에 대해 임계값, 이 알람 간격이 정의되며 애플리케이션에 따라 필요에 따라 사용자 정의할 수 있습니다.

    알람 이름: instance_pool_scale_OUT.

  2. 알람을 정의하려면 다음 정보를 입력합니다.

    1. 측정항목 설명 섹션에서 다음 정보를 입력합니다.

      • 측정항목 네임스페이스: oci_lbaas.
      • 메트릭 이름: HttpRequests.
      • 간격: 1 minute.
      • 통계: Max.
    2. 측정항목 차원 섹션에서 다음 정보를 입력합니다.

      • 첫번째 측정항목 차원:

        • 차원 이름: resourceID.
        • 차원 값: 로드 밸런서 OCID를 선택합니다.
      • 두번째 측정항목 차원:

        • 차원 이름: backendSetName.
        • 차원 값: backendSet 이름을 선택합니다.

      T6_1

    3. 트리거 규칙 1 섹션에서 다음 정보를 입력합니다.

      • 연산자: greater than.
      • 값: 30.
      • 알람 본문: 접속 수가 예상보다 많습니다. 스케일링 프로세스를 시작하십시오.

      T6_1

  3. 다음 정보를 입력하여 알람 통지를 정의합니다.

    1. 대상 섹션에 다음 정보를 입력합니다.

      • 대상 서비스: 통지를 선택합니다.
      • 컴파트먼트: 해당 컴파트먼트를 선택합니다.
      • 항목: 항목을 선택합니다.
    2. 메시지 형식 섹션에서 예쁜 JSON 메시지 전송(줄바꿈이 있는 원시 텍스트)을 선택하고 테스트 목적으로 통지 반복?을 1분 통지 빈도로 선택합니다.

    T6_1

  4. 고급 옵션을 누르고 새 태그를 추가합니다.

    주: 스케일 인 또는 아웃 유형을 정의하기 위한 필수 태그 지정입니다.

    태그 네임스페이스: 없음(자유 형식 태그 적용)을 선택합니다.
    태그 키: autoscaling_type. 값: out.

    T6_1

작업 7: 확장할 알람 정의 생성(인스턴스 풀 크기를 원하는 크기로 다시 조정)

  1. OCI 콘솔로 이동하고 관찰성 및 관리를 누릅니다. 모니터링에서 알람 정의를 선택하고 알람 생성을 누릅니다.

    주: 튜토리얼에 대해 임계값, 이 알람 간격이 정의되며 애플리케이션에 따라 필요에 따라 사용자 정의할 수 있습니다.

    알람 이름: instance_pool_scale_IN.

  2. 알람을 정의하려면 다음 정보를 입력합니다.

    1. 측정항목 설명 섹션에서 다음 정보를 입력합니다.

      • 측정항목 네임스페이스: oci_lbaas.
      • 메트릭 이름: HttpRequests.
      • 간격: 1 minute.
      • 통계: Max.
    2. 측정항목 차원 섹션에서 다음 정보를 입력합니다.

      • 첫번째 측정항목 차원:

        • 차원 이름: resourceID.
        • 차원 값: 로드 밸런서 OCID를 선택합니다.
      • 두번째 측정항목 차원:

        • 차원 이름: backendSetName.
        • 차원 값: backendSet 이름을 선택합니다.
    3. 트리거 규칙 1 섹션에서 다음 정보를 입력합니다.

      • 연산자: less than.
      • 값: 30.
      • 알람 본문: 접속 수가 허용 가능한 값으로 되돌아가서 인스턴스 수를 원하는 값으로 다시 줄이기 위해 스케일 인을 호출합니다.

      T7_1

  3. 다음 정보를 입력하여 알람 통지를 정의합니다.

    1. 대상 섹션에 다음 정보를 입력합니다.

      • 대상 서비스: 통지를 선택합니다.
      • 컴파트먼트: 해당 컴파트먼트를 선택합니다.
      • 항목: 항목을 선택합니다.
    2. 메시지 형식 섹션에서 Send Pretty JSON messages (raw text with line breaks)를 선택합니다.

  4. 고급 옵션을 누르고 새 태그를 추가합니다.

    주: 스케일 인 또는 아웃 유형을 정의하기 위한 필수 태그 지정입니다.

    태그 네임스페이스: 없음(자유 형식 태그 적용)을 선택합니다.
    태그 키: autoscaling_type. 값: in.

    T7_1

작업 8: 로드 만들기 및 알람 작동 확인

  1. LoadBalancer IP를 가져와서 80 포트에서 애플리케이션에 대한 여러 호출을 실행합니다. 셸 콘솔을 열고 다음 코드를 실행하여 로드 밸런서를 호출합니다.

    i=1
    while true
    do
    echo "Request $i"
       curl http://your-ip-here
       ((i++))
       echo ""  # Prints a newline for better readability between requests
    done
    

    단순 애플리케이션 로드의 출력입니다.

    T8_1

    주: 시나리오를 보여주기 위한 간단한 HTTP Apache 웹 서버입니다.

  2. 인스턴스 풀의 실제 크기와 상태를 확인하십시오. 이 자습서에서는 크기가 1인 인스턴스 풀이 있습니다.

    T8_1

  3. 알람 정의를 열어 측정항목을 확인하고 알람이 실행될지 확인하십시오.

    T8_1

    T8_1

  4. 측정항목 간격에 따라 몇 분 후 스케일 아웃 함수가 실행됩니다.

    인스턴스 풀을 열고 상태(확장)와 대상 인스턴스 수2인지 확인합니다.

    T8_1

    크기 조정 프로세스가 완료되면 인스턴스 풀 크기가 2인 것을 확인할 수 있습니다.

    T8_1

  5. 셸 스크립트를 중지하고 스케일 아웃 전환의 알람이 다시 확인으로 돌아갈 때까지 기다린 다음 스케일 인에 대한 알람을 확인합니다. 두 알람이 모두 업데이트될 때까지 몇 분 동안 기다린 후 스케일 인에 대한 알람이 실행될 때를 확인합니다.

    T8_1

    이제 스케일 인 알람이 화재 상태입니다.

    T8_1

    HttpRequests가 임계값 30보다 낮은 숫자로 떨어졌음을 알 수 있습니다.

    T8_1

    인스턴스 풀 스케일 인이 시작되었습니다.

    T8_1

    인스턴스 풀 크기가 원하는 1 값으로 돌아갑니다.

    T8_1

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.