使用 Terraf CloudWatch orm 部署 Synthetics 加那利群岛 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 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 中使用弹性网络接口。

描述如图所示。

此图显示以下内容:

  1. Synthetics 金丝雀启动金丝雀 Lambda 函数。

  2. 金丝雀 Lambda 函数连接到弹性网络接口。

  3. 金丝雀 Lambda 函数监控端点的状态。

  4. Synthetics 金丝雀会将运行数据推送到 S3 存储桶和 CloudWatch 指标。

  5. 根据指标启动 CloudWatch 警报。

  6. 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。

修改 terraform.tfvars 文件:

  • name – 金丝雀的名称。

  • runtime_version – 金丝雀的运行时系统版本。我们建议使用 syn-nodejs-puppeteer -3.7。

  • take_screenshot – 是否应该截屏。

  • api_hostname – 受监控的端点的主机名。

  • api_path – 受监控的端点的路径。

  • vpc_id – 金丝雀 Lambda 函数使用的 VPC ID。

  • subnet_ids – 金丝雀 Lambda 函数使用的子网 ID。

  • frequency – 金丝雀的运行频率(以分钟为单位)。

  • alert_sns_topic— CloudWatch 警报通知发送到的 SNS 主题。

云架构师

部署和操作解决方案。

要部署该解决方案,请执行以下操作:

  1. 在开发环境的 cloudwatch-synthetics-canary-terraform 目录中,初始化 Terraform。

    terraform init
  2. 计划并查看更改。

    terraform plan
  3. 部署解决方案。

    terraform apply
云架构师、 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"

清理解决方案

如果您在开发环境中对此进行测试,则可以清理解决方案以避免累积成本。

  1. 在 AWS 管理控制台 上,导航到 Amazon S3 控制台。清空解决方案创建的 Amazon S3 存储桶。如果需要,请务必备份数据。

  2. 在开发环境中,从 cloudwatch-synthetics-canary-terraform 目录中运行该 destroy 命令。

    terraform destroy