### Full Stack Example Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt A comprehensive example demonstrating the deployment of a MongoDB Atlas project, cluster, database user, IP access list, and backup schedule using the Pulumi MongoDB Atlas provider. ```APIDOC ## Full Stack Example (TypeScript) A complete example deploying a project, cluster, database user, IP access list entry, and backup schedule together. ```typescript import * as pulumi from "@pulumi/pulumi"; import * as mongodbatlas from "@pulumi/mongodbatlas"; const config = new pulumi.Config(); const orgId = config.requireSecret("orgId"); // 1. Create project const project = new mongodbatlas.Project("app-project", { name: "my-application", orgId: orgId, isPerformanceAdvisorEnabled: true, isDataExplorerEnabled: true, }); // 2. Allow application subnet const ipAccess = new mongodbatlas.ProjectIpAccessList("app-access", { projectId: project.id, cidrBlock: "10.0.0.0/16", comment: "App VPC subnet", }); // 3. Create cluster const cluster = new mongodbatlas.AdvancedCluster("app-cluster", { projectId: project.id, name: "app-cluster", clusterType: "REPLICASET", backupEnabled: true, replicationSpecs: [ { regionConfigs: [ { providerName: "AWS", regionName: "US_EAST_1", priority: 7, electableSpecs: { instanceSize: "M10", nodeCount: 3 }, }, ], }, ], }, { dependsOn: [ipAccess] }); // 4. Create application database user const appUser = new mongodbatlas.DatabaseUser("app-user", { projectId: project.id, username: "app-service", password: config.requireSecret("dbPassword"), authDatabaseName: "admin", roles: [ { roleName: "readWrite", databaseName: "application", }, ], scopes: [ { name: cluster.name, type: "CLUSTER", }, ], }); // 5. Configure backup schedule const backup = new mongodbatlas.CloudBackupSchedule("backup", { projectId: project.id, clusterName: cluster.name, referenceHourOfDay: 3, referenceMinuteOfHour: 0, restoreWindowDays: 7, policyItemDaily: { frequencyInterval: 1, retentionUnit: "days", retentionValue: 7 }, policyItemWeekly: { frequencyInterval: 6, retentionUnit: "weeks", retentionValue: 4 }, }); export const projectId = project.id; export const connectionString = cluster.connectionStrings.apply(cs => cs[0].standardSrv); export const clusterState = cluster.stateName; ``` ``` -------------------------------- ### Install Pulumi MongoDB Atlas Provider Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Install the provider package for your chosen language. ```bash # Node.js / TypeScript npm install @pulumi/mongodbatlas # Python pip install pulumi-mongodbatlas # Go go get github.com/pulumi/pulumi-mongodbatlas/sdk/v4 # .NET dotnet add package Pulumi.Mongodbatlas ``` -------------------------------- ### Create MongoDB Atlas Project and Cluster (C#) Source: https://github.com/pulumi/pulumi-mongodbatlas/blob/master/docs/_index.md Example of creating a MongoDB Atlas project and an advanced cluster using the Pulumi C# SDK. Requires the project ID to be available. ```csharp using System.Collections.Generic; using System.Linq; using Pulumi; using Mongodbatlas = Pulumi.Mongodbatlas; return await Deployment.RunAsync(() => { // Create a project var @this = new Mongodbatlas.Project("this", new() { Name = "my-project", OrgId = orgId, }); // Create a cluster var thisAdvancedCluster = new Mongodbatlas.AdvancedCluster("this", new() { ProjectId = @this.Id, Name = "my-cluster", ClusterType = "REPLICASET", ReplicationSpecs = new[] { new Mongodbatlas.Inputs.AdvancedClusterReplicationSpecArgs { RegionConfigs = new[] { new Mongodbatlas.Inputs.AdvancedClusterReplicationSpecRegionConfigArgs { RegionName = "US_EAST_1", Priority = 7, ProviderName = "AWS", ElectableSpecs = new Mongodbatlas.Inputs.AdvancedClusterReplicationSpecRegionConfigElectableSpecsArgs { InstanceSize = "M10", NodeCount = 3, }, }, }, }, }, }); }); ``` -------------------------------- ### Create MongoDB Atlas Project and Cluster (Python) Source: https://github.com/pulumi/pulumi-mongodbatlas/blob/master/docs/_index.md Example of creating a MongoDB Atlas project and an advanced cluster using the Pulumi Python SDK. Requires the project ID to be available. ```python import pulumi import pulumi_mongodbatlas as mongodbatlas # Create a project this = mongodbatlas.Project("this", name="my-project", org_id=org_id) # Create a cluster this_advanced_cluster = mongodbatlas.AdvancedCluster("this", project_id=this.id, name="my-cluster", cluster_type="REPLICASET", replication_specs=[{ "region_configs": [{ "region_name": "US_EAST_1", "priority": 7, "provider_name": "AWS", "electable_specs": { "instance_size": "M10", "node_count": 3, }, }], }]) ``` -------------------------------- ### Full Stack MongoDB Atlas Deployment (TypeScript) Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt A complete example deploying a project, cluster, database user, IP access list entry, and backup schedule together. Ensure you have configured your Pulumi secrets for `orgId` and `dbPassword`. ```typescript import * as pulumi from "@pulumi/pulumi"; import * as mongodbatlas from "@pulumi/mongodbatlas"; const config = new pulumi.Config(); const orgId = config.requireSecret("orgId"); // 1. Create project const project = new mongodbatlas.Project("app-project", { name: "my-application", orgId: orgId, isPerformanceAdvisorEnabled: true, isDataExplorerEnabled: true, }); // 2. Allow application subnet const ipAccess = new mongodbatlas.ProjectIpAccessList("app-access", { projectId: project.id, cidrBlock: "10.0.0.0/16", comment: "App VPC subnet", }); // 3. Create cluster const cluster = new mongodbatlas.AdvancedCluster("app-cluster", { projectId: project.id, name: "app-cluster", clusterType: "REPLICASET", backupEnabled: true, replicationSpecs: [{ regionConfigs: [{ providerName: "AWS", regionName: "US_EAST_1", priority: 7, electableSpecs: { instanceSize: "M10", nodeCount: 3 }, }], }], }, { dependsOn: [ipAccess] }); // 4. Create application database user const appUser = new mongodbatlas.DatabaseUser("app-user", { projectId: project.id, username: "app-service", password: config.requireSecret("dbPassword"), authDatabaseName: "admin", roles: [{ roleName: "readWrite", databaseName: "application", }], scopes: [{ name: cluster.name, type: "CLUSTER", }], }); // 5. Configure backup schedule const backup = new mongodbatlas.CloudBackupSchedule("backup", { projectId: project.id, clusterName: cluster.name, referenceHourOfDay: 3, referenceMinuteOfHour: 0, restoreWindowDays: 7, policyItemDaily: { frequencyInterval: 1, retentionUnit: "days", retentionValue: 7 }, policyItemWeekly: { frequencyInterval: 6, retentionUnit: "weeks", retentionValue: 4 }, }); export const projectId = project.id; export const connectionString = cluster.connectionStrings.apply(cs => cs[0].standardSrv); export const clusterState = cluster.stateName; ``` -------------------------------- ### Create MongoDB Atlas Project and Cluster (TypeScript) Source: https://github.com/pulumi/pulumi-mongodbatlas/blob/master/docs/_index.md Example of creating a MongoDB Atlas project and an advanced cluster using the Pulumi TypeScript SDK. Requires the project ID to be available. ```typescript import * as pulumi from "@pulumi/pulumi"; import * as mongodbatlas from "@pulumi/mongodbatlas"; // Create a project const _this = new mongodbatlas.Project("this", { name: "my-project", orgId: orgId, }); // Create a cluster const thisAdvancedCluster = new mongodbatlas.AdvancedCluster("this", { projectId: _this.id, name: "my-cluster", clusterType: "REPLICASET", replicationSpecs: [{ regionConfigs: [{ regionName: "US_EAST_1", priority: 7, providerName: "AWS", electableSpecs: { instanceSize: "M10", nodeCount: 3, }, }], }], }); ``` -------------------------------- ### Create Database User with Roles and Scopes (Go) Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt This Go snippet shows how to create a database user with specific roles and scopes. It includes setting the username, password, authentication database, roles (readWrite, readAnyDatabase), and cluster scope. ```go package main import ( "github.com/pulumi/pulumi-mongodbatlas/sdk/v4/go/mongodbatlas" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) func main() { pulumi.Run(func(ctx *pulumi.Context) error { _, err := mongodbatlas.NewDatabaseUser(ctx, "app-user", &mongodbatlas.DatabaseUserArgs{ ProjectId: pulumi.String(""), Username: pulumi.String("app-service"), Password: pulumi.String("s3cr3t-password"), // remove after creation if managed externally AuthDatabaseName: pulumi.String("admin"), Roles: mongodbatlas.DatabaseUserRoleArray{ &mongodbatlas.DatabaseUserRoleArgs{ RoleName: pulumi.String("readWrite"), DatabaseName: pulumi.String("production"), }, &mongodbatlas.DatabaseUserRoleArgs{ RoleName: pulumi.String("readAnyDatabase"), DatabaseName: pulumi.String("admin"), }, }, Scopes: mongodbatlas.DatabaseUserScopeArray{ &mongodbatlas.DatabaseUserScopeArgs{ Name: pulumi.String("app-cluster"), Type: pulumi.String("CLUSTER"), }, }, Labels: mongodbatlas.DatabaseUserLabelArray{ &mongodbatlas.DatabaseUserLabelArgs{ Key: pulumi.String("env"), Value: pulumi.String("production"), }, }, }) return err }) } ``` -------------------------------- ### Configure Alert for Replication Oplog Window Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Sets up an alert configuration to notify when the replication oplog window is running out (less than 1 hour). This is crucial for maintaining replication health. ```typescript // Alert on replication oplog window running out const oplogAlert = new mongodbatlas.AlertConfiguration("oplog-alert", { projectId: projectId, eventType: "REPLICATION_OPLOG_WINDOW_RUNNING_OUT", enabled: true, thresholdConfig: { operator: "LESS_THAN", threshold: 1, units: "HOURS", }, notifications: [{ typeName: "PAGER_DUTY", serviceKey: "pagerduty-service-key", delayMin: 0, }], }); ``` -------------------------------- ### Configure Provider with Service Account Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Configure authentication using Service Account credentials in Pulumi.yaml. ```yaml # Pulumi.yaml — Service Account authentication (recommended) name: my-atlas-infra runtime: nodejs config: mongodbatlas:clientId: value: ${ATLAS_CLIENT_ID} mongodbatlas:clientSecret: value: ${ATLAS_CLIENT_SECRET} ``` -------------------------------- ### Create an Atlas Project (TypeScript) Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Create and manage an Atlas project, which serves as a container for Atlas resources. Configure feature flags and deployment limits. ```typescript import * as pulumi from "@pulumi/pulumi"; import * as mongodbatlas from "@pulumi/mongodbatlas"; const config = new pulumi.Config(); const orgId = config.requireSecret("orgId"); const project = new mongodbatlas.Project("my-project", { name: "production-app", orgId: orgId, isDataExplorerEnabled: true, isPerformanceAdvisorEnabled: true, isSchemaAdvisorEnabled: true, isRealtimePerformancePanelEnabled: true, isCollectDatabaseSpecificsStatisticsEnabled: true, limits: [ { name: "atlas.project.deployment.clusters", value: 10, }, { name: "atlas.project.deployment.nodesPerPrivateLinkRegion", value: 51, }, ], }); export const projectId = project.id; export const projectName = project.name; // Import an existing project: // pulumi import mongodbatlas:index/project:Project my_project 5d09d6a59ccf6445652a444a ``` -------------------------------- ### Create MongoDB Atlas Project and Cluster in Java Source: https://github.com/pulumi/pulumi-mongodbatlas/blob/master/docs/_index.md This Java code demonstrates how to provision a MongoDB Atlas project and an advanced cluster using the Pulumi SDK. It requires the mongodbatlas provider to be configured. ```java package generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.mongodbatlas.Project; import com.pulumi.mongodbatlas.ProjectArgs; import com.pulumi.mongodbatlas.AdvancedCluster; import com.pulumi.mongodbatlas.AdvancedClusterArgs; import com.pulumi.mongodbatlas.inputs.AdvancedClusterReplicationSpecArgs; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App { public static void main(String[] args) { Pulumi.run(App::stack); } public static void stack(Context ctx) { // Create a project var this_ = new Project("this", ProjectArgs.builder() .name("my-project") .orgId(orgId) .build()); // Create a cluster var thisAdvancedCluster = new AdvancedCluster("thisAdvancedCluster", AdvancedClusterArgs.builder() .projectId(this_.id()) .name("my-cluster") .clusterType("REPLICASET") .replicationSpecs(AdvancedClusterReplicationSpecArgs.builder() .regionConfigs(AdvancedClusterReplicationSpecRegionConfigArgs.builder() .regionName("US_EAST_1") .priority(7) .providerName("AWS") .electableSpecs(AdvancedClusterReplicationSpecRegionConfigElectableSpecsArgs.builder() .instanceSize("M10") .nodeCount(3) .build()) .build()) .build()) .build()); } } ``` -------------------------------- ### Create Flex Cluster (Python) Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt This snippet demonstrates how to create an Atlas Flex cluster, a cost-effective serverless-style tier. It specifies AWS as the backing provider and configures basic settings like termination protection and tags. ```python import pulumi import pulumi_mongodbatlas as mongodbatlas flex = mongodbatlas.FlexCluster("flex-cluster", project_id=project_id, name="my-flex-cluster", provider_settings={ "backing_provider_name": "AWS", "region_name": "US_EAST_1", }, termination_protection_enabled=False, tags={"env": "dev"}, ) pulumi.export("flex_connection_string", flex.connection_strings.standard_srv) ``` -------------------------------- ### Configure Provider with PAK (TypeScript) Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Configure Programmatic Access Key (PAK) authentication in TypeScript, using environment variables or explicit configuration. ```typescript // TypeScript — PAK authentication via environment variables // Set MONGODB_ATLAS_PUBLIC_KEY and MONGODB_ATLAS_PRIVATE_KEY, or configure explicitly: import * as pulumi from "@pulumi/pulumi"; import * as mongodbatlas from "@pulumi/mongodbatlas"; const provider = new mongodbatlas.Provider("atlas", { publicKey: process.env.MONGODB_ATLAS_PUBLIC_KEY, privateKey: process.env.MONGODB_ATLAS_PRIVATE_KEY, }); ``` -------------------------------- ### Create MongoDB Atlas Project and Cluster in Go Source: https://github.com/pulumi/pulumi-mongodbatlas/blob/master/docs/_index.md Use this Go code to create a new MongoDB Atlas project and an advanced cluster within that project. Ensure the mongodbatlas provider is configured with necessary credentials. ```go package main import ( "github.com/pulumi/pulumi-mongodbatlas/sdk/v4/go/mongodbatlas" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) func main() { pulumi.Run(func(ctx *pulumi.Context) error { // Create a project this, err := mongodbatlas.NewProject(ctx, "this", &mongodbatlas.ProjectArgs{ Name: pulumi.String("my-project"), OrgId: pulumi.Any(orgId), }) if err != nil { return err } // Create a cluster _, err = mongodbatlas.NewAdvancedCluster(ctx, "this", &mongodbatlas.AdvancedClusterArgs{ ProjectId: this.ID(), Name: pulumi.String("my-cluster"), ClusterType: pulumi.String("REPLICASET"), ReplicationSpecs: mongodbatlas.AdvancedClusterReplicationSpecArray{ &mongodbatlas.AdvancedClusterReplicationSpecArgs{ RegionConfigs: mongodbatlas.AdvancedClusterReplicationSpecRegionConfigArray{ &mongodbatlas.AdvancedClusterReplicationSpecRegionConfigArgs{ RegionName: pulumi.String("US_EAST_1"), Priority: pulumi.Int(7), ProviderName: pulumi.String("AWS"), ElectableSpecs: &mongodbatlas.AdvancedClusterReplicationSpecRegionConfigElectableSpecsArgs{ InstanceSize: pulumi.String("M10"), NodeCount: pulumi.Int(3), }, }, }, }, }, }) if err != nil { return err } return nil }) } ``` -------------------------------- ### Create MongoDB Atlas Federated Database Instance Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Creates an Atlas Data Federation instance that queries across multiple data stores. It maps unified virtual databases and collections. ```typescript import * as mongodbatlas from "@pulumi/mongodbatlas"; const fedDb = new mongodbatlas.FederatedDatabaseInstance("fed-db", { projectId: projectId, name: "analytics-federation", storageDatabases: [{ name: "AnalyticsDB", collections: [{ name: "AllOrders", dataSources: [ // Source from live Atlas cluster { collection: "orders", database: "production", storeName: "prod-cluster" }, // Source from S3 archive { path: "/orders/{year}/{month}/", storeName: "s3-archive" }, ], }], }], storageStores: [ { name: "prod-cluster", clusterName: "production", projectId: projectId, provider: "atlas", readPreference: { mode: "secondary" }, }, { name: "s3-archive", provider: "s3", bucket: "my-atlas-archive-bucket", region: "us-east-1", }, ], }); ``` -------------------------------- ### Configure Encryption at Rest with AWS KMS Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Sets up cloud provider access, authorizes it, and then configures encryption at rest for an Atlas project using AWS KMS. This must be configured before cluster creation. ```go package main import ( "github.com/pulumi/pulumi-mongodbatlas/sdk/v4/go/mongodbatlas" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) func main() { pulumi.Run(func(ctx *pulumi.Context) error { // Step 1: Set up cloud provider access role setup, err := mongodbatlas.NewCloudProviderAccessSetup(ctx, "aws-access", &mongodbatlas.CloudProviderAccessSetupArgs{ ProjectId: pulumi.String(""), ProviderName: pulumi.String("AWS"), }) if err != nil { return err } auth, err := mongodbatlas.NewCloudProviderAccessAuthorization(ctx, "aws-auth", &mongodbatlas.CloudProviderAccessAuthorizationArgs{ ProjectId: pulumi.String(""), RoleId: setup.RoleId, Aws: &mongodbatlas.CloudProviderAccessAuthorizationAwsArgs{ IamAssumedRoleArn: pulumi.String("arn:aws:iam::123456789012:role/AtlasEncryptionRole"), }, }) if err != nil { return err } // Step 2: Configure encryption at rest with AWS KMS enc, err := mongodbatlas.NewEncryptionAtRest(ctx, "encryption", &mongodbatlas.EncryptionAtRestArgs{ ProjectId: pulumi.String(""), AwsKmsConfig: &mongodbatlas.EncryptionAtRestAwsKmsConfigArgs{ Enabled: pulumi.Bool(true), CustomerMasterKeyId: pulumi.String("arn:aws:kms:us-east-1:123456789012:key/abc-123"), Region: pulumi.String("US_EAST_1"), RoleId: auth.RoleId, }, EnabledForSearchNodes: pulumi.Bool(true), }) if err != nil { return err } // Step 3: Create cluster using the project ID from the encryption resource _, err = mongodbatlas.NewAdvancedCluster(ctx, "encrypted-cluster", &mongodbatlas.AdvancedClusterArgs{ ProjectId: enc.ProjectId, // implicit dependency Name: pulumi.String("secure-cluster"), ClusterType: pulumi.String("REPLICASET"), BackupEnabled: pulumi.Bool(true), EncryptionAtRestProvider: pulumi.String("AWS"), ReplicationSpecs: mongodbatlas.AdvancedClusterReplicationSpecArray{ &mongodbatlas.AdvancedClusterReplicationSpecArgs{ RegionConfigs: mongodbatlas.AdvancedClusterReplicationSpecRegionConfigArray{ &mongodbatlas.AdvancedClusterReplicationSpecRegionConfigArgs{ Priority: pulumi.Int(7), ProviderName: pulumi.String("AWS"), RegionName: pulumi.String("US_EAST_1"), ElectableSpecs: &mongodbatlas.AdvancedClusterReplicationSpecRegionConfigElectableSpecsArgs{ InstanceSize: pulumi.String("M10"), NodeCount: pulumi.Int(3), }, }, }, }, }, }) return err }) } ``` -------------------------------- ### Federated Database Instance Creation Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Creates an Atlas Data Federation instance to query data across multiple data stores, including live Atlas clusters and S3 buckets, through a unified interface. ```APIDOC ## Federated Database Instance — `mongodbatlas.FederatedDatabaseInstance` Creates an Atlas Data Federation instance that queries across multiple data stores (Atlas clusters, S3 buckets, Atlas Data Lake) through a unified virtual database and collection mapping. ```typescript import * as mongodbatlas from "@pulumi/mongodbatlas"; const fedDb = new mongodbatlas.FederatedDatabaseInstance("fed-db", { projectId: projectId, name: "analytics-federation", storageDatabases: [{ name: "AnalyticsDB", collections: [{ name: "AllOrders", dataSources: [ // Source from live Atlas cluster { collection: "orders", database: "production", storeName: "prod-cluster" }, // Source from S3 archive { path: "/orders/{year}/{month}/", storeName: "s3-archive" }, ], }], }], storageStores: [ { name: "prod-cluster", clusterName: "production", projectId: projectId, provider: "atlas", readPreference: { mode: "secondary" }, }, { name: "s3-archive", provider: "s3", bucket: "my-atlas-archive-bucket", region: "us-east-1", }, ], }); ``` ``` -------------------------------- ### Online Archive Configuration Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Sets up an online archive for an Atlas cluster to store infrequently accessed data in a cloud object store based on specified criteria and schedules. ```APIDOC ## Online Archive — `mongodbatlas.OnlineArchive` Archives infrequently accessed data from an Atlas cluster to a cloud object store (Atlas Data Lake), with criteria based on date fields or custom query expressions and configurable archival schedules. ```python import pulumi_mongodbatlas as mongodbatlas archive = mongodbatlas.OnlineArchive("order-archive", project_id=project_id, cluster_name="production", coll_name="orders", db_name="ecommerce", criteria={ "type": "DATE", "date_field": "createdAt", "expire_after_days": 90, }, partition_fields=[ {"field_name": "createdAt", "order": 0}, {"field_name": "customerId", "order": 1}, ], schedule={ "type": "DAILY", "start_hour": 1, "start_minute": 0, "end_hour": 4, "end_minute": 0, }, ) ``` ``` -------------------------------- ### Create Single-Region Replica Set Cluster with Auto-Scaling (TypeScript) Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Use this snippet to create a single-region replica set cluster with auto-scaling enabled. It configures AWS as the cloud provider and specifies instance sizes and node counts for electable and analytics nodes. ```typescript import * as pulumi from "@pulumi/pulumi"; import * as mongodbatlas from "@pulumi/mongodbatlas"; // Single-region replica set with auto-scaling const cluster = new mongodbatlas.AdvancedCluster("app-cluster", { projectId: projectId, name: "app-cluster", clusterType: "REPLICASET", backupEnabled: true, encryptionAtRestProvider: "AWS", useEffectiveFields: true, // simplifies auto-scaling lifecycle management replicationSpecs: [{ regionConfigs: [{ providerName: "AWS", regionName: "US_EAST_1", priority: 7, electableSpecs: { instanceSize: "M10", nodeCount: 3, }, analyticsSpecs: { instanceSize: "M10", nodeCount: 1, }, autoScaling: { computeEnabled: true, computeScaleDownEnabled: true, computeMinInstanceSize: "M10", computeMaxInstanceSize: "M30", }, }], }], }); export const connectionString = cluster.connectionStrings.apply(cs => cs[0].standardSrv); ``` -------------------------------- ### Configure Alert for High Connection Count Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Sets up an alert configuration for high connection counts on an Atlas cluster. This alert triggers when the average connection count exceeds 500. ```typescript import * as mongodbatlas from "@pulumi/mongodbatlas"; // Alert on metric threshold (high connection count) const metricAlert = new mongodbatlas.AlertConfiguration("connection-alert", { projectId: projectId, eventType: "OUTSIDE_METRIC_THRESHOLD", enabled: true, metricThresholdConfig: { metricName: "CONNECTIONS", operator: "GREATER_THAN", threshold: 500, units: "RAW", mode: "AVERAGE", }, matchers: [{ fieldName: "HOSTNAME_AND_PORT", operator: "EQUALS", value: "PRIMARY", }], notifications: [{ typeName: "GROUP", intervalMin: 5, delayMin: 0, emailEnabled: true, smsEnabled: false, roles: ["GROUP_CLUSTER_MANAGER", "GROUP_OWNER"], }], }); ``` -------------------------------- ### Create Network Peering Connection - Go Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Establishes a VPC/VNet peering connection between Atlas and cloud provider networks. Requires a network container and may involve accepting the connection on the cloud provider side. ```go package main import ( "github.com/pulumi/pulumi-aws/sdk/v7/go/aws" "github.com/pulumi/pulumi-mongodbatlas/sdk/v4/go/mongodbatlas" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) func main() { pulumi.Run(func(ctx *pulumi.Context) error { // Create network container (may not be required in all regions) _, err := mongodbatlas.NewNetworkContainer(ctx, "atlas-container", &mongodbatlas.NetworkContainerArgs{ ProjectId: pulumi.String(""), AtlasCidrBlock: pulumi.String("10.8.0.0/21"), ProviderName: pulumi.String("AWS"), RegionName: pulumi.String("US_EAST_1"), }) if err != nil { return err } // Create peering request peer, err := mongodbatlas.NewNetworkPeering(ctx, "aws-peer", &mongodbatlas.NetworkPeeringArgs{ ProjectId: pulumi.String(""), ContainerId: pulumi.String("507f1f77bcf86cd799439011"), ProviderName: pulumi.String("AWS"), AccepterRegionName: pulumi.String("us-east-1"), VpcId: pulumi.String("vpc-0abc123def456"), RouteTableCidrBlock: pulumi.String("172.16.0.0/16"), AwsAccountId: pulumi.String("123456789012"), }) if err != nil { return err } // Accept the peering connection on the AWS side _, err = aws.NewVpcPeeringConnectionAccepter(ctx, "peer-accepter", &aws.VpcPeeringConnectionAccepterArgs{ VpcPeeringConnectionId: peer.ConnectionId, AutoAccept: pulumi.Bool(true), }) return err }) } ``` -------------------------------- ### Backup Compliance Policy Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Configures a backup compliance policy for a project, enforcing minimum backup retention requirements and preventing snapshot deletion below the policy threshold. ```APIDOC ## Backup Compliance Policy — `mongodbatlas.BackupCompliancePolicy` Enforces minimum backup retention requirements across all clusters in a project, preventing deletion of snapshots below the policy threshold. Once enabled, clusters cannot be deleted while snapshots exist. ```typescript import * as mongodbatlas from "@pulumi/mongodbatlas"; const compliancePolicy = new mongodbatlas.BackupCompliancePolicy("backup-compliance", { projectId: projectId, authorizedEmail: "admin@example.com", authorizedUserFirstName: "Atlas", authorizedUserLastName: "Admin", pitEnabled: true, restoreWindowDays: 7, onDemandPolicyItem: { frequencyInterval: 0, retentionUnit: "days", retentionValue: 7, }, policyItemHourly: { frequencyInterval: 1, retentionUnit: "days", retentionValue: 7, }, policyItemDaily: { frequencyInterval: 1, retentionUnit: "days", retentionValue: 7, }, policyItemWeeklies: [ { frequencyInterval: 1, retentionUnit: "weeks", retentionValue: 4, }, ], policyItemMonthlies: [ { frequencyInterval: 1, retentionUnit: "months", retentionValue: 12, }, ], }); ``` ``` -------------------------------- ### Data Sources (Lookup Functions) Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Provides functions to look up existing Atlas resources like projects, clusters, and users without managing their lifecycle, useful for referencing existing infrastructure. ```APIDOC ## Data Sources (Lookup Functions) Atlas resources can be read without managing their lifecycle using `get*` data source functions. These are useful for reading existing projects, clusters, or users in shared infrastructure. ```typescript import * as pulumi from "@pulumi/pulumi"; import * as mongodbatlas from "@pulumi/mongodbatlas"; // Look up an existing cluster const cluster = mongodbatlas.getAdvancedClusterOutput({ projectId: projectId, name: "existing-cluster", }); export const connectionString = cluster.connectionStrings.apply(cs => cs[0].standardSrv); // Look up all clusters in a project const allClusters = mongodbatlas.getAdvancedClustersOutput({ projectId: projectId }); export const clusterNames = allClusters.results.apply(r => r.map(c => c.name)); // Read an existing backup schedule const backupSchedule = mongodbatlas.getCloudBackupScheduleOutput({ projectId: projectId, clusterName: "production", }); // Look up an existing database user const dbUser = mongodbatlas.getDatabaseUserOutput({ projectId: projectId, username: "app-service", authDatabaseName: "admin", }); ``` ``` -------------------------------- ### Configure Pulumi Mongodbatlas Provider Source: https://github.com/pulumi/pulumi-mongodbatlas/blob/master/docs/_index.md Configure the Pulumi Mongodbatlas provider with your Atlas credentials. Ensure you replace 'TODO: var.mongodbatlas_client_id' and 'TODO: var.mongodbatlas_client_secret' with your actual values. ```yaml name: configuration-example runtime: nodejs config: mongodbatlas:clientId: value: 'TODO: var.mongodbatlas_client_id' mongodbatlas:clientSecret: value: 'TODO: var.mongodbatlas_client_secret' ``` ```yaml name: configuration-example runtime: python config: mongodbatlas:clientId: value: 'TODO: var.mongodbatlas_client_id' mongodbatlas:clientSecret: value: 'TODO: var.mongodbatlas_client_secret' ``` ```yaml name: configuration-example runtime: dotnet config: mongodbatlas:clientId: value: 'TODO: var.mongodbatlas_client_id' mongodbatlas:clientSecret: value: 'TODO: var.mongodbatlas_client_secret' ``` -------------------------------- ### Configure Cloud Backup Schedule for Atlas Cluster Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Defines automated cloud backup policies for an Atlas cluster, including snapshot frequencies and retention periods. Requires an existing Atlas cluster with backups enabled. ```go package main import ( "github.com/pulumi/pulumi-mongodbatlas/sdk/v4/go/mongodbatlas" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) func main() { pulumi.Run(func(ctx *pulumi.Context) error { cluster, err := mongodbatlas.NewAdvancedCluster(ctx, "cluster", &mongodbatlas.AdvancedClusterArgs{ ProjectId: pulumi.String(""), Name: pulumi.String("production"), ClusterType: pulumi.String("REPLICASET"), BackupEnabled: pulumi.Bool(true), ReplicationSpecs: mongodbatlas.AdvancedClusterReplicationSpecArray{ &mongodbatlas.AdvancedClusterReplicationSpecArgs{ RegionConfigs: mongodbatlas.AdvancedClusterReplicationSpecRegionConfigArray{ &mongodbatlas.AdvancedClusterReplicationSpecRegionConfigArgs{ Priority: pulumi.Int(7), ProviderName: pulumi.String("AWS"), RegionName: pulumi.String("EU_CENTRAL_1"), ElectableSpecs: &mongodbatlas.AdvancedClusterReplicationSpecRegionConfigElectableSpecsArgs{ InstanceSize: pulumi.String("M10"), NodeCount: pulumi.Int(3), }, }, }, }, }, }) if err != nil { return err } _, err = mongodbatlas.NewCloudBackupSchedule(ctx, "backup-schedule", &mongodbatlas.CloudBackupScheduleArgs{ ProjectId: cluster.ProjectId, ClusterName: cluster.Name, ReferenceHourOfDay: pulumi.Int(3), // 3 AM UTC ReferenceMinuteOfHour: pulumi.Int(45), RestoreWindowDays: pulumi.Int(7), PolicyItemHourly: &mongodbatlas.CloudBackupSchedulePolicyItemHourlyArgs{ FrequencyInterval: pulumi.Int(6), // every 6 hours RetentionUnit: pulumi.String("days"), RetentionValue: pulumi.Int(2), }, PolicyItemDaily: &mongodbatlas.CloudBackupSchedulePolicyItemDailyArgs{ FrequencyInterval: pulumi.Int(1), RetentionUnit: pulumi.String("days"), RetentionValue: pulumi.Int(7), }, PolicyItemWeekly: &mongodbatlas.CloudBackupSchedulePolicyItemWeeklyArgs{ FrequencyInterval: pulumi.Int(6), // Saturday RetentionUnit: pulumi.String("weeks"), RetentionValue: pulumi.Int(4), }, }) return err }) } ``` -------------------------------- ### Alert Configuration Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Defines monitoring alert rules for an Atlas project with configurable event types, metric thresholds, notification channels (email, SMS, PagerDuty, Slack, webhooks, etc.), and matchers. ```APIDOC ## Alert Configuration — `mongodbatlas.AlertConfiguration` Defines monitoring alert rules for an Atlas project with configurable event types, metric thresholds, notification channels (email, SMS, PagerDuty, Slack, webhooks, etc.), and matchers. ```typescript import * as mongodbatlas from "@pulumi/mongodbatlas"; // Alert on metric threshold (high connection count) const metricAlert = new mongodbatlas.AlertConfiguration("connection-alert", { projectId: projectId, eventType: "OUTSIDE_METRIC_THRESHOLD", enabled: true, metricThresholdConfig: { metricName: "CONNECTIONS", operator: "GREATER_THAN", threshold: 500, units: "RAW", mode: "AVERAGE", }, matchers: [{ fieldName: "HOSTNAME_AND_PORT", operator: "EQUALS", value: "PRIMARY", }], notifications: [{ typeName: "GROUP", intervalMin: 5, delayMin: 0, emailEnabled: true, smsEnabled: false, roles: ["GROUP_CLUSTER_MANAGER", "GROUP_OWNER"], }], }); // Alert on replication oplog window running out const oplogAlert = new mongodbatlas.AlertConfiguration("oplog-alert", { projectId: projectId, eventType: "REPLICATION_OPLOG_WINDOW_RUNNING_OUT", enabled: true, thresholdConfig: { operator: "LESS_THAN", threshold: 1, units: "HOURS", }, notifications: [{ typeName: "PAGER_DUTY", serviceKey: "pagerduty-service-key", delayMin: 0, }], }); ``` ``` -------------------------------- ### Manage Project IP Access List - Python Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Manages IP access list entries for an Atlas project, allowing individual IPs, CIDR blocks, or AWS Security Groups. ```python import pulumi_mongodbatlas as mongodbatlas # Allow a specific IP address ip_entry = mongodbatlas.ProjectIpAccessList("office-ip", project_id=project_id, ip_address="203.0.113.42", comment="Office egress IP", ) # Allow a CIDR block cidr_entry = mongodbatlas.ProjectIpAccessList("internal-cidr", project_id=project_id, cidr_block="10.0.0.0/8", comment="Internal network range", ) # Allow an AWS Security Group (requires VPC peering) sg_entry = mongodbatlas.ProjectIpAccessList("eks-sg", project_id=project_id, aws_security_group="sg-0abc12345def67890", comment="EKS worker nodes security group", ) ``` -------------------------------- ### Configure Pulumi.yaml for MongoDB Atlas in YAML Source: https://github.com/pulumi/pulumi-mongodbatlas/blob/master/docs/_index.md Define MongoDB Atlas resources, including projects and clusters, directly within your Pulumi.yaml file using YAML syntax. This approach is suitable for simpler configurations. ```yaml # Pulumi.yaml provider configuration file name: configuration-example runtime: yaml config: mongodbatlas:clientId: value: 'TODO: var.mongodbatlas_client_id' mongodbatlas:clientSecret: value: 'TODO: var.mongodbatlas_client_secret' ``` ```yaml resources: # Create a project this: type: mongodbatlas:Project properties: name: my-project orgId: ${orgId} # Create a cluster thisAdvancedCluster: type: mongodbatlas:AdvancedCluster name: this properties: projectId: ${this.id} name: my-cluster clusterType: REPLICASET replicationSpecs: - regionConfigs: - regionName: US_EAST_1 priority: 7 providerName: AWS electableSpecs: instanceSize: M10 nodeCount: 3 ``` -------------------------------- ### CloudBackupSchedule Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Defines automated cloud backup policies for Atlas clusters. Controls snapshot frequencies, retention periods, and restore window configuration. ```APIDOC ## Cloud Backup Schedule — `mongodbatlas.CloudBackupSchedule` Defines automated cloud backup policies for Atlas clusters. Controls hourly, daily, weekly, and monthly snapshot frequencies, retention periods, and restore window configuration. ```go package main import ( "github.com/pulumi/pulumi-mongodbatlas/sdk/v4/go/mongodbatlas" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) func main() { pulumi.Run(func(ctx *pulumi.Context) error { cluster, err := mongodbatlas.NewAdvancedCluster(ctx, "cluster", &mongodbatlas.AdvancedClusterArgs{ ProjectId: pulumi.String(""), Name: pulumi.String("production"), ClusterType: pulumi.String("REPLICASET"), BackupEnabled: pulumi.Bool(true), ReplicationSpecs: mongodbatlas.AdvancedClusterReplicationSpecArray{ &mongodbatlas.AdvancedClusterReplicationSpecArgs{ RegionConfigs: mongodbatlas.AdvancedClusterReplicationSpecRegionConfigArray{ &mongodbatlas.AdvancedClusterReplicationSpecRegionConfigArgs{ Priority: pulumi.Int(7), ProviderName: pulumi.String("AWS"), RegionName: pulumi.String("EU_CENTRAL_1"), ElectableSpecs: &mongodbatlas.AdvancedClusterReplicationSpecRegionConfigElectableSpecsArgs{ InstanceSize: pulumi.String("M10"), NodeCount: pulumi.Int(3), }, }, }, }, }, }) if err != nil { return err } _, err = mongodbatlas.NewCloudBackupSchedule(ctx, "backup-schedule", &mongodbatlas.CloudBackupScheduleArgs{ ProjectId: cluster.ProjectId, ClusterName: cluster.Name, ReferenceHourOfDay: pulumi.Int(3), // 3 AM UTC ReferenceMinuteOfHour: pulumi.Int(45), RestoreWindowDays: pulumi.Int(7), PolicyItemHourly: &mongodbatlas.CloudBackupSchedulePolicyItemHourlyArgs{ FrequencyInterval: pulumi.Int(6), // every 6 hours RetentionUnit: pulumi.String("days"), RetentionValue: pulumi.Int(2), }, PolicyItemDaily: &mongodbatlas.CloudBackupSchedulePolicyItemDailyArgs{ FrequencyInterval: pulumi.Int(1), RetentionUnit: pulumi.String("days"), RetentionValue: pulumi.Int(7), }, PolicyItemWeekly: &mongodbatlas.CloudBackupSchedulePolicyItemWeeklyArgs{ FrequencyInterval: pulumi.Int(6), // Saturday RetentionUnit: pulumi.String("weeks"), RetentionValue: pulumi.Int(4), }, }) return err }) } ``` ``` -------------------------------- ### Flex Cluster Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Creates and manages Atlas Flex clusters — a cost-effective serverless-style tier with automatic scaling. Prefer `AdvancedCluster` for new deployments as it supports all cluster types including Flex. ```APIDOC ## Flex Cluster — `mongodbatlas.FlexCluster` Creates and manages Atlas Flex clusters — a cost-effective serverless-style tier with automatic scaling. Prefer `AdvancedCluster` for new deployments as it supports all cluster types including Flex. ```python import pulumi import pulumi_mongodbatlas as mongodbatlas flex = mongodbatlas.FlexCluster("flex-cluster", project_id=project_id, name="my-flex-cluster", provider_settings={ "backing_provider_name": "AWS", "region_name": "US_EAST_1", }, termination_protection_enabled=False, tags={"env": "dev"}, ) pulumi.export("flex_connection_string", flex.connection_strings.standard_srv) ``` ``` -------------------------------- ### Maintenance Window Configuration Source: https://context7.com/pulumi/pulumi-mongodbatlas/llms.txt Configures the weekly maintenance window for an Atlas cluster, including optional protected hours and automatic deferral settings. ```APIDOC ## Maintenance Window — `mongodbatlas.MaintenanceWindow` Schedules the weekly Atlas cluster maintenance window and optionally configures protected hours (periods during which maintenance will not start) and automatic deferral. ```typescript import * as mongodbatlas from "@pulumi/mongodbatlas"; const maintenanceWindow = new mongodbatlas.MaintenanceWindow("maint-window", { projectId: projectId, dayOfWeek: 7, // Sunday (1=Monday ... 7=Sunday) hourOfDay: 2, // 2 AM project timezone protectedHours: { startHourOfDay: 8, endHourOfDay: 18, // no maintenance during business hours }, autoDeferOnceEnabled: true, // auto-defer once if maintenance conflicts }); ``` ```