1. Folder-Based Budgeting for GCP Machine Learning Resources


    In Google Cloud Platform (GCP), setting up budgeting is a crucial task to manage costs effectively, especially when dealing with potentially expensive operations like machine learning. Using Pulumi, we can automate the creation of budgets for GCP resources, and in this case, we will look into setting up a budget specifically for machine learning resources within a certain folder.

    We'll be using the gcp.billing.Budget resource to define budgeting rules. Here’s what we need to consider for folder-based budgeting:

    • Budget Amount: The amount for the budget.
    • Time Period: The period that the budget applies to (monthly, quarterly, etc.).
    • Services: The GCP services that the budget will apply to, in this case, the machine learning services.
    • Projects: Filtering the budget to only apply to projects within a certain folder.
    • Thresholds and Alerts: Setting up notifications when the budget amount is approached or exceeded.

    Now, let's write a Pulumi program in Python that sets up a folder-based budget for GCP machine learning services:

    import pulumi import pulumi_gcp as gcp # Define the budget for machine learning resources in a particular folder ml_budget = gcp.billing.Budget("ml-budget", # The budget amount amount=gcp.billing.BudgetAmountArgs( specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs( units="USD", # The currency as USD nanos=500_000_000 # Budget amount in nanos (500M nanos = $0.50) ) ), # The billing account ID billing_account="YOUR_BILLING_ACCOUNT_ID", # Display name for the budget display_name="ML Services Budget", # The budget filter to specify folder and services budget_filter=gcp.billing.BudgetBudgetFilterArgs( # Specify the folder ID where the budget is applied resource_annostors=["folders/FOLDER_ID"], # Specify the services that the budget applies to (ML services in this case) services=["ml.googleapis.com"] ), # Define the actions to take as budget thresholds are approached or exceeded all_updates_rule=gcp.billing.BudgetAllUpdatesRuleArgs( pubsub_topic="projects/PROJECT_ID/topics/TOPIC_NAME", # Pub/Sub topic for notifications disable_default_iam_recipients=False, # Set to True to disable default IAM notifications monitoring_notification_channels=["NOTIFICATION_CHANNEL_ID"] # Monitoring Notification Channels ), # Define percentage thresholds for the budget notifications threshold_rules=[ gcp.billing.BudgetThresholdRuleArgs( threshold_percent=0.5, # Notify at 50% of budget spend_basis="CURRENT_SPEND" ), gcp.billing.BudgetThresholdRuleArgs( threshold_percent=0.9, # Notify at 90% of budget spend_basis="CURRENT_SPEND" ), gcp.billing.BudgetThresholdRuleArgs( threshold_percent=1.0, # Notify at 100% of budget spend_basis="CURRENT_SPEND" ), ], ) # Export the resource name of the budget pulumi.export('ml_budget_name', ml_budget.display_name)

    This program creates a budget using Pulumi and the GCP Python SDK. To use it, replace placeholders YOUR_BILLING_ACCOUNT_ID, FOLDER_ID, PROJECT_ID, TOPIC_NAME, and NOTIFICATION_CHANNEL_ID with your actual GCP billing account ID, the folder ID you want to apply the budget to, your project ID, the name of the Pub/Sub topic, and notification channel ID you want to use for alerts.

    The specified_amount in gcp.billing.BudgetAmountArgs sets the budget for the specified services. The resource_ancestors filters the budget specifically to the projects that are under the mentioned folder in GCP.

    The threshold_rules array defines at what percentage of the budget amount you want to receive notifications, which are sent through the specified Pub/Sub topic and monitoring notification channels.

    Remember to configure your GCP provider and ensure you have set the appropriate IAM permissions for managing budgets and the Pub/Sub topic before running this program with Pulumi.