GitHub Actions로 OCI Functions용 CI/CD 파이프라인 구축

CI/CD(지속적인 통합/지속적인 배포)는 구축, 테스트 및 배포를 자동화하므로 코드 변경 사항을 보다 빠르고 안정적으로 배송할 수 있습니다. Oracle Cloud Infrastructure Functions는 확장성이 뛰어난 완전 관리형 멀티 테넌트 온디맨드 플랫폼입니다. 엔터프라이즈급 OCI(Oracle Cloud Infrastructure)를 기반으로 구축되었으며 오픈 소스 엔진인 Fn Project를 기반으로 합니다. 이 참조 아키텍처는 IDE(통합 개발 환경) 도구에서 Fn Project CLI를 사용하여 CI/CD OCI Functions 서비스 파이프라인을 구축 및 배포하는 방법에 대한 권장 구조 및 통합을 제공합니다.

구조

이 아키텍처는 GitHub Actions를 외부 연속 통합 및 배포 시스템으로 사용하여 코드를 빌드하고, 컨테이너화하고, Oracle Cloud Infrastructure Functions를 배포합니다. GitHub Action 대신 GitLab 또는 Azure DevOps와 같은 다른 IDE(통합 개발 환경) 도구를 사용할 수 있습니다.

다음 다이어그램은 이 참조 아키텍처를 보여 줍니다.

다음은 cicd-deploy-oci-functions.png에 대한 설명입니다.
그림 cicd-deploy-oci-functions.png에 대한 설명

cicd-deploy-oci-기능-oracle.zip

아키텍처에는 다음과 같은 외부 시스템이 포함됩니다.

  • 외부 시스템(CI/CD)

    CI/CD용 외부 시스템에는 IDE(통합 개발 환경), 코드 저장소 및 파이프라인이 포함됩니다.

    이 아키텍처는 GitHub 작업을 외부 연속 통합 및 배치 코드 저장소 시스템으로 사용합니다. 코드를 작성한 후 Docker를 사용하여 컨테이너화하는 데 사용됩니다. 컨테이너화된 이미지가 준비되면 GitHub 작업은 이미지를 OCI 레지스트리로 푸시합니다. 레지스트리로의 전송을 완료하면 OCI Functions 배포가 시작됩니다. 요구사항에 따라 OCI DevOps, Azure DevOps, Gitlab, Jenkins 등의 다른 지속적 통합 또는 배포 시스템을 사용할 수 있습니다.

  • 외부 시스템(SIEM/ITSM/OTHER)

    SIEM 및 ITSM용 외부 시스템은 다른 타사 시스템 또는 비OCI 서비스를 나타냅니다.

    OCI 감사 로그, 서비스 로그 및 보안 이벤트를 집계하고 강화하는 것은 외부 SIEM 또는 ITSM 시스템에 대한 기본 요구 사항입니다. 이 데이터를 중앙 집중화하면 조직은 테넌시를 분석, 모니터링 및 보호할 수 있습니다.

구조에는 다음과 같은 구성 요소가 있습니다.

  • 지역

    Oracle Cloud Infrastructure 리전은 가용성 도메인이라고 하는 데이터 센터가 하나 이상 포함된 지역화된 지리적 영역입니다. 지역은 다른 지역과 독립적이며, 먼 거리가 그들을 분리 할 수 있습니다 (국가 또는 대륙에 걸쳐).

  • VCN(가상 클라우드 네트워크) 및 서브넷

    VCN은 Oracle Cloud Infrastructure 지역에서 설정한 맞춤형 소프트웨어 정의 네트워크입니다. 기존의 데이터 센터 네트워크와 마찬가지로 VCN을 통해 네트워크 환경을 제어할 수 있습니다. VCN에는 VCN 생성 후 변경할 수 있는 겹치지 않는 CIDR 블록이 여러 개 있을 수 있습니다. VCN을 서브넷으로 분할할 수 있습니다. 서브넷은 지역 또는 가용성 도메인으로 범위가 지정될 수 있습니다. 각 서브넷은 VCN의 다른 서브넷과 겹치지 않는 연속적인 주소 범위로 구성됩니다. 서브넷 생성 후 크기를 변경할 수 있습니다. 서브넷은 공용 또는 전용일 수 있습니다.

  • 레지스트리

    Oracle Cloud Infrastructure Registry는 개발-운영 워크플로우를 간소화할 수 있는 Oracle 관리 레지스트리입니다. 레지스트리를 사용하면 Docker 이미지와 같은 개발 아티팩트를 쉽게 저장, 공유 및 관리할 수 있습니다. Oracle Cloud Infrastructure의 가용성과 확장성이 뛰어난 아키텍처는 애플리케이션을 안정적으로 배포하고 관리할 수 있도록 보장합니다.

  • 함수

    Oracle Cloud Infrastructure Functions는 확장성이 뛰어난 완전 관리형 멀티테넌트 온디맨드 Functions-as-a-Service(FaaS) 플랫폼입니다. 그것은 Fn 프로젝트 오픈 소스 엔진에 의해 구동 됩니다. 함수를 사용하면 코드를 배치하고 직접 호출하거나 이벤트에 대한 응답으로 트리거할 수 있습니다. Oracle Functions는 Oracle Cloud Infrastructure Registry에서 호스팅되는 Docker 컨테이너를 사용합니다.

  • 서비스 커넥터

    Oracle Cloud Infrastructure Service Connector Hub는 OCI의 서비스 간 데이터 이동을 통합관리하는 클라우드 메시지 버스 플랫폼입니다. 서비스 커넥터를 사용하여 소스 서비스에서 대상 서비스로 데이터를 이동할 수 있습니다. 서비스 커넥터를 사용하면 대상 서비스로 전달되기 전에 데이터에 대해 수행할 작업(예: 함수)을 선택적으로 지정할 수도 있습니다.

    Oracle Cloud Infrastructure 서비스 커넥터 허브를 사용하여 보안 정보 및 이벤트 관리(SIEM) 시스템에 대한 로깅 집계 프레임워크를 빠르게 구축할 수 있습니다.

  • 로깅
    로깅은 클라우드의 리소스에서 다음 유형의 로그에 액세스할 수 있는 확장성이 뛰어난 완전 관리형 서비스입니다.
    • 감사 로그: 감사 서비스에서 내보낸 이벤트와 관련된 로그입니다.
    • 서비스 로그: API 게이트웨이, 이벤트, 함수, 로드 밸런싱, 오브젝트 스토리지, VCN 플로우 로그와 같은 개별 서비스에서 내보낸 로그입니다.
    • 사용자 정의 로그: 사용자 정의 응용 프로그램, 다른 클라우드 공급자 또는 온프레미스 환경의 진단 정보를 포함하는 로그입니다.
  • 스트리밍

    Oracle Cloud Infrastructure Streaming은 실시간으로 소비하고 처리할 수 있는 지속적인 대용량 데이터 스트림을 수집할 수 있는 확장 가능한 영구 스토리지 솔루션을 제공합니다. Streaming을 사용하여 애플리케이션 로그, 운영 원격 측정, 웹 클릭-스트림 데이터 같은 대용량 데이터를 입수하거나, 게시-구독 메시징 모델에서 데이터가 연속적으로 생성되고 처리되는 기타 사용 사례에 사용할 수 있습니다.

  • 통지

    Oracle Cloud Infrastructure Notifications 서비스는 Oracle Cloud Infrastructure에서 호스팅되는 애플리케이션에 대해 안전하고 안정적이며 대기시간이 짧고 내구성 있는 메시지를 전달하여 게시-구독 패턴을 통해 분산된 구성요소로 메시지를 방송합니다.

권장사항

다음 권장 사항을 시작점으로 사용합니다. 요구 사항은 여기에 설명된 아키텍처와 다를 수 있습니다.
  • VCN

    VCN을 생성할 때 VCN의 서브넷에 연결하려는 리소스 수에 따라 필요한 CIDR 블록 수와 각 블록의 크기를 결정합니다. 표준 전용 IP 주소 공간 내에 있는 CIDR 블록을 사용합니다.

    프라이빗 접속을 설정하려는 다른 네트워크(Oracle Cloud Infrastructure, 온프레미스 데이터 센터 또는 다른 클라우드 제공자)와 겹치지 않는 CIDR 블록을 선택합니다.

    VCN을 생성한 후 해당 CIDR 블록을 변경, 추가 및 제거할 수 있습니다.

    서브넷을 설계할 때는 트래픽 플로우 및 보안 요구사항을 고려하십시오. 특정 계층 또는 역할 내의 모든 리소스를 동일한 서브넷에 연결합니다. 이 서브넷은 보안 경계 역할을 할 수 있습니다.

    지역 서브넷을 사용합니다.

  • 보안 목록

    보안 목록을 사용하여 전체 서브넷에 적용되는 수신 및 송신 규칙을 정의합니다.

  • NSG(네트워크 보안 그룹)

    NSG를 사용하여 특정 VNIC에 적용되는 수신 및 송신 규칙 세트를 정의할 수 있습니다. NSG를 사용하면 애플리케이션의 보안 요구사항과 VCN의 서브넷 아키텍처를 분리할 수 있으므로 보안 목록이 아닌 NSG를 사용하는 것이 좋습니다.

  • Cloud Guard

    테넌시 레벨에서 Cloud Guard를 적용하여 가장 광범위한 범위를 다루고 여러 구성을 유지 관리하는 데 따르는 관리 부담을 줄이십시오.

    관리 목록 기능을 사용하여 감지기에 특정 구성을 적용할 수도 있습니다.

  • 보안 영역

    최대 보안이 필요한 리소스의 경우 Oracle은 보안 영역을 사용할 것을 권장합니다. 보안 영역은 모범 사례를 기반으로 하는 Oracle 정의 보안 정책 레시피와 연관된 컴파트먼트입니다. 예를 들어, 보안 영역의 리소스는 공용 인터넷에서 액세스할 수 없어야 하며 고객 관리 키를 사용하여 암호화해야 합니다. 보안 영역에서 리소스를 생성 및 업데이트할 때 Oracle Cloud Infrastructure는 보안 영역 레시피의 정책에 대해 작업을 검증하고 정책을 위반하는 작업을 거부합니다.

  • OCI 함수

    OCI Functions 서비스를 통해 배포된 애플리케이션은 고가용성, 확장성, 보안성, 모니터링이 가능합니다. OCI Functions를 사용하면 Java, Python, Node, Go, Ruby, C#으로 코드를 작성할 수 있습니다. 또한 고급 사용 사례의 경우 자체 Dockerfile 및 Graal VM을 사용할 수 있습니다. 그런 다음 코드를 배치하거나 직접 호출하거나 이벤트에 대한 응답으로 트리거할 수 있습니다.

  • OCI Registry

    이 구조는 공용 Docker 레지스트리를 배치합니다. Docker 이미지는 레지스트리에 푸시되고 레지스트리에서 풀링되므로, 인터넷에 액세스할 수 있고 적절한 URL을 알고 있는 모든 사용자가 Oracle Cloud의 공용 저장소에서 이미지를 풀링할 수 있습니다.

고려사항

이 참조 아키텍처를 배치할 때는 다음 사항을 고려하십시오.

  • SIEM 통합

    테넌시의 리전 및 애플리케이션 구성에 걸쳐 집계된 로그 정보의 배포를 간소화하기 위해 OCI Functions 서비스를 사용할 수 있습니다.

    OCI 함수를 사용하여 로그를 SIEM의 HTTPS API 끝점으로 푸시할 수 있습니다. 이렇게 하려면 다른 OCI 서비스에서 읽는 지역별 OCI 서비스 커넥터 허브를 추가합니다.

  • 그룹화 함수

    여러 함수(예: 환경당 하나)를 정의하는 것이 가장 좋습니다. DEV, UAT, PROD와 같은 여러 환경이 있는 경우 별도의 환경에서 각 함수에 대해 별도의 코드 행을 추적할 수 있습니다.

배치

GitHub에서 자동화 스크립트 코드를 다운로드하고, 코드를 사용자정의하고, 배포합니다.

OCI Functions에 배치한 함수는 다음에서 호출할 수 있습니다.

  • Fn Project CLI입니다.
  • Oracle Cloud Infrastructure SDK
  • 함수의 호출 끝점에 대한 HTTP 요청에 서명했습니다. 모든 함수에는 호출 끝점이 있습니다.
  • 기타 Oracle Cloud 서비스(예: 이벤트 서비스의 이벤트에 의해 트리거됨) 또는 외부 서비스
  1. GitHub로 이동합니다.
  2. 저장소를 복제하거나 다운로드합니다.
  3. 이 구조를 배치하려면 참조 YAML 파일, 예제 hello world 응용 프로그램 코드 및 README 문서를 따릅니다.

확인

  • 작성자: Dipesh Rathod
  • 제공자: Bhanu Prakash Lohumi