이 문서에서는 Amazon Web Services(AWS)를 통해 WhatsApp Business API를 배포하는 방법을 다룹니다. 이 과정은 크게 두 가지 단계로 나눌 수 있습니다.
설정을 완료하고 나면 클라이언트를 업그레이드할 수 있습니다. Webapp과 CoreApp을 모두 다시 시작해야 할 경우 이 단계를 따르세요.
이 문서에서는 더 많고 안정적인 메시지 처리량에 대해 테스트한 새로운 AWS 템플릿에 대해 단계별로 설명합니다. 이전의 AWS 템플릿을 원하시는 경우 AWS Archive를 참조하세요.
시작하기 전에 다음과 같은 작업을 진행해야 합니다.
유효한 AWS 계정을 설정하고 AWS 작업에 익숙해야 합니다. WhatsApp은 WhatsApp Business API 클라이언트를 쉽게 배포하기 위한 CloudFormation 템플릿을 제공합니다. 자세한 내용은 AWS 시작하기 리소스 센터를 참조하세요.
WhatsApp Business API 템플릿에서 만든 EC2 인스턴스에 액세스하려면 새로운 키 쌍을 만들어야 합니다. 이전에 만든 키 쌍을 사용할 수도 있습니다. EC2 인스턴스로 키 쌍을 만들고 사용하는 방법에 대한 자세한 내용은 Amazon EC2 키 쌍 문서를 참조하세요.
키 쌍은 WhatsApp Business API를 배포하는 리전을 사용하여 만들어야 합니다.
WhatsApp Business API 클라이언트는 CentOS 7 이미지(AWS Marketplace에서 제공)를 사용합니다. 템플릿을 사용하기 전에 이용 약관을 검토하고 이에 동의해야 합니다. 약관에 동의하지 않으면 템플릿을 만들 수 없습니다.
CentOS 7 AMI 이미지를 검토하고 수락하는 방법:
WhatsApp Business API 템플릿은 EFS 리소스 유형을 사용하며, 이는 일부 AWS 리전에서는 제공하지 않습니다. 현재는 다음의 리전에서만 지원됩니다.
WhatsApp은 초기 테스트에 따라 모든 리전에서 사용할 수 있는 대체 옵션을 제공할지 여부를 결정합니다.
아니요, Facebook에서는 KOPS를 지원하지 않습니다. ECS 기반 AWS 솔루션은 지원합니다. 또한 일반적인 Kubernetes minikube 설정이 있습니다.
VPC(Virtual Private Cloud) 네트워크는 일반적으로 AWS 계정에 가입할 때 생성됩니다. 또한 엔터프라이즈 비즈니스에 맞춰 여러 가지 맞춤 설정과 액세스 관리 제한이 필요할 수 있습니다.
VPC 네트워크 인프라가 이미 생성되어 있다면 이 단계를 건너뛸 수 있습니다. 그렇지 않을 경우 다음 템플릿을 사용하여 AWS에서 네트워크 인프라를 만들 수 있습니다.
네트워크 템플릿은 참고용으로만 제공됩니다. 각각의 요구 사항에 맞춰 템플릿을 수정할 수 있습니다.
네트워크 템플릿을 배포하는 방법:
https://wa-biz-cfn.s3.amazonaws.com/wa_ent_net.yml
을 입력하고 다음을 클릭하거나 이름 | 설명 |
---|---|
| 필수 항목. 생성할 스택의 이름. |
이름 | 설명 |
---|---|
| 필수 항목. VPC를 만들기 위한 가용 영역(AZ). |
| 필수 항목. 선택한 가용 영역의 수. |
이름 | 설명 |
---|---|
| 필수 항목. 이 VPC의 IP 주소 범위(CIDR). |
| 필수 항목. VPC 테넌시 |
이름 | 설명 |
---|---|
| 필수 항목. 공개 서브넷의 IP 주소 범위(CIDR). |
| 필수 항목. 공개 서브넷의 IP 주소 범위(CIDR). |
| 선택 사항. 가용 영역의 개수가 3개 이상일 경우 필수입니다. |
| 선택 사항. 가용 영역 개수가 4개 이상일 경우 필수입니다. |
이름 | 설명 |
---|---|
| 필수 항목. 옵션: |
| 조건부. 비공개 서브넷 생성이 |
| 조건부. 비공개 서브넷 생성이 |
| 조건부. 비공개 서브넷 생성이 |
| 조건부. 비공개 서브넷 생성이 |
WhatsApp Business API 스택을 AWS에 배포하기에 앞서 참조된 서브스택의 구성 파일을 읽기 액세스 권한이 있는 S3 버킷에 먼저 업로드해야 합니다.
WhatsApp Enterprise가 메인 템플릿이고 WhatsApp Business API 클라이언트에 필요한 모든 리소스(네트워크 제외)를 만듭니다. 앞서 언급했듯이 이 템플릿은 데이터베이스 리소스도 만듭니다(필요한 경우).
WhatsApp Business API 클라이언트를 배포하는 방법:
이름 | 설명 |
---|---|
| 필수 항목. 생성할 스택의 이름. 스택 이름은 22자 이내여야 합니다. 참고: ap-southeast-1, ap-southeast-2, ap-northeast-1 또는 ap-northeast-2 리전에 배포하는 경우 스택 이름은 8자 이내여야 합니다.
|
이름 | 설명 |
---|---|
| 선택 사항. 고가용성 기능을 활성화합니다. 기본값: |
| 필수 항목. 초당 전송하고자 하는 메시지 수. 서버 및 데이터베이스 리소스는 선택된 메시지 유형을 보낼 때 |
| 필수 항목. 전송 및 수신하고자 하는 주요 메시지 유형. 서버 및 데이터베이스 리소스는 선택된 메시지 유형을 보낼 때 |
| 선택 사항. 인스턴스 모니터링을 위해 각 CoreApp 호스트에서 node-exporter를 설치합니다. 기본값: |
이름 | 설명 |
---|---|
| 필수 항목. 네트워크 설정 단계에서 생성한 네트워크 CloudFormation 스택의 이름. |
| 필수 항목. 선택한 서브넷의 개수. 현재는 모든 호스트에 ECS 작업을 균등하게 분배하기 위해 배포하는 데 서브넷을 2개만 지원합니다. |
| 필수 항목. 현재는 일반 사람에게 표시되는 인터넷 연결 로드 밸런서만 지원합니다. API 스택을 만든 후 보안 그룹을 수정하여 불필요한 액세스 권한을 차단하세요. |
이름 | 설명 |
---|---|
| 필수 항목. EC2 인스턴스에 액세스하기 위한 적절한 키 쌍(필요한 경우). |
| 선택 사항. 이는 미래에 대비하고 실험적 WhatsApp Business API 클라이언트를 지원하기 위한 것입니다. 대부분의 경우 기본값으로 충분합니다. |
| 필수 항목. 항상 안정적인 최신 버전(최신 버전은 변경 사항 참조)을 사용하는 것이 좋습니다. WhatsApp Business API 클라이언트 버전은 달리 명시되지 않는 한 언제나 'v'로 시작합니다. 잘못된 버전을 사용하면 스택 생성에 실패하게 됩니다. |
| 필수 항목. 프로덕션 작업 부하에는 32GB 이상을 선택하는 것이 좋습니다. |
이름 | 설명 |
---|---|
| 선택 사항. 데이터베이스에서 구성 정보 저장을 활성화합니다. |
| 선택 사항. 기존의 데이터베이스 호스트 이름. |
| 필수 항목. 데이터베이스에 액세스하는 관리자 이름. |
| 필수 항목. 데이터베이스에 액세스하는 관리자 비밀번호. 데이터베이스 비밀번호는 ?{}&~!()^/"@ 문자를 포함할 수 없습니다. |
| 필수 항목. 데이터베이스 백엔드에 액세스할 포트 번호. |
| 선택 사항. 웹 컨테이너에 대해 데이터베이스 연결을 유지할지 여부를 나타냅니다. 기본값: |
| 선택 사항. 데이터베이스가 유휴 상태의 연결을 닫은 후의 시간(ms). |
이름 | 설명 |
---|---|
| 선택 사항. 컨테이너 로그의 로깅 드라이버. |
| 선택 사항. 회전하기 전 컨테이너 로그 파일의 최대 크기(MB). 허용되는 값은 1~250입니다(양쪽 끝값 포함). 기본값: 50. |
| 선택 사항. 컨테이너별로 유지할 로그 파일의 최대 개수. 허용되는 값은 1~30입니다(양쪽 끝값 포함). 기본값: 7. |
| 선택 사항. CloudWatch에서 로그를 보관하는 일수. 기본값: |
이름 | 설명 |
---|---|
| 사용하지 않음. 이 매개변수는 비워둡니다. |
이름 | 설명 |
---|---|
| 선택 사항. 기본적으로 AWS 서비스 키(기본-키 옵션)를 사용하여 유휴 상태에서 DB & EFS 데이터를 암호화합니다. 기타 옵션은 다음과 같습니다.
|
| 선택 사항. 데이터를 암호화하는 데 사용하는 KMS 키 ID를 제공할 수 있습니다. User-Provided-Key 옵션을 선택하지 않은 경우 이 칸을 비워두세요. |
| 선택 사항. 기본적으로 데이터베이스에 전송 중인 데이터는 암호화됩니다. 현재는 Coreapp에만 적용 가능합니다. Webapp 암호화는 아직 지원하지 않습니다. 또한 새로운 데이터베이스 엔진을 사용하면 이 옵션을 비활성화하더라도 Coreapp이 암호화를 수행하지만 서버 인증서(ID) 인증 절차는 거치지 않습니다. |
| 선택 사항. 기본값에 RDS 인증서 번들이 포함되어 있습니다. RDS 이외의 데이터베이스를 사용할 경우 적절한 CA 인증서 번들을 제공하거나 비워둘 수 있습니다. 기본값은 데이터베이스와의 안전한 연결을 활성화하는 데 적합합니다. |
| 선택 사항. 데이터베이스 연결을 위한 클라이언트 인증서입니다. |
| 선택 사항. 데이터베이스 연결을 위한 클라이언트 키입니다. |
이러한 매개변수는 Grafana 대시보드가 모니터링 목적으로 앱 지표를 가져오는 데 필요합니다.
이름 | 설명 |
---|---|
| 필수 항목. WhatsApp Business API 사용자 이름을 지정합니다. |
| 필수 항목.
|
이름 | 설명 |
---|---|
| 필수 항목. 스택을 만들 때 Grafana 대시보드의 로그인 비밀번호로 사용하는 비밀번호를 지정합니다. |
| 선택 사항. 이메일 알림 설정에 대해 SMTP가 활성화되었는지 여부를 나타냅니다. 유효한 값: 비활성화의 경우 기본값: |
| 선택 사항. 이메일 알림에서 사용되는 SMTP 호스트입니다. (예: smtp.gmail.com:465) |
| 선택 사항. 이메일 알림에서 사용되는 SMTP 사용자 이름을 지정합니다. |
| 선택 사항. 이메일 알림에서 사용되는 SMTP 비밀번호를 지정합니다. |
템플릿을 성공적으로 만들고 나면 다음과 같은 매개변수가 표시됩니다.
기본적으로 스택에서 생성된 보안 규칙은 모든 트래픽을 허용하여 SSH를 통해 EC2 인스턴스에 도달하고, HTTPS를 통해 API 엔드포인트와 Grafana 대시보드에 도달하며, cadvisor 및 Prometheus 컨테이너에 도달할 수 있도록 합니다. 보안을 위해 불필요한 액세스는 차단하는 것이 좋습니다. 이 섹션에서는 SSH 보안 규칙을 업데이트하는 단계를 예시로 설명합니다. 언제나 SSH를 통해 신뢰하는 트래픽에만 액세스하도록 제한해야 합니다.
"<stackName>-ms-xxx-EcsSecurityGroup"
이 포함된 보안 그룹에 이러한 변경 사항을 반복하여 모니터링 스택에 대한 SSH 액세스를 제한합니다.
WhatsApp Business API 클라이언트를 성공적으로 배포한 후에는 클라이언트가 작동하도록 구성해야 합니다.
전화번호 등록에 대한 자세한 내용은 전화번호 가이드를 참조하세요.
WhatsApp 관리자의 전화번호 탭에 있는 Facebook 비즈니스 관리자의 WhatsApp 계정에서 base64 인코딩 인증서를 다운로드합니다.
올바른 전화번호를 선택하고 base64 인코딩 인증서를 확보한 후에는 account
노드를 통해 WhatsApp Business API 클라이언트를 등록해야 합니다. 자세한 내용은 등록 문서를 참조하세요.
전화번호가 문자 메시지를 수신할 수 있는 경우, SMS 방식을 사용하여 등록 코드를 받으세요.
WhatsApp으로부터 이미 등록 코드를 받은 경우, 이 단계를 건너뛸 수 있습니다.
스택을 만든 후 shards
API 호출을 사용하여 활성 Coreapp 인스턴스의 수를 늘려 원하는 처리량을 달성합니다. 샤드 수는 스택의 출력 섹션에서 확인할 수 있습니다.
WhatsApp Business API 웹 콜백 및 기타 매개변수의 구성에 대한 설명은 앱 설정 문서에서 확인할 수 있습니다. 안정적인 처리량을 달성하려면 다음과 같이 앱을 설정할 것을 권장합니다.
{ "settings": { "application": { "callback_backoff_delay_ms": 3000, "callback_persist": true, "db_garbagecollector_enable": false, # change this to true when there are no ongoing messaging campaigns "heartbeat_interval": 5, "max_callback_backoff_delay_ms": 900000, "media": { "auto_download": [ "document", "image", "video", "voice", "sticker", "audio" ] }, "notify_user_change_number": true, "pass_through": false, "sent_status": true, "show_security_notifications": false, "skip_referral_media_download": false, "unhealthy_interval": 30, "wa_id": "12245552741", "webhooks": { "max_concurrent_requests": 24, "message": { "delivered": true, "read": true, "sent": true }, "url": "<YOUR_WEBHOOK_SERVER_URL>" } } }, "meta": { "api_status": "stable", "version": "2.41.3" } }
WhatsApp Business API 클라이언트는 생성될 때 기본값으로 자체 서명된 인증서를 생성합니다. WhatsApp Business API 클라이언트 엔드포인트를 인증하고 인증서 신뢰 경고를 피하기 위해 자체 서명 인증서를 생성하는 데 사용하는 인증 기관(CA) 인증서가 필요할 수 있습니다.
인증서 신뢰 경고를 피하기 위해 CA 인증서를 다운로드하고 로컬에 저장하거나, 인증서를 직접 업로드할 수 있습니다. 자세한 내용은 certificate
노드 문서를 참조하세요.
AWS 배포에서 SSL 인증서는 로드 밸런서 호스트 이름을 사용하여 생성합니다. 액세스 시 호스트 이름 대신 IP 주소를 사용하는 경우에도 여전히 경고를 받습니다.
WhatsApp은 향후 릴리스에서 고객이 제공한 SSL 인증서를 구성하도록 지원할 예정입니다.
구성 및 등록 단계가 성공하면 WhatsApp Business API 클라이언트의 기본 기능을 검증하기 위한 메시지를 보내고 받을 수 있습니다. 자세한 내용은 메시지 문서를 참조하세요.
메시지를 성공적으로 수신하면 WhatsApp Business API 클라이언트가 3단계에서 구성된 Webhooks에 메시지 상태/상세 정보를 POST
요청으로 보냅니다.
메시지를 성공적으로 수신했다면 축하드립니다. 이제 모든 준비가 완료되었습니다! 사용 가능한 API 엔드포인트에 대한 자세한 내용은 참고 자료 문서를 참조하세요.
ECS 콘솔에서 WhatsApp Business API 클라이언트를 다시 시작하는 방법(예: https://us-west-2.console.aws.amazon.com/ecs/home?region=us-west-2#/clusters):
그러면 Webapp과 CoreApp이 모두 중단됩니다. 잠시 후에 AWS 인프라가 Webapp과 CoreApp을 모두 다시 시작합니다.
가동 중지 시간이 약 1~2분 있을 수 있습니다.
CloudFormation 스택을 직접 업데이트하면 데이터베이스가 폐기되고 다시 생성될 수 있습니다. 데이터 손실을 방지하기 위해 다음 섹션에 나와 있는 수동 단계에 따라 시스템을 업데이트하는 것이 좋습니다.
이 섹션에서는 WhatsApp Business API 클라이언트와 CloudFormation(CFN) 템플릿을 업그레이드하는 방법을 자세히 설명합니다. 업그레이드를 수행하면 가동 중지 시간이 발생하므로 업그레이드를 수행하는 동안에는 메시지를 보내지 마세요. 업그레이드가 완료되고 나면 메시지를 다시 보내도 됩니다.
다음과 같은 방법으로 CFN 템플릿과 WhatsApp Business API 클라이언트 버전을 동시에 업그레이드할 수 있습니다.
빠른 업그레이드 인증:문자 메시지를 전송하고 API 응답에 올바른 버전 번호(즉, 새로운 버전)가 포함되어 있는지 확인합니다. 받는 사람이 메시지를 수신했는지 확인합니다.
비즈니스는 일반적으로 기간이 한정된 캠페인을 진행할 때 처리량이 높은 환경을 설정하고 캠페인을 진행하지 않는 기간에는 저비용 환경을 유지하고자 합니다. 이 섹션에서는 AWS 설정 규모를 수동으로 줄여서 비용을 절약하는 방법을 제안합니다.
중요: 가동 중지 시간이 있다는 것을 염두에 두세요. 예상 가동 중지 시간은 5~15분입니다. 모든 DevOps 모범 사례(예: 앱 설정 백업 및 데이터베이스 백업)를 준수했는지 확인하세요.
2
로 업데이트합니다.c5.large
옵션으로 바꿀 수 있습니다.
c5.large
로 업데이트하고 템플릿 버전 만들기를 선택합니다.
r5.xlarge
로 업데이트합니다.
3
으로 업데이트합니다.3
으로 업데이트합니다.2
로 업데이트합니다.2
로 업데이트합니다.2
로 재설정합니다.