12.2. func.yaml 파일을 사용하여 함수 프로젝트 구성

func.yaml 파일에는 함수 프로젝트의 구성이 포함되어 있습니다. func.yaml 에 지정된 값은 kn func 명령을 실행할 때 사용됩니다. 예를 들어 kn func build 명령을 실행하면 build 필드의 값이 사용됩니다. 경우에 따라 명령줄 플래그 또는 환경 변수를 사용하여 이러한 값을 덮어쓸 수 있습니다.

12.2.1. func.yaml 필드의 로컬 환경 변수 참조

함수 구성에 API 키와 같은 중요한 정보를 저장하지 않으려면 로컬 환경에서 사용 가능한 환경 변수에 참조를 추가할 수 있습니다. func.yaml 파일의 envs 필드를 수정하여 이 작업을 수행할 수 있습니다.

사전 요구 사항

  • 함수 프로젝트를 생성해야 합니다.
  • 로컬 환경에는 참조하려는 변수를 포함해야 합니다.

프로세스

  • 로컬 환경 변수를 참조하려면 다음 구문을 사용합니다.

    {{ env:ENV_VAR }}

    ENV_VAR을 사용하려는 로컬 환경의 변수 이름으로 바꿉니다.

    예를 들어 로컬 환경에서 사용할 수 있는 API_KEY 변수가 있을 수 있습니다. MY_API_KEY 변수에 해당 값을 할당하면 함수 내에서 직접 사용할 수 있습니다.

    함수 예

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - name: MY_API_KEY
      value: '{{ env:API_KEY }}'
    ...

12.2.2. 함수에 주석 추가

배포된 Serverless 함수에 Kubernetes 주석을 추가할 수 있습니다. 주석을 사용하면 임의의 메타데이터를 함수에 연결할 수 있습니다(예: 함수의 목적에 대한 참고). 주석은 func.yaml 구성 파일의 annotations 섹션에 추가됩니다.

함수 주석 기능에는 다음 두 가지 제한 사항이 있습니다.

  • 함수 주석이 클러스터의 해당 Knative 서비스로 전파되면 func.yaml 파일에서 삭제하여 서비스에서 제거할 수 없습니다. 서비스의 YAML 파일을 직접 수정하거나 OpenShift Container Platform 웹 콘솔을 사용하여 Knative 서비스에서 주석을 제거해야 합니다.
  • Knative에서 설정한 주석(예: autoscaling 주석)을 설정할 수 없습니다.

12.2.3. 함수에 주석 추가

함수에 주석을 추가할 수 있습니다. 레이블과 유사하게 주석은 키-값 맵으로 정의됩니다. 주석은 예를 들어 함수 작성자와 같은 함수에 대한 메타데이터를 제공하는 데 유용합니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 함수를 생성했습니다.

프로세스

  1. 함수에 사용할 func.yaml 파일을 엽니다.
  2. 추가할 모든 주석에 대해 annotations 섹션에 다음 YAML을 추가합니다.

    name: test
    namespace: ""
    runtime: go
    ...
    annotations:
      <annotation_name>: "<annotation_value>" 1
    1
    <annotation_name>: "<annotation_value>"를 주석으로 바꿉니다.

    예를 들어 Alice에서 함수가 생성되었음을 나타내기 위해 다음 주석을 포함할 수 있습니다.

    name: test
    namespace: ""
    runtime: go
    ...
    annotations:
      author: "alice@example.com"
  3. 설정을 저장합니다.

다음에 함수를 클러스터에 배포할 때 해당 Knative 서비스에 주석이 추가됩니다.

12.2.4. 추가 리소스

12.2.5. 시크릿 및 구성 맵에 수동으로 함수 액세스 추가

시크릿 및 구성 맵에 액세스하는 구성을 함수에 수동으로 추가할 수 있습니다. 예를 들어 기존 구성 스니펫이 있는 경우 kn func config 대화형 유틸리티 및 명령을 사용하는 것이 좋습니다.

12.2.5.1. 시크릿을 볼륨으로 마운트

보안을 볼륨으로 마운트할 수 있습니다. 보안이 마운트되면 함수에서 일반 파일로 액세스할 수 있습니다. 이를 통해 함수에 필요한 클러스터 데이터(예: 함수에서 액세스해야 하는 URI 목록을 저장할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 함수를 생성했습니다.

프로세스

  1. 함수에 사용할 func.yaml 파일을 엽니다.
  2. 볼륨으로 마운트하려는 각 시크릿에 대해 volumes 섹션에 다음 YAML을 추가합니다.

    name: test
    namespace: ""
    runtime: go
    ...
    volumes:
    - secret: mysecret
      path: /workspace/secret
    • mysecret을 대상 시크릿의 이름으로 대체합니다.
    • 시크릿을 마운트하려는 경로로 /workspace/secret을 대체합니다.

      예를 들어 주소 시크릿을 마운트하려면 다음 YAML을 사용합니다.

      name: test
      namespace: ""
      runtime: go
      ...
      volumes:
      - configMap: addresses
        path: /workspace/secret-addresses
  3. 설정을 저장합니다.

12.2.5.2. 구성 맵을 볼륨으로 마운트

구성 맵을 볼륨으로 마운트할 수 있습니다. 구성 맵이 마운트되면 함수에서 일반 파일로 액세스할 수 있습니다. 이를 통해 함수에 필요한 클러스터 데이터(예: 함수에서 액세스해야 하는 URI 목록을 저장할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 함수를 생성했습니다.

프로세스

  1. 함수에 사용할 func.yaml 파일을 엽니다.
  2. 볼륨으로 마운트하려는 각 구성 맵에 대해 volumes 섹션에 다음 YAML을 추가합니다.

    name: test
    namespace: ""
    runtime: go
    ...
    volumes:
    - configMap: myconfigmap
      path: /workspace/configmap
    • myconfigmap을 대상 구성 맵의 이름으로 대체합니다.
    • /workspace/configmap을 구성 맵을 마운트하려는 경로로 바꿉니다.

      예를 들어 주소 구성 맵을 마운트하려면 다음 YAML을 사용합니다.

      name: test
      namespace: ""
      runtime: go
      ...
      volumes:
      - configMap: addresses
        path: /workspace/configmap-addresses
  3. 설정을 저장합니다.

12.2.5.3. 시크릿에 정의된 키 값에서 환경 변수 설정

보안으로 정의된 키 값에서 환경 변수를 설정할 수 있습니다. 이전에 시크릿에 저장된 값은 런타임 시 함수를 통해 환경 변수로 액세스할 수 있습니다. 이는 사용자의 ID와 같이 시크릿에 저장된 값에 대한 액세스 권한을 얻는 데 유용할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 함수를 생성했습니다.

프로세스

  1. 함수에 사용할 func.yaml 파일을 엽니다.
  2. 환경 변수에 할당할 시크릿 키-값 쌍의 각 값에 대해 envs 섹션에 다음 YAML을 추가합니다.

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - name: EXAMPLE
      value: '{{ secret:mysecret:key }}'
    • EXAMPLE을 환경 변수 이름으로 대체합니다.
    • mysecret을 대상 시크릿의 이름으로 대체합니다.
    • key를 대상 값에 매핑된 키로 대체합니다.

      예를 들어 userdetailssecret 에 저장된 사용자 ID에 액세스하려면 다음 YAML을 사용합니다.

      name: test
      namespace: ""
      runtime: go
      ...
      envs:
      - value: '{{ configMap:userdetailssecret:userid }}'
  3. 설정을 저장합니다.

12.2.5.4. 구성 맵에 정의된 키 값에서 환경 변수 설정

구성 맵으로 정의된 키 값에서 환경 변수를 설정할 수 있습니다. 그런 다음 구성 맵에 이전에 저장된 값은 런타임 시 함수를 통해 환경 변수로 액세스할 수 있습니다. 이는 사용자 ID와 같이 구성 맵에 저장된 값에 대한 액세스 권한을 얻는 데 유용할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 함수를 생성했습니다.

프로세스

  1. 함수에 사용할 func.yaml 파일을 엽니다.
  2. 환경 변수에 할당할 구성 맵 키-값 쌍의 각 값에 대해 envs 섹션에 다음 YAML을 추가합니다.

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - name: EXAMPLE
      value: '{{ configMap:myconfigmap:key }}'
    • EXAMPLE을 환경 변수 이름으로 대체합니다.
    • myconfigmap을 대상 구성 맵의 이름으로 대체합니다.
    • key를 대상 값에 매핑된 키로 대체합니다.

      예를 들어 userdetailsmap 에 저장된 사용자 ID에 액세스하려면 다음 YAML을 사용합니다.

      name: test
      namespace: ""
      runtime: go
      ...
      envs:
      - value: '{{ configMap:userdetailsmap:userid }}'
  3. 설정을 저장합니다.

12.2.5.5. 시크릿에 정의된 모든 값에서 환경 변수 설정

시크릿에 정의된 모든 값에서 환경 변수를 설정할 수 있습니다. 이전에 시크릿에 저장된 값은 런타임 시 함수를 통해 환경 변수로 액세스할 수 있습니다. 이는 시크릿에 저장된 값 컬렉션에 동시에 액세스하는 데 유용할 수 있습니다(예: 사용자와 관련된 데이터 세트).

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 함수를 생성했습니다.

프로세스

  1. 함수에 사용할 func.yaml 파일을 엽니다.
  2. 모든 키-값 쌍을 환경 변수로 가져오려는 모든 시크릿에 다음 YAML을 envs 섹션에 추가합니다.

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ secret:mysecret }}' 1
    1
    mysecret을 대상 시크릿의 이름으로 대체합니다.

    예를 들어 userdetailssecret 에 저장된 모든 사용자 데이터에 액세스하려면 다음 YAML을 사용합니다.

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ configMap:userdetailssecret }}'
  3. 설정을 저장합니다.

12.2.5.6. 구성 맵에 정의된 모든 값에서 환경 변수 설정

구성 맵에 정의된 모든 값에서 환경 변수를 설정할 수 있습니다. 그런 다음 구성 맵에 이전에 저장된 값은 런타임 시 함수를 통해 환경 변수로 액세스할 수 있습니다. 이는 구성 맵에 저장된 값 컬렉션에 동시에 액세스하는 데 유용할 수 있습니다(예: 사용자와 관련된 데이터 세트).

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 함수를 생성했습니다.

프로세스

  1. 함수에 사용할 func.yaml 파일을 엽니다.
  2. 모든 키-값 쌍을 환경 변수로 가져오려는 모든 구성 맵에 대해 envs 섹션에 다음 YAML을 추가합니다.

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ configMap:myconfigmap }}' 1
    1
    myconfigmap을 대상 구성 맵의 이름으로 대체합니다.

    예를 들어 userdetailsmap 에 저장된 모든 사용자 데이터에 액세스하려면 다음 YAML을 사용합니다.

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ configMap:userdetailsmap }}'
  3. 파일을 저장합니다.