Initial commit

First attempt at using Pulumi for cloud infrastructure management.  To
start with, the project deploys an ECS cluster that runs two containers,
_blackbox-exporter_ and _vmagent_.  Together, these will monitor the
publicly-accessible web sites.
main
Dustin 2025-01-19 11:16:33 -06:00
commit 28a05a3164
23 changed files with 2619 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
*.egg-info/
.pulumi/backups/
__pycache__/
*.py[co]
*.bak*

View File

@ -0,0 +1,959 @@
{
"version": 3,
"checkpoint": {
"stack": "organization/dch/aws-prod",
"latest": {
"manifest": {
"time": "2025-01-19T11:16:00.999728742-06:00",
"magic": "7c53c69df7094e39d5562ed2abf1e12099c2c54a7b9b411faca1dcb7ec1fef8a",
"version": "v3.145.0"
},
"secrets_providers": {
"type": "passphrase",
"state": {
"salt": "v1:wIs83/E0Mwc=:v1:lhrRAZ9Ho6AD9yVX:Ikzlp62zFZ+jvwHVerWLNuQhfqIcZg=="
}
},
"resources": [
{
"urn": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2",
"custom": true,
"id": "1b844c5b-dee9-4ca1-9b76-69023765533d",
"type": "pulumi:providers:aws",
"inputs": {
"__internal": {},
"region": "us-east-2",
"skipCredentialsValidation": "false",
"skipRegionValidation": "true",
"version": "6.66.2"
},
"outputs": {
"region": "us-east-2",
"skipCredentialsValidation": "false",
"skipRegionValidation": "true",
"version": "6.66.2"
},
"created": "2025-01-19T17:15:31.200019676Z",
"modified": "2025-01-19T17:15:31.200019676Z"
},
{
"urn": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"custom": false,
"type": "pulumi:pulumi:Stack",
"created": "2025-01-19T17:15:31.201175036Z",
"modified": "2025-01-19T17:15:31.201175036Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi/runtime/stack.py#140"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:iam/serviceLinkedRole:ServiceLinkedRole::ecs",
"custom": true,
"id": "arn:aws:iam::566967686773:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
"type": "aws:iam/serviceLinkedRole:ServiceLinkedRole",
"inputs": {
"__defaults": [],
"awsServiceName": "ecs.amazonaws.com"
},
"outputs": {
"arn": "arn:aws:iam::566967686773:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
"awsServiceName": "ecs.amazonaws.com",
"createDate": "2025-01-19T17:15:33Z",
"customSuffix": "",
"description": "",
"id": "arn:aws:iam::566967686773:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
"name": "AWSServiceRoleForECS",
"path": "/aws-service-role/ecs.amazonaws.com/",
"uniqueId": "AROAYIAPIKZ2Q6DBBXYXO"
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"awsServiceName": []
},
"created": "2025-01-19T17:15:34.064087492Z",
"modified": "2025-01-19T17:15:34.064087492Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/iam/service_linked_role.py#335"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:iam/role:Role::ecs-ec2-instance-role",
"custom": true,
"id": "ecs-ec2-instance-role-5dff09b",
"type": "aws:iam/role:Role",
"inputs": {
"__defaults": [
"forceDetachPolicies",
"maxSessionDuration",
"name",
"path"
],
"assumeRolePolicy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"ec2.amazonaws.com\"\n }\n }\n ]\n}",
"forceDetachPolicies": false,
"managedPolicyArns": [
"arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"
],
"maxSessionDuration": 3600,
"name": "ecs-ec2-instance-role-5dff09b",
"path": "/"
},
"outputs": {
"arn": "arn:aws:iam::566967686773:role/ecs-ec2-instance-role-5dff09b",
"assumeRolePolicy": "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"ec2.amazonaws.com\"}}],\"Version\":\"2012-10-17\"}",
"createDate": "2025-01-19T17:15:33Z",
"description": "",
"forceDetachPolicies": false,
"id": "ecs-ec2-instance-role-5dff09b",
"inlinePolicies": [],
"managedPolicyArns": [
"arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"
],
"maxSessionDuration": 3600,
"name": "ecs-ec2-instance-role-5dff09b",
"namePrefix": "",
"path": "/",
"permissionsBoundary": "",
"uniqueId": "AROAYIAPIKZ2XCYHIOU4U"
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"assumeRolePolicy": [],
"managedPolicyArns": []
},
"created": "2025-01-19T17:15:34.339301047Z",
"modified": "2025-01-19T17:15:34.339301047Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/iam/role.py#875"
},
{
"urn": "urn:pulumi:aws-prod::dch::pulumi:providers:std::default_1_7_3",
"custom": true,
"id": "96aa9316-0253-4eeb-86ae-f44b8e1f3735",
"type": "pulumi:providers:std",
"inputs": {
"__internal": {},
"version": "1.7.3"
},
"outputs": {
"version": "1.7.3"
},
"created": "2025-01-19T17:15:34.621408378Z",
"modified": "2025-01-19T17:15:34.621408378Z"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:ecs/taskDefinition:TaskDefinition::blackbox-exporter",
"custom": true,
"id": "blackbox",
"type": "aws:ecs/taskDefinition:TaskDefinition",
"inputs": {
"__defaults": [
"skipDestroy",
"trackLatest"
],
"containerDefinitions": "[{\"name\": \"blackbox\", \"image\": \"quay.io/prometheus/blackbox-exporter\", \"essential\": true, \"user\": \"9115:9115\", \"readonlyRootFilesystem\": true, \"portMappings\": [{\"containerPort\": 9115, \"hostPort\": 9115}], \"logConfiguration\": {\"logDriver\": \"awslogs\", \"options\": {\"awslogs-group\": \"ecs-blackbox\", \"awslogs-stream-prefix\": \"blackbox-exporter\", \"awslogs-region\": \"us-east-2\"}}}]",
"family": "blackbox",
"memory": "64",
"networkMode": "host",
"skipDestroy": false,
"trackLatest": false
},
"outputs": {
"__meta": "{\"schema_version\":\"1\"}",
"arn": "arn:aws:ecs:us-east-2:566967686773:task-definition/blackbox:10",
"arnWithoutRevision": "arn:aws:ecs:us-east-2:566967686773:task-definition/blackbox",
"containerDefinitions": "[{\"environment\":[],\"essential\":true,\"image\":\"quay.io/prometheus/blackbox-exporter\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-region\":\"us-east-2\",\"awslogs-stream-prefix\":\"blackbox-exporter\",\"awslogs-group\":\"ecs-blackbox\"}},\"mountPoints\":[],\"name\":\"blackbox\",\"portMappings\":[{\"containerPort\":9115,\"hostPort\":9115,\"protocol\":\"tcp\"}],\"readonlyRootFilesystem\":true,\"systemControls\":[],\"user\":\"9115:9115\",\"volumesFrom\":[]}]",
"cpu": "",
"ephemeralStorage": null,
"executionRoleArn": "",
"family": "blackbox",
"id": "blackbox",
"inferenceAccelerators": [],
"ipcMode": "",
"memory": "64",
"networkMode": "host",
"pidMode": "",
"placementConstraints": [],
"proxyConfiguration": null,
"requiresCompatibilities": null,
"revision": 10,
"runtimePlatform": null,
"skipDestroy": false,
"taskRoleArn": "",
"trackLatest": false,
"volumes": []
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"containerDefinitions": [],
"family": [],
"memory": [],
"networkMode": []
},
"created": "2025-01-19T17:15:34.76199393Z",
"modified": "2025-01-19T17:15:34.76199393Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/ecs/task_definition.py#1240"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:cloudwatch/logGroup:LogGroup::blackbox",
"custom": true,
"id": "ecs-blackbox",
"type": "aws:cloudwatch/logGroup:LogGroup",
"inputs": {
"__defaults": [
"retentionInDays",
"skipDestroy"
],
"name": "ecs-blackbox",
"retentionInDays": 0,
"skipDestroy": false
},
"outputs": {
"arn": "arn:aws:logs:us-east-2:566967686773:log-group:ecs-blackbox",
"id": "ecs-blackbox",
"kmsKeyId": "",
"logGroupClass": "STANDARD",
"name": "ecs-blackbox",
"namePrefix": "",
"retentionInDays": 0,
"skipDestroy": false
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"name": []
},
"created": "2025-01-19T17:15:34.851712338Z",
"modified": "2025-01-19T17:15:34.851712338Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/cloudwatch/log_group.py#404"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket",
"custom": true,
"id": "964e1f9c-20250119171534638700000001",
"type": "aws:s3/bucketV2:BucketV2",
"inputs": {
"__defaults": [
"forceDestroy"
],
"bucketPrefix": "964e1f9c-",
"forceDestroy": false
},
"outputs": {
"__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":1200000000000,\"delete\":3600000000000,\"read\":1200000000000,\"update\":1200000000000}}",
"accelerationStatus": "",
"acl": null,
"arn": "arn:aws:s3:::964e1f9c-20250119171534638700000001",
"bucket": "964e1f9c-20250119171534638700000001",
"bucketDomainName": "964e1f9c-20250119171534638700000001.s3.amazonaws.com",
"bucketPrefix": "964e1f9c-",
"bucketRegionalDomainName": "964e1f9c-20250119171534638700000001.s3.us-east-2.amazonaws.com",
"corsRules": [],
"forceDestroy": false,
"grants": [
{
"id": "1914118b6f2b10bbf071d99814216df33dd32657754ff781464facf268624c21",
"permissions": [
"FULL_CONTROL"
],
"type": "CanonicalUser",
"uri": ""
}
],
"hostedZoneId": "Z2O1EMRO9K5GLX",
"id": "964e1f9c-20250119171534638700000001",
"lifecycleRules": [],
"loggings": [],
"objectLockConfiguration": null,
"objectLockEnabled": false,
"policy": "",
"region": "us-east-2",
"replicationConfigurations": [],
"requestPayer": "BucketOwner",
"serverSideEncryptionConfigurations": [
{
"rules": [
{
"applyServerSideEncryptionByDefaults": [
{
"kmsMasterKeyId": "",
"sseAlgorithm": "AES256"
}
],
"bucketKeyEnabled": false
}
]
}
],
"versionings": [
{
"enabled": false,
"mfaDelete": false
}
],
"websiteDomain": null,
"websiteEndpoint": null,
"websites": []
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"bucketPrefix": []
},
"created": "2025-01-19T17:15:35.761453802Z",
"modified": "2025-01-19T17:15:35.761453802Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/s3/bucket_v2.py#1065"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:ecs/taskDefinition:TaskDefinition::vmagent",
"custom": true,
"id": "vmagent",
"type": "aws:ecs/taskDefinition:TaskDefinition",
"inputs": {
"__defaults": [
"skipDestroy",
"trackLatest"
],
"containerDefinitions": "[{\"name\": \"init\", \"image\": \"docker.io/library/busybox\", \"command\": [\"chown\", \"-R\", \"-v\", \"8429:8429\", \"/data\"], \"essential\": false, \"readonlyRootFilesystem\": true, \"mountPoints\": [{\"sourceVolume\": \"vmagent-data\", \"containerPath\": \"/data\"}], \"logConfiguration\": {\"logDriver\": \"awslogs\", \"options\": {\"awslogs-group\": \"ecs-blackbox\", \"awslogs-stream-prefix\": \"vmagent\", \"awslogs-region\": \"us-east-2\"}}}, {\"name\": \"vmagent\", \"image\": \"docker.io/victoriametrics/vmagent\", \"command\": [\"-remoteWrite.url=https://metrics.pyrocufflink.blue/insert/1/prometheus/api/v1/write\", \"-remoteWrite.tmpDataPath=/data\", \"-promscrape.config=https://964e1f9c-20250119171534638700000001.s3.us-east-2.amazonaws.com/scrape.yml\"], \"essential\": true, \"user\": \"8429:8429\", \"readonlyRootFilesystem\": true, \"mountPoints\": [{\"sourceVolume\": \"vmagent-data\", \"containerPath\": \"/data\"}], \"logConfiguration\": {\"logDriver\": \"awslogs\", \"options\": {\"awslogs-group\": \"ecs-blackbox\", \"awslogs-stream-prefix\": \"vmagent\", \"awslogs-region\": \"us-east-2\"}}, \"dependsOn\": [{\"containerName\": \"init\", \"condition\": \"SUCCESS\"}]}]",
"family": "vmagent",
"memory": "128",
"networkMode": "host",
"skipDestroy": false,
"trackLatest": false,
"volumes": [
{
"__defaults": [],
"dockerVolumeConfiguration": {
"__defaults": [],
"autoprovision": true,
"scope": "shared"
},
"name": "vmagent-data"
}
]
},
"outputs": {
"__meta": "{\"schema_version\":\"1\"}",
"arn": "arn:aws:ecs:us-east-2:566967686773:task-definition/vmagent:19",
"arnWithoutRevision": "arn:aws:ecs:us-east-2:566967686773:task-definition/vmagent",
"containerDefinitions": "[{\"command\":[\"chown\",\"-R\",\"-v\",\"8429:8429\",\"/data\"],\"environment\":[],\"essential\":false,\"image\":\"docker.io/library/busybox\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-region\":\"us-east-2\",\"awslogs-stream-prefix\":\"vmagent\",\"awslogs-group\":\"ecs-blackbox\"}},\"mountPoints\":[{\"containerPath\":\"/data\",\"sourceVolume\":\"vmagent-data\"}],\"name\":\"init\",\"portMappings\":[],\"readonlyRootFilesystem\":true,\"systemControls\":[],\"volumesFrom\":[]},{\"command\":[\"-remoteWrite.url=https://metrics.pyrocufflink.blue/insert/1/prometheus/api/v1/write\",\"-remoteWrite.tmpDataPath=/data\",\"-promscrape.config=https://964e1f9c-20250119171534638700000001.s3.us-east-2.amazonaws.com/scrape.yml\"],\"dependsOn\":[{\"condition\":\"SUCCESS\",\"containerName\":\"init\"}],\"environment\":[],\"essential\":true,\"image\":\"docker.io/victoriametrics/vmagent\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-group\":\"ecs-blackbox\",\"awslogs-region\":\"us-east-2\",\"awslogs-stream-prefix\":\"vmagent\"}},\"mountPoints\":[{\"containerPath\":\"/data\",\"sourceVolume\":\"vmagent-data\"}],\"name\":\"vmagent\",\"portMappings\":[],\"readonlyRootFilesystem\":true,\"systemControls\":[],\"user\":\"8429:8429\",\"volumesFrom\":[]}]",
"cpu": "",
"ephemeralStorage": null,
"executionRoleArn": "",
"family": "vmagent",
"id": "vmagent",
"inferenceAccelerators": [],
"ipcMode": "",
"memory": "128",
"networkMode": "host",
"pidMode": "",
"placementConstraints": [],
"proxyConfiguration": null,
"requiresCompatibilities": null,
"revision": 19,
"runtimePlatform": null,
"skipDestroy": false,
"taskRoleArn": "",
"trackLatest": false,
"volumes": [
{
"configureAtLaunch": false,
"dockerVolumeConfiguration": {
"autoprovision": true,
"driver": "local",
"driverOpts": {},
"labels": {},
"scope": "shared"
},
"efsVolumeConfiguration": null,
"fsxWindowsFileServerVolumeConfiguration": null,
"hostPath": "",
"name": "vmagent-data"
}
]
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"containerDefinitions": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
],
"family": [],
"memory": [],
"networkMode": [],
"volumes": []
},
"created": "2025-01-19T17:15:35.901917093Z",
"modified": "2025-01-19T17:15:35.901917093Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/ecs/task_definition.py#1240"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:s3/bucketObject:BucketObject::scrape-yml",
"custom": true,
"id": "scrape.yml",
"type": "aws:s3/bucketObject:BucketObject",
"inputs": {
"__defaults": [
"acl",
"forceDestroy"
],
"acl": "private",
"bucket": "964e1f9c-20250119171534638700000001",
"forceDestroy": false,
"key": "scrape.yml",
"source": {
"4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
"hash": "34b7658086c3bc4f7cf9d3348929613a6c2c745717d9d980909c348121108f94",
"path": "blackbox/scrape.yml"
}
},
"outputs": {
"acl": "private",
"arn": "arn:aws:s3:::964e1f9c-20250119171534638700000001/scrape.yml",
"bucket": "964e1f9c-20250119171534638700000001",
"bucketKeyEnabled": false,
"cacheControl": "",
"content": null,
"contentBase64": null,
"contentDisposition": "",
"contentEncoding": "",
"contentLanguage": "",
"contentType": "application/octet-stream",
"etag": "7116e02aa24424125f80e1b31d097831",
"forceDestroy": false,
"id": "scrape.yml",
"key": "scrape.yml",
"kmsKeyId": null,
"metadata": null,
"objectLockLegalHoldStatus": "",
"objectLockMode": "",
"objectLockRetainUntilDate": "",
"serverSideEncryption": "AES256",
"source": {
"4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
"hash": "34b7658086c3bc4f7cf9d3348929613a6c2c745717d9d980909c348121108f94",
"path": "blackbox/scrape.yml"
},
"sourceHash": null,
"storageClass": "STANDARD",
"versionId": "",
"websiteRedirect": ""
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"bucket": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
],
"key": [],
"source": []
},
"created": "2025-01-19T17:15:35.927307449Z",
"modified": "2025-01-19T17:15:35.927307449Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/s3/bucket_object.py#1183"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:s3/bucketPolicy:BucketPolicy::config-bucket",
"custom": true,
"id": "964e1f9c-20250119171534638700000001",
"type": "aws:s3/bucketPolicy:BucketPolicy",
"inputs": {
"__defaults": [],
"bucket": "964e1f9c-20250119171534638700000001",
"policy": "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Principal\": \"*\", \"Action\": [\"s3:GetObject\", \"s3:ListBucket\"], \"Effect\": \"Allow\", \"Resource\": [\"arn:aws:s3:::964e1f9c-20250119171534638700000001\", \"arn:aws:s3:::964e1f9c-20250119171534638700000001/*\"], \"Condition\": {\"StringEquals\": {\"aws:sourceVpce\": \"vpce-06b8f872ece84f6cc\"}}}]}"
},
"outputs": {
"bucket": "964e1f9c-20250119171534638700000001",
"id": "964e1f9c-20250119171534638700000001",
"policy": "{\"Statement\":[{\"Action\":[\"s3:GetObject\",\"s3:ListBucket\"],\"Condition\":{\"StringEquals\":{\"aws:sourceVpce\":\"vpce-06b8f872ece84f6cc\"}},\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":[\"arn:aws:s3:::964e1f9c-20250119171534638700000001\",\"arn:aws:s3:::964e1f9c-20250119171534638700000001/*\"]}],\"Version\":\"2012-10-17\"}"
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"bucket": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
],
"policy": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
]
},
"created": "2025-01-19T17:15:36.085996879Z",
"modified": "2025-01-19T17:15:36.085996879Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/s3/bucket_policy.py#208"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:iam/instanceProfile:InstanceProfile::ecs-ec2-instance-profile",
"custom": true,
"id": "ecs-ec2-instance-profile-30b3240",
"type": "aws:iam/instanceProfile:InstanceProfile",
"inputs": {
"__defaults": [
"name",
"path"
],
"name": "ecs-ec2-instance-profile-30b3240",
"path": "/",
"role": "ecs-ec2-instance-role-5dff09b"
},
"outputs": {
"arn": "arn:aws:iam::566967686773:instance-profile/ecs-ec2-instance-profile-30b3240",
"createDate": "2025-01-19T17:15:34Z",
"id": "ecs-ec2-instance-profile-30b3240",
"name": "ecs-ec2-instance-profile-30b3240",
"namePrefix": "",
"path": "/",
"role": "ecs-ec2-instance-role-5dff09b",
"uniqueId": "AIPAYIAPIKZ24DKQ43O6E"
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:iam/role:Role::ecs-ec2-instance-role"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"role": [
"urn:pulumi:aws-prod::dch::aws:iam/role:Role::ecs-ec2-instance-role"
]
},
"created": "2025-01-19T17:15:40.108600183Z",
"modified": "2025-01-19T17:15:40.108600183Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/iam/instance_profile.py#370"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:ecs/cluster:Cluster::default",
"custom": true,
"id": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"type": "aws:ecs/cluster:Cluster",
"inputs": {
"__defaults": [],
"name": "default"
},
"outputs": {
"arn": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"configuration": null,
"id": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"name": "default",
"serviceConnectDefaults": null,
"settings": [
{
"name": "containerInsights",
"value": "disabled"
}
]
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"name": []
},
"created": "2025-01-19T17:15:44.329231643Z",
"modified": "2025-01-19T17:15:44.329231643Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/ecs/cluster.py#518"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:ecs/service:Service::blackbox-exporter",
"custom": true,
"id": "arn:aws:ecs:us-east-2:566967686773:service/default/blackbox-exporter",
"type": "aws:ecs/service:Service",
"inputs": {
"__defaults": [
"availabilityZoneRebalancing",
"deploymentMaximumPercent",
"deploymentMinimumHealthyPercent",
"enableEcsManagedTags",
"enableExecuteCommand",
"schedulingStrategy",
"waitForSteadyState"
],
"availabilityZoneRebalancing": "DISABLED",
"cluster": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"deploymentMaximumPercent": 200,
"deploymentMinimumHealthyPercent": 100,
"desiredCount": 1,
"enableEcsManagedTags": false,
"enableExecuteCommand": false,
"name": "blackbox-exporter",
"schedulingStrategy": "REPLICA",
"taskDefinition": "arn:aws:ecs:us-east-2:566967686773:task-definition/blackbox:10",
"waitForSteadyState": false
},
"outputs": {
"__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":1200000000000,\"delete\":1200000000000,\"update\":1200000000000},\"schema_version\":\"1\"}",
"alarms": null,
"availabilityZoneRebalancing": "DISABLED",
"capacityProviderStrategies": [],
"cluster": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"deploymentCircuitBreaker": {
"enable": false,
"rollback": false
},
"deploymentController": {
"type": "ECS"
},
"deploymentMaximumPercent": 200,
"deploymentMinimumHealthyPercent": 100,
"desiredCount": 1,
"enableEcsManagedTags": false,
"enableExecuteCommand": false,
"forceDelete": null,
"forceNewDeployment": null,
"healthCheckGracePeriodSeconds": 0,
"iamRole": null,
"id": "arn:aws:ecs:us-east-2:566967686773:service/default/blackbox-exporter",
"launchType": "EC2",
"loadBalancers": [],
"name": "blackbox-exporter",
"networkConfiguration": null,
"orderedPlacementStrategies": [],
"placementConstraints": [],
"platformVersion": "",
"propagateTags": "NONE",
"schedulingStrategy": "REPLICA",
"serviceConnectConfiguration": null,
"serviceRegistries": null,
"taskDefinition": "arn:aws:ecs:us-east-2:566967686773:task-definition/blackbox:10",
"triggers": {},
"volumeConfiguration": null,
"vpcLatticeConfigurations": [],
"waitForSteadyState": false
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:ecs/cluster:Cluster::default",
"urn:pulumi:aws-prod::dch::aws:ecs/taskDefinition:TaskDefinition::blackbox-exporter"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"cluster": [
"urn:pulumi:aws-prod::dch::aws:ecs/cluster:Cluster::default"
],
"desiredCount": [],
"name": [],
"taskDefinition": [
"urn:pulumi:aws-prod::dch::aws:ecs/taskDefinition:TaskDefinition::blackbox-exporter"
]
},
"created": "2025-01-19T17:15:44.682984184Z",
"modified": "2025-01-19T17:15:44.682984184Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/ecs/service.py#1409"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:ecs/service:Service::vmagent",
"custom": true,
"id": "arn:aws:ecs:us-east-2:566967686773:service/default/vmagent",
"type": "aws:ecs/service:Service",
"inputs": {
"__defaults": [
"availabilityZoneRebalancing",
"deploymentMaximumPercent",
"deploymentMinimumHealthyPercent",
"enableEcsManagedTags",
"enableExecuteCommand",
"waitForSteadyState"
],
"availabilityZoneRebalancing": "DISABLED",
"cluster": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"deploymentMaximumPercent": 200,
"deploymentMinimumHealthyPercent": 100,
"desiredCount": 1,
"enableEcsManagedTags": false,
"enableExecuteCommand": false,
"forceNewDeployment": true,
"name": "vmagent",
"schedulingStrategy": "DAEMON",
"taskDefinition": "arn:aws:ecs:us-east-2:566967686773:task-definition/vmagent:19",
"triggers": {
"config": "b1015f1e9fec36e05405032e6da76707885f37f5c8ebb780f709ee421d83aa1240fb76749e81cc8c26449dc87413fbda89e7847d2e392c37fa6f0ba934fa27cf"
},
"waitForSteadyState": false
},
"outputs": {
"__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":1200000000000,\"delete\":1200000000000,\"update\":1200000000000},\"schema_version\":\"1\"}",
"alarms": null,
"availabilityZoneRebalancing": "DISABLED",
"capacityProviderStrategies": [],
"cluster": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"deploymentCircuitBreaker": {
"enable": false,
"rollback": false
},
"deploymentController": {
"type": "ECS"
},
"deploymentMaximumPercent": 100,
"deploymentMinimumHealthyPercent": 0,
"desiredCount": 0,
"enableEcsManagedTags": false,
"enableExecuteCommand": false,
"forceDelete": null,
"forceNewDeployment": true,
"healthCheckGracePeriodSeconds": 0,
"iamRole": null,
"id": "arn:aws:ecs:us-east-2:566967686773:service/default/vmagent",
"launchType": "EC2",
"loadBalancers": [],
"name": "vmagent",
"networkConfiguration": null,
"orderedPlacementStrategies": [],
"placementConstraints": [],
"platformVersion": "",
"propagateTags": "NONE",
"schedulingStrategy": "DAEMON",
"serviceConnectConfiguration": null,
"serviceRegistries": null,
"taskDefinition": "arn:aws:ecs:us-east-2:566967686773:task-definition/vmagent:19",
"triggers": {
"config": "b1015f1e9fec36e05405032e6da76707885f37f5c8ebb780f709ee421d83aa1240fb76749e81cc8c26449dc87413fbda89e7847d2e392c37fa6f0ba934fa27cf"
},
"volumeConfiguration": null,
"vpcLatticeConfigurations": [],
"waitForSteadyState": false
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:ecs/cluster:Cluster::default",
"urn:pulumi:aws-prod::dch::aws:ecs/taskDefinition:TaskDefinition::vmagent",
"urn:pulumi:aws-prod::dch::aws:s3/bucketObject:BucketObject::scrape-yml"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"cluster": [
"urn:pulumi:aws-prod::dch::aws:ecs/cluster:Cluster::default"
],
"desiredCount": [],
"forceNewDeployment": [],
"name": [],
"schedulingStrategy": [],
"taskDefinition": [
"urn:pulumi:aws-prod::dch::aws:ecs/taskDefinition:TaskDefinition::vmagent"
],
"triggers": []
},
"created": "2025-01-19T17:15:44.777817662Z",
"modified": "2025-01-19T17:15:44.777817662Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/ecs/service.py#1409"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:ec2/launchTemplate:LaunchTemplate::ecs-default",
"custom": true,
"id": "lt-0d79ac75c26aae2e6",
"type": "aws:ec2/launchTemplate:LaunchTemplate",
"inputs": {
"__defaults": [
"name"
],
"iamInstanceProfile": {
"__defaults": [],
"arn": "arn:aws:iam::566967686773:instance-profile/ecs-ec2-instance-profile-30b3240"
},
"imageId": "ami-08764537c19a18266",
"instanceType": "t4g.nano",
"keyName": "dustin@rosalina",
"name": "ecs-default-7d65794"
},
"outputs": {
"arn": "arn:aws:ec2:us-east-2:566967686773:launch-template/lt-0d79ac75c26aae2e6",
"blockDeviceMappings": [],
"capacityReservationSpecification": null,
"cpuOptions": null,
"creditSpecification": null,
"defaultVersion": 1,
"description": "",
"disableApiStop": false,
"disableApiTermination": false,
"ebsOptimized": "",
"elasticGpuSpecifications": [],
"elasticInferenceAccelerator": null,
"enclaveOptions": null,
"hibernationOptions": null,
"iamInstanceProfile": {
"arn": "arn:aws:iam::566967686773:instance-profile/ecs-ec2-instance-profile-30b3240",
"name": ""
},
"id": "lt-0d79ac75c26aae2e6",
"imageId": "ami-08764537c19a18266",
"instanceInitiatedShutdownBehavior": "",
"instanceMarketOptions": null,
"instanceRequirements": null,
"instanceType": "t4g.nano",
"kernelId": "",
"keyName": "dustin@rosalina",
"latestVersion": 1,
"licenseSpecifications": [],
"maintenanceOptions": null,
"metadataOptions": null,
"monitoring": null,
"name": "ecs-default-7d65794",
"namePrefix": "",
"networkInterfaces": [],
"placement": null,
"privateDnsNameOptions": null,
"ramDiskId": "",
"securityGroupNames": null,
"tagSpecifications": [],
"updateDefaultVersion": null,
"userData": "",
"vpcSecurityGroupIds": null
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:iam/instanceProfile:InstanceProfile::ecs-ec2-instance-profile"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"iamInstanceProfile": [
"urn:pulumi:aws-prod::dch::aws:iam/instanceProfile:InstanceProfile::ecs-ec2-instance-profile"
],
"imageId": [],
"instanceType": [],
"keyName": []
},
"created": "2025-01-19T17:15:45.704214638Z",
"modified": "2025-01-19T17:15:45.704214638Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/ec2/launch_template.py#1439"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:autoscaling/group:Group::ecs-default",
"custom": true,
"id": "ecs-default-ab2a7bc",
"type": "aws:autoscaling/group:Group",
"inputs": {
"__defaults": [
"forceDelete",
"forceDeleteWarmPool",
"healthCheckGracePeriod",
"ignoreFailedScalingActivities",
"metricsGranularity",
"name",
"protectFromScaleIn",
"waitForCapacityTimeout"
],
"forceDelete": false,
"forceDeleteWarmPool": false,
"healthCheckGracePeriod": 300,
"ignoreFailedScalingActivities": false,
"instanceRefresh": {
"__defaults": [],
"strategy": "Rolling"
},
"launchTemplate": {
"__defaults": [],
"id": "lt-0d79ac75c26aae2e6",
"version": "1"
},
"maxSize": 1,
"metricsGranularity": "1Minute",
"minSize": 1,
"name": "ecs-default-ab2a7bc",
"protectFromScaleIn": false,
"tags": [
{
"__defaults": [],
"key": "AmazonECSManaged",
"propagateAtLaunch": true,
"value": "true"
}
],
"vpcZoneIdentifiers": [
"subnet-866df8ef"
],
"waitForCapacityTimeout": "10m"
},
"outputs": {
"__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"delete\":600000000000,\"update\":600000000000},\"schema_version\":\"1\"}",
"arn": "arn:aws:autoscaling:us-east-2:566967686773:autoScalingGroup:64fc27f8-8a05-4a2d-9aa1-39488d8890e1:autoScalingGroupName/ecs-default-ab2a7bc",
"availabilityZoneDistribution": {
"capacityDistributionStrategy": "balanced-best-effort"
},
"availabilityZones": [
"us-east-2a"
],
"capacityRebalance": false,
"context": "",
"defaultCooldown": 300,
"defaultInstanceWarmup": 0,
"desiredCapacity": 1,
"desiredCapacityType": "",
"enabledMetrics": null,
"forceDelete": false,
"forceDeleteWarmPool": false,
"healthCheckGracePeriod": 300,
"healthCheckType": "EC2",
"id": "ecs-default-ab2a7bc",
"ignoreFailedScailingActivities": false,
"ignoreFailedScalingActivities": false,
"initialLifecycleHooks": [],
"instanceMaintenancePolicy": null,
"instanceRefresh": {
"preferences": null,
"strategy": "Rolling",
"triggers": null
},
"launchConfiguration": "",
"launchTemplate": {
"id": "lt-0d79ac75c26aae2e6",
"name": "ecs-default-7d65794",
"version": "1"
},
"loadBalancers": [],
"maxInstanceLifetime": 0,
"maxSize": 1,
"metricsGranularity": "1Minute",
"minElbCapacity": null,
"minSize": 1,
"mixedInstancesPolicy": null,
"name": "ecs-default-ab2a7bc",
"namePrefix": "",
"placementGroup": "",
"predictedCapacity": 0,
"protectFromScaleIn": false,
"serviceLinkedRoleArn": "arn:aws:iam::566967686773:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling",
"suspendedProcesses": null,
"tags": [
{
"key": "AmazonECSManaged",
"propagateAtLaunch": true,
"value": "true"
}
],
"targetGroupArns": [],
"terminationPolicies": null,
"trafficSources": [],
"vpcZoneIdentifiers": [
"subnet-866df8ef"
],
"waitForCapacityTimeout": "10m",
"waitForElbCapacity": null,
"warmPool": null,
"warmPoolSize": 0
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:ec2/launchTemplate:LaunchTemplate::ecs-default"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"instanceRefresh": [],
"launchTemplate": [
"urn:pulumi:aws-prod::dch::aws:ec2/launchTemplate:LaunchTemplate::ecs-default"
],
"maxSize": [],
"minSize": [],
"tags": [],
"vpcZoneIdentifiers": []
},
"created": "2025-01-19T17:16:00.752562867Z",
"modified": "2025-01-19T17:16:00.752562867Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/autoscaling/group.py#2499"
}
],
"metadata": {}
}
}
}

View File

@ -0,0 +1 @@
{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"text/plain; charset=utf-8","user.metadata":null,"md5":"5BSgAlMtCMQviDBxFwSpUA=="}

View File

@ -0,0 +1,23 @@
{
"kind": "update",
"startTime": 1737306923,
"message": "",
"environment": {
"exec.kind": "cli",
"pulumi.arch": "amd64",
"pulumi.flag.stack": "set",
"pulumi.os": "linux",
"pulumi.version": "v3.145.0",
"stack.environments": "[]",
"updatePlan": "false"
},
"config": {
"aws:region": "us-east-2"
},
"version": 0,
"result": "succeeded",
"endTime": 1737306961,
"resourceChanges": {
"create": 15
}
}

View File

@ -0,0 +1 @@
{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"text/plain; charset=utf-8","user.metadata":null,"md5":"w2aPeANea125tAL7MxYpSQ=="}

1
.pulumi/meta.yaml Normal file
View File

@ -0,0 +1 @@
version: 1

1
.pulumi/meta.yaml.attrs Normal file
View File

@ -0,0 +1 @@
{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"text/plain; charset=utf-8","user.metadata":null,"md5":"EaRWdV65+nlqCnYlI4a4Wg=="}

View File

@ -0,0 +1,959 @@
{
"version": 3,
"checkpoint": {
"stack": "organization/dch/aws-prod",
"latest": {
"manifest": {
"time": "2025-01-19T11:16:00.999728742-06:00",
"magic": "7c53c69df7094e39d5562ed2abf1e12099c2c54a7b9b411faca1dcb7ec1fef8a",
"version": "v3.145.0"
},
"secrets_providers": {
"type": "passphrase",
"state": {
"salt": "v1:wIs83/E0Mwc=:v1:lhrRAZ9Ho6AD9yVX:Ikzlp62zFZ+jvwHVerWLNuQhfqIcZg=="
}
},
"resources": [
{
"urn": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2",
"custom": true,
"id": "1b844c5b-dee9-4ca1-9b76-69023765533d",
"type": "pulumi:providers:aws",
"inputs": {
"__internal": {},
"region": "us-east-2",
"skipCredentialsValidation": "false",
"skipRegionValidation": "true",
"version": "6.66.2"
},
"outputs": {
"region": "us-east-2",
"skipCredentialsValidation": "false",
"skipRegionValidation": "true",
"version": "6.66.2"
},
"created": "2025-01-19T17:15:31.200019676Z",
"modified": "2025-01-19T17:15:31.200019676Z"
},
{
"urn": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"custom": false,
"type": "pulumi:pulumi:Stack",
"created": "2025-01-19T17:15:31.201175036Z",
"modified": "2025-01-19T17:15:31.201175036Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi/runtime/stack.py#140"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:iam/serviceLinkedRole:ServiceLinkedRole::ecs",
"custom": true,
"id": "arn:aws:iam::566967686773:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
"type": "aws:iam/serviceLinkedRole:ServiceLinkedRole",
"inputs": {
"__defaults": [],
"awsServiceName": "ecs.amazonaws.com"
},
"outputs": {
"arn": "arn:aws:iam::566967686773:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
"awsServiceName": "ecs.amazonaws.com",
"createDate": "2025-01-19T17:15:33Z",
"customSuffix": "",
"description": "",
"id": "arn:aws:iam::566967686773:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
"name": "AWSServiceRoleForECS",
"path": "/aws-service-role/ecs.amazonaws.com/",
"uniqueId": "AROAYIAPIKZ2Q6DBBXYXO"
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"awsServiceName": []
},
"created": "2025-01-19T17:15:34.064087492Z",
"modified": "2025-01-19T17:15:34.064087492Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/iam/service_linked_role.py#335"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:iam/role:Role::ecs-ec2-instance-role",
"custom": true,
"id": "ecs-ec2-instance-role-5dff09b",
"type": "aws:iam/role:Role",
"inputs": {
"__defaults": [
"forceDetachPolicies",
"maxSessionDuration",
"name",
"path"
],
"assumeRolePolicy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"ec2.amazonaws.com\"\n }\n }\n ]\n}",
"forceDetachPolicies": false,
"managedPolicyArns": [
"arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"
],
"maxSessionDuration": 3600,
"name": "ecs-ec2-instance-role-5dff09b",
"path": "/"
},
"outputs": {
"arn": "arn:aws:iam::566967686773:role/ecs-ec2-instance-role-5dff09b",
"assumeRolePolicy": "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"ec2.amazonaws.com\"}}],\"Version\":\"2012-10-17\"}",
"createDate": "2025-01-19T17:15:33Z",
"description": "",
"forceDetachPolicies": false,
"id": "ecs-ec2-instance-role-5dff09b",
"inlinePolicies": [],
"managedPolicyArns": [
"arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"
],
"maxSessionDuration": 3600,
"name": "ecs-ec2-instance-role-5dff09b",
"namePrefix": "",
"path": "/",
"permissionsBoundary": "",
"uniqueId": "AROAYIAPIKZ2XCYHIOU4U"
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"assumeRolePolicy": [],
"managedPolicyArns": []
},
"created": "2025-01-19T17:15:34.339301047Z",
"modified": "2025-01-19T17:15:34.339301047Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/iam/role.py#875"
},
{
"urn": "urn:pulumi:aws-prod::dch::pulumi:providers:std::default_1_7_3",
"custom": true,
"id": "96aa9316-0253-4eeb-86ae-f44b8e1f3735",
"type": "pulumi:providers:std",
"inputs": {
"__internal": {},
"version": "1.7.3"
},
"outputs": {
"version": "1.7.3"
},
"created": "2025-01-19T17:15:34.621408378Z",
"modified": "2025-01-19T17:15:34.621408378Z"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:ecs/taskDefinition:TaskDefinition::blackbox-exporter",
"custom": true,
"id": "blackbox",
"type": "aws:ecs/taskDefinition:TaskDefinition",
"inputs": {
"__defaults": [
"skipDestroy",
"trackLatest"
],
"containerDefinitions": "[{\"name\": \"blackbox\", \"image\": \"quay.io/prometheus/blackbox-exporter\", \"essential\": true, \"user\": \"9115:9115\", \"readonlyRootFilesystem\": true, \"portMappings\": [{\"containerPort\": 9115, \"hostPort\": 9115}], \"logConfiguration\": {\"logDriver\": \"awslogs\", \"options\": {\"awslogs-group\": \"ecs-blackbox\", \"awslogs-stream-prefix\": \"blackbox-exporter\", \"awslogs-region\": \"us-east-2\"}}}]",
"family": "blackbox",
"memory": "64",
"networkMode": "host",
"skipDestroy": false,
"trackLatest": false
},
"outputs": {
"__meta": "{\"schema_version\":\"1\"}",
"arn": "arn:aws:ecs:us-east-2:566967686773:task-definition/blackbox:10",
"arnWithoutRevision": "arn:aws:ecs:us-east-2:566967686773:task-definition/blackbox",
"containerDefinitions": "[{\"environment\":[],\"essential\":true,\"image\":\"quay.io/prometheus/blackbox-exporter\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-region\":\"us-east-2\",\"awslogs-stream-prefix\":\"blackbox-exporter\",\"awslogs-group\":\"ecs-blackbox\"}},\"mountPoints\":[],\"name\":\"blackbox\",\"portMappings\":[{\"containerPort\":9115,\"hostPort\":9115,\"protocol\":\"tcp\"}],\"readonlyRootFilesystem\":true,\"systemControls\":[],\"user\":\"9115:9115\",\"volumesFrom\":[]}]",
"cpu": "",
"ephemeralStorage": null,
"executionRoleArn": "",
"family": "blackbox",
"id": "blackbox",
"inferenceAccelerators": [],
"ipcMode": "",
"memory": "64",
"networkMode": "host",
"pidMode": "",
"placementConstraints": [],
"proxyConfiguration": null,
"requiresCompatibilities": null,
"revision": 10,
"runtimePlatform": null,
"skipDestroy": false,
"taskRoleArn": "",
"trackLatest": false,
"volumes": []
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"containerDefinitions": [],
"family": [],
"memory": [],
"networkMode": []
},
"created": "2025-01-19T17:15:34.76199393Z",
"modified": "2025-01-19T17:15:34.76199393Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/ecs/task_definition.py#1240"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:cloudwatch/logGroup:LogGroup::blackbox",
"custom": true,
"id": "ecs-blackbox",
"type": "aws:cloudwatch/logGroup:LogGroup",
"inputs": {
"__defaults": [
"retentionInDays",
"skipDestroy"
],
"name": "ecs-blackbox",
"retentionInDays": 0,
"skipDestroy": false
},
"outputs": {
"arn": "arn:aws:logs:us-east-2:566967686773:log-group:ecs-blackbox",
"id": "ecs-blackbox",
"kmsKeyId": "",
"logGroupClass": "STANDARD",
"name": "ecs-blackbox",
"namePrefix": "",
"retentionInDays": 0,
"skipDestroy": false
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"name": []
},
"created": "2025-01-19T17:15:34.851712338Z",
"modified": "2025-01-19T17:15:34.851712338Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/cloudwatch/log_group.py#404"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket",
"custom": true,
"id": "964e1f9c-20250119171534638700000001",
"type": "aws:s3/bucketV2:BucketV2",
"inputs": {
"__defaults": [
"forceDestroy"
],
"bucketPrefix": "964e1f9c-",
"forceDestroy": false
},
"outputs": {
"__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":1200000000000,\"delete\":3600000000000,\"read\":1200000000000,\"update\":1200000000000}}",
"accelerationStatus": "",
"acl": null,
"arn": "arn:aws:s3:::964e1f9c-20250119171534638700000001",
"bucket": "964e1f9c-20250119171534638700000001",
"bucketDomainName": "964e1f9c-20250119171534638700000001.s3.amazonaws.com",
"bucketPrefix": "964e1f9c-",
"bucketRegionalDomainName": "964e1f9c-20250119171534638700000001.s3.us-east-2.amazonaws.com",
"corsRules": [],
"forceDestroy": false,
"grants": [
{
"id": "1914118b6f2b10bbf071d99814216df33dd32657754ff781464facf268624c21",
"permissions": [
"FULL_CONTROL"
],
"type": "CanonicalUser",
"uri": ""
}
],
"hostedZoneId": "Z2O1EMRO9K5GLX",
"id": "964e1f9c-20250119171534638700000001",
"lifecycleRules": [],
"loggings": [],
"objectLockConfiguration": null,
"objectLockEnabled": false,
"policy": "",
"region": "us-east-2",
"replicationConfigurations": [],
"requestPayer": "BucketOwner",
"serverSideEncryptionConfigurations": [
{
"rules": [
{
"applyServerSideEncryptionByDefaults": [
{
"kmsMasterKeyId": "",
"sseAlgorithm": "AES256"
}
],
"bucketKeyEnabled": false
}
]
}
],
"versionings": [
{
"enabled": false,
"mfaDelete": false
}
],
"websiteDomain": null,
"websiteEndpoint": null,
"websites": []
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"bucketPrefix": []
},
"created": "2025-01-19T17:15:35.761453802Z",
"modified": "2025-01-19T17:15:35.761453802Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/s3/bucket_v2.py#1065"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:ecs/taskDefinition:TaskDefinition::vmagent",
"custom": true,
"id": "vmagent",
"type": "aws:ecs/taskDefinition:TaskDefinition",
"inputs": {
"__defaults": [
"skipDestroy",
"trackLatest"
],
"containerDefinitions": "[{\"name\": \"init\", \"image\": \"docker.io/library/busybox\", \"command\": [\"chown\", \"-R\", \"-v\", \"8429:8429\", \"/data\"], \"essential\": false, \"readonlyRootFilesystem\": true, \"mountPoints\": [{\"sourceVolume\": \"vmagent-data\", \"containerPath\": \"/data\"}], \"logConfiguration\": {\"logDriver\": \"awslogs\", \"options\": {\"awslogs-group\": \"ecs-blackbox\", \"awslogs-stream-prefix\": \"vmagent\", \"awslogs-region\": \"us-east-2\"}}}, {\"name\": \"vmagent\", \"image\": \"docker.io/victoriametrics/vmagent\", \"command\": [\"-remoteWrite.url=https://metrics.pyrocufflink.blue/insert/1/prometheus/api/v1/write\", \"-remoteWrite.tmpDataPath=/data\", \"-promscrape.config=https://964e1f9c-20250119171534638700000001.s3.us-east-2.amazonaws.com/scrape.yml\"], \"essential\": true, \"user\": \"8429:8429\", \"readonlyRootFilesystem\": true, \"mountPoints\": [{\"sourceVolume\": \"vmagent-data\", \"containerPath\": \"/data\"}], \"logConfiguration\": {\"logDriver\": \"awslogs\", \"options\": {\"awslogs-group\": \"ecs-blackbox\", \"awslogs-stream-prefix\": \"vmagent\", \"awslogs-region\": \"us-east-2\"}}, \"dependsOn\": [{\"containerName\": \"init\", \"condition\": \"SUCCESS\"}]}]",
"family": "vmagent",
"memory": "128",
"networkMode": "host",
"skipDestroy": false,
"trackLatest": false,
"volumes": [
{
"__defaults": [],
"dockerVolumeConfiguration": {
"__defaults": [],
"autoprovision": true,
"scope": "shared"
},
"name": "vmagent-data"
}
]
},
"outputs": {
"__meta": "{\"schema_version\":\"1\"}",
"arn": "arn:aws:ecs:us-east-2:566967686773:task-definition/vmagent:19",
"arnWithoutRevision": "arn:aws:ecs:us-east-2:566967686773:task-definition/vmagent",
"containerDefinitions": "[{\"command\":[\"chown\",\"-R\",\"-v\",\"8429:8429\",\"/data\"],\"environment\":[],\"essential\":false,\"image\":\"docker.io/library/busybox\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-region\":\"us-east-2\",\"awslogs-stream-prefix\":\"vmagent\",\"awslogs-group\":\"ecs-blackbox\"}},\"mountPoints\":[{\"containerPath\":\"/data\",\"sourceVolume\":\"vmagent-data\"}],\"name\":\"init\",\"portMappings\":[],\"readonlyRootFilesystem\":true,\"systemControls\":[],\"volumesFrom\":[]},{\"command\":[\"-remoteWrite.url=https://metrics.pyrocufflink.blue/insert/1/prometheus/api/v1/write\",\"-remoteWrite.tmpDataPath=/data\",\"-promscrape.config=https://964e1f9c-20250119171534638700000001.s3.us-east-2.amazonaws.com/scrape.yml\"],\"dependsOn\":[{\"condition\":\"SUCCESS\",\"containerName\":\"init\"}],\"environment\":[],\"essential\":true,\"image\":\"docker.io/victoriametrics/vmagent\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-group\":\"ecs-blackbox\",\"awslogs-region\":\"us-east-2\",\"awslogs-stream-prefix\":\"vmagent\"}},\"mountPoints\":[{\"containerPath\":\"/data\",\"sourceVolume\":\"vmagent-data\"}],\"name\":\"vmagent\",\"portMappings\":[],\"readonlyRootFilesystem\":true,\"systemControls\":[],\"user\":\"8429:8429\",\"volumesFrom\":[]}]",
"cpu": "",
"ephemeralStorage": null,
"executionRoleArn": "",
"family": "vmagent",
"id": "vmagent",
"inferenceAccelerators": [],
"ipcMode": "",
"memory": "128",
"networkMode": "host",
"pidMode": "",
"placementConstraints": [],
"proxyConfiguration": null,
"requiresCompatibilities": null,
"revision": 19,
"runtimePlatform": null,
"skipDestroy": false,
"taskRoleArn": "",
"trackLatest": false,
"volumes": [
{
"configureAtLaunch": false,
"dockerVolumeConfiguration": {
"autoprovision": true,
"driver": "local",
"driverOpts": {},
"labels": {},
"scope": "shared"
},
"efsVolumeConfiguration": null,
"fsxWindowsFileServerVolumeConfiguration": null,
"hostPath": "",
"name": "vmagent-data"
}
]
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"containerDefinitions": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
],
"family": [],
"memory": [],
"networkMode": [],
"volumes": []
},
"created": "2025-01-19T17:15:35.901917093Z",
"modified": "2025-01-19T17:15:35.901917093Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/ecs/task_definition.py#1240"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:s3/bucketObject:BucketObject::scrape-yml",
"custom": true,
"id": "scrape.yml",
"type": "aws:s3/bucketObject:BucketObject",
"inputs": {
"__defaults": [
"acl",
"forceDestroy"
],
"acl": "private",
"bucket": "964e1f9c-20250119171534638700000001",
"forceDestroy": false,
"key": "scrape.yml",
"source": {
"4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
"hash": "34b7658086c3bc4f7cf9d3348929613a6c2c745717d9d980909c348121108f94",
"path": "blackbox/scrape.yml"
}
},
"outputs": {
"acl": "private",
"arn": "arn:aws:s3:::964e1f9c-20250119171534638700000001/scrape.yml",
"bucket": "964e1f9c-20250119171534638700000001",
"bucketKeyEnabled": false,
"cacheControl": "",
"content": null,
"contentBase64": null,
"contentDisposition": "",
"contentEncoding": "",
"contentLanguage": "",
"contentType": "application/octet-stream",
"etag": "7116e02aa24424125f80e1b31d097831",
"forceDestroy": false,
"id": "scrape.yml",
"key": "scrape.yml",
"kmsKeyId": null,
"metadata": null,
"objectLockLegalHoldStatus": "",
"objectLockMode": "",
"objectLockRetainUntilDate": "",
"serverSideEncryption": "AES256",
"source": {
"4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
"hash": "34b7658086c3bc4f7cf9d3348929613a6c2c745717d9d980909c348121108f94",
"path": "blackbox/scrape.yml"
},
"sourceHash": null,
"storageClass": "STANDARD",
"versionId": "",
"websiteRedirect": ""
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"bucket": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
],
"key": [],
"source": []
},
"created": "2025-01-19T17:15:35.927307449Z",
"modified": "2025-01-19T17:15:35.927307449Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/s3/bucket_object.py#1183"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:s3/bucketPolicy:BucketPolicy::config-bucket",
"custom": true,
"id": "964e1f9c-20250119171534638700000001",
"type": "aws:s3/bucketPolicy:BucketPolicy",
"inputs": {
"__defaults": [],
"bucket": "964e1f9c-20250119171534638700000001",
"policy": "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Principal\": \"*\", \"Action\": [\"s3:GetObject\", \"s3:ListBucket\"], \"Effect\": \"Allow\", \"Resource\": [\"arn:aws:s3:::964e1f9c-20250119171534638700000001\", \"arn:aws:s3:::964e1f9c-20250119171534638700000001/*\"], \"Condition\": {\"StringEquals\": {\"aws:sourceVpce\": \"vpce-06b8f872ece84f6cc\"}}}]}"
},
"outputs": {
"bucket": "964e1f9c-20250119171534638700000001",
"id": "964e1f9c-20250119171534638700000001",
"policy": "{\"Statement\":[{\"Action\":[\"s3:GetObject\",\"s3:ListBucket\"],\"Condition\":{\"StringEquals\":{\"aws:sourceVpce\":\"vpce-06b8f872ece84f6cc\"}},\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":[\"arn:aws:s3:::964e1f9c-20250119171534638700000001\",\"arn:aws:s3:::964e1f9c-20250119171534638700000001/*\"]}],\"Version\":\"2012-10-17\"}"
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"bucket": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
],
"policy": [
"urn:pulumi:aws-prod::dch::aws:s3/bucketV2:BucketV2::config-bucket"
]
},
"created": "2025-01-19T17:15:36.085996879Z",
"modified": "2025-01-19T17:15:36.085996879Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/s3/bucket_policy.py#208"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:iam/instanceProfile:InstanceProfile::ecs-ec2-instance-profile",
"custom": true,
"id": "ecs-ec2-instance-profile-30b3240",
"type": "aws:iam/instanceProfile:InstanceProfile",
"inputs": {
"__defaults": [
"name",
"path"
],
"name": "ecs-ec2-instance-profile-30b3240",
"path": "/",
"role": "ecs-ec2-instance-role-5dff09b"
},
"outputs": {
"arn": "arn:aws:iam::566967686773:instance-profile/ecs-ec2-instance-profile-30b3240",
"createDate": "2025-01-19T17:15:34Z",
"id": "ecs-ec2-instance-profile-30b3240",
"name": "ecs-ec2-instance-profile-30b3240",
"namePrefix": "",
"path": "/",
"role": "ecs-ec2-instance-role-5dff09b",
"uniqueId": "AIPAYIAPIKZ24DKQ43O6E"
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:iam/role:Role::ecs-ec2-instance-role"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"role": [
"urn:pulumi:aws-prod::dch::aws:iam/role:Role::ecs-ec2-instance-role"
]
},
"created": "2025-01-19T17:15:40.108600183Z",
"modified": "2025-01-19T17:15:40.108600183Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/iam/instance_profile.py#370"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:ecs/cluster:Cluster::default",
"custom": true,
"id": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"type": "aws:ecs/cluster:Cluster",
"inputs": {
"__defaults": [],
"name": "default"
},
"outputs": {
"arn": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"configuration": null,
"id": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"name": "default",
"serviceConnectDefaults": null,
"settings": [
{
"name": "containerInsights",
"value": "disabled"
}
]
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"name": []
},
"created": "2025-01-19T17:15:44.329231643Z",
"modified": "2025-01-19T17:15:44.329231643Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/ecs/cluster.py#518"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:ecs/service:Service::blackbox-exporter",
"custom": true,
"id": "arn:aws:ecs:us-east-2:566967686773:service/default/blackbox-exporter",
"type": "aws:ecs/service:Service",
"inputs": {
"__defaults": [
"availabilityZoneRebalancing",
"deploymentMaximumPercent",
"deploymentMinimumHealthyPercent",
"enableEcsManagedTags",
"enableExecuteCommand",
"schedulingStrategy",
"waitForSteadyState"
],
"availabilityZoneRebalancing": "DISABLED",
"cluster": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"deploymentMaximumPercent": 200,
"deploymentMinimumHealthyPercent": 100,
"desiredCount": 1,
"enableEcsManagedTags": false,
"enableExecuteCommand": false,
"name": "blackbox-exporter",
"schedulingStrategy": "REPLICA",
"taskDefinition": "arn:aws:ecs:us-east-2:566967686773:task-definition/blackbox:10",
"waitForSteadyState": false
},
"outputs": {
"__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":1200000000000,\"delete\":1200000000000,\"update\":1200000000000},\"schema_version\":\"1\"}",
"alarms": null,
"availabilityZoneRebalancing": "DISABLED",
"capacityProviderStrategies": [],
"cluster": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"deploymentCircuitBreaker": {
"enable": false,
"rollback": false
},
"deploymentController": {
"type": "ECS"
},
"deploymentMaximumPercent": 200,
"deploymentMinimumHealthyPercent": 100,
"desiredCount": 1,
"enableEcsManagedTags": false,
"enableExecuteCommand": false,
"forceDelete": null,
"forceNewDeployment": null,
"healthCheckGracePeriodSeconds": 0,
"iamRole": null,
"id": "arn:aws:ecs:us-east-2:566967686773:service/default/blackbox-exporter",
"launchType": "EC2",
"loadBalancers": [],
"name": "blackbox-exporter",
"networkConfiguration": null,
"orderedPlacementStrategies": [],
"placementConstraints": [],
"platformVersion": "",
"propagateTags": "NONE",
"schedulingStrategy": "REPLICA",
"serviceConnectConfiguration": null,
"serviceRegistries": null,
"taskDefinition": "arn:aws:ecs:us-east-2:566967686773:task-definition/blackbox:10",
"triggers": {},
"volumeConfiguration": null,
"vpcLatticeConfigurations": [],
"waitForSteadyState": false
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:ecs/cluster:Cluster::default",
"urn:pulumi:aws-prod::dch::aws:ecs/taskDefinition:TaskDefinition::blackbox-exporter"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"cluster": [
"urn:pulumi:aws-prod::dch::aws:ecs/cluster:Cluster::default"
],
"desiredCount": [],
"name": [],
"taskDefinition": [
"urn:pulumi:aws-prod::dch::aws:ecs/taskDefinition:TaskDefinition::blackbox-exporter"
]
},
"created": "2025-01-19T17:15:44.682984184Z",
"modified": "2025-01-19T17:15:44.682984184Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/ecs/service.py#1409"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:ecs/service:Service::vmagent",
"custom": true,
"id": "arn:aws:ecs:us-east-2:566967686773:service/default/vmagent",
"type": "aws:ecs/service:Service",
"inputs": {
"__defaults": [
"availabilityZoneRebalancing",
"deploymentMaximumPercent",
"deploymentMinimumHealthyPercent",
"enableEcsManagedTags",
"enableExecuteCommand",
"waitForSteadyState"
],
"availabilityZoneRebalancing": "DISABLED",
"cluster": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"deploymentMaximumPercent": 200,
"deploymentMinimumHealthyPercent": 100,
"desiredCount": 1,
"enableEcsManagedTags": false,
"enableExecuteCommand": false,
"forceNewDeployment": true,
"name": "vmagent",
"schedulingStrategy": "DAEMON",
"taskDefinition": "arn:aws:ecs:us-east-2:566967686773:task-definition/vmagent:19",
"triggers": {
"config": "b1015f1e9fec36e05405032e6da76707885f37f5c8ebb780f709ee421d83aa1240fb76749e81cc8c26449dc87413fbda89e7847d2e392c37fa6f0ba934fa27cf"
},
"waitForSteadyState": false
},
"outputs": {
"__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":1200000000000,\"delete\":1200000000000,\"update\":1200000000000},\"schema_version\":\"1\"}",
"alarms": null,
"availabilityZoneRebalancing": "DISABLED",
"capacityProviderStrategies": [],
"cluster": "arn:aws:ecs:us-east-2:566967686773:cluster/default",
"deploymentCircuitBreaker": {
"enable": false,
"rollback": false
},
"deploymentController": {
"type": "ECS"
},
"deploymentMaximumPercent": 100,
"deploymentMinimumHealthyPercent": 0,
"desiredCount": 0,
"enableEcsManagedTags": false,
"enableExecuteCommand": false,
"forceDelete": null,
"forceNewDeployment": true,
"healthCheckGracePeriodSeconds": 0,
"iamRole": null,
"id": "arn:aws:ecs:us-east-2:566967686773:service/default/vmagent",
"launchType": "EC2",
"loadBalancers": [],
"name": "vmagent",
"networkConfiguration": null,
"orderedPlacementStrategies": [],
"placementConstraints": [],
"platformVersion": "",
"propagateTags": "NONE",
"schedulingStrategy": "DAEMON",
"serviceConnectConfiguration": null,
"serviceRegistries": null,
"taskDefinition": "arn:aws:ecs:us-east-2:566967686773:task-definition/vmagent:19",
"triggers": {
"config": "b1015f1e9fec36e05405032e6da76707885f37f5c8ebb780f709ee421d83aa1240fb76749e81cc8c26449dc87413fbda89e7847d2e392c37fa6f0ba934fa27cf"
},
"volumeConfiguration": null,
"vpcLatticeConfigurations": [],
"waitForSteadyState": false
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:ecs/cluster:Cluster::default",
"urn:pulumi:aws-prod::dch::aws:ecs/taskDefinition:TaskDefinition::vmagent",
"urn:pulumi:aws-prod::dch::aws:s3/bucketObject:BucketObject::scrape-yml"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"cluster": [
"urn:pulumi:aws-prod::dch::aws:ecs/cluster:Cluster::default"
],
"desiredCount": [],
"forceNewDeployment": [],
"name": [],
"schedulingStrategy": [],
"taskDefinition": [
"urn:pulumi:aws-prod::dch::aws:ecs/taskDefinition:TaskDefinition::vmagent"
],
"triggers": []
},
"created": "2025-01-19T17:15:44.777817662Z",
"modified": "2025-01-19T17:15:44.777817662Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/ecs/service.py#1409"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:ec2/launchTemplate:LaunchTemplate::ecs-default",
"custom": true,
"id": "lt-0d79ac75c26aae2e6",
"type": "aws:ec2/launchTemplate:LaunchTemplate",
"inputs": {
"__defaults": [
"name"
],
"iamInstanceProfile": {
"__defaults": [],
"arn": "arn:aws:iam::566967686773:instance-profile/ecs-ec2-instance-profile-30b3240"
},
"imageId": "ami-08764537c19a18266",
"instanceType": "t4g.nano",
"keyName": "dustin@rosalina",
"name": "ecs-default-7d65794"
},
"outputs": {
"arn": "arn:aws:ec2:us-east-2:566967686773:launch-template/lt-0d79ac75c26aae2e6",
"blockDeviceMappings": [],
"capacityReservationSpecification": null,
"cpuOptions": null,
"creditSpecification": null,
"defaultVersion": 1,
"description": "",
"disableApiStop": false,
"disableApiTermination": false,
"ebsOptimized": "",
"elasticGpuSpecifications": [],
"elasticInferenceAccelerator": null,
"enclaveOptions": null,
"hibernationOptions": null,
"iamInstanceProfile": {
"arn": "arn:aws:iam::566967686773:instance-profile/ecs-ec2-instance-profile-30b3240",
"name": ""
},
"id": "lt-0d79ac75c26aae2e6",
"imageId": "ami-08764537c19a18266",
"instanceInitiatedShutdownBehavior": "",
"instanceMarketOptions": null,
"instanceRequirements": null,
"instanceType": "t4g.nano",
"kernelId": "",
"keyName": "dustin@rosalina",
"latestVersion": 1,
"licenseSpecifications": [],
"maintenanceOptions": null,
"metadataOptions": null,
"monitoring": null,
"name": "ecs-default-7d65794",
"namePrefix": "",
"networkInterfaces": [],
"placement": null,
"privateDnsNameOptions": null,
"ramDiskId": "",
"securityGroupNames": null,
"tagSpecifications": [],
"updateDefaultVersion": null,
"userData": "",
"vpcSecurityGroupIds": null
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:iam/instanceProfile:InstanceProfile::ecs-ec2-instance-profile"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"iamInstanceProfile": [
"urn:pulumi:aws-prod::dch::aws:iam/instanceProfile:InstanceProfile::ecs-ec2-instance-profile"
],
"imageId": [],
"instanceType": [],
"keyName": []
},
"created": "2025-01-19T17:15:45.704214638Z",
"modified": "2025-01-19T17:15:45.704214638Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/ec2/launch_template.py#1439"
},
{
"urn": "urn:pulumi:aws-prod::dch::aws:autoscaling/group:Group::ecs-default",
"custom": true,
"id": "ecs-default-ab2a7bc",
"type": "aws:autoscaling/group:Group",
"inputs": {
"__defaults": [
"forceDelete",
"forceDeleteWarmPool",
"healthCheckGracePeriod",
"ignoreFailedScalingActivities",
"metricsGranularity",
"name",
"protectFromScaleIn",
"waitForCapacityTimeout"
],
"forceDelete": false,
"forceDeleteWarmPool": false,
"healthCheckGracePeriod": 300,
"ignoreFailedScalingActivities": false,
"instanceRefresh": {
"__defaults": [],
"strategy": "Rolling"
},
"launchTemplate": {
"__defaults": [],
"id": "lt-0d79ac75c26aae2e6",
"version": "1"
},
"maxSize": 1,
"metricsGranularity": "1Minute",
"minSize": 1,
"name": "ecs-default-ab2a7bc",
"protectFromScaleIn": false,
"tags": [
{
"__defaults": [],
"key": "AmazonECSManaged",
"propagateAtLaunch": true,
"value": "true"
}
],
"vpcZoneIdentifiers": [
"subnet-866df8ef"
],
"waitForCapacityTimeout": "10m"
},
"outputs": {
"__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"delete\":600000000000,\"update\":600000000000},\"schema_version\":\"1\"}",
"arn": "arn:aws:autoscaling:us-east-2:566967686773:autoScalingGroup:64fc27f8-8a05-4a2d-9aa1-39488d8890e1:autoScalingGroupName/ecs-default-ab2a7bc",
"availabilityZoneDistribution": {
"capacityDistributionStrategy": "balanced-best-effort"
},
"availabilityZones": [
"us-east-2a"
],
"capacityRebalance": false,
"context": "",
"defaultCooldown": 300,
"defaultInstanceWarmup": 0,
"desiredCapacity": 1,
"desiredCapacityType": "",
"enabledMetrics": null,
"forceDelete": false,
"forceDeleteWarmPool": false,
"healthCheckGracePeriod": 300,
"healthCheckType": "EC2",
"id": "ecs-default-ab2a7bc",
"ignoreFailedScailingActivities": false,
"ignoreFailedScalingActivities": false,
"initialLifecycleHooks": [],
"instanceMaintenancePolicy": null,
"instanceRefresh": {
"preferences": null,
"strategy": "Rolling",
"triggers": null
},
"launchConfiguration": "",
"launchTemplate": {
"id": "lt-0d79ac75c26aae2e6",
"name": "ecs-default-7d65794",
"version": "1"
},
"loadBalancers": [],
"maxInstanceLifetime": 0,
"maxSize": 1,
"metricsGranularity": "1Minute",
"minElbCapacity": null,
"minSize": 1,
"mixedInstancesPolicy": null,
"name": "ecs-default-ab2a7bc",
"namePrefix": "",
"placementGroup": "",
"predictedCapacity": 0,
"protectFromScaleIn": false,
"serviceLinkedRoleArn": "arn:aws:iam::566967686773:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling",
"suspendedProcesses": null,
"tags": [
{
"key": "AmazonECSManaged",
"propagateAtLaunch": true,
"value": "true"
}
],
"targetGroupArns": [],
"terminationPolicies": null,
"trafficSources": [],
"vpcZoneIdentifiers": [
"subnet-866df8ef"
],
"waitForCapacityTimeout": "10m",
"waitForElbCapacity": null,
"warmPool": null,
"warmPoolSize": 0
},
"parent": "urn:pulumi:aws-prod::dch::pulumi:pulumi:Stack::dch-aws-prod",
"dependencies": [
"urn:pulumi:aws-prod::dch::aws:ec2/launchTemplate:LaunchTemplate::ecs-default"
],
"provider": "urn:pulumi:aws-prod::dch::pulumi:providers:aws::default_6_66_2::1b844c5b-dee9-4ca1-9b76-69023765533d",
"propertyDependencies": {
"instanceRefresh": [],
"launchTemplate": [
"urn:pulumi:aws-prod::dch::aws:ec2/launchTemplate:LaunchTemplate::ecs-default"
],
"maxSize": [],
"minSize": [],
"tags": [],
"vpcZoneIdentifiers": []
},
"created": "2025-01-19T17:16:00.752562867Z",
"modified": "2025-01-19T17:16:00.752562867Z",
"sourcePosition": "project:///.venv/lib64/python3.12/site-packages/pulumi_aws/autoscaling/group.py#2499"
}
],
"metadata": {}
}
}
}

View File

@ -0,0 +1 @@
{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"text/plain; charset=utf-8","user.metadata":null,"md5":"5BSgAlMtCMQviDBxFwSpUA=="}

3
Pulumi.aws-prod.yaml Normal file
View File

@ -0,0 +1,3 @@
encryptionsalt: v1:wIs83/E0Mwc=:v1:lhrRAZ9Ho6AD9yVX:Ikzlp62zFZ+jvwHVerWLNuQhfqIcZg==
config:
aws:region: us-east-2

8
Pulumi.yaml Normal file
View File

@ -0,0 +1,8 @@
name: dch
main: dch_cloud/__main__.py
runtime:
name: python
options:
toolchain: pip
typechecker: pyright
virtualenv: .venv

1
dch_cloud/__main__.py Normal file
View File

@ -0,0 +1 @@
import dch_cloud.blackbox

View File

@ -0,0 +1,137 @@
import hashlib
import json
from typing import Any
import pulumi
import pulumi_std as std
import pulumi_aws as aws
import yaml
from dch_cloud.common import aws_region
from dch_cloud.default_vpc import s3_endpoint
from dch_cloud.ecs import cluster
Json = dict[str, Any]
def patch_container_def(ctrdef: list[Json], **args: Any) -> list[Json]:
for ctr in ctrdef:
if logcfg := ctr.get('logConfiguration'):
if logcfg['logDriver'] == 'awslogs':
logcfg['options'].setdefault('awslogs-region', aws_region)
if ctr['name'] == 'vmagent':
ctr['command'].append(
f'-promscrape.config=https://{args["bucket"]}.s3.{aws_region}.amazonaws.com/scrape.yml',
)
return ctrdef
log_group = aws.cloudwatch.LogGroup(
'blackbox',
name='ecs-blackbox',
)
config_bucket = aws.s3.BucketV2(
'config-bucket',
bucket_prefix='964e1f9c-',
)
scrape_yml = pulumi.FileAsset('blackbox/scrape.yml')
scrape_yml_hash = hashlib.blake2b(
std.file(scrape_yml.path).result.encode('utf-8')
).hexdigest()
s3_scrape_yml = aws.s3.BucketObject(
'scrape-yml',
bucket=config_bucket.id,
key='scrape.yml',
source=scrape_yml,
)
exporter_def = yaml.safe_load(std.file('blackbox/blackbox.yaml').result)
exporter_task = aws.ecs.TaskDefinition(
'blackbox-exporter',
family='blackbox',
container_definitions=json.dumps(patch_container_def(exporter_def)),
memory='64',
network_mode='host',
)
vmagent_def = yaml.safe_load(std.file('blackbox/vmagent.yaml').result)
vmagent_task = aws.ecs.TaskDefinition(
'vmagent',
family='vmagent',
container_definitions=config_bucket.id.apply(
lambda b: json.dumps(patch_container_def(vmagent_def, bucket=b))
),
memory='128',
network_mode='host',
volumes=[
aws.ecs.TaskDefinitionVolumeArgs(
name='vmagent-data',
docker_volume_configuration=aws.ecs.TaskDefinitionVolumeDockerVolumeConfigurationArgs(
autoprovision=True,
scope='shared',
),
),
],
)
exporter_svc = aws.ecs.Service(
'blackbox-exporter',
name='blackbox-exporter',
cluster=cluster.id,
task_definition=exporter_task.arn,
desired_count=1,
)
vmagent_svc = aws.ecs.Service(
'vmagent',
name='vmagent',
cluster=cluster.id,
task_definition=vmagent_task.arn,
desired_count=1,
scheduling_strategy='DAEMON',
force_new_deployment=True,
triggers={
'config': scrape_yml_hash,
},
opts=pulumi.ResourceOptions(
depends_on=s3_scrape_yml,
),
)
config_bucket_policy = aws.s3.BucketPolicy(
'config-bucket',
bucket=config_bucket.id,
policy=config_bucket.arn.apply(
lambda a: json.dumps(
{
'Version': '2012-10-17',
'Statement': [
{
'Principal': '*',
'Action': [
's3:GetObject',
's3:ListBucket',
],
'Effect': 'Allow',
'Resource': [
a,
f'{a}/*',
],
'Condition': {
'StringEquals': {
'aws:sourceVpce': s3_endpoint.id,
}
},
}
],
}
)
),
)

View File

@ -0,0 +1,13 @@
- name: blackbox
image: quay.io/prometheus/blackbox-exporter
essential: true
user: '9115:9115'
readonlyRootFilesystem: true
portMappings:
- containerPort: 9115
hostPort: 9115
logConfiguration:
logDriver: awslogs
options:
awslogs-group: ecs-blackbox
awslogs-stream-prefix: blackbox-exporter

View File

@ -0,0 +1,38 @@
scrape_configs:
- job_name: cloud-vmagent
static_configs:
- targets:
- localhost:8429
- job_name: blackbox-metrics
static_configs:
- targets:
- localhost:9115
- job_name: websites
scrape_interval: 5m
metrics_path: /probe
params:
module:
- http_2xx
static_configs:
- targets:
- https://dustin.hatch.name/
- https://darkchestofwonders.us/
- http://nratonpass.com/
- http://pyrocufflink.net/
- http://ebonfire.com/
- http://chmod777.sh/
- https://nextcloud.pyrocufflink.net/index.php
- https://bitwarden.pyrocufflink.net/
- https://git.pyrocufflink.net/
- https://tabitha.biz/
- https://dustinandtabitha.com/
- https://hatchlearningcenter.org/
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115

View File

@ -0,0 +1,38 @@
- name: init
image: docker.io/library/busybox
command:
- chown
- '-R'
- '-v'
- '8429:8429'
- '/data'
essential: false
readonlyRootFilesystem: true
mountPoints:
- sourceVolume: vmagent-data
containerPath: /data
logConfiguration:
logDriver: awslogs
options:
awslogs-group: ecs-blackbox
awslogs-stream-prefix: vmagent
- name: vmagent
image: docker.io/victoriametrics/vmagent
command:
- '-remoteWrite.url=https://metrics.pyrocufflink.blue/insert/1/prometheus/api/v1/write'
- '-remoteWrite.tmpDataPath=/data'
essential: true
user: '8429:8429'
readonlyRootFilesystem: true
mountPoints:
- sourceVolume: vmagent-data
containerPath: /data
logConfiguration:
logDriver: awslogs
options:
awslogs-group: ecs-blackbox
awslogs-stream-prefix: vmagent
dependsOn:
- containerName: init
condition: SUCCESS

19
dch_cloud/common.py Normal file
View File

@ -0,0 +1,19 @@
import pulumi_aws as aws
instance_assume_role_policy = aws.iam.get_policy_document(
statements=[
{
'actions': ['sts:AssumeRole'],
'principals': [
{
'type': 'Service',
'identifiers': ['ec2.amazonaws.com'],
}
],
}
]
)
aws_region = aws.get_region().name
account_id = aws.get_caller_identity().account_id

3
dch_cloud/config.py Normal file
View File

@ -0,0 +1,3 @@
import pulumi
config = pulumi.Config()

20
dch_cloud/default_vpc.py Normal file
View File

@ -0,0 +1,20 @@
import pulumi_aws as aws
from .common import aws_region
default_vpc = aws.ec2.get_vpc(default=True)
subnets = aws.ec2.get_subnets(
filters=[
aws.ec2.GetSubnetsFilterArgs(
name="vpc-id",
values=[default_vpc.id],
)
]
)
s3_endpoint = aws.ec2.get_vpc_endpoint(
vpc_id=default_vpc.id,
service_name=f'com.amazonaws.{aws_region}.s3',
)

67
dch_cloud/ecs.py Normal file
View File

@ -0,0 +1,67 @@
import pulumi
import pulumi_aws as aws
from .common import instance_assume_role_policy
from .default_vpc import subnets
iam_role = aws.iam.Role(
'ecs-ec2-instance-role',
assume_role_policy=instance_assume_role_policy.json,
managed_policy_arns=[
aws.iam.get_policy(name='AmazonEC2ContainerServiceforEC2Role').arn,
],
)
instance_profile = aws.iam.InstanceProfile(
'ecs-ec2-instance-profile',
role=iam_role.name,
)
svc_linked_role = aws.iam.ServiceLinkedRole(
'ecs',
aws_service_name='ecs.amazonaws.com',
)
cluster = aws.ecs.Cluster(
'default',
name='default',
)
ami = aws.ec2.get_ami(
most_recent=True,
owners=['amazon'],
filters=[
aws.ec2.GetAmiFilterArgs(name='name', values=['al2023-ami-ecs-hvm-*']),
aws.ec2.GetAmiFilterArgs(name='architecture', values=['arm64']),
],
)
launch_tmpl = aws.ec2.LaunchTemplate(
'ecs-default',
image_id=ami.id,
instance_type='t4g.nano',
key_name='dustin@rosalina',
iam_instance_profile={'arn': instance_profile.arn},
)
asg = aws.autoscaling.Group(
'ecs-default',
max_size=1,
min_size=1,
vpc_zone_identifiers=[subnets.ids[0]],
launch_template=aws.autoscaling.GroupLaunchTemplateArgs(
id=launch_tmpl.id,
version=launch_tmpl.latest_version.apply(str),
),
instance_refresh=aws.autoscaling.GroupInstanceRefreshArgs(
strategy='Rolling',
),
tags=[
{
'key': 'AmazonECSManaged',
'value': 'true',
'propagate_at_launch': True,
}
],
)

33
dch_cloud/iam/roles.py Normal file
View File

@ -0,0 +1,33 @@
import json
import pulumi_aws as aws
from dch_cloud.config import config
admin_role_trust_policy = {
'Version': '2012-10-17',
'Statement': [
{
'Effect': 'Allow',
'Principal': {
'AWS': 'arn:aws:iam::566967686773:root',
},
'Action': 'sts:AssumeRole',
'Condition': {},
}
],
}
if source_ip := config.get('source_ip'):
admin_role_trust_policy['Statement'][0]['Condition'] = {
'IpAddress': {
'aws:SourceIp': f'{source_ip}/32',
}
}
admin_role = aws.iam.Role(
'admin_role',
name='admin',
assume_role_policy=json.dumps(admin_role_trust_policy),
)

37
pyproject.toml Normal file
View File

@ -0,0 +1,37 @@
[project]
name = "dch-cloud"
authors = [
{name = "Dustin C. Hatch", email = "dustin@hatch.name"},
]
description = "Dustin's cloud infrastructure as code"
requires-python = ">=3.12"
license = {text = "0BSD"}
classifiers = [
"License :: OSI Approved :: Zero-Clause BSD (0BSD)",
"Programming Language :: Python :: 3",
]
dependencies = [
"pulumi-aws>=6.66.2",
"pulumi>=3.145.0",
"pulumi-std>=1.7.3",
]
dynamic = ["version"]
[build-system]
requires = ["setuptools", "setuptools-scm"]
build-backend = "setuptools.build_meta"
[tool.setuptools_scm]
[tool.pyright]
venvPath = '.'
venv = '.venv'
[tool.black]
line-length = 79
skip-string-normalization = true
[dependency-groups]
dev = [
"pyright>=1.1.391",
]

251
uv.lock Normal file
View File

@ -0,0 +1,251 @@
version = 1
requires-python = ">=3.12"
[[package]]
name = "arpeggio"
version = "2.0.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/12/c4/516bb54456f85ad1947702ea4cef543a59de66d31a9887dbc3d9df36e3e1/Arpeggio-2.0.2.tar.gz", hash = "sha256:c790b2b06e226d2dd468e4fbfb5b7f506cec66416031fde1441cf1de2a0ba700", size = 766643 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/f7/4f/d28bf30a19d4649b40b501d531b44e73afada99044df100380fd9567e92f/Arpeggio-2.0.2-py2.py3-none-any.whl", hash = "sha256:f7c8ae4f4056a89e020c24c7202ac8df3e2bc84e416746f20b0da35bb1de0250", size = 55287 },
]
[[package]]
name = "attrs"
version = "24.3.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/48/c8/6260f8ccc11f0917360fc0da435c5c9c7504e3db174d5a12a1494887b045/attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff", size = 805984 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/89/aa/ab0f7891a01eeb2d2e338ae8fecbe57fcebea1a24dbb64d45801bfab481d/attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308", size = 63397 },
]
[[package]]
name = "dch-cloud"
version = "0.1.dev0+d20250116"
source = { editable = "." }
dependencies = [
{ name = "pulumi" },
{ name = "pulumi-aws" },
{ name = "pulumi-std" },
]
[package.dev-dependencies]
dev = [
{ name = "pyright" },
]
[package.metadata]
requires-dist = [
{ name = "pulumi", specifier = ">=3.145.0" },
{ name = "pulumi-aws", specifier = ">=6.66.2" },
{ name = "pulumi-std", specifier = ">=1.7.3" },
]
[package.metadata.requires-dev]
dev = [{ name = "pyright", specifier = ">=1.1.391" }]
[[package]]
name = "debugpy"
version = "1.8.11"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/bc/e7/666f4c9b0e24796af50aadc28d36d21c2e01e831a934535f956e09b3650c/debugpy-1.8.11.tar.gz", hash = "sha256:6ad2688b69235c43b020e04fecccdf6a96c8943ca9c2fb340b8adc103c655e57", size = 1640124 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/c6/ae/2cf26f3111e9d94384d9c01e9d6170188b0aeda15b60a4ac6457f7c8a26f/debugpy-1.8.11-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:84e511a7545d11683d32cdb8f809ef63fc17ea2a00455cc62d0a4dbb4ed1c308", size = 2498756 },
{ url = "https://files.pythonhosted.org/packages/b0/16/ec551789d547541a46831a19aa15c147741133da188e7e6acf77510545a7/debugpy-1.8.11-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce291a5aca4985d82875d6779f61375e959208cdf09fcec40001e65fb0a54768", size = 4219136 },
{ url = "https://files.pythonhosted.org/packages/72/6f/b2b3ce673c55f882d27a6eb04a5f0c68bcad6b742ac08a86d8392ae58030/debugpy-1.8.11-cp312-cp312-win32.whl", hash = "sha256:28e45b3f827d3bf2592f3cf7ae63282e859f3259db44ed2b129093ca0ac7940b", size = 5224440 },
{ url = "https://files.pythonhosted.org/packages/77/09/b1f05be802c1caef5b3efc042fc6a7cadd13d8118b072afd04a9b9e91e06/debugpy-1.8.11-cp312-cp312-win_amd64.whl", hash = "sha256:44b1b8e6253bceada11f714acf4309ffb98bfa9ac55e4fce14f9e5d4484287a1", size = 5264578 },
{ url = "https://files.pythonhosted.org/packages/2e/66/931dc2479aa8fbf362dc6dcee707d895a84b0b2d7b64020135f20b8db1ed/debugpy-1.8.11-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:8988f7163e4381b0da7696f37eec7aca19deb02e500245df68a7159739bbd0d3", size = 2483651 },
{ url = "https://files.pythonhosted.org/packages/10/07/6c171d0fe6b8d237e35598b742f20ba062511b3a4631938cc78eefbbf847/debugpy-1.8.11-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c1f6a173d1140e557347419767d2b14ac1c9cd847e0b4c5444c7f3144697e4e", size = 4213770 },
{ url = "https://files.pythonhosted.org/packages/89/f1/0711da6ac250d4fe3bf7b3e9b14b4a86e82a98b7825075c07e19bab8da3d/debugpy-1.8.11-cp313-cp313-win32.whl", hash = "sha256:bb3b15e25891f38da3ca0740271e63ab9db61f41d4d8541745cfc1824252cb28", size = 5223911 },
{ url = "https://files.pythonhosted.org/packages/56/98/5e27fa39050749ed460025bcd0034a0a5e78a580a14079b164cc3abdeb98/debugpy-1.8.11-cp313-cp313-win_amd64.whl", hash = "sha256:d8768edcbeb34da9e11bcb8b5c2e0958d25218df7a6e56adf415ef262cd7b6d1", size = 5264166 },
{ url = "https://files.pythonhosted.org/packages/77/0a/d29a5aacf47b4383ed569b8478c02d59ee3a01ad91224d2cff8562410e43/debugpy-1.8.11-py2.py3-none-any.whl", hash = "sha256:0e22f846f4211383e6a416d04b4c13ed174d24cc5d43f5fd52e7821d0ebc8920", size = 5226874 },
]
[[package]]
name = "dill"
version = "0.3.9"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/70/43/86fe3f9e130c4137b0f1b50784dd70a5087b911fe07fa81e53e0c4c47fea/dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c", size = 187000 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/46/d1/e73b6ad76f0b1fb7f23c35c6d95dbc506a9c8804f43dda8cb5b0fa6331fd/dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a", size = 119418 },
]
[[package]]
name = "grpcio"
version = "1.66.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/71/d1/49a96df4eb1d805cf546247df40636515416d2d5c66665e5129c8b4162a8/grpcio-1.66.2.tar.gz", hash = "sha256:563588c587b75c34b928bc428548e5b00ea38c46972181a4d8b75ba7e3f24231", size = 12489713 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/6b/5c/c4da36b7a77dbb15c4bc72228dff7161874752b2c6bddf7bb046d9da1b90/grpcio-1.66.2-cp312-cp312-linux_armv7l.whl", hash = "sha256:802d84fd3d50614170649853d121baaaa305de7b65b3e01759247e768d691ddf", size = 5002933 },
{ url = "https://files.pythonhosted.org/packages/a0/d5/b631445dff250a5301f51ff56c5fc917c7f955cd02fa55379f158a89abeb/grpcio-1.66.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:80fd702ba7e432994df208f27514280b4b5c6843e12a48759c9255679ad38db8", size = 10793953 },
{ url = "https://files.pythonhosted.org/packages/c8/1c/2179ac112152e92c02990f98183edf645df14aa3c38b39f1a3a60358b6c6/grpcio-1.66.2-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:12fda97ffae55e6526825daf25ad0fa37483685952b5d0f910d6405c87e3adb6", size = 5499791 },
{ url = "https://files.pythonhosted.org/packages/0b/53/8d7ab865fbd983309c8242930f00b28a01047f70c2b2e4c79a5c92a46a08/grpcio-1.66.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:950da58d7d80abd0ea68757769c9db0a95b31163e53e5bb60438d263f4bed7b7", size = 6109606 },
{ url = "https://files.pythonhosted.org/packages/86/e9/3dfb5a3ff540636d46b8b723345e923e8c553d9b3f6a8d1b09b0d915eb46/grpcio-1.66.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e636ce23273683b00410f1971d209bf3689238cf5538d960adc3cdfe80dd0dbd", size = 5762866 },
{ url = "https://files.pythonhosted.org/packages/f1/cb/c07493ad5dd73d51e4e15b0d483ff212dfec136ee1e4f3b49d115bdc7a13/grpcio-1.66.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a917d26e0fe980b0ac7bfcc1a3c4ad6a9a4612c911d33efb55ed7833c749b0ee", size = 6446819 },
{ url = "https://files.pythonhosted.org/packages/ff/5f/142e19db367a34ea0ee8a8451e43215d0a1a5dbffcfdcae8801f22903301/grpcio-1.66.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:49f0ca7ae850f59f828a723a9064cadbed90f1ece179d375966546499b8a2c9c", size = 6040273 },
{ url = "https://files.pythonhosted.org/packages/5c/3b/12fcd752c55002e4b0e0a7bd5faec101bc0a4e3890be3f95a43353142481/grpcio-1.66.2-cp312-cp312-win32.whl", hash = "sha256:31fd163105464797a72d901a06472860845ac157389e10f12631025b3e4d0453", size = 3537988 },
{ url = "https://files.pythonhosted.org/packages/f1/70/76bfea3faa862bfceccba255792e780691ff25b8227180759c9d38769379/grpcio-1.66.2-cp312-cp312-win_amd64.whl", hash = "sha256:ff1f7882e56c40b0d33c4922c15dfa30612f05fb785074a012f7cda74d1c3679", size = 4275553 },
{ url = "https://files.pythonhosted.org/packages/72/31/8708a8dfb3f1ac89926c27c5dd17412764157a2959dbc5a606eaf8ac71f6/grpcio-1.66.2-cp313-cp313-linux_armv7l.whl", hash = "sha256:3b00efc473b20d8bf83e0e1ae661b98951ca56111feb9b9611df8efc4fe5d55d", size = 5004245 },
{ url = "https://files.pythonhosted.org/packages/8b/37/0b57c3769efb3cc9ec97fcaa9f7243046660e7ed58c0faebc4ef315df92c/grpcio-1.66.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1caa38fb22a8578ab8393da99d4b8641e3a80abc8fd52646f1ecc92bcb8dee34", size = 10756749 },
{ url = "https://files.pythonhosted.org/packages/bf/5a/425e995724a19a1b110340ed653bc7c5de8019d9fc84b3798a0f79c3eb31/grpcio-1.66.2-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:c408f5ef75cfffa113cacd8b0c0e3611cbfd47701ca3cdc090594109b9fcbaed", size = 5499666 },
{ url = "https://files.pythonhosted.org/packages/2e/e4/86a5c5ec40a6b683671a1d044ebca433812d99da8fcfc2889e9c43cecbd4/grpcio-1.66.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c806852deaedee9ce8280fe98955c9103f62912a5b2d5ee7e3eaa284a6d8d8e7", size = 6109578 },
{ url = "https://files.pythonhosted.org/packages/2f/86/a86742f3deaa22385c3bff984c5947fc62d47d3fab26c508730037d027e5/grpcio-1.66.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f145cc21836c332c67baa6fc81099d1d27e266401565bf481948010d6ea32d46", size = 5763274 },
{ url = "https://files.pythonhosted.org/packages/c3/61/b9a2a4345dea0a354c4ed8ac7aacbdd0ff986acbc8f92680213cf3d2faa3/grpcio-1.66.2-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:73e3b425c1e155730273f73e419de3074aa5c5e936771ee0e4af0814631fb30a", size = 6450416 },
{ url = "https://files.pythonhosted.org/packages/50/b9/ad303ce75d8cd71d855a661519aa160ce42f27498f589f1ae6d9f8c5e8ac/grpcio-1.66.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:9c509a4f78114cbc5f0740eb3d7a74985fd2eff022971bc9bc31f8bc93e66a3b", size = 6040045 },
{ url = "https://files.pythonhosted.org/packages/ac/b3/8db1873e3240ef1672ba87b89e949ece367089e29e4d221377bfdd288bd3/grpcio-1.66.2-cp313-cp313-win32.whl", hash = "sha256:20657d6b8cfed7db5e11b62ff7dfe2e12064ea78e93f1434d61888834bc86d75", size = 3537126 },
{ url = "https://files.pythonhosted.org/packages/a2/df/133216989fe7e17caeafd7ff5b17cc82c4e722025d0b8d5d2290c11fe2e6/grpcio-1.66.2-cp313-cp313-win_amd64.whl", hash = "sha256:fb70487c95786e345af5e854ffec8cb8cc781bcc5df7930c4fbb7feaa72e1cdf", size = 4278018 },
]
[[package]]
name = "nodeenv"
version = "1.9.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 },
]
[[package]]
name = "parver"
version = "0.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "arpeggio" },
{ name = "attrs" },
]
sdist = { url = "https://files.pythonhosted.org/packages/cc/e5/1c774688a90f0b76e872e30f6f1ba3f5e14056cd0d96a684047d4a986226/parver-0.5.tar.gz", hash = "sha256:b9fde1e6bb9ce9f07e08e9c4bea8d8825c5e78e18a0052d02e02bf9517eb4777", size = 26908 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/0f/4c/f98024021bef4d44dce3613feebd702c7ad8883f777ff8488384c59e9774/parver-0.5-py3-none-any.whl", hash = "sha256:2281b187276c8e8e3c15634f62287b2fb6fe0efe3010f739a6bd1e45fa2bf2b2", size = 15172 },
]
[[package]]
name = "pip"
version = "24.3.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/f4/b1/b422acd212ad7eedddaf7981eee6e5de085154ff726459cf2da7c5a184c1/pip-24.3.1.tar.gz", hash = "sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99", size = 1931073 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ef/7d/500c9ad20238fcfcb4cb9243eede163594d7020ce87bd9610c9e02771876/pip-24.3.1-py3-none-any.whl", hash = "sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed", size = 1822182 },
]
[[package]]
name = "protobuf"
version = "4.25.5"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/67/dd/48d5fdb68ec74d70fabcc252e434492e56f70944d9f17b6a15e3746d2295/protobuf-4.25.5.tar.gz", hash = "sha256:7f8249476b4a9473645db7f8ab42b02fe1488cbe5fb72fddd445e0665afd8584", size = 380315 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/00/35/1b3c5a5e6107859c4ca902f4fbb762e48599b78129a05d20684fef4a4d04/protobuf-4.25.5-cp310-abi3-win32.whl", hash = "sha256:5e61fd921603f58d2f5acb2806a929b4675f8874ff5f330b7d6f7e2e784bbcd8", size = 392457 },
{ url = "https://files.pythonhosted.org/packages/a7/ad/bf3f358e90b7e70bf7fb520702cb15307ef268262292d3bdb16ad8ebc815/protobuf-4.25.5-cp310-abi3-win_amd64.whl", hash = "sha256:4be0571adcbe712b282a330c6e89eae24281344429ae95c6d85e79e84780f5ea", size = 413449 },
{ url = "https://files.pythonhosted.org/packages/51/49/d110f0a43beb365758a252203c43eaaad169fe7749da918869a8c991f726/protobuf-4.25.5-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:b2fde3d805354df675ea4c7c6338c1aecd254dfc9925e88c6d31a2bcb97eb173", size = 394248 },
{ url = "https://files.pythonhosted.org/packages/c6/ab/0f384ca0bc6054b1a7b6009000ab75d28a5506e4459378b81280ae7fd358/protobuf-4.25.5-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:919ad92d9b0310070f8356c24b855c98df2b8bd207ebc1c0c6fcc9ab1e007f3d", size = 293717 },
{ url = "https://files.pythonhosted.org/packages/05/a6/094a2640be576d760baa34c902dcb8199d89bce9ed7dd7a6af74dcbbd62d/protobuf-4.25.5-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fe14e16c22be926d3abfcb500e60cab068baf10b542b8c858fa27e098123e331", size = 294635 },
{ url = "https://files.pythonhosted.org/packages/33/90/f198a61df8381fb43ae0fe81b3d2718e8dcc51ae8502c7657ab9381fbc4f/protobuf-4.25.5-py3-none-any.whl", hash = "sha256:0aebecb809cae990f8129ada5ca273d9d670b76d9bfc9b1809f0a9c02b7dbf41", size = 156467 },
]
[[package]]
name = "pulumi"
version = "3.145.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "debugpy" },
{ name = "dill" },
{ name = "grpcio" },
{ name = "pip" },
{ name = "protobuf" },
{ name = "pyyaml" },
{ name = "semver" },
{ name = "six" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/45/2a/c2f4537811ef6851df16234965bd9ea6f0ec25bbc640ce343a2a83440ad3/pulumi-3.145.0-py3-none-any.whl", hash = "sha256:5ef1e73e8c07fd25fcfa2e5a68d03e84141d23e584153915c328ec1de6f14611", size = 297250 },
]
[[package]]
name = "pulumi-aws"
version = "6.66.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "parver" },
{ name = "pulumi" },
{ name = "semver" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e0/87/3b901397a3daa5422d1d900d4a6db6b7640563b50e79e7ad96d185805c50/pulumi_aws-6.66.2.tar.gz", hash = "sha256:a6b692f9f6074ad526244828d1ce6f22edf4680aaa5c7bd087ecfce2d0fbe05d", size = 7320945 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/8b/78/4b73a4c1d9d8ec1d014e301da9540a6dfb3ebda179889365273a91b06514/pulumi_aws-6.66.2-py3-none-any.whl", hash = "sha256:526c2f3c689f2e1850254275421f9fd8d2e11c2063117b6cfd6fb1a884ccd78b", size = 10010717 },
]
[[package]]
name = "pulumi-std"
version = "1.7.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "parver" },
{ name = "pulumi" },
{ name = "semver" },
]
sdist = { url = "https://files.pythonhosted.org/packages/00/a8/b6031fea63b4f67d9116e8c933cb0b025f272df2c09924ac37d5551a18fe/pulumi_std-1.7.3.tar.gz", hash = "sha256:0561a03ab1a630f765a77e6c9ac5a5b592d3e77bca245f6497dbfbf42fc9bc3c", size = 23336 }
[[package]]
name = "pyright"
version = "1.1.391"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "nodeenv" },
{ name = "typing-extensions" },
]
sdist = { url = "https://files.pythonhosted.org/packages/11/05/4ea52a8a45cc28897edb485b4102d37cbfd5fce8445d679cdeb62bfad221/pyright-1.1.391.tar.gz", hash = "sha256:66b2d42cdf5c3cbab05f2f4b76e8bec8aa78e679bfa0b6ad7b923d9e027cadb2", size = 21965 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ad/89/66f49552fbeb21944c8077d11834b2201514a56fd1b7747ffff9630f1bd9/pyright-1.1.391-py3-none-any.whl", hash = "sha256:54fa186f8b3e8a55a44ebfa842636635688670c6896dcf6cf4a7fc75062f4d15", size = 18579 },
]
[[package]]
name = "pyyaml"
version = "6.0.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 },
{ url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 },
{ url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 },
{ url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 },
{ url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 },
{ url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 },
{ url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 },
{ url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 },
{ url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 },
{ url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 },
{ url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 },
{ url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 },
{ url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 },
{ url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 },
{ url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 },
{ url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 },
{ url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 },
{ url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 },
]
[[package]]
name = "semver"
version = "2.13.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/31/a9/b61190916030ee9af83de342e101f192bbb436c59be20a4cb0cdb7256ece/semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f", size = 45816 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/70/b84f9944a03964a88031ef6ac219b6c91e8ba2f373362329d8770ef36f02/semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4", size = 12901 },
]
[[package]]
name = "six"
version = "1.17.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 },
]
[[package]]
name = "typing-extensions"
version = "4.12.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 },
]