로컬 개발 환경 준비

Oracle Functions를 사용하여 함수를 생성 및 배치하려면 먼저 함수 개발을 위해 로컬 환경을 설정해야 합니다.

Cloud Shell 또는 Oracle Cloud Infrastructure 컴퓨트 인스턴스를 개발 환경으로 사용할 수 있지만 이 문서에서는 함수 개발을 위해 로컬 Linux 환경을 사용한다고 가정합니다.

시작하기 전에

함수 개발을 위해 로컬 Linux 인스턴스를 설정하기 위해 이 섹션에 제공된 작업 외에도 다음 작업도 수행해야 합니다:

  • 로컬에서 기능을 개발하려면 GitHub에서 Fn Project 개발 플랫폼을 설치합니다.

  • 로컬 인스턴스에 Docker 버전 17.10.0 또는 이후 버전이 설치되어 있는지 확인하십시오.

    Linux에서 Docker 설치 또는 업그레이드에 대한 자세한 내용은 Oracle Container Runtime for Docker User 's Guide를 참조하십시오.

서명 키 생성

Oracle Functions를 사용하기 전에 Oracle Cloud Infrastructure API 서명 키를 설정해야 합니다.

  1. 로컬 시스템 개발 환경에 함수 개발자로 로그인합니다.
  2. 다음을 입력하여 제공하는 문장암호로 암호화된 개인 키를 생성합니다:
    $ openssl genrsa -out ~/.oci/<private-key-file-name>.pem -aes128 2048

    여기서 <private-key-file-name>은 개인 키 파일에 대해 선택한 이름입니다.

  3. 프롬프트가 표시되면 개인 키 파일을 암호화하기 위한 문장암호를 입력합니다. 나중에 필요하므로 입력한 문장암호를 기록해 두십시오.
  4. 프롬프트가 표시되면 문장암호를 다시 입력하여 확인합니다.
  5. 본인만 읽을 수 있도록 파일에 대한 권한을 변경합니다.
    $ chmod go-rwx ~/.oci/<private-key-file-name>.pem

    여기서 <private-key-file-name>은 전용 키 파일의 이름입니다.

  6. 다음을 입력하여 공개 키(개인 키를 만들 때 제공한 것과 동일한 문장암호로 암호화되고 개인 키 파일과 동일한 위치에 있음) 를 생성합니다:
    $ openssl rsa -pubout -in ~/.oci/<private-key-file-name>.pem -out ~/.oci/<public-key-file-name>.pem

    여기서 <private-key-file-name>은 전용 키 파일의 이름이고 <public-key-file-name>은 공용 키 파일에 대해 선택한 이름입니다.

  7. 메시지가 표시되면 전용 키 파일을 암호화하기 위해 이전에 입력한 것과 동일한 문장암호를 입력합니다.
  8. 다음을 입력하여 방금 생성한 공용 키 파일의 내용을 복사합니다:
    $ cat ~/.oci/<public-key-file-name>.pem | pbcopy

    여기서 <public-key-file-name>은 공용 키 파일에 대해 선택한 이름입니다.

  9. 기능 개발자로 콘솔에 로그인하고 오른쪽 맨 위에 있는 사용자 메뉴를 연 다음 사용자 설정 을 선택합니다.
  10. API 키 페이지에서 공용 키 추가 를 누릅니다. 공용 키의 값을 창에 붙여 넣고 추가 를 누릅니다. 키가 업로드되고 지문이 표시됩니다.

CLI(명령줄 인터페이스) 프로파일 만들기

Oracle Functions를 사용하기 전에 기능을 만들고 배치하는 데 사용할 사용자 계정의 자격 증명 프로파일이 포함된 Oracle Cloud Infrastructure CLI 구성 파일이 있어야 합니다.

Oracle Cloud Infrastructure CLI 구성 파일에는 여러 프로파일이 포함될 수 있습니다. 하나 이상의 프로파일을 포함하는 구성 파일이 이미 있는 경우 Oracle Functions를 사용하여 기능을 생성 및 배치할 사용자에 대해 기존 파일에 새 프로파일을 추가해야 합니다.

  1. 로컬 시스템 개발 환경에 함수 개발자로 로그인합니다.
  2. 텍스트 편집기에서 ~/.oci/config 파일을 엽니다. (디렉토리 및/또는 파일이 존재하지 않으면 생성합니다. )
  3. 다음과 같이 ~.oci/config 파일에 새 프로파일을 추가합니다:
    [<profile-name>]
    user=<user-ocid>
    fingerprint=<public-key-fingerprint>
    key_file=<full-path-to-private-key-pem-file>
    tenancy=<tenancy-ocid>
    region=<region-name>
    pass_phrase=<passphrase>

    설명:

    • <profile-name>은 프로파일에 대해 선택한 이름입니다.
    • <user-ocid>는 함수를 생성하고 배치하는 데 사용할 Oracle Cloud Infrastructure 사용자 계정의 OCID입니다.
    • <public-key-fingerprint>는 앞에서 콘솔에서 업로드한 공용 API 키 값의 지문입니다.
    • <full-path-to-private-key-pem-file>는 이전에 생성한 전용 키 파일에 대한 전체 경로입니다.
    • <tenancy-ocid>는 함수를 생성하고 배치할 테넌시의 OCID입니다.
    • <region-identifier>은 함수를 생성하고 배치할 Oracle Cloud Infrastructure 영역의 식별자입니다. 예를 들어, us-phoenix-1 입니다.
    • <passphrase>은 공용/전용 키를 생성할 때 지정한 문장암호입니다.
  4. 파일을 저장하고 닫습니다.

oci-curl 스크립트 복사 및 구성

스크립트를 사용하여 함수를 호출할 수 있습니다. oci-curl 스크립트는 스크립트 본문에 제공한 인증서를 기반으로 서명된 요청을 생성합니다.

oci-curl를 사용하여 함수를 호출하려면 동일한 테넌시의 리소스에 대한 액세스 권한이 부여되고 함수와 동일한 구획에 속하는 Oracle Cloud Infrastructure 사용자의 인증서를 제공해야 합니다.

일반적으로 개발 환경에 대해 구성된 함수 개발자로 함수를 호출할 수 있습니다. 아래 지침에서는 이 경우를 가정합니다.

  1. 개발 환경에 사인인합니다.
  2. 개발 환경에서 oci-curl 스크립트 파일의 복사본을 생성하고 다음과 같이 파일에 인증서를 추가합니다:
    1. 브라우저에서 https://docs.cloud.oracle.com/iaas/Content/Resources/Assets/signing_sample_bash.txt으로 이동하여 oci-curl 코드를 원시 텍스트로 표시합니다.
    2. 모든 텍스트를 선택하고 복사합니다.
    3. 텍스트 편집기에서 편리한 위치에 새 파일을 엽니다.

      예를 들어, 터미널 창에서 홈 디렉토리에 새 하위 디렉토리를 생성하고 다음을 입력하여 해당 디렉토리에 새 파일을 열 수 있습니다:

      $ cd ~
      
      $ mkdir oci-curl
      
      $ vim ~/oci-curl/oci-curl.sh

      새 파일의 이름과 위치는 최신이지만 다음 지침에서는 ~/oci-curl/oci-curl.sh로 가정합니다.

    4. 이전에 복사한 oci-curl 스크립트 코드를 새 파일에 붙여 넣습니다.
    5. 인증서를 추가할 수 있도록 파일을 저장하고 열어 둡니다.
  3. oci-curl.sh 파일의 샘플 인증서를 함수를 호출할 사용자 계정의 인증서로 바꿉니다:
    local tenancyId="<tenancy_id>";
    local authUserId="<user_id>";
    local keyFingerprint="<public_fingerprint>";
    local privateKeyPath="<private_key_path>";

    설명:

    • <tenancy_id>는 함수가 배치된 테넌시의 OCID입니다.
    • <user_id>은 함수를 실행할 사용자 계정의 OCID입니다. 사용자 계정은 동일한 테넌시의 리소스에 대한 액세스 권한이 있어야 하며 함수와 동일한 구획에 속해야 합니다.
    • <public_fingerprint>Oracle Cloud Infrastructure에 업로드된 사용자의 공개 키 지문입니다.
    • <private_key_path>는 지문을 제공한 공용 키와 쌍을 이루는 개인 키 파일에 대한 전체 경로입니다. 예를 들어, 다음과 같습니다:
      local privateKeyPath="/Users/johndoe/.oci/john_api_key_private.pem";
  4. oci-curl.sh 파일을 저장하고 닫습니다.

Fn 프로젝트 CLI(명령줄 인터페이스) 설치

Oracle Functions를 사용하기 전에 Fn Project 명령줄 인터페이스(CLI) 를 개발 환경에 설치해야 합니다.

이 절차에서는 curl을 사용하여 Linux 인스턴스에 CLI를 설치합니다. 다른 운영 체제에 대한 지침은 GitHub의 Fn 프로젝트에 대한 Readme 파일에 제공됩니다.

  1. 개발 환경에 함수 개발자로 로그인합니다.
  2. 다음 명령을 사용하여 설치 스크립트를 검색하고 실행합니다:
    $ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
    
    

    암호를 묻는 메시지가 표시되면 수퍼유저의 암호를 입력합니다.

  3. 터미널 창에서 다음을 입력하여 CLI가 설치되었는지 확인합니다:
    $ fn version

    CLI가 올바르게 설치된 경우 버전이 표시됩니다.

Fn 명령줄 인터페이스 컨텍스트 만들기

Fn 프로젝트 CLI(명령줄 인터페이스) 가 처음 설치되면 로컬 개발용으로 구성됩니다. Oracle Cloud Infrastructure 테넌시에 접속하도록 Fn Project CLI를 구성하려면 새 컨텍스트를 생성해야 합니다.

컨텍스트는 Oracle Functions 끝점, 배치된 함수가 속할 구획의 OCID 및 이미지를 푸시 및 끌어올 Docker 레지스트리의 주소를 지정합니다. 각각 . yaml 형식으로 서로 다른 컨텍스트 파일에 저장되는 여러 컨텍스트를 정의할 수 있습니다.

  1. 개발 환경에 함수 개발자로 로그인합니다.
  2. 터미널 창에서 Oracle Cloud Infrastructure에 대한 새 Fn 프로젝트 CLI 컨텍스트를 만듭니다:
    $ fn create context <my-context> --provider oracle

    여기서 <my-context>은 선택한 이름입니다.

  3. Fn 프로젝트 CLI에서 새 컨텍스트를 사용하도록 지정합니다:
    $ fn use context <my-context>

    여기서 <my-context>은 지정한 컨텍스트 이름입니다.

  4. 사용할 명령줄 인터페이스 프로파일의 이름을 지정합니다:
    $ fn update context oracle.profile <profile-name>
  5. 배치된 함수가 배치될 구획 OCID 지정:
    $ fn update context oracle.compartment-id <compartment-ocid>
  6. API를 호출할 때 사용할 끝점 지정:
    $ fn update context api-url <api-endpoint>
    여기서 <api-endpoint>은 다음 형식의 끝점 중 하나입니다:
    https://functions.<region-identifier>.oci.oraclecloud.com
    여기서 <region-identifier>는 함수를 생성하고 배치할 Oracle Cloud Infrastructure 영역의 식별자입니다. 예를 들어, 다음과 같습니다:
    us-phoenix-1
  7. Oracle Functions에서 사용할 Docker 레지스트리의 주소로 새 컨텍스트를 구성합니다:
    $ fn update context registry <region-key>.ocir.io/<tenancy-namespace>/<repo-name>
    설명:
    • <region-key>Oracle Cloud Infrastructure Registry 영역의 키입니다. 예를 들어, Phoenix의 경우 phx 입니다.

      Oracle은 지정하는 Docker 레지스트리가 함수를 실행하려는 서브넷과 동일한 영역에 있을 것을 권장합니다.

    • <tenancy-namespace>는 테넌시 정보 페이지에 표시된 대로 저장소를 생성할 테넌시의 자동 생성된 Oracle Cloud Infrastructure Object Storage 네임스페이스 문자열입니다.
    • <repo-name>은 배포하는 함수 이름에 사전 종속되는 저장소 이름입니다.

    예를 들어, 다음과 같습니다:

    $ fn update context registry phx.ocir.io/ansh81vru1zp/my-repo

인증 토큰 생성

Oracle Cloud Infrastructure에서 함수를 배치하려면 Docker에 Oracle Cloud Infrastructure Registry에 사인인할 때 비밀번호로 사용할 인증 토큰을 생성해야 합니다.

  1. Oracle Cloud Infrastructure 콘솔에 사인인하고 사용자 아이콘을 누른 다음 사용자 설정 을 선택합니다.
  2. 새 인증 토큰을 생성하려면 리소스 섹션에서 인증 토큰 을 누른 다음 토큰 생성 을 누릅니다.
  3. 인증 토큰에 대한 설명을 제공하고 토큰 생성 을 누릅니다. 토큰이 표시되면 복사합니다.
  4. 복사 링크를 누르고 토큰 정보를 안전한 위치에 저장합니다. 대화상자를 닫으면 콘솔에서 토큰을 다시 볼 수 없습니다.
  5. 닫기 를 누릅니다.

Oracle Cloud Infrastructure Registry에 사인인

Oracle Functions를 사용하기 전에 함수를 Docker 이미지로 저장할 Docker 레지스트리에 Docker를 사인인해야 합니다. Fn 프로젝트 CLI(명령행 인터페이스) 컨텍스트에서 이전에 지정한 Docker 레지스트리입니다.

레지스트리에 사인인하려면 먼저 다음 작업이 완료되어 있어야 합니다:
  • 개발 환경에 Docker 설치 및 시작
  • Fn 명령줄 인터페이스에 대한 Oracle Cloud Infrastructure 컨텍스트를 만들었습니다(CLI).
  • 사용자에 대한 Oracle Cloud Infrastructure 인증 토큰을 생성했습니다.

Oracle Cloud Infrastructure 위에 구축된 Oracle 관리 레지스트리인 Oracle Cloud Infrastructure Registry의 공용 및 전용 저장소에 함수를 저장할 수 있습니다.

아래 단계를 완료하려면 Oracle Cloud Infrastructure Object Storage에 대한 테넌시 네임스페이스, 사용자 이름 및 사용자의 인증 토큰을 제공해야 합니다.

Docker를 Oracle Cloud Infrastructure Registry에 사인인하려면 다음과 같이 하십시오:

  1. 개발 환경에 함수 개발자로 사인인합니다.
  2. 터미널 창에서 Oracle Cloud Infrastructure Registry에 사인인합니다:
    $ docker login <region-key>.ocir.io

    여기서 <region-key>는 Fn Project CLI 컨텍스트에 지정된 Oracle Cloud Infrastructure Registry 영역에 대한 키입니다. 예를 들어, Phoenix의 경우 phx 입니다.

  3. 프롬프트가 표시되면 함수를 생성하고 배치할 사용자의 사용자 이름을 입력합니다:
    <tenancy-namespace>/<username>
    설명:
    • <tenancy-namespace>는 테넌시 정보 페이지에 표시된 대로 저장소를 생성할 테넌시의 자동 생성된 Oracle Cloud Infrastructure Object Storage 네임스페이스 문자열입니다.
    • <username>는 함수를 생성하고 배치할 사용자입니다.
    테넌시가 Oracle Identity Cloud Service와 통합된 경우 다음 형식을 사용합니다:
    <tenancy-namespace>/oracleidentitycloudservice/<username>
  4. 비밀번호를 묻는 메시지가 표시되면 사용자의 Oracle Cloud Infrastructure 인증 토큰을 입력합니다.