AWS::Synthetics::Canary - AWS CloudFormation
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS::Synthetics::Canary

创建或更新 Canary。Canary 是从外而内监控终端节点和 API 的脚本。Canary 可帮助您检查 Web 服务的可用性和延迟,并通过调查加载时间数据、UI 屏幕截图、日志和指标来解决异常问题。您可以将 Canary 设置为连续运行或只运行一次。

要创建 Canary,您必须具有 CloudWatchSyntheticsFullAccess 策略。如果您要为 Canary 创建新的 IAM 角色,则还需要 iam:CreateRoleiam:CreatePolicyiam:AttachRolePolicy 权限。有关更多信息,请参阅必要的角色和权限

请勿在您的 Canary 名称中包含机密或专有信息。Canary 名称构成 Canary 的 Amazon 资源名称 (ARN) 的一部分,而 ARN 包含在通过 Internet 的传出调用中。有关更多信息,请参阅 Synthetics Canary 的安全注意事项

语法

要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:

JSON

{ "Type" : "AWS::Synthetics::Canary", "Properties" : { "ArtifactS3Location" : String, "Code" : Code, "ExecutionRoleArn" : String, "FailureRetentionPeriod" : Integer, "Name" : String, "RunConfig" : RunConfig, "RuntimeVersion" : String, "Schedule" : Schedule, "StartCanaryAfterCreation" : Boolean, "SuccessRetentionPeriod" : Integer, "Tags" : [ Tag, ... ], "VPCConfig" : VPCConfig } }

YAML

Type: AWS::Synthetics::Canary Properties: ArtifactS3Location: String Code: Code ExecutionRoleArn: String FailureRetentionPeriod: Integer Name: String RunConfig: RunConfig RuntimeVersion: String Schedule: Schedule StartCanaryAfterCreation: Boolean SuccessRetentionPeriod: Integer Tags: - Tag VPCConfig: VPCConfig

属性

ArtifactS3Location

Amazon S3 中的一个位置,Synthetics 使用此位置存储来自此 Canary 的运行的构件。构件包括日志文件、屏幕截图和 HAR 文件。指定完整位置路径,包括路径开头处的 s3://

必需:是

类型:字符串

最低1

最高1024

Update requires: No interruption

Code

使用此结构输入 Canary 的脚本代码。此结构包含 Lambda 处理程序,其中包含 Canary 应开始运行脚本的位置。如果脚本存储在 S3 存储桶中,则还包括存储桶名称、密钥和版本。如果脚本直接传递到 Canary,则脚本代码包含在 Script 的值中。

必需:是

类型代码

Update requires: No interruption

ExecutionRoleArn

用于运行 Canary 的 IAM 角色的 ARN。此角色必须已经存在,并且必须将 lambda.amazonaws.com 作为委托人包括在信任策略中。角色还必须具有以下权限:

  • s3:PutObject

  • s3:GetBucketLocation

  • s3:ListAllMyBuckets

  • cloudwatch:PutMetricData

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

必需:是

类型:字符串

模式^arn:(aws|aws-cn|aws-us-gov|aws-iso-{0,1}[a-z]{0,1}):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$

Update requires: No interruption

FailureRetentionPeriod

保留有关此 Canary 失败运行的数据的天数。如果省略该字段,则使用默认值 31 天。有效范围为 1 至 455 天。

必需:否

类型:整数

最低1

最高1024

Update requires: No interruption

Name

此 Canary 的名称。请务必为其提供一个描述性名称,此名称将其与您账户中的其他 Canary 区别开来。

请勿在您的 Canary 名称中包含机密或专有信息。Canary 名称构成 Canary ARN 的一部分,而 ARN 包含在通过 Internet 的传出调用中。有关更多信息,请参阅 Synthetics Canary 的安全注意事项

必需:是

类型:字符串

最低1

最高21

模式^[0-9a-z_\-]+$

Update requires: Replacement

RunConfig

包含 Canary 运行的输入信息的结构。此结构是必需的。

必需:是

类型RunConfig

Update requires: No interruption

RuntimeVersion

指定要用于 Canary 的运行时版本。目前唯一有效的值是 syn-1.0。有关运行时版本的更多信息,请参阅 Canary 运行时版本

必需:是

类型:字符串

最低1

最高1024

Update requires: No interruption

Schedule

包含有关 Canary 运行频率以及这些运行何时停止的信息的结构。

必需:是

类型计划

Update requires: No interruption

StartCanaryAfterCreation

指定 TRUE 可让 Canary 在创建后立即开始运行。

您使用 CloudFormation 创建的 Canary 不能用于监控创建该 Canary 的 CloudFormation 堆栈或者在堆栈出现故障时进行回退。

必需:是

类型:布尔值

Update requires: No interruption

SuccessRetentionPeriod

保留有关此 Canary 成功运行的数据的天数。如果省略该字段,则使用默认值 31 天。有效范围为 1 至 455 天。

必需:否

类型:整数

最低1

最高1024

Update requires: No interruption

Tags

与 Canary 关联的键值对的列表。

必需:否

类型Tag 的列表

Update requires: No interruption

VPCConfig

如果此 Canary 要测试 VPC 中的终端节点,则此结构包含有关 VPC 终端节点的子网和安全组的信息。有关更多信息,请参阅在 VPC 中运行 Canary

必需:否

类型VPCConfig

Update requires: No interruption

返回值

Ref

在将此资源的逻辑 ID 传递给内部 Ref 函数时,Ref 返回 Canary 的名称,如 MyCanary

For more information about using the Ref function, see Ref.

Fn::GetAtt

Fn::GetAtt 内部函数返回此类型的一个指定属性的值。以下为可用属性和示例返回值。

有关使用 Fn::GetAtt 内部函数的更多信息,请参阅 Fn::GetAtt

Id

Canary 的 ID。

State

Canary 的状态。例如:RUNNING

示例

将脚本存储在 Amazon S3 存储桶中的 Canary

此示例创建一个使用存储在 S3 存储桶中的现有脚本的 Canary。

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "AWS CloudFormation Sample Template for AWS Synthetics: Create a Canary using this template", "Resources": { "SyntheticsCanary": { "Type": "AWS::Synthetics::Canary", "Properties": { "Name": { "Ref": "samplecanary" }, "ExecutionRoleArn": { "Ref": "arn:aws:iam::123456789012:role/my-lambda-execution-role-to-run-canary" }, "Code": { "Handler": "pageLoadBlueprint.handler", "S3Bucket": "aws-synthetics-code-myaccount-canary1", "S3Key": "my-script-location" }, "ArtifactS3Location": "s3://my-results-bucket", "RuntimeVersion": "syn-1.0", "Schedule": { "Expression": "rate(1 minute)", "DurationInSeconds": 3600 }, "RunConfig": { "TimeoutInSeconds": 60 }, "FailureRetentionPeriod": 30, "SuccessRetentionPeriod": 30, "Tags": [ { "Id": "key00AtCreate", "Value": "value001AtCreate" } ] } } } }

YAML

Resources: SyntheticsCanary: Type: 'AWS::Synthetics::Canary' Properties: Name: samplecanary ExecutionRoleArn: 'arn:aws:iam::123456789012:role/my-lambda-execution-role-to-run-canary' Code: {Handler: pageLoadBlueprint.handler, S3Bucket: aws-synthetics-code-myaccount-canary1, S3Key: my-script-location} ArtifactS3Location: s3://my-results-bucket RuntimeVersion: syn-1.0 Schedule: {Expression: 'rate(1 minute)', DurationInSeconds: 3600} RunConfig: {TimeoutInSeconds: 60} FailureRetentionPeriod: 30 SuccessRetentionPeriod: 30 Tags: [{Key: key00AtCreate, Value: value001AtCreate}] StartCanaryAfterCreation: false

通过 CloudFormation 传递脚本的 Canary

此示例创建一个 Canary 并将脚本代码直接传递给此 Canary。

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "AWS CloudFormation Sample Template for AWS Synthetics: Create a Canary using this template", "Resources": { "SyntheticsCanary": { "Type": "AWS::Synthetics::Canary", "Properties": { "Name": { "Ref": "samplecanary" }, "ExecutionRoleArn": { "Ref": "arn:aws:iam::123456789012:role/my-lambda-execution-role-to-run-canary" }, "Code": { "Handler": "pageLoadBlueprint.handler", "Script": "var synthetics = require('Synthetics');\nconst log = require('SyntheticsLogger');\n\nconst pageLoadBlueprint = async function () {\n\n // INSERT URL here\n const URL = \"https://amazon.com\";\n\n let page = await synthetics.getPage();\n const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});\n //Wait for page to render.\n //Increase or decrease wait time based on endpoint being monitored.\n await page.waitFor(15000);\n await synthetics.takeScreenshot('loaded', 'loaded');\n let pageTitle = await page.title();\n log.info('Page title: ' + pageTitle);\n if (response.status() !== 200) {\n throw \"Failed to load page!\";\n }\n};\n\nexports.handler = async () => {\n return await pageLoadBlueprint();\n};\n" }, "ArtifactS3Location": "s3://my-results-bucket", "RuntimeVersion": "syn-1.0", "Schedule": { "Expression": "rate(1 minute)", "DurationInSeconds": 3600 }, "RunConfig": { "TimeoutInSeconds": 60 }, "FailureRetentionPeriod": 30, "SuccessRetentionPeriod": 30 }, "Tags": [ { "Id": "key00AtCreate", "Value": "value001AtCreate" } ] } } }

YAML

Resources: SyntheticsCanary: Type: 'AWS::Synthetics::Canary' Properties: Name: samplecanary ExecutionRoleArn: 'arn:aws:iam::123456789012:role/my-lambda-execution-role-to-run-canary' Code: {Handler: pageLoadBlueprint.handler, Script: "var synthetics = require('Synthetics');\nconst log = require('SyntheticsLogger');\nconst pageLoadBlueprint = async function () {\n// INSERT URL here\nconst URL = \"https://amazon.com\";\n\nlet page = await synthetics.getPage();\nconst response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});\n//Wait for page to render.\n//Increase or decrease wait time based on endpoint being monitored.\nawait page.waitFor(15000);\nawait synthetics.takeScreenshot('loaded', 'loaded');\nlet pageTitle = await page.title();\nlog.info('Page title: ' + pageTitle);\nif (response.status() !== 200) {\n throw \"Failed to load page!\";\n}\n};\n\nexports.handler = async () => {\nreturn await pageLoadBlueprint();\n};\n"} ArtifactS3Location: s3://my-results-bucket RuntimeVersion: syn-1.0 Schedule: {Expression: 'rate(1 minute)', DurationInSeconds: 3600} RunConfig: {TimeoutInSeconds: 60} FailureRetentionPeriod: 30 SuccessRetentionPeriod: 30 Tags: [{Key: key00AtCreate, Value: value001AtCreate}] StartCanaryAfterCreation: false