使用 Amazon CloudWatch Synthetics 和 亚马逊云科技 Systems Manager 参数存储观察动态站点

概述

维护和改善最终用户体验是关键,随着业务的增长,您需要观察的端点数量可能会迅速增加。建造多个加那利群岛来观测它们可能会变得更具挑战性和更耗时。该解决方案旨在展示如何使用一致的自动化方法使用单个金丝雀观测多个端点。

您可以使用 Amazon CloudWatch Synthetics 来创建 Canaries、按计划运行的可配置脚本以及监控您的端点和 API 操作。Canaries 可以模仿用户体验并执行与客户相同的操作,这样即使您的应用程序上没有任何客户流量,也可以持续验证您的客户体验。通过使用加那利,你可以先于客户发现问题。

如果您的金丝雀使用 “syn-nodejs-puppeteer-3.1” 或更高版本的运行时版本,则可以使用 心跳监控蓝图 ,在单个金丝雀 中批处理 最多五个 URL,而不是使用多个 Canary 来监控单个 URL 。如果您需要监控 5 个以上的端点,此博客将指导您如何构建 Canaries。

在这篇博客中,我们将引导您完成创建金丝雀的步骤,该金丝雀将从 亚马逊云科技 Systems Manager (SSM) 参数存储库中导入一个包含需要监控的 URL 列表的参数。下面的架构图描述了金丝雀的工作原理。

架构图

Architecture diagram describing the flow

图 1。描述解决方案工作流程的架构图

解决方案概述

  1. 当我们创建金丝雀时,它会在后台创建一个 Lambda 函数。
  2. 我们正在使用 SSM 参数存储来存储包含我们要监控的所有 URL 的字符串。
  3. 我们正在创建一个 IAM 角色,该角色具有访问参数存储的适当权限。
  4. 当金丝雀执行时,lambda 函数从参数存储中获取 URL,然后对所有 URL 执行测试。

草率排练

1。创建 SSM 参数:

aws ssm put-parameter --name "url-list" --value "https://www.amazon.com,https://aws.amazon.com/blogs/,https://docs.aws.amazon.com/cloudfront/,https://docs.aws.amazon.com/ec2/,https://docs.aws.amazon.com/s3/,https://aws.amazon.com/pricing/" --type String

2。获取参数的 ARN,以便可以在以下命令中将其用作资源值:

aws ssm get-parameters —name "url-list"

3。创建金丝雀:

  • 您现在可以 从 CloudWatch 控制台 创建 Can ary 了。
  • 使用行内编辑器粘贴以下脚本代码。
  • 运行时版本是 “syn-python-selenium-2.0”。
  • Lambda 处理程序的值为 “.handler”。例如,如果金丝雀被称为 “url”,则 Lambda 处理程序的值为 “url.handler”
  • 在创建金丝雀时选择 “创建新角色” 选项。
from aws_synthetics.selenium import synthetics_webdriver as syn_webdriver
from aws_synthetics.common import synthetics_logger as logger
import boto3

def main():
    ssmParamName='url-list'
    client = boto3.client('ssm')   
    response = client.get_parameter(Name=ssmParamName)
    urlList=response['Parameter']['Value'].split(',')

    # Set screenshot option
    takeScreenshot = True
   
    browser = syn_webdriver.Chrome()
    for url in urlList:
        browser.get(url)
   
        if takeScreenshot:
            browser.save_screenshot("loaded.png")
   
        response_code = syn_webdriver.get_http_response(url)
        if not response_code or response_code < 200 or response_code > 299:
            raise Exception("Failed to load page!")
        logger.info("Canary successfully executed")

def handler(event, context):
    # user defined log statements using synthetics_logger
    logger.info("Selenium Python heartbeat canary")
    return main()

4。创建 json 策略文件 (ssmPolicy.json),此策略将允许 Canary 访问 SSM 参数所需的额外权限:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ssm:GetParameter",
"Resource": "arn:aws:ssm:<region>:<account-id>:parameter/url-list"
}
]
}

注意:请确保将资源 ARN 字段替换为我们在步骤 [2] 中提取的 ARN,或者替换您在 ex us-east-1 中运营的区域、亚马逊云科技 账号和您创建的 SSM 参数的名称。在上面的示例中,在步骤 [1] 中创建的 SSM 参数被称为 “url-list”。

5。根据我们在步骤 [4] 中创建的策略文档 “ssmPolicy.json” 创建 IAM 策略,并将其附加到新创建的 Canary IAM 角色中:

aws iam put-role-policy --role-name <CanaryRoleName> --policy-name urlListSSMAccess --policy-document file://ssmPolicy.json

注意: 替换为你的 Canary 正在使用的角色的名称。你可以在 Canary 的配置选项卡下找到这个。

成本

  1. 加那利群岛按次收费。例如,在美国东部地区的每次 Canary 运行向您收取 0.0012 美元的费用。有关定价的更多详细信息可以 在这里 找到 。
  2. 参数存储:标准参数不收取额外费用。

正在清理

在你完成实验后,为了避免产生额外费用,你可能需要删除作为本文的一部分创建的金丝雀。为此,请按照删除金丝雀 文档 中描述的步骤进行操作 。

作者简介

Puneeth Ranjan Komaragiri

Puneeth 是 亚马逊云科技 的首席技术客户经理。他以网络团队的云支持工程师的身份开始了自己的旅程,在那里他负责各种 亚马逊云科技 网络和监控服务。他对监控和可观察性以及云财务管理领域充满热情。他喜欢与客户合作,帮助他们设计和架构工作负载,以实现规模和弹性。

Sid Joshi

Sid 是亚马逊网络服务的解决方案架构师。他与 亚马逊云科技 客户合作,提供有关云采用、迁移和策略的指导。他对技术充满热情,喜欢在网络和可观测性领域进行构建和试验。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。