Amazon Lex の V1 Bot を V2 Bot に移行する

## はじめに
2021/7/14 に Amazon Lex の V1 API で作成されたチャットボットを V2 に移行できる Migration Tool が利用可能になりました。
 
https://aws.amazon.com/jp/about-aws/whats-new/2021/07/amazon-lex-announces-tooling-to-migrate-bots-from-lex-v1-console-to-lex-v2-console/

V2 API がリリースされた当初は手動の移行 (実質再作成) が必要だったのですが、これにより主要な設定を V2 API のボットとして移行できるようになりました。

## Lex V1 と V2 の違い
Amazon Lex は 2021年1月に V2 API がリリースされています。コンソールのデザインが変わっただけではなく、新しい機能を含む新規の API としてのリリースです。1 つのボットで複数言語に対応させることができるなど、生産性が向上するアップデートも多く含まれています。

https://aws.amazon.com/jp/blogs/news/amazon-lex-enhanced-console-experience/

## Migration Tool で移行されるもの
* カスタムインテントとスロットタイプのみが V2 Bot に移行されます
* V2 Bot では 1 つのボットで複数言語に対応できるため、異なる言語で作成された複数の V1 Bot を 1 つの V2 Bot に移行することもできます

:::note warn
以下の設定は移行対象外です。
:::

* ボットのエイリアス
* Amazon Kendra インデックス
* AWS Lambda関数
* 会話ログの設定
* メッセージングチャネルの連携 (Slack など)
* Tag

Lex の応答で Lambda 関数を使用している場合は手動で移行する必要がありますが、そもそも V2 API の Input event format と Response format に合わせて Lambda 関数を改修する必要があるので致し方ないかと思います。(V1 用の Lambda 関数はそのままでは動かない)

V2 API のフォーマットは以下のドキュメントをご確認ください。

https://docs.aws.amazon.com/lexv2/latest/dg/lambda.html

## やってみる
### 移行作業
Lex のコンソールで提供されているサンプルの BookTrip を移行してみます。

V1 コンソールの Migration Tool から対象のボットを選択し、Migrate をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/9dc14fea-fbcf-5768-655c-3bb8e1bc536c.png)

Step 1 で移行元の Bot version と選択し、移行先の V2 Bot の名前を入力して次に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/85970796-b522-b1b7-b921-5dca0ed0faf2.png)

Step 2 で移行先の V2 Bot に設定する IAM ロールを新規作成するか、既存の IAM ロールを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/3720c50a-d5cf-3101-7ea6-0872a7c1f9ef.png)

Step 3 では設定内容を確認して、`Start migration` をクリックするだけです。簡単ですね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/4e9978e0-cf90-f858-17ed-9c07b0087c2b.png)

### 移行結果の確認
Migration Tool の画面下部、History から移行結果を確認することができます。Migration status が `IN_PROGRESS` から `COMPLETED` になるまで少し待機します。完了後、Migaration details の View から移行結果を確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/5a1b3eb2-0a4b-7905-99dd-e2797285d29f.png)

V2 Bot に移行できないリソースがあった場合は、Alerts として表示されます。ドキュメントのリンクから対応方法を確認できます。以下の例では Hang-up phrases が V2 Bot ではサポートされないためにアラートメッセージが表示されています。V2 Bot は一致するインテントがなかった場合に呼び出される FallbackIntent がデフォルトで設定されるため、大きな問題にはならないかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/6eaab062-0813-6ff3-369c-028c138eee92.png)

V2 コンソールを確認すると、カスタムインテントとスロットタイプが移行されていることを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/106e4265-2645-cd85-ccf3-feb2f49e1fdb.png)

### 複数言語の統合
先ほどは BookTrip の日本語ボットを V2 Bot に移行しましたが、V2 Bot に言語を追加する形で V1 の英語ボットを移行してみます。

BookTrip の英語ボットを選択し、Migrate をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/33063bde-d34b-1bf2-4953-8689b47c94d5.png)

Step1 で 移行先の V2 Bot 名に先ほどと同じボット名を入力すると、Step 2 で以下のような警告メッセージが表示されます。移行先の English (US) のドラフトバージョンの設定が存在する場合は上書きされるという内容ですが、今回は新たに英語の言語設定を追加することが目的ですので問題ありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/cc02c345-941e-8def-0594-fcd99af9cc95.png)

完了後、V2 コンソールで移行先のボットを確認すると、言語に英語が追加されていることを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/8c202b58-f2a5-243e-456f-d57fef5a1ba2.png)


## 参考
https://docs.aws.amazon.com/lex/latest/dg/migrate.html


簡単ですが以上です。
参考になれば幸いです。