주:
- 이 사용지침서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 마치면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체합니다.
OCI 로드 밸런서 HTTP 요청을 기반으로 Oracle Cloud Infrastructure 인스턴스 풀 자동 스케일링
소개
이 사용지침서에서는 OCI 로드 밸런서가 수신한 HTTP 요청 수를 기반으로 OCI(Oracle Cloud Infrastructure) 인스턴스 풀을 자동으로 확장하는 방법을 알아봅니다. 세 가지 주요 주제를 다룰 것입니다.
- OCI 모니터링 알람 측정지표: 로드 밸런서를 모니터링하고 HTTP 요청 측정지표를 기반으로 알람을 설정합니다.
- OCI Notifications 서비스: 알람이 트리거되면 통지를 전송합니다.
- OCI 함수: 함수를 생성 및 사용하여 수신된 통지를 기반으로 인스턴스 풀의 크기를 조정합니다.
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라고도 부르기도 함)를 사용하십시오.
높은 수준의 아키텍처
참고:
이 튜토리얼은 교육 및 학습 목적으로만 설계되었습니다. 그것은 학습자가 실험하고 제어 환경에서 실제 경험을 얻을 수있는 환경을 제공합니다. 이 자습서에 사용된 보안 구성 및 연습은 실제 시나리오에 적합하지 않을 수 있습니다.
실제 응용 프로그램에 대한 보안 고려 사항은 훨씬 더 복잡하고 동적입니다. 따라서 여기 프로덕션 환경에서 시연된 기술이나 구성을 구현하기 전에 포괄적인 보안 평가 및 검토를 수행하는 것이 필수적입니다. 이 검토에는 액세스 제어, 암호화, 모니터링 및 규정 준수를 포함한 보안의 모든 측면이 포함되어 시스템이 조직의 보안 정책 및 표준에 부합하도록 해야 합니다.
랩 환경에서 실제 배포로 전환할 때 보안은 항상 최우선 과제여야 합니다.
목표
-
OCI 인스턴스 풀에 대한 자동 스케일링 방식을 설정합니다. 이 자동 스케일링 방식은 OCI 로드 밸런서가 수신한 HTTP 요청 수를 기반으로 합니다. 학습 내용:
-
HTTP 요청 측정항목 모니터: 로드 밸런서에서 HTTP 요청 측정항목을 추적하도록 OCI 모니터링을 설정합니다.
-
알람 생성 및 구성: 특정 HTTP 요청 임계값을 기반으로 트리거되는 알람을 정의 및 구성합니다.
-
이벤트 알림 설정: 알람이 트리거될 때 경고하도록 이벤트 알림을 설정합니다.
-
OCI 함수 구현: 트리거된 알람에 대한 응답으로 인스턴스 풀의 크기를 자동으로 조정하는 함수를 생성하고 배치합니다.
-
필요 조건
-
OCI 환경
-
관리자 권한이 있는 Oracle 계정입니다.
-
리소스를 생성할 구획입니다.
주: 구획 이름 및 구획 ID를 기록해 둡니다.
-
전용 서브넷이 있는 VCN입니다. 자세한 내용은 가상 클라우드 네트워크 생성을 참조하십시오.
-
backendSet가 풀의 인스턴스를 가리키는 인스턴스 풀에 연결된 OCI 로드 밸런서입니다. 자세한 내용은 로드 밸런서 생성을(를) 참조하십시오.
-
80
포트에서 실행되는 단순 HTTP 애플리케이션이 있는 인스턴스가 하나 이상 있는 인스턴스 풀입니다. 자세한 내용은 인스턴스 구성 및 인스턴스 풀 사용을 참조하십시오.
-
-
로컬 시스템 환경
-
전용 서브넷의 Oracle Linux 컴퓨트 인스턴스입니다. 이는 이 자습서 중에 배포될 OCI Streaming 및 OCI Functions와 같은 전용 서브넷의 리소스에 액세스하는 데 중요합니다.
-
Oracle Linux 컴퓨트 인스턴스에 접속하고 자습서 작업을 수행하기 위한 OCI 배스천 호스트입니다. 자세한 내용은 Bastion Overview를 참조하십시오.
-
로컬 Oracle Cloud Infrastructure 명령행 인터페이스(OCI CLI)를 설정합니다. 자세한 내용은 Installing the CLI를 참조하십시오.
-
Oracle Linux를 사용하는 경우 이미지를 빌드할 수 있는 로컬 Docker는 Docker: Install Docker on Oracle Linux 8 (OL8)를 참조하십시오.
-
OCI에 함수를 배포할 수 있는 로컬 FN CLI입니다. 자세한 내용은 Installing the Fn Project CLI를 참조하십시오.
-
작업 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 컨테이너 레지스트리 생성
-
개발자 서비스로 이동하여 컨테이너 레지스트리를 누르고 Fn 이미지에 대한 전용 저장소를 생성합니다.
저장소 이름:
lab/fn-autoscale-instance-pool
. -
저장소를 확인하고 네임스페이스를 확인합니다.
-
OCI CLI 및 Docker가 설치된 터미널 셸을 열고 레지스트리에서 로그인을 계속합니다. 해당 지역의 올바른 URL을 확인하십시오. 이 자습서에서는 레지스트리 URL이
gru.ocir.io
인 브라질 동부(상파울로) 지역을 사용합니다.docker login gru.ocir.io Username: <your container namespace>/youruser Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
작업 4: Python OCI 함수를 생성하여 인스턴스 풀 자동 스케일 조정
주: 스트림 풀과 동일한 서브넷인 전용 서브넷을 선택했는지 확인하십시오.
-
OCI 콘솔로 이동하고 개발자 서비스를 누릅니다. 함수에서 애플리케이션 및 애플리케이션 생성을 누릅니다.
-
몇 가지 구성을 작성하여 축척 크기를 설정합니다.
주: 이러한 구성 변수는 함수가 인스턴스 풀을 스케일 인 및 스케일 아웃하는 데 사용할 값을 결정하는 데 사용됩니다.
암호 이름 값 INSTANCE_POOL_TARGET_SIZE 새 인스턴스 풀 크기에 대한 값 설정 INSTANCE_POOL_DESIRED_SIZE 일반 인스턴스 풀 크기 설정 이 자습서에서는 인스턴스 1개 풀을 사용하고
2
로 스케일 아웃합니다. -
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-url
및registry
위치를 변경해야 합니다.init
명령은func.py
에 Hello World 함수를 생성합니다. 이 코드를 덮어씁니다. -
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
-
새 코드를 작성하고 함수를 배치합니다.
ls -lrt fn deploy --app MyApp
작업 5: OCI 통지 생성
-
OCI 콘솔로 이동하고 개발자 서비스를 누릅니다. 애플리케이션 통합에서 통지를 선택하고 항목 생성을 누릅니다.
이름:
AutoScaleTopic
. -
구독을 눌러 새 구독을 생성하고 태스크 4에서 생성된 함수를 선택합니다.
작업 6: 스케일 아웃할 알람 정의 생성(대상 값으로 인스턴스 풀 크기 조정)
-
OCI 콘솔로 이동하고 관찰성 및 관리를 누릅니다. 모니터링에서 알람 정의를 선택하고 알람 생성을 누릅니다.
주: 튜토리얼에 대해 임계값, 이 알람 간격이 정의되며 애플리케이션에 따라 필요에 따라 사용자 정의할 수 있습니다.
알람 이름:
instance_pool_scale_OUT
. -
알람을 정의하려면 다음 정보를 입력합니다.
-
측정항목 설명 섹션에서 다음 정보를 입력합니다.
- 측정항목 네임스페이스:
oci_lbaas
. - 메트릭 이름:
HttpRequests
. - 간격:
1 minute
. - 통계:
Max
.
- 측정항목 네임스페이스:
-
측정항목 차원 섹션에서 다음 정보를 입력합니다.
-
첫번째 측정항목 차원:
- 차원 이름:
resourceID
. - 차원 값: 로드 밸런서 OCID를 선택합니다.
- 차원 이름:
-
두번째 측정항목 차원:
- 차원 이름:
backendSetName
. - 차원 값: backendSet 이름을 선택합니다.
- 차원 이름:
-
-
트리거 규칙 1 섹션에서 다음 정보를 입력합니다.
- 연산자:
greater than
. - 값:
30
. - 알람 본문: 접속 수가 예상보다 많습니다. 스케일링 프로세스를 시작하십시오.
- 연산자:
-
-
다음 정보를 입력하여 알람 통지를 정의합니다.
-
대상 섹션에 다음 정보를 입력합니다.
- 대상 서비스: 통지를 선택합니다.
- 컴파트먼트: 해당 컴파트먼트를 선택합니다.
- 항목: 항목을 선택합니다.
-
메시지 형식 섹션에서 예쁜 JSON 메시지 전송(줄바꿈이 있는 원시 텍스트)을 선택하고 테스트 목적으로 통지 반복?을 1분 통지 빈도로 선택합니다.
-
-
고급 옵션을 누르고 새 태그를 추가합니다.
주: 스케일 인 또는 아웃 유형을 정의하기 위한 필수 태그 지정입니다.
태그 네임스페이스: 없음(자유 형식 태그 적용)을 선택합니다.
태그 키:autoscaling_type
. 값:out
.
작업 7: 확장할 알람 정의 생성(인스턴스 풀 크기를 원하는 크기로 다시 조정)
-
OCI 콘솔로 이동하고 관찰성 및 관리를 누릅니다. 모니터링에서 알람 정의를 선택하고 알람 생성을 누릅니다.
주: 튜토리얼에 대해 임계값, 이 알람 간격이 정의되며 애플리케이션에 따라 필요에 따라 사용자 정의할 수 있습니다.
알람 이름:
instance_pool_scale_IN
. -
알람을 정의하려면 다음 정보를 입력합니다.
-
측정항목 설명 섹션에서 다음 정보를 입력합니다.
- 측정항목 네임스페이스:
oci_lbaas
. - 메트릭 이름:
HttpRequests
. - 간격:
1 minute
. - 통계:
Max
.
- 측정항목 네임스페이스:
-
측정항목 차원 섹션에서 다음 정보를 입력합니다.
-
첫번째 측정항목 차원:
- 차원 이름:
resourceID
. - 차원 값: 로드 밸런서 OCID를 선택합니다.
- 차원 이름:
-
두번째 측정항목 차원:
- 차원 이름:
backendSetName
. - 차원 값: backendSet 이름을 선택합니다.
- 차원 이름:
-
-
트리거 규칙 1 섹션에서 다음 정보를 입력합니다.
- 연산자:
less than
. - 값:
30
. - 알람 본문: 접속 수가 허용 가능한 값으로 되돌아가서 인스턴스 수를 원하는 값으로 다시 줄이기 위해 스케일 인을 호출합니다.
- 연산자:
-
-
다음 정보를 입력하여 알람 통지를 정의합니다.
-
대상 섹션에 다음 정보를 입력합니다.
- 대상 서비스: 통지를 선택합니다.
- 컴파트먼트: 해당 컴파트먼트를 선택합니다.
- 항목: 항목을 선택합니다.
-
메시지 형식 섹션에서 Send Pretty JSON messages (raw text with line breaks)를 선택합니다.
-
-
고급 옵션을 누르고 새 태그를 추가합니다.
주: 스케일 인 또는 아웃 유형을 정의하기 위한 필수 태그 지정입니다.
태그 네임스페이스: 없음(자유 형식 태그 적용)을 선택합니다.
태그 키:autoscaling_type
. 값:in
.
작업 8: 로드 만들기 및 알람 작동 확인
-
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
단순 애플리케이션 로드의 출력입니다.
주: 시나리오를 보여주기 위한 간단한 HTTP Apache 웹 서버입니다.
-
인스턴스 풀의 실제 크기와 상태를 확인하십시오. 이 자습서에서는 크기가
1
인 인스턴스 풀이 있습니다. -
알람 정의를 열어 측정항목을 확인하고 알람이 실행될지 확인하십시오.
-
측정항목 간격에 따라 몇 분 후 스케일 아웃 함수가 실행됩니다.
인스턴스 풀을 열고 상태(확장)와 대상 인스턴스 수가
2
인지 확인합니다.크기 조정 프로세스가 완료되면 인스턴스 풀 크기가
2
인 것을 확인할 수 있습니다. -
셸 스크립트를 중지하고 스케일 아웃 전환의 알람이 다시 확인으로 돌아갈 때까지 기다린 다음 스케일 인에 대한 알람을 확인합니다. 두 알람이 모두 업데이트될 때까지 몇 분 동안 기다린 후 스케일 인에 대한 알람이 실행될 때를 확인합니다.
이제 스케일 인 알람이 화재 상태입니다.
HttpRequests가 임계값
30
보다 낮은 숫자로 떨어졌음을 알 수 있습니다.인스턴스 풀 스케일 인이 시작되었습니다.
인스턴스 풀 크기가 원하는
1
값으로 돌아갑니다.
관련 링크
확인
- 작성자 - Joao Tarla(Oracle LAD A-Team 솔루션 엔지니어)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Autoscale an Oracle Cloud Infrastructure Instance Pool based on OCI Load Balancer HTTP Requests
F99760-01
May 2024