aws-cdk.aws-synthetics-alpha


Nameaws-cdk.aws-synthetics-alpha JSON
Version 2.101.1a0 PyPI version JSON
download
home_pagehttps://github.com/aws/aws-cdk
SummaryThis module is deprecated. All constructs are now available under aws-cdk-lib/aws-synthetics
upload_time2023-10-16 21:11:25
maintainer
docs_urlNone
authorAmazon Web Services
requires_python~=3.7
licenseApache-2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Amazon CloudWatch Synthetics Construct Library

<!--BEGIN STABILITY BANNER-->---


![Deprecated](https://img.shields.io/badge/deprecated-critical.svg?style=for-the-badge)

> This API may emit warnings. Backward compatibility is not guaranteed.

---
<!--END STABILITY BANNER-->

All constructs moved to aws-cdk-lib/aws-synthetics.

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_4_0,
    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()`.

### Deleting underlying resources on canary deletion

When you delete a lambda, the following underlying resources are isolated in your AWS account:

* Lambda Function that runs your canary script
* S3 Bucket for artifact storage
* IAM roles and policies
* Log Groups in CloudWatch Logs.

To learn more about these underlying resources, see
[Synthetics Canaries Deletion](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/synthetics_canaries_deletion.html).

In the CDK, you can configure your canary to delete the underlying lambda function when the canary is deleted.
This can be provisioned by setting `cleanup: Cleanup.LAMBDA`. Note that this
will create a custom resource under the hood that takes care of the lambda deletion for you.

```python
canary = synthetics.Canary(self, "Canary",
    test=synthetics.Test.custom(
        handler="index.handler",
        code=synthetics.Code.from_inline("/* Synthetics handler code")
    ),
    cleanup=synthetics.Cleanup.LAMBDA,
    runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0
)
```

> Note: To properly clean up your canary on deletion, 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_4_0
)

# 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_4_0
)
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_4_0
)
```

> **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/
>         ├── <filename>.js
> ```
>
> For Python scripts supplied via `code.fromAsset()` or `code.fromBucket()`, the canary resource requires the following folder structure:
>
> ```plaintext
> canary/
> ├── python/
>     ├── <filename>.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_4_0,
    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
)
```

### Artifacts

You can pass an S3 bucket to store artifacts from canary runs. If you do not,
one will be auto-generated when the canary is created. You may add
[lifecycle rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)
to the auto-generated bucket.

```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_4_0,
    artifacts_bucket_lifecycle_rules=[LifecycleRule(
        expiration=Duration.days(30)
    )]
)
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/aws/aws-cdk",
    "name": "aws-cdk.aws-synthetics-alpha",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "~=3.7",
    "maintainer_email": "",
    "keywords": "",
    "author": "Amazon Web Services",
    "author_email": "",
    "download_url": "https://files.pythonhosted.org/packages/56/7d/72d87d7bc10c1abfb9f95abe06d6381a0c34ad97694e24effb6ec87ff2ae/aws-cdk.aws-synthetics-alpha-2.101.1a0.tar.gz",
    "platform": null,
    "description": "# Amazon CloudWatch Synthetics Construct Library\n\n<!--BEGIN STABILITY BANNER-->---\n\n\n![Deprecated](https://img.shields.io/badge/deprecated-critical.svg?style=for-the-badge)\n\n> This API may emit warnings. Backward compatibility is not guaranteed.\n\n---\n<!--END STABILITY BANNER-->\n\nAll constructs moved to aws-cdk-lib/aws-synthetics.\n\nAmazon 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.\n\n## Canary\n\nTo illustrate how to use a canary, assume your application defines the following endpoint:\n\n```console\n% curl \"https://api.example.com/user/books/topbook/\"\nThe Hitchhikers Guide to the Galaxy\n```\n\nThe below code defines a canary that will hit the `books/topbook` endpoint every 5 minutes:\n\n```python\ncanary = synthetics.Canary(self, \"MyCanary\",\n    schedule=synthetics.Schedule.rate(Duration.minutes(5)),\n    test=synthetics.Test.custom(\n        code=synthetics.Code.from_asset(path.join(__dirname, \"canary\")),\n        handler=\"index.handler\"\n    ),\n    runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0,\n    environment_variables={\n        \"stage\": \"prod\"\n    }\n)\n```\n\nThe following is an example of an `index.js` file which exports the `handler` function:\n\n```js\nconst synthetics = require('Synthetics');\nconst log = require('SyntheticsLogger');\n\nconst pageLoadBlueprint = async function () {\n  // Configure the stage of the API using environment variables\n  const url = `https://api.example.com/${process.env.stage}/user/books/topbook/`;\n\n  const page = await synthetics.getPage();\n  const response = await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });\n  // Wait for page to render. Increase or decrease wait time based on endpoint being monitored.\n  await page.waitFor(15000);\n  // This will take a screenshot that will be included in test output artifacts.\n  await synthetics.takeScreenshot('loaded', 'loaded');\n  const 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```\n\n> **Note:** The function **must** be called `handler`.\n\nThe canary will automatically produce a CloudWatch Dashboard:\n\n![UI Screenshot](images/ui-screenshot.png)\n\nThe 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.\n\nTo learn more about Synthetics capabilities, check out the [docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html).\n\n### Canary Schedule\n\nYou can specify the schedule on which a canary runs by providing a\n[`Schedule`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-synthetics.Schedule.html)\nobject to the `schedule` property.\n\nConfigure a run rate of up to 60 minutes with `Schedule.rate`:\n\n```python\nschedule = synthetics.Schedule.rate(Duration.minutes(5))\n```\n\nYou can also specify a [cron expression](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_cron.html) with `Schedule.cron`:\n\n```python\nschedule = synthetics.Schedule.cron(\n    hour=\"0,8,16\"\n)\n```\n\nIf you want the canary to run just once upon deployment, you can use `Schedule.once()`.\n\n### Deleting underlying resources on canary deletion\n\nWhen you delete a lambda, the following underlying resources are isolated in your AWS account:\n\n* Lambda Function that runs your canary script\n* S3 Bucket for artifact storage\n* IAM roles and policies\n* Log Groups in CloudWatch Logs.\n\nTo learn more about these underlying resources, see\n[Synthetics Canaries Deletion](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/synthetics_canaries_deletion.html).\n\nIn the CDK, you can configure your canary to delete the underlying lambda function when the canary is deleted.\nThis can be provisioned by setting `cleanup: Cleanup.LAMBDA`. Note that this\nwill create a custom resource under the hood that takes care of the lambda deletion for you.\n\n```python\ncanary = synthetics.Canary(self, \"Canary\",\n    test=synthetics.Test.custom(\n        handler=\"index.handler\",\n        code=synthetics.Code.from_inline(\"/* Synthetics handler code\")\n    ),\n    cleanup=synthetics.Cleanup.LAMBDA,\n    runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0\n)\n```\n\n> Note: To properly clean up your canary on deletion, you still have to manually delete other resources\n> like S3 buckets and CloudWatch logs.\n\n### Configuring the Canary Script\n\nTo 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.\n\nThe `synthetics.Code` class exposes static methods to bundle your code artifacts:\n\n* `code.fromInline(code)` - specify an inline script.\n* `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.\n* `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.\n\nUsing the `Code` class static initializers:\n\n```python\n# To supply the code from a S3 bucket:\nimport aws_cdk.aws_s3 as s3\n# To supply the code inline:\nsynthetics.Canary(self, \"Inline Canary\",\n    test=synthetics.Test.custom(\n        code=synthetics.Code.from_inline(\"/* Synthetics handler code */\"),\n        handler=\"index.handler\"\n    ),\n    runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0\n)\n\n# To supply the code from your local filesystem:\nsynthetics.Canary(self, \"Asset Canary\",\n    test=synthetics.Test.custom(\n        code=synthetics.Code.from_asset(path.join(__dirname, \"canary\")),\n        handler=\"index.handler\"\n    ),\n    runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0\n)\nbucket = s3.Bucket(self, \"Code Bucket\")\nsynthetics.Canary(self, \"Bucket Canary\",\n    test=synthetics.Test.custom(\n        code=synthetics.Code.from_bucket(bucket, \"canary.zip\"),\n        handler=\"index.handler\"\n    ),\n    runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0\n)\n```\n\n> **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:\n>\n> ```plaintext\n> canary/\n> \u251c\u2500\u2500 nodejs/\n>    \u251c\u2500\u2500 node_modules/\n>         \u251c\u2500\u2500 <filename>.js\n> ```\n>\n> For Python scripts supplied via `code.fromAsset()` or `code.fromBucket()`, the canary resource requires the following folder structure:\n>\n> ```plaintext\n> canary/\n> \u251c\u2500\u2500 python/\n>     \u251c\u2500\u2500 <filename>.py\n> ```\n>\n> See Synthetics [docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary.html).\n\n### Running a canary on a VPC\n\nYou can specify what [VPC a canary executes in](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_VPC.html).\nThis 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.\nThis 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`.\n\n```python\nimport aws_cdk.aws_ec2 as ec2\n\n# vpc: ec2.IVpc\n\nsynthetics.Canary(self, \"Vpc Canary\",\n    test=synthetics.Test.custom(\n        code=synthetics.Code.from_asset(path.join(__dirname, \"canary\")),\n        handler=\"index.handler\"\n    ),\n    runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0,\n    vpc=vpc\n)\n```\n\n> **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).\n>\n> Ensure that the Canary is placed in a VPC either with internet connectivity or with VPC Endpoints for S3 and CloudWatch enabled and configured.\n>\n> See [Synthetics VPC docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_VPC.html).\n\n### Alarms\n\nYou can configure a CloudWatch Alarm on a canary metric. Metrics are emitted by CloudWatch automatically and can be accessed by the following APIs:\n\n* `canary.metricSuccessPercent()` - percentage of successful canary runs over a given time\n* `canary.metricDuration()` - how much time each canary run takes, in seconds.\n* `canary.metricFailed()` - number of failed canary runs over a given time\n\nCreate an alarm that tracks the canary metric:\n\n```python\nimport aws_cdk.aws_cloudwatch as cloudwatch\n\n# canary: synthetics.Canary\n\ncloudwatch.Alarm(self, \"CanaryAlarm\",\n    metric=canary.metric_success_percent(),\n    evaluation_periods=2,\n    threshold=90,\n    comparison_operator=cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD\n)\n```\n\n### Artifacts\n\nYou can pass an S3 bucket to store artifacts from canary runs. If you do not,\none will be auto-generated when the canary is created. You may add\n[lifecycle rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)\nto the auto-generated bucket.\n\n```python\ncanary = synthetics.Canary(self, \"MyCanary\",\n    schedule=synthetics.Schedule.rate(Duration.minutes(5)),\n    test=synthetics.Test.custom(\n        code=synthetics.Code.from_asset(path.join(__dirname, \"canary\")),\n        handler=\"index.handler\"\n    ),\n    runtime=synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0,\n    artifacts_bucket_lifecycle_rules=[LifecycleRule(\n        expiration=Duration.days(30)\n    )]\n)\n```\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "This module is deprecated. All constructs are now available under aws-cdk-lib/aws-synthetics",
    "version": "2.101.1a0",
    "project_urls": {
        "Homepage": "https://github.com/aws/aws-cdk",
        "Source": "https://github.com/aws/aws-cdk.git"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "01d81840d8be53c217189d7b56a4700cf6586dda253a0d5a6579a1e310a7ff30",
                "md5": "2b9fbf2229fd13d4caa3b215fee61d00",
                "sha256": "b29566f269c4949aea2f4b645236255152f79c87bb7c5c9fb5f1dde88fc73968"
            },
            "downloads": -1,
            "filename": "aws_cdk.aws_synthetics_alpha-2.101.1a0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2b9fbf2229fd13d4caa3b215fee61d00",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "~=3.7",
            "size": 160812,
            "upload_time": "2023-10-16T21:10:33",
            "upload_time_iso_8601": "2023-10-16T21:10:33.479984Z",
            "url": "https://files.pythonhosted.org/packages/01/d8/1840d8be53c217189d7b56a4700cf6586dda253a0d5a6579a1e310a7ff30/aws_cdk.aws_synthetics_alpha-2.101.1a0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "567d72d87d7bc10c1abfb9f95abe06d6381a0c34ad97694e24effb6ec87ff2ae",
                "md5": "1a6a50f44f7e9bad2d063a4d0f03e77b",
                "sha256": "6c023b0c45468c30684de48177e58a1df3e31b0f6c8c23084909b8862b0b0b97"
            },
            "downloads": -1,
            "filename": "aws-cdk.aws-synthetics-alpha-2.101.1a0.tar.gz",
            "has_sig": false,
            "md5_digest": "1a6a50f44f7e9bad2d063a4d0f03e77b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "~=3.7",
            "size": 161348,
            "upload_time": "2023-10-16T21:11:25",
            "upload_time_iso_8601": "2023-10-16T21:11:25.456963Z",
            "url": "https://files.pythonhosted.org/packages/56/7d/72d87d7bc10c1abfb9f95abe06d6381a0c34ad97694e24effb6ec87ff2ae/aws-cdk.aws-synthetics-alpha-2.101.1a0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-10-16 21:11:25",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "aws",
    "github_project": "aws-cdk",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "aws-cdk.aws-synthetics-alpha"
}
        
Elapsed time: 0.15849s