コンタクト追跡レコード（CTR）のFirehose～S3～経由のデータ連携　（後編）

# 前提条件
Saleforce API Version ： v55.0
serverlessrepo-AmazonConnectSalesforceLambda ： 5.19.0
この記事は、2022/10頃に書かれています。

AmazonConnect自体には、コンタクト追跡レコードをFirehoseに流す機能があるけど、連携用のLambdaは提供されてないけど、提供されてるLambdaを流用して、どうにかならないかな？というお試しした話の後編。

+ serverlessrepo-AmazonConnectSalesf-sfIntervalAgent-xxxxxx
+ serverlessrepo-AmazonConnectS-sfContactTraceRecord-xxxxxx

設定に迷った時に参照するのは、上記２つの『Amazon Connect Salesforce CTI Adapter』で作成されるLambdaです。

# Lambdaの作成
Lambdaの一覧画面から作成画面へ遷移する。

![Lambda_01.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/c17e4eb9-2b8a-41a4-b2cb-6f571512a014.jpeg)

関数の雛形を作成する。
![Lambda_02.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/c5cdbae0-28e0-ec39-dd8a-da321a0686ba.jpeg)

# Lambdaのレイヤー
![Lambda_03.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/7fc22e78-a9ed-0cd5-0fe7-c594cf0931f6.jpeg)

|名前|値|
|---|---|
|マージ順序|1|
|名前|sfLambdaLayer|
|レイヤーバージョン|1|
|互換性のあるランタイム|python3.7|
|互換性のあるアーキテクチャ|-|
|バージョン ARN|arn:aws:lambda:リージョン:AWSアカウントID:layer:sfLambdaLayer:1|

# LambdaのIAM（権限：ロール＆ポリシー）

![Lambda_04.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/c10a5e46-b67e-a304-12d6-88e40bf93288.jpeg)

『Amazon Connect Salesforce CTI Adapter』で作成されたポリシーで流用するのは、下記の３つです。

+ serverlessrepo-AmazonConnectSalesforceLambda-CloudWatchManagedPolicy-XXXXXX
+ serverlessrepo-AmazonConnectSalesforceLambda-KMSManagedPolicy-XXXXXX
+ serverlessrepo-AmazonConnectSalesforceLambda-SecretsManagerManagedPolicy-XXXXXX

新規作成分：S3読み取り用
```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::FirehoseのS3出力先バケット名/*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

新規作成分：Salesforce連携用Lamdba実行用
```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "lambda:InvokeAsync",
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:リージョン:AWSアカウントID:function:serverlessrepo-AmazonConn-sfExecuteTranscriptionSt-XXXXXX",
                "arn:aws:lambda:リージョン:AWSアカウントID:function:serverlessrepo-AmazonConnectS-sfContactTraceRecord-XXXXXX"
            ],
            "Effect": "Allow"
        }
    ]
}
```
コンタクト追跡レコードの連携用という意味では、『AmazonConnectS-sfContactTraceRecord』の方の実行許可があれば良いのですが、コピー元のポリシーと揃える。

# Lambdaの環境変数

![Lambda_05.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/46794841-658d-fb8a-60b3-91742f96b68a.jpeg)


|キー|値|
|---|---|
|EXECUTE_CTR_IMPORT_LAMBDA|serverlessrepo-AmazonConnectS-sfContactTraceRecord-xxxxxx|
|EXECUTE_TRANSCRIPTION_STATE_MACHINE_LAMBDA|serverlessrepo-AmazonConn-sfExecuteTranscriptionSt-xxxxxx|
|LOGGING_LEVEL|INFO|
|POSTCALL_CTR_IMPORT_ENABLED|true|
|POSTCALL_RECORDING_IMPORT_ENABLED|false|
|POSTCALL_TRANSCRIBE_ENABLED|false|
|SF_ADAPTER_NAMESPACE|他Lambdaを参照して同じネームスペースを設定|
|SF_CREDENTIALS_SECRETS_MANAGER_ARN|他Lambdaを参照して同じSECRETSのARNを設定|
|SF_HOST|https://利用ドメイン.my.salesforce.com|
|SF_PRODUCTION|本番かsandboxを利用しているかで切り替える（true/false）|
|SF_USERNAME|他Lambdaを参照して連携用のユーザIDを設定|
|SF_VERSION|他Lambdaを参照して同じバージョンを設定|

Salesforceへの連携処理も新規作成のLambdaで行うか、現状の実装の通り、非同期Lambda実行とするか迷ったので、環境変数は、どちらにでも対応できるように余分に設定しています。

# Lambdaの起動設定（メモリ＆タイムアウト）
![Lambda_06.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/3bc69773-5c5a-be69-32af-fcb2e8d78336.jpeg)

新規作成時の「デフォルト：３秒」は、流石に厳しいので１分に伸ばしています。

# LambdaのS3のPUTトリガー

![Lambda_07.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/8606fda8-4d2a-7b99-4420-c724960ff64b.jpeg)

Firehoseはデータを一定周期でS3にファイル出力をしてくれるので、履歴データ連携のようにS3のPUTトリガーを設定することで連携できます。
拡張子がつかないので、Prefix条件とSuffix条件はつけれません。専用のS3バケットが必要です。

|設定|値|
|---|---|
|Bucket arn|arn:aws:s3:::バケット名|
|Event type|s3:ObjectCreated:Put|
|Notification name|s3トリガー名|
|Prefix|なし|
|Service principal|s3.amazonaws.com|
|Source account|AWSアカウントID|
|Suffix|なし|

# 後半総括
既存で動いてるLambdaがある時に、どの辺りを設定を確認して設定を施すか？といった所を中心に書く事になりましたが、前編・後編を併せて、コンタクト追跡レコードのFirehose～S3～経由で連携する事ができるようになりました。
（純正のCTIアダプターにも機能として実装して欲しいですね！）

# AWSの相談・お困りごとありましたら、、、

AWSの活用方法や、お困りごとの相談、随時、お仕事の受付しております。

https://www.cs-cloud-aid.com/