dirien/pulumi-pagerduty-fargate-demo

GitHub: dirien/pulumi-pagerduty-fargate-demo

一个 Pulumi 示例项目,演示如何在 AWS Fargate 上部署支付服务并通过 PagerDuty 实现端到端的事件响应自动化。

Stars: 0 | Forks: 0

# 事件响应即代码:一个会呼叫你的 Fargate 支付服务 Pulumi 博客文章[事件响应即代码:使用 Pulumi 管理 PagerDuty](https://www.pulumi.com/blog/incident-response-as-code-pagerduty-pulumi/)的配套代码库。 一个 Pulumi 程序在 AWS Fargate 上部署支付 worker,**同时**部署监控它的 PagerDuty 端:包括 service、升级策略以及 CloudWatch 集成。然后你注入一个 poison payment,观察整个链条被触发,从一条失败的消息一直到电话响起,全程无需复制粘贴任何集成密钥。 ``` flowchart LR You([inject-failure.sh]) -->|"poison payment"| Q["SQS payment queue"] W["Fargate payment worker"] -->|"cannot process,
3 receives"| Q Q -->|"redrive"| DLQ["Dead-letter queue"] DLQ --> Alarm["CloudWatch alarm"] Alarm --> SNS["SNS topic"] SNS -->|"integration key"| PD["PagerDuty: Payment Service"] PD --> OnCall([Your phone]) ``` ## 创建的资源 | 端 | 资源 | |------|-----------| | PagerDuty | Payment Service、指向你的升级策略、Amazon CloudWatch 集成 | | AWS | SQS 支付队列 + 死信队列(3 次接收失败后重路由)、基于 DLQ 的 CloudWatch 告警、SNS 主题 + 到 PagerDuty 的订阅、ECS 集群 + Fargate 支付 worker、IAM 角色、日志组 | 支付 worker 被刻意设计得很简单:运行 shell 循环的普通 AWS CLI 容器镜像。它接收支付消息,对包含 `amount` 的所有内容进行“处理”,并将其余内容留给 SQS 重试。经过三次接收失败后,SQS 会将消息移至死信队列,随后呼叫链条接管。 ## 前置条件 - [Pulumi CLI](https://www.pulumi.com/docs/iac/download-install/) 和一个 [Pulumi Cloud 账户](https://app.pulumi.com/signup) - 具备 SQS、SNS、CloudWatch、ECS、IAM 和 Logs 权限的 AWS 凭证 - 一个 PagerDuty 账户及账户级别的 REST API 密钥(**Integrations** > **API Access Keys**) ## 配置 ``` npm install pulumi stack init dev pulumi config set pagerduty:token --secret # your REST API key pulumi config set pagerduty-email you@example.com # the PagerDuty user to page pulumi config set aws:region eu-central-1 # any region you like ``` 或者按照博客文章的做法,将 token 保存在从 `Pulumi.dev.yaml` 引用的 [Pulumi ESC](https://www.pulumi.com/docs/esc/) 环境中: ``` environment: - your-project/your-auth-env ``` ## 部署 ``` pulumi up ``` ## 破坏它 首先发送一个有效的 payment 并检查 worker 日志;它能正常处理: ``` ./scripts/send-payment.sh ``` 现在注入一个 worker 无法处理的 payment(没有 `amount`): ``` ./scripts/inject-failure.sh ``` 几分钟内:消息会反弹三次,落入 DLQ,CloudWatch 告警状态翻转为 `ALARM`,SNS 将其转发给 PagerDuty,**Payment Service** 上会开启一个事件,并根据升级策略呼叫相应的人员。在 `pagerdutyServiceUrl` stack 输出的 URL 处观察它的到达情况。 ## 恢复 ``` ./scripts/recover.sh ``` 清理死信队列让告警状态恢复为 `OK`,并且由于告警的 OK 操作会发布到同一个 SNS 主题,PagerDuty 会自动解决该事件。无论哪种方式,都无需手动点击。 ## 清理 ``` pulumi destroy ``` ## 许可证 Apache-2.0
标签:AWS, DPI, Incident Response, MITM代理, Pulumi, 示例项目, 自动化攻击, 自动化运维, 请求拦截