Document Purpose: This document outlines the infrastructure and configuration requirements for deploying the CSI (Genesys Cloud Data Adapter) platform in a customer-hosted environment. The platform synchronises Genesys Cloud operational and historical data into PostgreSQL, MSSQL, or Snowflake databases for analytics and reporting.
The CSI platform consists of two primary components:
┌─────────────────────┐ ┌──────────────────────┐
│ Application Server │────────▶│ Database Server │
│ (Docker Container) │ │ PostgreSQL/MSSQL/ │
│ │ │ Snowflake │
└─────────────────────┘ └──────────────────────┘
│
│ HTTPS
▼
┌─────────────────────┐
│ Genesys Cloud │
│ API Endpoints │
└─────────────────────┘
Key Components:
| Component | Requirement | Notes |
|---|---|---|
| CPU | 4 vCPU | Higher CPU count improves concurrent job processing |
| Memory | 8 GB RAM | 16 GB recommended for high-volume environments (50k+ daily interactions) |
| Disk Space | 80 GB | For application, logs, and temporary data |
| Operating System | Linux (preferred) | Ubuntu 22.04 LTS, Amazon Linux 2023, or RHEL 8+ |
| Container Runtime | Docker Engine + Docker Compose | Version 20.10+ |
| User Account | Dedicated service account | Non-root user with Docker permissions |
Linux (Preferred):
Windows (Supported):
Note: Linux is strongly preferred for simplified deployment, better performance, and ongoing support.
The adapter supports three database platforms:
| Component | Requirement | Notes |
|---|---|---|
| PostgreSQL Version | 12 or higher | Version 15+ recommended for optimal performance |
| Deployment | Dedicated server or RDS | Separate from application server recommended |
| CPU | 4+ vCPU | Scale based on data volume and query load |
| Memory | 8+ GB RAM | 16+ GB recommended for large datasets |
| Storage | 500 GB - 25 TB+ | Scale based on retention period and call volume (see sizing table) |
| Backup | Automated daily backups | With point-in-time recovery capability |
| High Availability | Optional | Multi-AZ deployment for production environments |
| Component | Requirement | Notes |
|---|---|---|
| SQL Server Version | 2016 or higher | 2019+ recommended |
| Edition | Standard or Enterprise | Express not recommended for production |
| CPU | 4+ vCPU | Scale based on workload |
| Memory | 8+ GB RAM | 16+ GB recommended |
| Storage | 500 GB - 25 TB+ | Scale based on retention period |
| Component | Requirement | Notes |
|---|---|---|
| Edition | Standard or higher | Enterprise recommended for SEARCH OPTIMISATION |
| Warehouse Size | Small or Medium | Scale based on query concurrency |
| Storage | Pay-per-use | Automatic scaling |
| Authentication | Key Pair or Username/Password | Key pair recommended for security |
Required Database Settings (PostgreSQL):
contactcentredb (or customer-preferred name)UTF8en_US.UTF-8 (or appropriate locale)UTC (recommended for consistency)Connection Settings (PostgreSQL):
max_connections: 100 or highershared_buffers: 25% of available RAMeffective_cache_size: 50-75% of available RAMwork_mem: 16-64 MB (adjust based on concurrent queries)maintenance_work_mem: 256 MB - 1 GBPostgreSQL:
-- Create database and user
CREATE DATABASE contactcentredb WITH ENCODING 'UTF8';
CREATE USER genesys_adapter WITH PASSWORD 'secure_password';
-- Grant required permissions
GRANT CREATE, CONNECT ON DATABASE contactcentredb TO genesys_adapter;
GRANT CREATE ON SCHEMA public TO genesys_adapter;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO genesys_adapter;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO genesys_adapter;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO genesys_adapter;
-- For future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO genesys_adapter;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO genesys_adapter;
Minimum Required Privileges:
CREATE - For creating tables, indexes, and functionsALTER - For modifying table structuresINSERT, UPDATE, DELETE, SELECT - For data operationsTRUNCATE - For data cleanup operationsEXECUTE - For stored procedures and functionsEstimate database storage requirements based on your call center metrics:
| Call Volume (Daily) | Retention Period | Estimated Storage | Notes |
|---|---|---|---|
| 1,000 - 5,000 | 1 year | 10 - 25 GB | Basic interaction data |
| 1,000 - 5,000 | 5 years | 50 - 125 GB | Compliance retention |
| 5,000 - 20,000 | 1 year | 25 - 75 GB | Medium volume |
| 5,000 - 20,000 | 5 years | 125 - 375 GB | Medium volume + compliance |
| 20,000 - 50,000 | 1 year | 75 - 150 GB | High volume |
| 20,000 - 50,000 | 5 years | 375 - 750 GB | High volume + compliance |
| 50,000+ | 1 year | 150 - 200 GB | Very high volume |
| 50,000+ | 7 years | 1 TB + | Enterprise scale |
Important: Storage requirements increase significantly with: - Longer retention periods (5-7 years is common for regulatory compliance) - Additional data types (voice analytics, real-time data, recordings metadata, quality evaluations) - Voice transcripts and sentiment analysis data - Plan for 20-30% annual growth in storage requirements
Storage Calculation Basis:
Outbound (from Application Server):
| Destination | Port | Protocol | Purpose |
|---|---|---|---|
| Genesys Cloud API | 443 | HTTPS | API data retrieval |
api.mypurecloud.com |
443 | HTTPS | US region endpoint |
api.mypurecloud.ie |
443 | HTTPS | EU region endpoint |
api.mypurecloud.com.au |
443 | HTTPS | APAC region endpoint |
api.mypurecloud.de |
443 | HTTPS | Germany region endpoint |
api.mypurecloud.jp |
443 | HTTPS | Japan region endpoint |
| Database Server | 5432 (PostgreSQL) / 1433 (MSSQL) | TCP | Database connectivity |
| Snowflake | 443 | HTTPS | Snowflake connectivity (if used) |
| NTP Servers | 123 | UDP | Time synchronisation |
| Docker Registry | 443 | HTTPS | Container image pulls |
Inbound (to Application Server):
Inbound (to Database Server):
Before deployment, verify connectivity:
# Test Genesys Cloud API access
curl -I https://api.mypurecloud.com.au
# Test PostgreSQL connectivity
psql -h <database-host> -U <database-user> -d contactcentredb -c "SELECT version();"
# Test MSSQL connectivity (using sqlcmd)
sqlcmd -S <database-host> -U <database-user> -P <password> -Q "SELECT @@VERSION"
# Test NTP synchronisation
ntpdate -q pool.ntp.org
# Test DNS resolution
nslookup api.mypurecloud.com.au
SSL Mode=Require in connection stringEncrypt=True in connection stringThe preceding sections describe the platform's generic compute, database, and network requirements. This section maps those requirements to a concrete deployment on Amazon Web Services for customers self-hosting the platform in their own AWS account.
The subsections below mirror the same order as the requirements above — Application Server on AWS, Database on AWS, Network on AWS — and add AWS-specific operational concerns (IAM, secrets, monitoring, and backup). All resources should be provisioned in a single AWS region matched to the Genesys Cloud region.
Choose the AWS region closest to the corresponding Genesys Cloud region to minimise API latency and cross-region data egress. Every other resource described in this section should be provisioned in this same region.
| Genesys Cloud Region | API Endpoint | Recommended AWS Region |
|---|---|---|
| US East | api.mypurecloud.com |
us-east-1 (N. Virginia) |
| US West | api.usw2.pure.cloud |
us-west-2 (Oregon) |
| EU (Ireland) | api.mypurecloud.ie |
eu-west-1 (Ireland) |
| EU (Frankfurt) | api.mypurecloud.de |
eu-central-1 (Frankfurt) |
| APAC (Sydney) | api.mypurecloud.com.au |
ap-southeast-2 (Sydney) |
| APAC (Tokyo) | api.mypurecloud.jp |
ap-northeast-1 (Tokyo) |
| APAC (Mumbai) | api.aps1.pure.cloud |
ap-south-1 (Mumbai) |
| Canada | api.cac1.pure.cloud |
ca-central-1 (Central) |
The diagram below summarises the recommended layout. The components shown are described in the subsections that follow.
Architecture diagram — see PNG export embedded in the article.
This subsection translates the Application Server Requirements into specific AWS compute resources. Use the workload tier matching your daily interaction volume to select an instance type, EBS configuration, and AMI.
Recommended EC2 instance types for the Genesys Adapter, sized by daily interaction volume:
| Workload Tier | Daily Interactions | Recommended Instance | vCPU | Memory | Network | Notes |
|---|---|---|---|---|---|---|
| Small | < 5,000 | t3.large or t3a.large |
2 | 8 GB | Up to 5 Gbps | Burstable; suitable for dev/test or small production |
| Medium (recommended baseline) | 5,000 – 20,000 | m5.xlarge or m6i.xlarge |
4 | 16 GB | Up to 10 Gbps | General-purpose, sustained CPU |
| Large | 20,000 – 50,000 | m5.2xlarge or m6i.2xlarge |
8 | 32 GB | Up to 10 Gbps | Multiple concurrent jobs, voice analytics enabled |
| X-Large | 50,000 – 150,000 | m5.4xlarge or c6i.4xlarge |
16 | 32–64 GB | Up to 12.5 Gbps | High-throughput, real-time + batch concurrent |
| Enterprise | 150,000+ | m6i.8xlarge or split workloads |
32 | 128 GB | 12.5+ Gbps | Consider multiple EC2 instances per job category |
Notes on instance choice: - Architecture: x86_64 (AMD64) is required. ARM64 / Graviton (
t4g,m7g) instances are not supported by the current container image. - Burstable (t3/t3a): Acceptable for small workloads or non-production. Enable Unlimited mode so CPU credits do not throttle scheduled jobs. Avoid for real-time WebSocket workloads. - AMD vs Intel (m5a/m6avsm5/m6i): AMD variants offer comparable performance and are an acceptable substitute. - Compute-optimised (c6i): Preferred when running heavy voice analytics / transcript processing. - Use the latest generation available in your region (e.g.,m7ioverm6iwhere supported) for better price/performance.
| Volume | Type | Size | IOPS | Throughput | Purpose |
|---|---|---|---|---|---|
| Root volume | gp3 |
80 GB | 3,000 (default) | 125 MB/s (default) | OS, Docker engine |
| Application/data volume (optional) | gp3 |
100–500 GB | 3,000–6,000 | 125–250 MB/s | Docker volumes, container logs, temp files |
EBS recommendations: - Use
gp3rather thangp2for better baseline performance and configurable IOPS/throughput. - Enable EBS encryption at rest using AWS-managed (aws/ebs) or customer-managed KMS keys. - Enable EBS snapshots via AWS Backup or Data Lifecycle Manager (daily, 7–30 day retention). - For high-volume environments processing voice transcripts, mount a separate data volume to isolate Docker storage from the OS.
| AMI | Recommended Use | Notes |
|---|---|---|
| Ubuntu Server 22.04 LTS (Canonical, x86_64) | Preferred default | Long-term support until 2027 (standard) / 2032 (Pro) |
| Amazon Linux 2023 | AWS-native option | Tightly integrated with AWS services and SSM Agent pre-installed |
| Red Hat Enterprise Linux 9 | Enterprise standardisation | Requires RHEL subscription |
Always use the latest patched AMI from AWS Marketplace or the official publisher. Enable EC2 Image Builder or rebuild on a regular cadence to pick up security patches.
This subsection translates the Database Server Requirements into AWS-managed database options. Amazon RDS is recommended for PostgreSQL and SQL Server workloads; Snowflake remains the option when the target is a cloud data warehouse.
When using Amazon RDS instead of a self-managed database server, size the instance class to the same workload tier used for the application server:
| Workload Tier | Daily Interactions | RDS Instance Class | vCPU | Memory | Storage Type | Initial Storage |
|---|---|---|---|---|---|---|
| Small | < 5,000 | db.t3.large |
2 | 8 GB | gp3 |
100 GB |
| Medium | 5,000 – 20,000 | db.m6i.large or db.m5.large |
2 | 8 GB | gp3 |
250 GB |
| Large | 20,000 – 50,000 | db.m6i.xlarge |
4 | 16 GB | gp3 (6,000 IOPS) |
500 GB – 1 TB |
| X-Large | 50,000 – 150,000 | db.m6i.2xlarge or db.r6i.xlarge |
8 | 32–32 GB | gp3 (12,000 IOPS) |
1 – 4 TB |
| Enterprise | 150,000+ | db.r6i.2xlarge+ |
8+ | 64+ GB | io2 Block Express |
4 TB+ |
Configuration recommendations:
| Setting | Recommendation | Rationale |
|---|---|---|
| Engine version | PostgreSQL 15+ / SQL Server 2019+ | Aligned with adapter compatibility |
| Multi-AZ deployment | Enabled (production) | Automatic failover, synchronous standby |
| Storage autoscaling | Enabled, max 2× initial size | Prevents out-of-space outages |
| Backup retention | 7–35 days | Daily automated snapshots; 35 days for compliance |
| Backup window | Off-peak (e.g., 14:00–15:00 UTC) | Avoid overlap with adapter job execution |
| Maintenance window | Weekly off-peak (e.g., Sun 03:00 UTC) | Coordinate with adapter restart |
| Encryption at rest | Enabled (KMS) | Required for sensitive contact-centre data |
| Performance Insights | Enabled (7-day retention free) | Query troubleshooting |
| Enhanced Monitoring | Enabled, 60-second granularity | OS-level metrics |
| Deletion protection | Enabled (production) | Prevents accidental deletion |
| Parameter group | Custom, not default | Required to tune work_mem, shared_buffers, etc. |
RDS vs. self-managed on EC2: RDS is strongly recommended over running PostgreSQL/MSSQL on EC2 — it provides automated backups, Multi-AZ failover, patching, and monitoring out of the box. Use self-managed only when specific extensions or configurations are not supported by RDS.
When using Snowflake as the target data warehouse:
AWS_AP_SOUTHEAST_2 for Sydney).X-SMALL for ingestion; scale to SMALL/MEDIUM if Snowflake-side query concurrency increases.This subsection translates the Network Requirements into a concrete AWS VPC layout, security groups, and supporting endpoints.
| Subnet | CIDR Example | Tier | Resources |
|---|---|---|---|
| Public subnet AZ-a | 10.0.0.0/24 |
Public | NAT Gateway, optional Bastion |
| Public subnet AZ-b | 10.0.1.0/24 |
Public | NAT Gateway (for HA) |
| Private app subnet AZ-a | 10.0.10.0/24 |
Private | EC2 (Genesys Adapter) |
| Private data subnet AZ-a | 10.0.20.0/24 |
Private | RDS primary |
| Private data subnet AZ-b | 10.0.21.0/24 |
Private | RDS standby (Multi-AZ) |
Supporting components:
0.0.0.0/0 via the NAT Gateway; data subnets have no internet route.com.amazonaws.<region>.s3 (Gateway endpoint) — for backups and AWS CLI usagecom.amazonaws.<region>.secretsmanager (Interface endpoint) — for credential retrievalcom.amazonaws.<region>.logs (Interface endpoint) — for CloudWatch Logscom.amazonaws.<region>.ssm / ssmmessages / ec2messages — for Systems Manager Session Manager (replaces SSH bastion)| Security Group | Inbound Rules | Outbound Rules |
|---|---|---|
| sg-adapter-ec2 | TCP 22 from Bastion SG or SSM only (no SSH) TCP 9443 from admin CIDR (optional) |
TCP 443 to 0.0.0.0/0 (Genesys Cloud, Docker Hub, AWS APIs) TCP 5432/1433 to sg-rds |
| sg-rds | TCP 5432 (PG) or 1433 (MSSQL) from sg-adapter-ec2 |
None required |
| sg-bastion (optional) | TCP 22 from approved corporate CIDRs only | TCP 22 to sg-adapter-ec2 |
Prefer AWS Systems Manager Session Manager over SSH bastion hosts — eliminates the need for inbound port 22 and SSH key management entirely.
These AWS-managed services support the secure operation of the platform. Together they cover identity (IAM), credential storage (Secrets Manager), observability (CloudWatch), and resilience (AWS Backup).
Attach an EC2 instance profile with an IAM role granting only the permissions the adapter actually needs. Do not embed AWS credentials inside the container or appsettings.json.
Minimum policy statements:
| Permission Set | Purpose |
|---|---|
secretsmanager:GetSecretValue (scoped to specific secret ARNs) |
Retrieve database password, Genesys OAuth client secret, Snowflake key |
kms:Decrypt (scoped to the KMS key encrypting the secrets) |
Decrypt Secrets Manager / EBS / RDS payloads |
logs:CreateLogStream, logs:PutLogEvents (scoped to the adapter log group) |
Ship container logs to CloudWatch |
s3:PutObject, s3:GetObject (scoped to a backup bucket) |
Optional: log/backup uploads |
ssm:UpdateInstanceInformation, ssmmessages:*, ec2messages:* |
Enable Session Manager access (use the AWS-managed AmazonSSMManagedInstanceCore policy) |
Follow the principle of least privilege — never attach
AdministratorAccessor wildcard resource ARNs.
Store all sensitive configuration in AWS Secrets Manager (preferred) or AWS Systems Manager Parameter Store (SecureString):
| Secret | Recommended Storage | Notes |
|---|---|---|
| Database password | Secrets Manager (with RDS rotation) | Enable automatic rotation every 30–90 days |
| Genesys Cloud Client Secret | Secrets Manager | Manual rotation aligned with Genesys credential lifecycle |
| Snowflake private key | Secrets Manager (binary or PEM string) | Encrypt with customer-managed KMS key |
Inject secrets into the container at startup using the EC2 IAM role and a small entrypoint wrapper, or via environment variable references. Never bake secrets into Docker images.
| Component | Recommendation |
|---|---|
| Container logs | Configure Docker to use the awslogs log driver, sending to a CloudWatch Log Group (e.g., /csg/genesys-adapter/<env>) with 30–90 day retention |
| EC2 metrics | Install the CloudWatch Agent for memory, disk, and per-process metrics (not provided by default EC2 metrics) |
| RDS metrics | Enable Performance Insights and Enhanced Monitoring; set CloudWatch alarms on CPU, free storage, replica lag, deadlocks |
| Alarms | At minimum: EC2 CPU > 85% for 15 min, EC2 status check failed, RDS free storage < 20%, RDS CPU > 85%, container restart count > 3/hour |
| Notifications | Route alarms via SNS to email, Slack, PagerDuty, or Microsoft Teams |
| Resource | Backup Method | Retention | RPO / RTO Guidance |
|---|---|---|---|
| EC2 root + data EBS volumes | AWS Backup or Data Lifecycle Manager (daily snapshots) | 7–30 days | RPO 24h / RTO 1–2h (re-launch from snapshot) |
| RDS database | Automated snapshots + transaction log backups | 7–35 days | RPO 5 min (PITR) / RTO 30–60 min |
| Configuration / IaC | Store CloudFormation/Terraform in Git | Indefinite | RTO ~1h to redeploy stack |
| Secrets | Secrets Manager has built-in versioning | Indefinite | N/A |
For multi-region DR, replicate RDS snapshots and EBS snapshots to a secondary AWS region using AWS Backup cross-region copy.
The adapter authenticates to Genesys Cloud using an OAuth Client Credentials grant assigned to a dedicated role. The recommended setup is to import the supplied permission policy file into a new role rather than ticking permissions individually — the policy set spans ~80 entities across analytics, routing, wfm, quality, recording, speechAndTextAnalytics, knowledge, outbound, architect, audits, directory, groups, learning, coaching, conversation, externalContacts, billing, oauth, and authorisation domains.
Step-by-step walkthrough: Genesys Cloud OAuth for Genesys Adapter — follow this knowledge base article for the authoritative procedure (screenshots and current UI paths).
Setup overview:
Genesys Adapter Integration.schema/GCPermissions.json into the role using the Import option on the role's Permissions tab. This applies the complete permission set required by every adapter job in a single action.Permission policy file:
The canonical permission set lives at schema/GCPermissions.json in this repository and is the same file referenced by the knowledge base article. Re-import this file whenever the adapter is upgraded so newly required permissions are picked up automatically.
Credential Format:
12345678-1234-1234-1234-123456789abc)mypurecloud.com, mypurecloud.ie, mypurecloud.de, mypurecloud.com.au, mypurecloud.jp, aps1.pure.cloud, usw2.pure.cloud, cac1.pure.cloud — must match the Genesys Cloud organisation's region.The application respects Genesys Cloud API rate limits: - Default: 300 requests per minute per OAuth client - Concurrent requests: Limited to 10 simultaneous requests - Token refresh: Automatic every 275 requests (300 limit with buffer) - Retry logic: Exponential backoff (2-30 seconds) for rate limit errors
For high-volume environments (50k+ daily interactions), consider: - Requesting increased rate limits from Genesys Cloud support - Using multiple OAuth clients for different job categories - Scheduling jobs to avoid peak API usage times
Use this checklist to ensure readiness before deployment:
contactcentredb created (or customer-preferred name)ntpdate -q pool.ntp.org)mypurecloud.com.au)schema/GCPermissions.json imported into the rolecurl with bearer token)Complete these items in addition to the sections above.
sg-adapter-ec2, sg-rds, optional sg-bastion) created with least-privilege rulesawslogs driver configuredSupport Channels:
Information to Provide When Requesting Support:
docker logs --tail 1000 genesys-adapterDocument Owner: Customer Science Product Team Last Updated: May 2026 Version: 2.4