本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Terraf CloudWatch orm 部署 Synthetics 加那利群岛
创建者:Dhrubajyoti Mukherjee(AWS)和 Jean-Francois Landreau(AWS)
代码库:使用 Terraform 部署 S CloudWatch ynthetics 加那利群岛 | 环境:生产 | 技术: DevOps; 业务生产力; DevelopmentAndTesting; 基础架构; Web 和移动应用程序 |
AWS 服务:亚马逊 CloudWatch;亚马逊 S3;亚马逊 SNS;亚马逊 VPC;AWS Identity and Access Management |
Summary
重要的是要从客户的角度验证系统的运行状况,并确认客户能够连接。当客户不经常调用端点时,这就更加困难了。Amaz CloudWatch on Synthetics 支持创建加那利群岛,它可以测试公共和私有终端节点。通过使用金丝雀,即使系统未在使用中,您也可以知道该系统的状态。这些金丝雀要么是 Node.js Puppeteer 脚本,要么是 Python Selenium 脚本。
此模式描述了如何使用 HashiCorp Terraform 部署用于测试私有端点的金丝雀。它嵌入了一个用于测试 URL 是否返回 200-OK
的 Puppeteer 脚本。然后,可以将 Terraform 脚本与部署私有端点的脚本集成。您也可以修改解决方案以监控公有端点。
先决条件和限制
先决条件
具有虚拟私有云(VPC)和私有子网的有效 Amazon Web Services(AWS)账户
可从私有子网访问的端点的 URL
部署环境中安装了 Terraform
限制
当前的解决方案适用于以下 S CloudWatch ynthetics 运行时版本:
syn-nodejs-puppeteer-3.4
syn-nodejs-puppeteer-3.5
syn-nodejs-puppeteer-3.6
syn-nodejs-puppeteer-3.7
随着新的运行时系统版本的发布,您可能需要更新当前解决方案。您还需要修改解决方案以跟上安全更新的步伐。
产品版本
Terraform 1.3.0
架构
Amaz CloudWatch on Synthetics 以 CloudWatch Lambda 和亚马逊简单存储服务 (Amazon S3) 为基础。Amazon CloudWatch 提供了一个用于创建加那利群岛的向导和一个显示金丝雀运行状态的控制面板。Lambda 函数运行脚本。Amazon S3 存储了金丝雀运行的日志和屏幕截图。
此模式通过部署在目标子网中的 Amazon Elastic Compute Cloud(Amazon EC2)实例模拟私有端点。Lambda 函数需要在部署私有端点的 VPC 中使用弹性网络接口。
![描述如图所示。](images/pattern-img/73ed0103-ec45-4653-bb29-f402a88f0c64/images/39aaed0f-f259-4f2a-98fb-8e3a340d0b02.png)
此图显示以下内容:
Synthetics 金丝雀启动金丝雀 Lambda 函数。
金丝雀 Lambda 函数连接到弹性网络接口。
金丝雀 Lambda 函数监控端点的状态。
Synthetics 金丝雀会将运行数据推送到 S3 存储桶和 CloudWatch 指标。
根据指标启动 CloudWatch 警报。
CloudWatch 警报会启动亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 主题。
工具
Amazon Web Services
Amazon CloudWatch 可帮助您实时监控您的 AWS 资源和在 AWS 上运行的应用程序的指标。
AWS Lambda 是一项计算服务,可帮助您运行代码,而无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。
Amazon Simple Notification Service (Amazon SNS) 可帮助您协调和管理发布者与客户端(包括 Web 服务器和电子邮件地址)之间的消息交换。
Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。
Amazon Virtual Private Cloud (Amazon VPC) 可帮助您将 AWS 资源启动到您定义的虚拟网络中。此虚拟网络类似于您在自己的数据中心内运行的传统网络,具有使用 AWS 可扩展基础设施的优势。此模式使用 VPC 端点和弹性网络接口。
其他服务
HashiCorp Terraform
是一种开源基础设施即代码 (IaC) 工具,可帮助您使用代码来配置和管理云基础架构和资源。这种模式使用 Terraform 来部署基础设施。 Puppeteer
是一个 Node.js 库。Synt CloudWatch hetics 运行时使用 Puppeteer 框架。
代码
该解决方案可在 GitHub 云 watch-synthetics-canary-terraform
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
收集监控私有 URL 的要求。 | 收集完整的 URL 定义:域名、参数和标头。要与 Amazon S3 和亚马逊进行私密通信 CloudWatch,请使用 VPC 终端节点。请注意端点如何访问 VPC 和子网。考虑一下金丝雀运行的频率。 | 云架构师、网络管理员 |
修改现有解决方案以监控私有 URL。 | 修改
| 云架构师 |
部署和操作解决方案。 | 要部署该解决方案,请执行以下操作:
| 云架构师、 DevOps 工程师 |
故障排除
问题 | 解决方案 |
---|---|
删除预调配的资源会导致卡顿。 | 按顺序手动删除金丝雀 Lambda 函数、相应的弹性网络接口和安全组。 |
相关资源
其他信息
存储库构件
存储库构件采用如下结构。
. ├── README.md ├── main.tf ├── modules │ ├── canary │ └── canary-infra ├── terraform.tfvars ├── tf.plan └── variable.tf
该 main.tf
文件包含核心模块,它部署了两个子模块:
canary-infra
部署了金丝雀所需基础设施。canary
部署了金丝雀。
解决方案的输入参数位于 terraform.tfvars
文件中。您可以使用以下代码示例创建一个金丝雀。
module "canary" { source = "./modules/canary" name = var.name runtime_version = var.runtime_version take_screenshot = var.take_screenshot api_hostname = var.api_hostname api_path = var.api_path reports-bucket = module.canary_infra.reports-bucket role = module.canary_infra.role security_group_id = module.canary_infra.security_group_id subnet_ids = var.subnet_ids frequency = var.frequency alert_sns_topic = var.alert_sns_topic }
相应的 .var 文件如下。
name = "my-canary" runtime_version = "syn-nodejs-puppeteer-3.7" take_screenshot = false api_hostname = "mydomain.internal" api_path = "/path?param=value" vpc_id = "vpc_id" subnet_ids = ["subnet_id1"] frequency = 5 alert_sns_topic = "arn:aws:sns:eu-central-1:111111111111:yyyyy"
清理解决方案
如果您在开发环境中对此进行测试,则可以清理解决方案以避免累积成本。
在 AWS 管理控制台 上,导航到 Amazon S3 控制台。清空解决方案创建的 Amazon S3 存储桶。如果需要,请务必备份数据。
在开发环境中,从
cloudwatch-synthetics-canary-terraform
目录中运行该destroy
命令。terraform destroy