こんにちは、クラウド事業部の山路です。
今回は表題の通り、Amazon ConnectをAWS CloudFormationで管理する例を紹介いたします。
なお、Amazon Connectについては以前弊社ブログでも紹介されていますので、そちらをご覧ください。
背景
Amazon ConnectのAWS CloudFormationへの対応は少しずつアップデートされており、2023年7月にはルーティングプロファイル・キュー、9月にはセキュリティプロファイルの作成がサポートされました。
上記アップデートにより、Amazon Connectの利用を開始するうえで必要な最低限のリソースは一通りCloudFormationで管理できるようになりました。
今回は、Amazon Connectを検証用に用意するためのCloudFormationテンプレートを作成しました。ちょっとした検証などにご利用いただければと思います。
検証
今回用意したテンプレートは以下になります。
CloudFormationテンプレート
AWSTemplateFormatVersion: '2010-09-09' Description: Amazon Connect Instance Parameters: PJPrefix: Type: String Password: Type: String PhoneNumber: Type: String Username: Type: String Resources: Instance: Type: AWS::Connect::Instance Properties: Attributes: ContactflowLogs: true InboundCalls: true OutboundCalls: true IdentityManagementType: CONNECT_MANAGED InstanceAlias: !Ref PJPrefix S3BucketForCallRecording: Type: AWS::S3::Bucket Properties: BucketName: !Sub ${PJPrefix}-bucket InstanceStorageConfig: Type: AWS::Connect::InstanceStorageConfig Properties: InstanceArn: !GetAtt Instance.Arn ResourceType: CALL_RECORDINGS S3Config: BucketName: !Ref S3BucketForCallRecording BucketPrefix: CallRecordings StorageType: S3 HoursOfOperation: Type: AWS::Connect::HoursOfOperation Properties: Config: - Day: SUNDAY EndTime: Hours: 12 Minutes: 0 StartTime: Hours: 12 Minutes: 0 - Day: MONDAY EndTime: Hours: 12 Minutes: 0 StartTime: Hours: 12 Minutes: 0 - Day: TUESDAY EndTime: Hours: 12 Minutes: 0 StartTime: Hours: 12 Minutes: 0 - Day: WEDNESDAY EndTime: Hours: 12 Minutes: 0 StartTime: Hours: 12 Minutes: 0 - Day: THURSDAY EndTime: Hours: 12 Minutes: 0 StartTime: Hours: 12 Minutes: 0 - Day: FRIDAY EndTime: Hours: 12 Minutes: 0 StartTime: Hours: 12 Minutes: 0 - Day: SATURDAY EndTime: Hours: 12 Minutes: 0 StartTime: Hours: 12 Minutes: 0 InstanceArn: !GetAtt Instance.Arn Name: !Sub ${PJPrefix}-hours-of-operation TimeZone: Asia/Tokyo Queue: Type: AWS::Connect::Queue Properties: HoursOfOperationArn: !GetAtt HoursOfOperation.HoursOfOperationArn InstanceArn: !GetAtt Instance.Arn Name: !Sub ${PJPrefix}-queue RoutingProfile: Type: AWS::Connect::RoutingProfile Properties: DefaultOutboundQueueArn: !GetAtt Queue.QueueArn Description: initial routing profile for User creation by CFn InstanceArn: !GetAtt Instance.Arn MediaConcurrencies: - Channel: CHAT Concurrency: 1 - Channel: TASK Concurrency: 1 - Channel: VOICE Concurrency: 1 QueueConfigs: - Delay: 0 Priority: 1 QueueReference: Channel: VOICE QueueArn: !GetAtt Queue.QueueArn Name: !Sub ${PJPrefix}-routing-profile SecurityProfile: Type: AWS::Connect::SecurityProfile Properties: InstanceArn: !GetAtt Instance.Arn SecurityProfileName: !Sub ${PJPrefix}-security-profile Permissions: - AccessMetrics - AccessMetrics.AgentActivityAudit.Access - AccessMetrics.HistoricalMetrics.Access - AccessMetrics.RealTimeMetrics.Access - AgentGrouping.Create - AgentGrouping.Edit - AgentGrouping.EnableAndDisable - AgentGrouping.View - AgentStates.Create - AgentStates.Edit - AgentStates.EnableAndDisable - AgentStates.View - AgentTimeCard.View - AudioDeviceSettings.Access - BasicAgentAccess - ChatTestMode - ConfigureContactAttributes.View - ContactAttributes.View - ContactFlowModules.Create - ContactFlowModules.Delete - ContactFlowModules.Edit - ContactFlowModules.Publish - ContactFlowModules.View - ContactFlows.Create - ContactFlows.Delete - ContactFlows.Edit - ContactFlows.Publish - ContactFlows.View - ContactLensCustomVocabulary.Edit - ContactLensCustomVocabulary.View - ContactSearch.View - ContactSearchWithCharacteristics.Access - ContactSearchWithCharacteristics.View - ContactSearchWithKeywords.Access - ContactSearchWithKeywords.View - ContentManagement.Create - ContentManagement.Delete - ContentManagement.Edit - ContentManagement.View - CustomViews.Access - CustomerProfiles.Create - CustomerProfiles.Edit - CustomerProfiles.View - DeleteCallRecordings - DownloadCallRecordings - Evaluation.Create - Evaluation.Delete - Evaluation.Edit - Evaluation.View - EvaluationForms.Create - EvaluationForms.Delete - EvaluationForms.Edit - EvaluationForms.View - ForecastScheduleInterval.Edit - ForecastScheduleInterval.View - GraphTrends.View - HistoricalChanges.View - HoursOfOperation.Create - HoursOfOperation.Delete - HoursOfOperation.Edit - HoursOfOperation.View - ListenCallRecordings - ManagerBargeIn - ManagerListenIn - MetricsReports.Create - MetricsReports.Delete - MetricsReports.Edit - MetricsReports.Publish - MetricsReports.Schedule - MetricsReports.Share - MetricsReports.View - MyContacts.View - OutboundCallAccess - PhoneNumbers.Claim - PhoneNumbers.Edit - PhoneNumbers.Release - PhoneNumbers.View - Prompts.Create - Prompts.Delete - Prompts.Edit - Prompts.View - Queues.Create - Queues.Edit - Queues.EnableAndDisable - Queues.Purge - Queues.View - RealtimeContactLens.View - RedactedData.View - ReportSchedules.Create - ReportSchedules.Delete - ReportSchedules.Edit - ReportSchedules.View - ReportsAdmin.Access - ReportsAdmin.Delete - ReportsAdmin.Publish - ReportsAdmin.Schedule - ReportsAdmin.View - RoutingPolicies.Create - RoutingPolicies.Edit - RoutingPolicies.View - Rules.Create - Rules.Delete - Rules.Edit - Rules.View - ScreenRecording.Access - ScreenRecording.Delete - ScreenRecording.Download - SecurityProfiles.Create - SecurityProfiles.Delete - SecurityProfiles.Edit - SecurityProfiles.View - StopContact.Enabled - TaskTemplates.Create - TaskTemplates.Delete - TaskTemplates.Edit - TaskTemplates.View - Transcript.View - TransferContact.Enabled - TransferDestinations.Create - TransferDestinations.Delete - TransferDestinations.Edit - TransferDestinations.View - UnredactedData.View - UpdateContactSchedule.Enabled - Users.Create - Users.Delete - Users.Edit - Users.EditPermission - Users.EnableAndDisable - Users.View - Views.View - VoiceId.Access - VoiceIdAttributesAndSearch.View - Wisdom.View User: Type: AWS::Connect::User Properties: IdentityInfo: FirstName: firstname LastName: lastname Email: example@email.com InstanceArn: !GetAtt Instance.Arn Password: !Ref Password PhoneConfig: DeskPhoneNumber: !Ref PhoneNumber PhoneType: SOFT_PHONE RoutingProfileArn: !GetAtt RoutingProfile.RoutingProfileArn SecurityProfileArns: - !GetAtt SecurityProfile.SecurityProfileArn Username: !Ref Username
今回作成するリソースとCloudFormationの公式ページは以下の通りです。
- AWS::Connect::HoursOfOperation - AWS CloudFormation
- AWS::Connect::Instance - AWS CloudFormation
- AWS::Connect::InstanceStorageConfig - AWS CloudFormation
- AWS::Connect::Queue - AWS CloudFormation
- AWS::Connect::RoutingProfile - AWS CloudFormation
- AWS::Connect::SecurityProfile - AWS CloudFormation
- AWS::Connect::User - AWS CloudFormation
- AWS::S3::Bucket - AWS CloudFormation
リソース間の関係をApplication Composerで表したのが以下の図になります。
こちらのテンプレートを使用してAmazon Connectを作成します。今回パラメータは以下のように設定しました。
PJPrefix
: connect-test-20231220Password
: Passw0rdPhoneNumber
: +12345678902Username
: test-user
作成完了後、Amazon ConnectのURLにアクセスし、作成したユーザーの名称とパスワードを使用してログインできるのを確認します。
あとは電話番号の取得や問い合わせフローの作成など、必要に応じて検証を進めていきます。検証が完了したらCloudFormationスタックを削除すれば、リソースの削除も簡単に完了します。
最後に
今回はAmazon ConnectをCloudFormationで作成する例を紹介しました。今回は主に検証での利用を想定していますが、実際の案件でも、例えばリージョン規模の障害発生時、CloudFormationテンプレートを使って、別リージョンに同じ環境を作成する、などの使い方もアリかと思います。
弊社はAWSアドバンスドティアサービスパートナー認定を受けております。また以下のようにAWSの活用を支援するサービスも行っているので、何かご相談したいことがあればお気軽にご連絡ください。