Amazon Connectからエイリアス版Lambda関数を呼び出す方法 [小ネタ]

### はじめに

ARI コンタクトセンター最適化支援チームのbayashiです。

Amazon Connect インスタンスのコンソール画面から登録できるLambda関数は、通常の方法だとエイリアス(特定関数のバージョンに対するポインタ)がない最新の関数を指定することになります。
・問い合わせフロー > AWS Lambdaから関数の追加
![ac-lambda1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605350/8db9f284-5b12-db8b-b7f5-6bd3bfa81a42.png)

「lambda add-permission」コマンド登録後に、フローの「AWS Lambda 関数を呼び出す」ブロックでLambdaエイリアスのARN値を直接記載する方法もありますが、今回は「AWS Lambda 関数を呼び出す」ブロックの一覧リストから関数を選択できる方法を共有します。（AWSサポートから対応方法を回答いただきました。）
既にご存じの方もいるとは思いますが、Web検索しても今回の方法を明確に紹介している記事が見当たらなかったので、執筆いたします。

### エイリアス関数の作成 (コンソール)
-公式ドキュメントより-
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-aliases.html

> エイリアス関数を作成するには
> 1. Lambda コンソールの [Functions] (関数) ページを開きます。
> 2. 関数を選択します。
> 3. [エイリアス]、[ エイリアスの作成 ] の順にクリックします。
> 4. [Create alias (エイリアスの作成)] ページで、以下の操作を行います。
>     a. [Name (名前)] で、エイリアスの名前を入力します。
>     b. (オプション) [Description (説明)] で、エイリアスの説明を入力します。
>     c. [Version (バージョン)] で、エイリアスが参照する関数のバージョンを選択します。
>     d. (オプション) エイリアスのルーティングを設定するには、[Weighted alias (加重エイリアス)] を展開します。詳細については、「エイリアスのルーティング設定」を参照してください。
>     e. [Save] を選択します。

今回は、「test-function」関数にtestエイリアスを作成しました。
![ac-lambda2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605350/da828daf-fd60-acf7-0be0-1e761da8c027.png)

関数のARN値は次のコマンドで使用するのでコピーします。


### エイリアス関数のAmazon Connectへの登録方法

[利用コマンド]
・associate-lambda-function
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/connect/associate-lambda-function.html

```aws cli:aws cli
$ aws connect associate-lambda-function \
--instance-id < Amazon Connect インスタンスID > \
--function-arn < Lambda 関数のARN >
```

★ポイントとして、"function-arn"にはエイリアス版のARN「arn:aws:lambda:<リージョン>:<アカウントID>:function:<関数名>:<エイリアス名>」を指定して実行します。


### 登録確認
・問い合わせフロー > AWS Lambdaで確認

○コマンド登録実行前
事前に、コンソール画面で表示された関数を追加したので1つのみ登録されています。
![ac-lambda4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605350/3c1042b4-fc66-3591-d417-cb4aa0a9d040.png)


○コマンド登録実行後
ARN値の末尾にtestが付与された関数が追加されました。
![ac-lambda3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605350/f364a7c2-e670-63c2-0b2c-103c1de8b4c4.png)


・コマンドで確認
「list-lambda-functions」コマンドでは、以下の結果が返ってきました。
```aws cli:aws cli
$ aws connect list-lambda-functions --instance-id < Amazon Connect インスタンス ID >
{
    "LambdaFunctions": [
        "arn:aws:lambda:region:accountID:function:test-function",
        "arn:aws:lambda:region:accountID:function:test-function:test"
    ]
}
```
### AWS Lambda 関数を呼び出すブロックの確認
Amazon Connect フローの「AWS Lambda 関数を呼び出すブロック」を確認すると、エイリアス版の関数も一覧リストから選択することができます。
エイリアス版は「関数名:エイリアス名」(test-function:test)表記を想定していましたが、「エイリアス名(test)」のみが一覧で表示されました。
![ac-lambda5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605350/41e86e0b-bfd2-5ac3-6a99-d984156a27b0.png)


シンプルなフローでLambda関数を呼び出してみます。
![ac-lambda6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605350/db3f0cf5-d682-f079-e7cf-d84f10362de0.png)

・各関数のコード内容です。
![ac-lambda7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605350/019042a0-9c9d-5107-2181-b75be2734b8e.png)



### 実行結果
通常版とエイリアス版でLambda関数が使い分けされて実行できました。

```cloudwatch:AmazonConnect実行ログ
{
  　※1回目Lambda関数呼び出し(一部抜粋)
    "ExternalResults": {
        "body": "通常のLambda関数",
        "statusCode": "200"
    },
    "Parameters": {
        "FunctionArn": "arn:aws:lambda:region:accountID:function:test-function",
        "ResponseValidation": "ResponseType=STRING_MAP",
        "TimeLimit": "3000"
    }
}
{
  　※2回目Lambda関数呼び出し(一部抜粋)
    "ExternalResults": {
        "body": "テストエイリアス",
        "statusCode": "200"
    },
    "Parameters": {
        "FunctionArn": "arn:aws:lambda:region:accountID:function:test-function:test",
        "ResponseValidation": "ResponseType=STRING_MAP",
        "TimeLimit": "3000"
    }
}
```

### おまけ　-バージョン関数の登録-
バージョン発行したARNを指定することでも、Amazon Connect インスタンスへ登録可能でした。
関数の「test-function」、「test-function2」をそれぞれで「バージョン2」を登録した結果、Lambda関数を呼び出すブロックは以下の見え方になりました。関数名が含まれるパターンと含まれないパターンがあるようです。
![lambda4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605350/96536672-c21d-d2b5-a6d7-b3f76be484e2.png)




### おわりに
プロビジョニングされた同時実行を利用する場合、エイリアスまたはバージョンを作成する必要があるため、今回の記事が活用される場面あれば何よりです。
閲覧いただきありがとうございました。