APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Amazon ConnectをAWS CloudFormationで管理する

こんにちは、クラウド事業部の山路です。

今回は表題の通り、Amazon ConnectをAWS CloudFormationで管理する例を紹介いたします。

なお、Amazon Connectについては以前弊社ブログでも紹介されていますので、そちらをご覧ください。

techblog.ap-com.co.jp

背景

Amazon ConnectのAWS CloudFormationへの対応は少しずつアップデートされており、2023年7月にはルーティングプロファイル・キュー、9月にはセキュリティプロファイルの作成がサポートされました。

aws.amazon.com

aws.amazon.com

上記アップデートにより、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の公式ページは以下の通りです。

リソース間の関係をApplication Composerで表したのが以下の図になります。

こちらのテンプレートを使用してAmazon Connectを作成します。今回パラメータは以下のように設定しました。

  • PJPrefix: connect-test-20231220
  • Password: Passw0rd
  • PhoneNumber: +12345678902
  • Username: test-user

作成完了後、Amazon ConnectのURLにアクセスし、作成したユーザーの名称とパスワードを使用してログインできるのを確認します。

あとは電話番号の取得や問い合わせフローの作成など、必要に応じて検証を進めていきます。検証が完了したらCloudFormationスタックを削除すれば、リソースの削除も簡単に完了します。

最後に

今回はAmazon ConnectをCloudFormationで作成する例を紹介しました。今回は主に検証での利用を想定していますが、実際の案件でも、例えばリージョン規模の障害発生時、CloudFormationテンプレートを使って、別リージョンに同じ環境を作成する、などの使い方もアリかと思います。

弊社はAWSアドバンスドティアサービスパートナー認定を受けております。また以下のようにAWSの活用を支援するサービスも行っているので、何かご相談したいことがあればお気軽にご連絡ください。

www.ap-com.co.jp