

지원 종료 공지: 2025년 9월 15 AWS 일에는 Amazon Lex V1에 대한 지원을 중단할 예정입니다. 2025년 9월 15일 이후에는 Amazon Lex V1 콘솔 또는 Amazon Lex V1 리소스에 더 이상 액세스할 수 없습니다. Amazon Lex V2를 사용하는 경우 대신 [Amazon Lex V2 가이드를](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html) 참조하세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 연습 3: Lambda 함수 추가(AWS CLI)
<a name="gs-cli-update-lambda"></a>

사용자 입력을 검증하고 사용자의 의도를 이행하는 Lambda 함수를 봇에 추가합니다.

Lambda 표현식 추가는 5단계 프로세스입니다.

1. [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html) 함수를 사용하여 `OrderFlowers` 의도가 Lambda [호출](https://docs.aws.amazon.com/lambda/latest/dg/lambda-api-permissions-ref.html) 작업을 호출하도록 합니다.

1. [GetIntent](API_GetIntent.md) 작업을 사용하여 Amazon Lex 에서 의도를 가져옵니다.

1. Lambda 함수를 추가하도록 의도를 업데이트합니다.

1. [PutIntent](API_PutIntent.md) 작업을 사용하여 업데이트된 의도를 다시 Amazon Lex로 보냅니다.

1. [GetBot](API_GetBot.md) 및 [PutBot](API_PutBot.md) 작업을 사용하여 해당 의도를 사용하는 봇을 다시 구축합니다.

이 연습에서 명령을 실행하려면 명령이 실행될 리전을 알아야 합니다. 리전 목록은 [모델 구축 할당량](gl-limits.md#gl-limits-model-building)을 참조하십시오.

`InvokeFunction` 권한을 추가하기 전에 의도에 Lambda 함수를 추가하면 다음 오류 메시지가 표시됩니다.

```
            An error occurred (BadRequestException) when calling the 
            PutIntent operation: Lex is unable to access the Lambda 
            function Lambda function ARN in the context of intent 
            intent ARN.  Please check the resource-based policy on 
            the function.
```

`GetIntent` 작업의 응답에는 의도의 특정 개정을 식별하는 `checksum`이라는 필드가 포함되어 있습니다. [PutIntent](API_PutIntent.md) 작업을 사용하여 의도를 업데이트하는 경우 체크섬 값을 제공해야 합니다. 체크섬 값을 제공하지 않으면 다음 오류 메시지가 표시됩니다.

```
            An error occurred (PreconditionFailedException) when calling 
            the PutIntent operation: Intent intent name already exists. 
            If you are trying to update intent name you must specify the 
            checksum.
```

이 연습에서는 [연습 1: 청사진을 사용하여 Amazon Lex 봇 생성(콘솔)](gs-bp.md)의 Lambda 함수를 사용합니다. Lambda 함수를 생성하는 방법에 대한 지침은 [3단계: Lambda 함수 만들기(콘솔)](gs-bp-create-lambda-function.md)을 참조하십시오.

**참고**  
다음 AWS CLI 예제는 Unix, Linux 및 macOS용으로 포맷되어 있습니다. Windows의 경우 `"\$LATEST"`를 `$LATEST`로 변경합니다.

**의도에 Lambda 함수를 추가하려면**

1. 에서 `OrderFlowers` 의도에 대한 `InvokeFunction` 권한을 AWS CLI추가합니다.

   ```
   aws lambda add-permission \
       --region region \
       --function-name OrderFlowersCodeHook \
       --statement-id LexGettingStarted-OrderFlowersBot \
       --action lambda:InvokeFunction \
       --principal lex.amazonaws.com \
       --source-arn "arn:aws:lex:region:account ID:intent:OrderFlowers:*"
       --source-account account ID
   ```

   Lambda가 다음의 응답을 보냅니다.

   ```
   {
       "Statement": "{\"Sid\":\"LexGettingStarted-OrderFlowersBot\",
         \"Resource\":\"arn:aws:lambda:region:account ID:function:OrderFlowersCodeHook\",
         \"Effect\":\"Allow\",
         \"Principal\":{\"Service\":\"lex.amazonaws.com\"},
         \"Action\":[\"lambda:InvokeFunction\"],
         \"Condition\":{\"StringEquals\":
           {\"AWS:SourceAccount\": \"account ID\"},
           {\"AWS:SourceArn\":
             \"arn:aws:lex:region:account ID:intent:OrderFlowers:*\"}}}"
   }
   ```

1. Amazon Lex 에서 의도를 얻으십시오. Amazon Lex는 출력을 **OrderFlowers-V3.json**라는 파일로 보냅니다.

   ```
   aws lex-models get-intent \
       --region region \
       --name OrderFlowers \
       --intent-version "\$LATEST" > OrderFlowers-V3.json
   ```

1. 텍스트 편집기에서 **OrderFlowers-V3.json**을 엽니다.

   1. `createdDate`, `lastUpdatedDate` 및 `version` 필드를 찾아 삭제합니다.

   1. `fulfillmentActivity` 필드를 업데이트합니다.

      ```
          "fulfillmentActivity": {
              "type": "CodeHook",
              "codeHook": {
                  "uri": "arn:aws:lambda:region:account ID:function:OrderFlowersCodeHook",
                  "messageVersion": "1.0"
              }
          }
      ```

   1. 파일을 저장합니다.

1. 에서 업데이트된 의도를 Amazon Lex로 AWS CLI전송합니다.

   ```
   aws lex-models put-intent \
       --region region \
       --name OrderFlowers \
       --cli-input-json file://OrderFlowers-V3.json
   ```

이제 의도를 업데이트했으므로 봇을 다시 구축합니다.

**`OrderFlowersBot` 봇을 다시 구축하려면**

1. 에서 `OrderFlowersBot` 봇의 정의를 AWS CLI가져와 파일에 저장합니다.

   ```
   aws lex-models get-bot \
       --region region \
       --name OrderFlowersBot \
       --version-or-alias "\$LATEST" > OrderFlowersBot-V3.json
   ```

1. 텍스트 편집기에서 **OrderFlowersBot-V3.json** 파일을 엽니다. `createdDate`, `lastUpdatedDate`, `status` 및 `version` 필드를 제거합니다.

1. 텍스트 편집기에서 봇 정의에 다음 줄을 추가합니다.

   ```
   "processBehavior": "BUILD",
   ```

1. 에서 봇의 새 개정을 AWS CLI빌드합니다.

   ```
   aws lex-models put-bot \
       --region region \
       --name OrderFlowersBot \
       --cli-input-json file://OrderFlowersBot-V3.json
   ```

   서버에서 다음과 같이 응답합니다.

## 다음 단계
<a name="gs-cli-next-exercise-4"></a>

[4단계: 버전 게시(AWS CLI)](gs-cli-publish.md)