%global _empty_manifest_terminate_build 0 Name: python-aws-cdk.aws-synthetics-alpha Version: 2.81.0a0 Release: 1 Summary: The CDK Construct Library for AWS::Synthetics License: Apache-2.0 URL: https://github.com/aws/aws-cdk Source0: https://mirrors.nju.edu.cn/pypi/web/packages/cf/3e/8d0c7516a787ebf98c3206ec6229011512cb4b6a571647997e68cd925f50/aws-cdk.aws-synthetics-alpha-2.81.0a0.tar.gz BuildArch: noarch Requires: python3-aws-cdk-lib Requires: python3-constructs Requires: python3-jsii Requires: python3-publication Requires: python3-typeguard %description Amazon CloudWatch Synthetics allow you to monitor your application by generating **synthetic** traffic. The traffic is produced by a **canary**: a configurable script that runs on a schedule. You configure the canary script to follow the same routes and perform the same actions as a user, which allows you to continually verify your user experience even when you don't have any traffic on your applications. ## Canary To illustrate how to use a canary, assume your application defines the following endpoint: ```console % curl "https://api.example.com/user/books/topbook/" The Hitchhikers Guide to the Galaxy ``` The below code defines a canary that will hit the `books/topbook` endpoint every 5 minutes: ```python canary = synthetics.Canary(self, "MyCanary", schedule=synthetics.Schedule.rate(Duration.minutes(5)), test=synthetics.Test.custom( code=synthetics.Code.from_asset(path.join(__dirname, "canary")), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9, environment_variables={ "stage": "prod" } ) ``` The following is an example of an `index.js` file which exports the `handler` function: ```js const synthetics = require('Synthetics'); const log = require('SyntheticsLogger'); const pageLoadBlueprint = async function () { // Configure the stage of the API using environment variables const url = `https://api.example.com/${process.env.stage}/user/books/topbook/`; const page = await synthetics.getPage(); const response = await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 }); // Wait for page to render. Increase or decrease wait time based on endpoint being monitored. await page.waitFor(15000); // This will take a screenshot that will be included in test output artifacts. await synthetics.takeScreenshot('loaded', 'loaded'); const pageTitle = await page.title(); log.info('Page title: ' + pageTitle); if (response.status() !== 200) { throw 'Failed to load page!'; } }; exports.handler = async () => { return await pageLoadBlueprint(); }; ``` > **Note:** The function **must** be called `handler`. The canary will automatically produce a CloudWatch Dashboard: ![UI Screenshot](images/ui-screenshot.png) The Canary code will be executed in a lambda function created by Synthetics on your behalf. The Lambda function includes a custom [runtime](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html) provided by Synthetics. The provided runtime includes a variety of handy tools such as [Puppeteer](https://www.npmjs.com/package/puppeteer-core) (for nodejs based one) and Chromium. To learn more about Synthetics capabilities, check out the [docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html). ### Canary Schedule You can specify the schedule on which a canary runs by providing a [`Schedule`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-synthetics.Schedule.html) object to the `schedule` property. Configure a run rate of up to 60 minutes with `Schedule.rate`: ```python schedule = synthetics.Schedule.rate(Duration.minutes(5)) ``` You can also specify a [cron expression](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_cron.html) with `Schedule.cron`: ```python schedule = synthetics.Schedule.cron( hour="0,8,16" ) ``` If you want the canary to run just once upon deployment, you can use `Schedule.once()`. ### Canary DeleteLambdaResourcesOnCanaryDeletion You can specify whether the AWS CloudFormation is to also delete the Lambda functions and layers used by this canary, when the canary is deleted. This can be provisioned by setting the `enableAutoDeleteLambdas` property to `true` when we define the canary. ```python stack = Stack() canary = synthetics.Canary(stack, "Canary", test=synthetics.Test.custom( handler="index.handler", code=synthetics.Code.from_inline("/* Synthetics handler code") ), enable_auto_delete_lambdas=True, runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9 ) ``` Synthetic Canaries create additional resources under the hood beyond Lambda functions. Setting `enableAutoDeleteLambdas: true` will take care of cleaning up Lambda functions on deletion, but you still have to manually delete other resources like S3 buckets and CloudWatch logs. ### Configuring the Canary Script To configure the script the canary executes, use the `test` property. The `test` property accepts a `Test` instance that can be initialized by the `Test` class static methods. Currently, the only implemented method is `Test.custom()`, which allows you to bring your own code. In the future, other methods will be added. `Test.custom()` accepts `code` and `handler` properties -- both are required by Synthetics to create a lambda function on your behalf. The `synthetics.Code` class exposes static methods to bundle your code artifacts: * `code.fromInline(code)` - specify an inline script. * `code.fromAsset(path)` - specify a .zip file or a directory in the local filesystem which will be zipped and uploaded to S3 on deployment. See the above Note for directory structure. * `code.fromBucket(bucket, key[, objectVersion])` - specify an S3 object that contains the .zip file of your runtime code. See the above Note for directory structure. Using the `Code` class static initializers: ```python # To supply the code from a S3 bucket: import aws_cdk.aws_s3 as s3 # To supply the code inline: synthetics.Canary(self, "Inline Canary", test=synthetics.Test.custom( code=synthetics.Code.from_inline("/* Synthetics handler code */"), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9 ) # To supply the code from your local filesystem: synthetics.Canary(self, "Asset Canary", test=synthetics.Test.custom( code=synthetics.Code.from_asset(path.join(__dirname, "canary")), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9 ) bucket = s3.Bucket(self, "Code Bucket") synthetics.Canary(self, "Bucket Canary", test=synthetics.Test.custom( code=synthetics.Code.from_bucket(bucket, "canary.zip"), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9 ) ``` > **Note:** Synthetics have a specified folder structure for canaries. For Node scripts supplied via `code.fromAsset()` or `code.fromBucket()`, the canary resource requires the following folder structure: > > ```plaintext > canary/ > ├── nodejs/ > ├── node_modules/ > ├── .js > ``` > > For Python scripts supplied via `code.fromAsset()` or `code.fromBucket()`, the canary resource requires the following folder structure: > > ```plaintext > canary/ > ├── python/ > ├── .py > ``` > > See Synthetics [docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary.html). ### Running a canary on a VPC You can specify what [VPC a canary executes in](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_VPC.html). This can allow for monitoring services that may be internal to a specific VPC. To place a canary within a VPC, you can specify the `vpc` property with the desired `VPC` to place then canary in. This will automatically attach the appropriate IAM permissions to attach to the VPC. This will also create a Security Group and attach to the default subnets for the VPC unless specified via `vpcSubnets` and `securityGroups`. ```python import aws_cdk.aws_ec2 as ec2 # vpc: ec2.IVpc synthetics.Canary(self, "Vpc Canary", test=synthetics.Test.custom( code=synthetics.Code.from_asset(path.join(__dirname, "canary")), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9, vpc=vpc ) ``` > **Note:** By default, the Synthetics runtime needs access to the S3 and CloudWatch APIs, which will fail in a private subnet without internet access enabled (e.g. an isolated subnnet). > > Ensure that the Canary is placed in a VPC either with internet connectivity or with VPC Endpoints for S3 and CloudWatch enabled and configured. > > See [Synthetics VPC docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_VPC.html). ### Alarms You can configure a CloudWatch Alarm on a canary metric. Metrics are emitted by CloudWatch automatically and can be accessed by the following APIs: * `canary.metricSuccessPercent()` - percentage of successful canary runs over a given time * `canary.metricDuration()` - how much time each canary run takes, in seconds. * `canary.metricFailed()` - number of failed canary runs over a given time Create an alarm that tracks the canary metric: ```python import aws_cdk.aws_cloudwatch as cloudwatch # canary: synthetics.Canary cloudwatch.Alarm(self, "CanaryAlarm", metric=canary.metric_success_percent(), evaluation_periods=2, threshold=90, comparison_operator=cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD ) ``` %package -n python3-aws-cdk.aws-synthetics-alpha Summary: The CDK Construct Library for AWS::Synthetics Provides: python-aws-cdk.aws-synthetics-alpha BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-aws-cdk.aws-synthetics-alpha Amazon CloudWatch Synthetics allow you to monitor your application by generating **synthetic** traffic. The traffic is produced by a **canary**: a configurable script that runs on a schedule. You configure the canary script to follow the same routes and perform the same actions as a user, which allows you to continually verify your user experience even when you don't have any traffic on your applications. ## Canary To illustrate how to use a canary, assume your application defines the following endpoint: ```console % curl "https://api.example.com/user/books/topbook/" The Hitchhikers Guide to the Galaxy ``` The below code defines a canary that will hit the `books/topbook` endpoint every 5 minutes: ```python canary = synthetics.Canary(self, "MyCanary", schedule=synthetics.Schedule.rate(Duration.minutes(5)), test=synthetics.Test.custom( code=synthetics.Code.from_asset(path.join(__dirname, "canary")), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9, environment_variables={ "stage": "prod" } ) ``` The following is an example of an `index.js` file which exports the `handler` function: ```js const synthetics = require('Synthetics'); const log = require('SyntheticsLogger'); const pageLoadBlueprint = async function () { // Configure the stage of the API using environment variables const url = `https://api.example.com/${process.env.stage}/user/books/topbook/`; const page = await synthetics.getPage(); const response = await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 }); // Wait for page to render. Increase or decrease wait time based on endpoint being monitored. await page.waitFor(15000); // This will take a screenshot that will be included in test output artifacts. await synthetics.takeScreenshot('loaded', 'loaded'); const pageTitle = await page.title(); log.info('Page title: ' + pageTitle); if (response.status() !== 200) { throw 'Failed to load page!'; } }; exports.handler = async () => { return await pageLoadBlueprint(); }; ``` > **Note:** The function **must** be called `handler`. The canary will automatically produce a CloudWatch Dashboard: ![UI Screenshot](images/ui-screenshot.png) The Canary code will be executed in a lambda function created by Synthetics on your behalf. The Lambda function includes a custom [runtime](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html) provided by Synthetics. The provided runtime includes a variety of handy tools such as [Puppeteer](https://www.npmjs.com/package/puppeteer-core) (for nodejs based one) and Chromium. To learn more about Synthetics capabilities, check out the [docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html). ### Canary Schedule You can specify the schedule on which a canary runs by providing a [`Schedule`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-synthetics.Schedule.html) object to the `schedule` property. Configure a run rate of up to 60 minutes with `Schedule.rate`: ```python schedule = synthetics.Schedule.rate(Duration.minutes(5)) ``` You can also specify a [cron expression](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_cron.html) with `Schedule.cron`: ```python schedule = synthetics.Schedule.cron( hour="0,8,16" ) ``` If you want the canary to run just once upon deployment, you can use `Schedule.once()`. ### Canary DeleteLambdaResourcesOnCanaryDeletion You can specify whether the AWS CloudFormation is to also delete the Lambda functions and layers used by this canary, when the canary is deleted. This can be provisioned by setting the `enableAutoDeleteLambdas` property to `true` when we define the canary. ```python stack = Stack() canary = synthetics.Canary(stack, "Canary", test=synthetics.Test.custom( handler="index.handler", code=synthetics.Code.from_inline("/* Synthetics handler code") ), enable_auto_delete_lambdas=True, runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9 ) ``` Synthetic Canaries create additional resources under the hood beyond Lambda functions. Setting `enableAutoDeleteLambdas: true` will take care of cleaning up Lambda functions on deletion, but you still have to manually delete other resources like S3 buckets and CloudWatch logs. ### Configuring the Canary Script To configure the script the canary executes, use the `test` property. The `test` property accepts a `Test` instance that can be initialized by the `Test` class static methods. Currently, the only implemented method is `Test.custom()`, which allows you to bring your own code. In the future, other methods will be added. `Test.custom()` accepts `code` and `handler` properties -- both are required by Synthetics to create a lambda function on your behalf. The `synthetics.Code` class exposes static methods to bundle your code artifacts: * `code.fromInline(code)` - specify an inline script. * `code.fromAsset(path)` - specify a .zip file or a directory in the local filesystem which will be zipped and uploaded to S3 on deployment. See the above Note for directory structure. * `code.fromBucket(bucket, key[, objectVersion])` - specify an S3 object that contains the .zip file of your runtime code. See the above Note for directory structure. Using the `Code` class static initializers: ```python # To supply the code from a S3 bucket: import aws_cdk.aws_s3 as s3 # To supply the code inline: synthetics.Canary(self, "Inline Canary", test=synthetics.Test.custom( code=synthetics.Code.from_inline("/* Synthetics handler code */"), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9 ) # To supply the code from your local filesystem: synthetics.Canary(self, "Asset Canary", test=synthetics.Test.custom( code=synthetics.Code.from_asset(path.join(__dirname, "canary")), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9 ) bucket = s3.Bucket(self, "Code Bucket") synthetics.Canary(self, "Bucket Canary", test=synthetics.Test.custom( code=synthetics.Code.from_bucket(bucket, "canary.zip"), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9 ) ``` > **Note:** Synthetics have a specified folder structure for canaries. For Node scripts supplied via `code.fromAsset()` or `code.fromBucket()`, the canary resource requires the following folder structure: > > ```plaintext > canary/ > ├── nodejs/ > ├── node_modules/ > ├── .js > ``` > > For Python scripts supplied via `code.fromAsset()` or `code.fromBucket()`, the canary resource requires the following folder structure: > > ```plaintext > canary/ > ├── python/ > ├── .py > ``` > > See Synthetics [docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary.html). ### Running a canary on a VPC You can specify what [VPC a canary executes in](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_VPC.html). This can allow for monitoring services that may be internal to a specific VPC. To place a canary within a VPC, you can specify the `vpc` property with the desired `VPC` to place then canary in. This will automatically attach the appropriate IAM permissions to attach to the VPC. This will also create a Security Group and attach to the default subnets for the VPC unless specified via `vpcSubnets` and `securityGroups`. ```python import aws_cdk.aws_ec2 as ec2 # vpc: ec2.IVpc synthetics.Canary(self, "Vpc Canary", test=synthetics.Test.custom( code=synthetics.Code.from_asset(path.join(__dirname, "canary")), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9, vpc=vpc ) ``` > **Note:** By default, the Synthetics runtime needs access to the S3 and CloudWatch APIs, which will fail in a private subnet without internet access enabled (e.g. an isolated subnnet). > > Ensure that the Canary is placed in a VPC either with internet connectivity or with VPC Endpoints for S3 and CloudWatch enabled and configured. > > See [Synthetics VPC docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_VPC.html). ### Alarms You can configure a CloudWatch Alarm on a canary metric. Metrics are emitted by CloudWatch automatically and can be accessed by the following APIs: * `canary.metricSuccessPercent()` - percentage of successful canary runs over a given time * `canary.metricDuration()` - how much time each canary run takes, in seconds. * `canary.metricFailed()` - number of failed canary runs over a given time Create an alarm that tracks the canary metric: ```python import aws_cdk.aws_cloudwatch as cloudwatch # canary: synthetics.Canary cloudwatch.Alarm(self, "CanaryAlarm", metric=canary.metric_success_percent(), evaluation_periods=2, threshold=90, comparison_operator=cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD ) ``` %package help Summary: Development documents and examples for aws-cdk.aws-synthetics-alpha Provides: python3-aws-cdk.aws-synthetics-alpha-doc %description help Amazon CloudWatch Synthetics allow you to monitor your application by generating **synthetic** traffic. The traffic is produced by a **canary**: a configurable script that runs on a schedule. You configure the canary script to follow the same routes and perform the same actions as a user, which allows you to continually verify your user experience even when you don't have any traffic on your applications. ## Canary To illustrate how to use a canary, assume your application defines the following endpoint: ```console % curl "https://api.example.com/user/books/topbook/" The Hitchhikers Guide to the Galaxy ``` The below code defines a canary that will hit the `books/topbook` endpoint every 5 minutes: ```python canary = synthetics.Canary(self, "MyCanary", schedule=synthetics.Schedule.rate(Duration.minutes(5)), test=synthetics.Test.custom( code=synthetics.Code.from_asset(path.join(__dirname, "canary")), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9, environment_variables={ "stage": "prod" } ) ``` The following is an example of an `index.js` file which exports the `handler` function: ```js const synthetics = require('Synthetics'); const log = require('SyntheticsLogger'); const pageLoadBlueprint = async function () { // Configure the stage of the API using environment variables const url = `https://api.example.com/${process.env.stage}/user/books/topbook/`; const page = await synthetics.getPage(); const response = await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 }); // Wait for page to render. Increase or decrease wait time based on endpoint being monitored. await page.waitFor(15000); // This will take a screenshot that will be included in test output artifacts. await synthetics.takeScreenshot('loaded', 'loaded'); const pageTitle = await page.title(); log.info('Page title: ' + pageTitle); if (response.status() !== 200) { throw 'Failed to load page!'; } }; exports.handler = async () => { return await pageLoadBlueprint(); }; ``` > **Note:** The function **must** be called `handler`. The canary will automatically produce a CloudWatch Dashboard: ![UI Screenshot](images/ui-screenshot.png) The Canary code will be executed in a lambda function created by Synthetics on your behalf. The Lambda function includes a custom [runtime](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html) provided by Synthetics. The provided runtime includes a variety of handy tools such as [Puppeteer](https://www.npmjs.com/package/puppeteer-core) (for nodejs based one) and Chromium. To learn more about Synthetics capabilities, check out the [docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html). ### Canary Schedule You can specify the schedule on which a canary runs by providing a [`Schedule`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-synthetics.Schedule.html) object to the `schedule` property. Configure a run rate of up to 60 minutes with `Schedule.rate`: ```python schedule = synthetics.Schedule.rate(Duration.minutes(5)) ``` You can also specify a [cron expression](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_cron.html) with `Schedule.cron`: ```python schedule = synthetics.Schedule.cron( hour="0,8,16" ) ``` If you want the canary to run just once upon deployment, you can use `Schedule.once()`. ### Canary DeleteLambdaResourcesOnCanaryDeletion You can specify whether the AWS CloudFormation is to also delete the Lambda functions and layers used by this canary, when the canary is deleted. This can be provisioned by setting the `enableAutoDeleteLambdas` property to `true` when we define the canary. ```python stack = Stack() canary = synthetics.Canary(stack, "Canary", test=synthetics.Test.custom( handler="index.handler", code=synthetics.Code.from_inline("/* Synthetics handler code") ), enable_auto_delete_lambdas=True, runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9 ) ``` Synthetic Canaries create additional resources under the hood beyond Lambda functions. Setting `enableAutoDeleteLambdas: true` will take care of cleaning up Lambda functions on deletion, but you still have to manually delete other resources like S3 buckets and CloudWatch logs. ### Configuring the Canary Script To configure the script the canary executes, use the `test` property. The `test` property accepts a `Test` instance that can be initialized by the `Test` class static methods. Currently, the only implemented method is `Test.custom()`, which allows you to bring your own code. In the future, other methods will be added. `Test.custom()` accepts `code` and `handler` properties -- both are required by Synthetics to create a lambda function on your behalf. The `synthetics.Code` class exposes static methods to bundle your code artifacts: * `code.fromInline(code)` - specify an inline script. * `code.fromAsset(path)` - specify a .zip file or a directory in the local filesystem which will be zipped and uploaded to S3 on deployment. See the above Note for directory structure. * `code.fromBucket(bucket, key[, objectVersion])` - specify an S3 object that contains the .zip file of your runtime code. See the above Note for directory structure. Using the `Code` class static initializers: ```python # To supply the code from a S3 bucket: import aws_cdk.aws_s3 as s3 # To supply the code inline: synthetics.Canary(self, "Inline Canary", test=synthetics.Test.custom( code=synthetics.Code.from_inline("/* Synthetics handler code */"), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9 ) # To supply the code from your local filesystem: synthetics.Canary(self, "Asset Canary", test=synthetics.Test.custom( code=synthetics.Code.from_asset(path.join(__dirname, "canary")), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9 ) bucket = s3.Bucket(self, "Code Bucket") synthetics.Canary(self, "Bucket Canary", test=synthetics.Test.custom( code=synthetics.Code.from_bucket(bucket, "canary.zip"), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9 ) ``` > **Note:** Synthetics have a specified folder structure for canaries. For Node scripts supplied via `code.fromAsset()` or `code.fromBucket()`, the canary resource requires the following folder structure: > > ```plaintext > canary/ > ├── nodejs/ > ├── node_modules/ > ├── .js > ``` > > For Python scripts supplied via `code.fromAsset()` or `code.fromBucket()`, the canary resource requires the following folder structure: > > ```plaintext > canary/ > ├── python/ > ├── .py > ``` > > See Synthetics [docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary.html). ### Running a canary on a VPC You can specify what [VPC a canary executes in](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_VPC.html). This can allow for monitoring services that may be internal to a specific VPC. To place a canary within a VPC, you can specify the `vpc` property with the desired `VPC` to place then canary in. This will automatically attach the appropriate IAM permissions to attach to the VPC. This will also create a Security Group and attach to the default subnets for the VPC unless specified via `vpcSubnets` and `securityGroups`. ```python import aws_cdk.aws_ec2 as ec2 # vpc: ec2.IVpc synthetics.Canary(self, "Vpc Canary", test=synthetics.Test.custom( code=synthetics.Code.from_asset(path.join(__dirname, "canary")), handler="index.handler" ), runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_9, vpc=vpc ) ``` > **Note:** By default, the Synthetics runtime needs access to the S3 and CloudWatch APIs, which will fail in a private subnet without internet access enabled (e.g. an isolated subnnet). > > Ensure that the Canary is placed in a VPC either with internet connectivity or with VPC Endpoints for S3 and CloudWatch enabled and configured. > > See [Synthetics VPC docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_VPC.html). ### Alarms You can configure a CloudWatch Alarm on a canary metric. Metrics are emitted by CloudWatch automatically and can be accessed by the following APIs: * `canary.metricSuccessPercent()` - percentage of successful canary runs over a given time * `canary.metricDuration()` - how much time each canary run takes, in seconds. * `canary.metricFailed()` - number of failed canary runs over a given time Create an alarm that tracks the canary metric: ```python import aws_cdk.aws_cloudwatch as cloudwatch # canary: synthetics.Canary cloudwatch.Alarm(self, "CanaryAlarm", metric=canary.metric_success_percent(), evaluation_periods=2, threshold=90, comparison_operator=cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD ) ``` %prep %autosetup -n aws-cdk.aws-synthetics-alpha-2.81.0a0 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-aws-cdk.aws-synthetics-alpha -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Wed May 31 2023 Python_Bot - 2.81.0a0-1 - Package Spec generated