Amazon Connect with Terraform deploy.
Published: 2023-07-03 20:48:14

# Amazon Connect

¿Qué es Amazon Connect?
 
 Amazon Connect es un centro de contacto en la nube de pago por uso. No hay tarifas mínimas obligatorias, compromisos a largo plazo o cargos de licencias iniciales, y los precios no se basan en la capacidad máxima, los puestos de agente ni el mantenimiento; solo paga po lo que usa. Amazon Connect ofrece capacidad para su centro de contacto y espacio de trabajo de los agentes, entre los que la previsión, planificación de capacidad, programación y campañas salientes, así como la voz, conversación, tareas, Perfiles de clientes, Contact Lens, ID de voz, Wisdom, casos y guías.

## Nivel gratuito de AWS
Como parte del nivel gratuito de AWS, puede comenzar a utilizar Amazon Connect de manera gratuita.

Durante los primeros 12 meses de la implementación inicial del centro de contacto en la nube de Amazon Connect en cualquier región, recibirá:

- 90 minutos al mes de uso del servicio Amazon Connect
- Un número de marcación interna directa (DID) del país en el que se encuentra la región de AWS
- 30 minutos al mes de llamadas DID entrantes
- 30 minutos al mes de llamadas salientes realizadas a números en el país en el que se encuentra la región de AWS

Para las regiones de EE. UU., también recibe:

- Un número gratuito de EE. UU.
- 30 minutos al mes de llamadas entrantes gratuitas realizadas desde EE. UU.
  
Por ejemplo, si crea su instancia en la región Asia-Pacífico (Sídney), obtiene un número DID de Australia, recibe 30 minutos de llamadas DID entrantes a ese número y puede usar Amazon Connect para hacer 30 minutos de llamadas salientes a números de Australia.

Otras capacidades de Amazon Connect que también forman parte del nivel gratuito durante su primer año incluyen:

500 mensajes al mes del chat de Amazon Connect
100 tareas al mes con Amazon Connect
1000 perfiles de cliente al mes con Perfiles de clientes de Amazon Connect
90 minutos al mes para llamadas de audio con Amazon Connect Contact Lens
500 mensajes al mes para mensajes de chat con Amazon Connect Contact Lens
180 transacciones por mes con Amazon Connect Voice ID, repartidas de manera equitativa entre inscripciones, autenticación y detección de fraude
90 días de uso gratuito de previsión, planificación de capacidad y programación de Amazon Connect al activar la característica por primera vez


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aq9qvwky9k42ydxi2r94.png)





## Despliegue de instancia de Connect con 3 Contact Flow

Este repositorio contiene los archivos necesarios para desplegar una instancia de Connect en AWS, junto con 3 flujos de contacto (Contact Flow), una tabla DynamoDB y una función Lambda.

## Recursos desplegados en este manifiesto:

- Instancia de Connect
- 3 Contact Flow
- Tabla DynamoDB
- Función Lambda

## Solución - Diagrama:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zozs21hv2vlzodmqruxy.png)



## Probado con:

| Ambiente             | Aplicación | Versión  |
| -------------------- | ---------- | -------- |
| WSL2 Ubuntu 20.04    | Terraform  | v1.4.6   |
| WSL2 Ubuntu 20.04    | aws-cli    | v2.7.9   |

## Procedimiento de implementación:

Antes de desplegar los recursos, asegúrate de tener los siguientes archivos en el directorio:

- `main.tf`
- `provider.tf`
- `default.auto.tfvars`
- `variable.tf`

A continuación, proporciona la siguiente información en cada archivo:

**Archivo `main.tf`:**
```hcl
# Create Instace Connect
module "lambda" {
  source      = "./module/lambda"
  table_name  = var.table_name
  name_prefix = var.name_prefix
  lambda_name = var.lambda_name
}

module "connect" {
  source                   = "./module/connect"
  aws_profile              = var.aws_profile
  aws_region               = var.aws_region
  identity_management_type = var.identity_management_type
  instance_alias           = var.instance_alias
  name_user                = var.name_user
  password_user            = var.password_user
  first_name               = var.first_name
  last_name                = var.last_name
  country_code             = var.country_code
  name_prefix              = var.name_prefix
  phone_type               = var.phone_type
  type_contactflow         = var.type_contactflow
  lambda_arn               = module.lambda.lambda_arn
  lambda_name              = var.lambda_name

  depends_on = [module.lambda]
}
```
**Archivo`provider.tf`:**
```bash
# AWS provider version definition
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

#Provider for the network account
provider "aws" {
  region  = var.aws_region
  profile = var.aws_profile
}
```
**Archivo `default.auto.tfvars`:**
```bash
#Variable Generales
aws_profile              = "connect"
aws_region               = "us-east-1"
name_prefix              = "First-Release"
project-tags = {
  DeployBy   = "example",
  Enviroment = "Dev"
}

#Variable Connect
instance_alias           = "example-demo-connect-terraform"
name_user                = "connect"
password_user            = "Password123"
first_name               = "FirstName"
last_name                = "LastName"
country_code             = "AR" ## https://countrycode.org/
phone_type               = "SOFT_PHONE"      ## otras opciones (DESK_PHONE)
identity_management_type = "CONNECT_MANAGED" ## Otra opciones (SAML, EXISTING_DIRECTORY)
type_contactflow         = "CONTACT_FLOW"    ## Otras opciones (CUSTOMER_QUEUE, CUSTOMER_HOLD, CUSTOMER_WHISPER, AGENT_HOLD, AGENT_WHISPER, OUTBOUND_WHISPER, AGENT_TRANSFER, QUEUE_TRANSFER )

#Variable Dynamo y lambda
table_name               = "pedidos_y_facturas"
lambda_name              = "Lambda-valicacion-flow"
```

**Archivo `variable.tf`:**
```bash
variable "aws_profile" {
  description = "[REQUERIDO] Profile utilizado para realizar el despliegue."
  type        = string
}

variable "aws_region" {
  description = "[REQUERIDO] El AWS Region para implementar los recursos."
  type        = string
}

variable "identity_management_type" {
  description = "[REQUERIDO] Tipo de gestión de identidad adjunto a la instancia."
}

variable "instance_alias" {
  description = "[REQUERIDO] Alias de la instancia de Connect."
  type        = string
}

variable "name_user" {
  description = "[REQUERIDO] Nombre para la creación de usuario."
  type        = string
}

variable "password_user" {
  description = "[REQUERIDO] Contraseña para la creación de usuario."
  type        = string
}

variable "first_name" {
  description = "[REQUERIDO] Nombre del usuario."
  type        = string
}

variable "last_name" {
  description = "[REQUERIDO] Apellido del usuario."
  type        = string
}

variable "country_code" {
  description = "[REQUERIDO] Código telefónico del país."
  type        = string
}

variable "name_prefix" {
  description = "[REQUERIDO] Prefijo del nombre."
  type        = string
}

variable "phone_type" {
  description = "[REQUERIDO] Tipo de número de teléfono."
  type        = string
}

variable "type_contactflow" {
  description = "[REQUERIDO] Tipo de flujo de contacto."
  type        = string
}

variable "table_name" {
  description = "[REQUERIDO] Nombre de la tabla de DynamoDB."
}

variable "lambda_name" {
  description = "[REQUERIDO] Nombre de la función Lambda."
  type        = string
}

# Variables de Etiquetas #
variable "project-tags" {
  type    = map(string)
  default = {}
}
```

Ubicado en el directorio donde se crearon los archivos antes mencionados, iniciamos nuestro proyecto y desplegamos el manifiesto de la siguiente forma:

```bash
terraform init     = Inicializamos terraform
terraform fmt      = Para darle formato a los archivos
terraform validate = Validamos que no tengamos alguna inconsistencia en los recursos
terraform plan     = Realizamos un plan para verificar los recursos a desplegar
terraform apply    = Realizamos ya el despliegue de los recursos
```
## authors:
- 👩‍💻  Hermes Vargas
- 👩‍💻  Diego Mujica