[Amazon Connect] Connectから利用されるLambdaをCloudFormationで構築する場合の動作について
1 はじめに
AIソリューション部の平内(SIN)です。
Amazon Connect(以下、Connect)は、残念ながら、AWS CloudFormation(以下、CloudFormation)で、構築することができません。
しかし、AWS Lambda(以下、Lambda)を、CloudFormationで構築することは可能ですので、今回は、Connectから利用するLambdaを構築するという場面を捉えて、その動作を確認してみました。
2 CloudFormationでの対応範囲
ConnectでLambdaを利用する場合、作業手順は、概ね次のようになります。
- Connectのインスタンス作成
- Connectの問い合わせフロー作成
- Lambda関数の構築
- Lambda関数にパーミッションを付与(Connectから利用できるように)
- 問い合わせフローでLamnda実行のブロックを設定
この内、3,4については、CloudFormationで構築が可能です。
3 問い合わせフロー
動作確認するため、以下のようなフローを作成しました。
配置された、AWS Lambdaを呼び出すブロックの後は、Lambdaの戻り値(message)をプロンプト再生ブロックで再生しています。
4 リソース
CloudFormationのテンプレートで作成したリソースは、以下の3つです。
- Lambda関数 (AWS::Lambda::Function)
- Lambdaのロール (AWS::IAM::Role)
- 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に関するキャンペーンを行なっています。