ちょっと話題の記事

[Amazon Connect] Connectから利用されるLambdaをCloud​Formationで構築する場合の動作について

2019.05.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

AIソリューション部の平内(SIN)です。

Amazon Connect(以下、Connect)は、残念ながら、AWS Cloud​Formation(以下、CloudFormation)で、構築することができません。

しかし、AWS Lambda(以下、Lambda)を、CloudFormationで構築することは可能ですので、今回は、Connectから利用するLambdaを構築するという場面を捉えて、その動作を確認してみました。

2 CloudFormationでの対応範囲

ConnectでLambdaを利用する場合、作業手順は、概ね次のようになります。

  1. Connectのインスタンス作成
  2. Connectの問い合わせフロー作成
  3. Lambda関数の構築
  4. Lambda関数にパーミッションを付与(Connectから利用できるように)
  5. 問い合わせフローでLamnda実行のブロックを設定

この内、3,4については、CloudFormationで構築が可能です。

3 問い合わせフロー

動作確認するため、以下のようなフローを作成しました。

配置された、AWS Lambdaを呼び出すブロックの後は、Lambdaの戻り値(message)をプロンプト再生ブロックで再生しています。

4 リソース

CloudFormationのテンプレートで作成したリソースは、以下の3つです。

  1. Lambda関数 (AWS::Lambda::Function)
  2. Lambdaのロール (AWS::IAM::Role)
  3. Lambdaのパーミッション (AWS::Lambda::Permission)

5 パーミッション

ConnectからLambdaを実行する場合、パーミションの設定が必要です。これが設定されていないLambdaをコールすると、以下のようにAccessDeniedExceptionとなってしまいます。

パーミションの付与は、テンプレートでは、以下のとおりとなっています。

# Connectから呼び出すためのパーミッション
LambdaFunctionInvokePermission:
Type: AWS::Lambda::Permission
DependsOn: LambdaFunction
Properties:
FunctionName:
Ref: LambdaFunction
Action: lambda:InvokeFunction
Principal: connect.amazonaws.com
SourceAccount:
Ref: AWS::AccountId

現在、AWSコンソールでは、パーミッションの追加は、ドロップダウンリストから簡単に設定することが可能ですが(LambdaがConnectのインスタンスと同一のリージョンにある場合)、CloudFormationで構築した場合、ここには表示されません。

6 LambdaのARN

問い合わせフローのAWS Lambda関数を呼び出すブロックでは、LambdaのARNの指定が必要になるので、テンプレートでは、Outputsで出力するようにしました。

Outputs:
# 問い合わせフローに設定するLambdaのARN
LambdaARN:
Description: ARN of the Lambda function
Value:
Fn::GetAtt:
- LambdaFunction
- Arn

CloudFormationでの構築が完了した後、この値を、ブロックに転記することになります。

7 最後に

今回は、Connectから利用するLambdaをCloudFormationで構築する場合の動作について確認してみました。

テンプレートの更新は、LambdaのARNは変化しないので問題ないですが、いったんスタックを削除して作り直したりすると、LambdaのARNは、更新されたものを再登録する必要があることをご注意下さい。

テンプレートの全部については、gistに置きました。

https://gist.github.com/furuya02/aed2ac866fb7441fd99190719840fe87


弊社では、Amazon Connectに関するキャンペーンを行なっています。