

# 함수 생성
<a name="create-function"></a>

함수는 두 단계로 생성합니다.

1. 함수 코드를 JavaScript로 생성합니다. CloudFront 콘솔의 기본 예제를 사용하거나, 직접 작성할 수 있습니다. 자세한 정보는 다음의 주제를 참조하세요.
   + [함수 코드 작성](writing-function-code.md)
   + [CloudFront 함수 이벤트 구조](functions-event-structure.md)
   + [CloudFront의 CloudFront Functions 예제](service_code_examples_cloudfront_functions_examples.md)

1. CloudFront를 사용하여 함수를 생성하고 코드를 포함합니다. 코드는 함수 내에 존재합니다(참조용이 아님).

------
#### [ Console ]

**함수를 만들려면**

1. CloudFront 콘솔([https://console.aws.amazon.com/cloudfront/v4/home#/functions](https://console.aws.amazon.com/cloudfront/v4/home#/functions))에 로그인하고 **함수** 페이지를 엽니다.

1. **함수 생성(Create function)**을 선택합니다.

1. AWS 계정 내에서 고유한 함수 이름을 입력한 다음 JavaScript 버전을 선택하고 **계속**을 선택합니다. 새 함수의 세부 정보 페이지가 나타납니다.
**참고**  
함수에서 [키 값 페어](kvs-with-functions.md)를 사용하려면 JavaScript 런타임 2.0을 선택해야 합니다.

1. **함수 코드** 섹션에서 **빌드** 탭을 선택하고 함수 코드를 입력합니다. **빌드** 탭에 포함된 샘플 코드는 함수 코드의 기본 구문을 보여줍니다.

1. **Save changes**(변경 사항 저장)를 선택합니다.

1. 함수 코드에서 키 값 페어를 사용하는 경우 키 값 저장소를 연결해야 합니다.

   함수를 처음 생성할 때 키 값 저장소를 연결할 수 있습니다. 또는 나중에 [함수를 업데이트](update-function.md)하여 연결할 수도 있습니다.

   지금 키 값 저장소를 연결하려면 다음 단계를 따르세요.
   + **KeyValueStore 연결** 섹션에서 **기존 KeyValueStore 연결**을 선택합니다.
   + 함수의 키 값 페어가 들어 있는 키 값 저장소를 선택한 다음 **KeyValueStore 연결**을 선택합니다.

   CloudFront는 저장소를 함수와 즉시 연결하므로 함수를 저장하지 않아도 됩니다.

------
#### [ CLI ]

CLI를 사용하는 경우 일반적으로 먼저 파일에 함수 코드를 생성한 다음 AWS CLI로 함수를 생성합니다.

**함수를 만들려면**

1. 함수 코드를 파일로 만든 다음 컴퓨터가 연결할 수 있는 디렉터리에 저장합니다.

1. 다음 예제와 같이 명령을 실행합니다. 이 예제에서는 `fileb://` 표기법을 사용하여 파일을 전달합니다. 명령을 더 쉽게 읽을 수 있도록 줄 바꿈도 포함되어 있습니다.

   ```
   aws cloudfront create-function \
       --name MaxAge \
       --function-config '{"Comment":"Max Age 2 years","Runtime":"cloudfront-js-2.0","KeyValueStoreAssociations":{"Quantity":1,"Items":[{"KeyValueStoreARN":"arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"}]}}' \
       --function-code fileb://function-max-age-v1.js
   ```
**Notes**  
`Runtime` - JavaScript의 버전입니다. 함수에 [키 값 페어](kvs-with-functions.md)를 사용하려면 버전 2.0을 지정해야 합니다.
`KeyValueStoreAssociations` - 함수에서 키 값 페어를 사용하는 경우 함수를 처음 생성할 때 키 값 저장소를 연결할 수 있습니다. 또는 `update-function`을 사용하여 나중에 연결할 수도 있습니다. 각 함수에 키 값 저장소가 하나만 연결될 수 있기 때문에 `Quantity`는 항상 `1`입니다.

   명령이 제대로 실행되면 다음과 비슷한 출력이 표시됩니다.

   ```
   ETag: ETVABCEXAMPLE
   FunctionSummary:
     FunctionConfig:
       Comment: Max Age 2 years
       Runtime: cloudfront-js-2.0
       KeyValueStoreAssociations= \
         {Quantity=1, \
         Items=[{KeyValueStoreARN='arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111'}]} \
     FunctionMetadata:
       CreatedTime: '2021-04-18T20:38:56.915000+00:00'
       FunctionARN: arn:aws:cloudfront::111122223333:function/MaxAge
       LastModifiedTime: '2023-11-19T20:38:56.915000+00:00'
       Stage: DEVELOPMENT
     Name: MaxAge
     Status: UNPUBLISHED
   Location: https://cloudfront.amazonaws.com/2020-05-31/function/arn:aws:cloudfront:::function/MaxAge
   ```

   대부분의 정보는 요청에서 반복된 내용입니다. 기타 정보는 CloudFront에 의해 추가됩니다.
**Notes**  
`ETag` - 이 값은 키 값 저장소를 수정할 때마다 변경됩니다. 나중에 이 값과 함수 이름을 사용하여 함수를 참조할 수 있습니다. 항상 현재 `ETag`를 사용하도록 하세요.
`FunctionARN` - CloudFront 함수의 ARN입니다.
111122223333 – AWS 계정입니다.
`Stage` - 함수의 스테이지(`LIVE` 또는 `DEVELOPMENT`)입니다.
`Status` - 함수의 상태(`PUBLISHED` 또는 `UNPUBLISHED`)입니다.

------

생성한 함수는 `DEVELOPMENT` 스테이지에 추가됩니다. [함수를 게시](publish-function.md)하기 전에 [함수를 테스트](test-function.md)하는 것이 좋습니다. 함수를 게시하고 나면 함수가 `LIVE` 스테이지로 변경됩니다.