1. Packages
  2. Azure Classic
  3. API Docs
  4. automation
  5. Webhook

We recommend using Azure Native.

Viewing docs for Azure v4.42.0 (Older version)
published on Monday, Mar 9, 2026 by Pulumi
azure logo

We recommend using Azure Native.

Viewing docs for Azure v4.42.0 (Older version)
published on Monday, Mar 9, 2026 by Pulumi

    Manages an Automation Runbook’s Webhook.

    Example Usage

    using Pulumi;
    using Azure = Pulumi.Azure;
    
    class MyStack : Stack
    {
        public MyStack()
        {
            var exampleResourceGroup = new Azure.Core.ResourceGroup("exampleResourceGroup", new Azure.Core.ResourceGroupArgs
            {
                Location = "West Europe",
            });
            var exampleAccount = new Azure.Automation.Account("exampleAccount", new Azure.Automation.AccountArgs
            {
                Location = exampleResourceGroup.Location,
                ResourceGroupName = exampleResourceGroup.Name,
                SkuName = "Basic",
            });
            var exampleRunBook = new Azure.Automation.RunBook("exampleRunBook", new Azure.Automation.RunBookArgs
            {
                Location = exampleResourceGroup.Location,
                ResourceGroupName = exampleResourceGroup.Name,
                AutomationAccountName = exampleAccount.Name,
                LogVerbose = true,
                LogProgress = true,
                Description = "This is an example runbook",
                RunbookType = "PowerShellWorkflow",
                PublishContentLink = new Azure.Automation.Inputs.RunBookPublishContentLinkArgs
                {
                    Uri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/c4935ffb69246a6058eb24f54640f53f69d3ac9f/101-automation-runbook-getvms/Runbooks/Get-AzureVMTutorial.ps1",
                },
            });
            var exampleWebhook = new Azure.Automation.Webhook("exampleWebhook", new Azure.Automation.WebhookArgs
            {
                ResourceGroupName = exampleResourceGroup.Name,
                AutomationAccountName = exampleAccount.Name,
                ExpiryTime = "2021-12-31T00:00:00Z",
                Enabled = true,
                RunbookName = exampleRunBook.Name,
                Parameters = 
                {
                    { "input", "parameter" },
                },
            });
        }
    
    }
    
    package main
    
    import (
    	"github.com/pulumi/pulumi-azure/sdk/v4/go/azure/automation"
    	"github.com/pulumi/pulumi-azure/sdk/v4/go/azure/core"
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		exampleResourceGroup, err := core.NewResourceGroup(ctx, "exampleResourceGroup", &core.ResourceGroupArgs{
    			Location: pulumi.String("West Europe"),
    		})
    		if err != nil {
    			return err
    		}
    		exampleAccount, err := automation.NewAccount(ctx, "exampleAccount", &automation.AccountArgs{
    			Location:          exampleResourceGroup.Location,
    			ResourceGroupName: exampleResourceGroup.Name,
    			SkuName:           pulumi.String("Basic"),
    		})
    		if err != nil {
    			return err
    		}
    		exampleRunBook, err := automation.NewRunBook(ctx, "exampleRunBook", &automation.RunBookArgs{
    			Location:              exampleResourceGroup.Location,
    			ResourceGroupName:     exampleResourceGroup.Name,
    			AutomationAccountName: exampleAccount.Name,
    			LogVerbose:            pulumi.Bool(true),
    			LogProgress:           pulumi.Bool(true),
    			Description:           pulumi.String("This is an example runbook"),
    			RunbookType:           pulumi.String("PowerShellWorkflow"),
    			PublishContentLink: &automation.RunBookPublishContentLinkArgs{
    				Uri: pulumi.String("https://raw.githubusercontent.com/Azure/azure-quickstart-templates/c4935ffb69246a6058eb24f54640f53f69d3ac9f/101-automation-runbook-getvms/Runbooks/Get-AzureVMTutorial.ps1"),
    			},
    		})
    		if err != nil {
    			return err
    		}
    		_, err = automation.NewWebhook(ctx, "exampleWebhook", &automation.WebhookArgs{
    			ResourceGroupName:     exampleResourceGroup.Name,
    			AutomationAccountName: exampleAccount.Name,
    			ExpiryTime:            pulumi.String("2021-12-31T00:00:00Z"),
    			Enabled:               pulumi.Bool(true),
    			RunbookName:           exampleRunBook.Name,
    			Parameters: pulumi.StringMap{
    				"input": pulumi.String("parameter"),
    			},
    		})
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    

    Example coming soon!

    import * as pulumi from "@pulumi/pulumi";
    import * as azure from "@pulumi/azure";
    
    const exampleResourceGroup = new azure.core.ResourceGroup("exampleResourceGroup", {location: "West Europe"});
    const exampleAccount = new azure.automation.Account("exampleAccount", {
        location: exampleResourceGroup.location,
        resourceGroupName: exampleResourceGroup.name,
        skuName: "Basic",
    });
    const exampleRunBook = new azure.automation.RunBook("exampleRunBook", {
        location: exampleResourceGroup.location,
        resourceGroupName: exampleResourceGroup.name,
        automationAccountName: exampleAccount.name,
        logVerbose: "true",
        logProgress: "true",
        description: "This is an example runbook",
        runbookType: "PowerShellWorkflow",
        publishContentLink: {
            uri: "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/c4935ffb69246a6058eb24f54640f53f69d3ac9f/101-automation-runbook-getvms/Runbooks/Get-AzureVMTutorial.ps1",
        },
    });
    const exampleWebhook = new azure.automation.Webhook("exampleWebhook", {
        resourceGroupName: exampleResourceGroup.name,
        automationAccountName: exampleAccount.name,
        expiryTime: "2021-12-31T00:00:00Z",
        enabled: true,
        runbookName: exampleRunBook.name,
        parameters: {
            input: "parameter",
        },
    });
    
    import pulumi
    import pulumi_azure as azure
    
    example_resource_group = azure.core.ResourceGroup("exampleResourceGroup", location="West Europe")
    example_account = azure.automation.Account("exampleAccount",
        location=example_resource_group.location,
        resource_group_name=example_resource_group.name,
        sku_name="Basic")
    example_run_book = azure.automation.RunBook("exampleRunBook",
        location=example_resource_group.location,
        resource_group_name=example_resource_group.name,
        automation_account_name=example_account.name,
        log_verbose=True,
        log_progress=True,
        description="This is an example runbook",
        runbook_type="PowerShellWorkflow",
        publish_content_link=azure.automation.RunBookPublishContentLinkArgs(
            uri="https://raw.githubusercontent.com/Azure/azure-quickstart-templates/c4935ffb69246a6058eb24f54640f53f69d3ac9f/101-automation-runbook-getvms/Runbooks/Get-AzureVMTutorial.ps1",
        ))
    example_webhook = azure.automation.Webhook("exampleWebhook",
        resource_group_name=example_resource_group.name,
        automation_account_name=example_account.name,
        expiry_time="2021-12-31T00:00:00Z",
        enabled=True,
        runbook_name=example_run_book.name,
        parameters={
            "input": "parameter",
        })
    

    Example coming soon!

    Create Webhook Resource

    Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.

    Constructor syntax

    new Webhook(name: string, args: WebhookArgs, opts?: CustomResourceOptions);
    @overload
    def Webhook(resource_name: str,
                args: WebhookArgs,
                opts: Optional[ResourceOptions] = None)
    
    @overload
    def Webhook(resource_name: str,
                opts: Optional[ResourceOptions] = None,
                automation_account_name: Optional[str] = None,
                expiry_time: Optional[str] = None,
                resource_group_name: Optional[str] = None,
                runbook_name: Optional[str] = None,
                enabled: Optional[bool] = None,
                name: Optional[str] = None,
                parameters: Optional[Mapping[str, str]] = None,
                run_on_worker_group: Optional[str] = None,
                uri: Optional[str] = None)
    func NewWebhook(ctx *Context, name string, args WebhookArgs, opts ...ResourceOption) (*Webhook, error)
    public Webhook(string name, WebhookArgs args, CustomResourceOptions? opts = null)
    public Webhook(String name, WebhookArgs args)
    public Webhook(String name, WebhookArgs args, CustomResourceOptions options)
    
    type: azure:automation:Webhook
    properties: # The arguments to resource properties.
    options: # Bag of options to control resource's behavior.
    
    

    Parameters

    name string
    The unique name of the resource.
    args WebhookArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    resource_name str
    The unique name of the resource.
    args WebhookArgs
    The arguments to resource properties.
    opts ResourceOptions
    Bag of options to control resource's behavior.
    ctx Context
    Context object for the current deployment.
    name string
    The unique name of the resource.
    args WebhookArgs
    The arguments to resource properties.
    opts ResourceOption
    Bag of options to control resource's behavior.
    name string
    The unique name of the resource.
    args WebhookArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    name String
    The unique name of the resource.
    args WebhookArgs
    The arguments to resource properties.
    options CustomResourceOptions
    Bag of options to control resource's behavior.

    Constructor example

    The following reference example uses placeholder values for all input properties.

    var webhookResource = new Azure.Automation.Webhook("webhookResource", new()
    {
        AutomationAccountName = "string",
        ExpiryTime = "string",
        ResourceGroupName = "string",
        RunbookName = "string",
        Enabled = false,
        Name = "string",
        Parameters = 
        {
            { "string", "string" },
        },
        RunOnWorkerGroup = "string",
        Uri = "string",
    });
    
    example, err := automation.NewWebhook(ctx, "webhookResource", &automation.WebhookArgs{
    	AutomationAccountName: pulumi.String("string"),
    	ExpiryTime:            pulumi.String("string"),
    	ResourceGroupName:     pulumi.String("string"),
    	RunbookName:           pulumi.String("string"),
    	Enabled:               pulumi.Bool(false),
    	Name:                  pulumi.String("string"),
    	Parameters: pulumi.StringMap{
    		"string": pulumi.String("string"),
    	},
    	RunOnWorkerGroup: pulumi.String("string"),
    	Uri:              pulumi.String("string"),
    })
    
    var webhookResource = new Webhook("webhookResource", WebhookArgs.builder()
        .automationAccountName("string")
        .expiryTime("string")
        .resourceGroupName("string")
        .runbookName("string")
        .enabled(false)
        .name("string")
        .parameters(Map.of("string", "string"))
        .runOnWorkerGroup("string")
        .uri("string")
        .build());
    
    webhook_resource = azure.automation.Webhook("webhookResource",
        automation_account_name="string",
        expiry_time="string",
        resource_group_name="string",
        runbook_name="string",
        enabled=False,
        name="string",
        parameters={
            "string": "string",
        },
        run_on_worker_group="string",
        uri="string")
    
    const webhookResource = new azure.automation.Webhook("webhookResource", {
        automationAccountName: "string",
        expiryTime: "string",
        resourceGroupName: "string",
        runbookName: "string",
        enabled: false,
        name: "string",
        parameters: {
            string: "string",
        },
        runOnWorkerGroup: "string",
        uri: "string",
    });
    
    type: azure:automation:Webhook
    properties:
        automationAccountName: string
        enabled: false
        expiryTime: string
        name: string
        parameters:
            string: string
        resourceGroupName: string
        runOnWorkerGroup: string
        runbookName: string
        uri: string
    

    Webhook Resource Properties

    To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.

    Inputs

    In Python, inputs that are objects can be passed either as argument classes or as dictionary literals.

    The Webhook resource accepts the following input properties:

    AutomationAccountName string
    The name of the automation account in which the Webhook is created. Changing this forces a new resource to be created.
    ExpiryTime string
    Timestamp when the webhook expires. Changing this forces a new resource to be created.
    ResourceGroupName string
    The name of the resource group in which the Webhook is created. Changing this forces a new resource to be created.
    RunbookName string
    Name of the Automation Runbook to execute by Webhook.
    Enabled bool
    Controls if Webhook is enabled. Defaults to true.
    Name string
    Specifies the name of the Webhook. Changing this forces a new resource to be created.
    Parameters Dictionary<string, string>
    Map of input parameters passed to runbook.
    RunOnWorkerGroup string
    Name of the hybrid worker group the Webhook job will run on.
    Uri string
    URI to initiate the webhook. Can be generated using Generate URI API. By default, new URI is generated on each new resource creation.
    AutomationAccountName string
    The name of the automation account in which the Webhook is created. Changing this forces a new resource to be created.
    ExpiryTime string
    Timestamp when the webhook expires. Changing this forces a new resource to be created.
    ResourceGroupName string
    The name of the resource group in which the Webhook is created. Changing this forces a new resource to be created.
    RunbookName string
    Name of the Automation Runbook to execute by Webhook.
    Enabled bool
    Controls if Webhook is enabled. Defaults to true.
    Name string
    Specifies the name of the Webhook. Changing this forces a new resource to be created.
    Parameters map[string]string
    Map of input parameters passed to runbook.
    RunOnWorkerGroup string
    Name of the hybrid worker group the Webhook job will run on.
    Uri string
    URI to initiate the webhook. Can be generated using Generate URI API. By default, new URI is generated on each new resource creation.
    automationAccountName String
    The name of the automation account in which the Webhook is created. Changing this forces a new resource to be created.
    expiryTime String
    Timestamp when the webhook expires. Changing this forces a new resource to be created.
    resourceGroupName String
    The name of the resource group in which the Webhook is created. Changing this forces a new resource to be created.
    runbookName String
    Name of the Automation Runbook to execute by Webhook.
    enabled Boolean
    Controls if Webhook is enabled. Defaults to true.
    name String
    Specifies the name of the Webhook. Changing this forces a new resource to be created.
    parameters Map<String,String>
    Map of input parameters passed to runbook.
    runOnWorkerGroup String
    Name of the hybrid worker group the Webhook job will run on.
    uri String
    URI to initiate the webhook. Can be generated using Generate URI API. By default, new URI is generated on each new resource creation.
    automationAccountName string
    The name of the automation account in which the Webhook is created. Changing this forces a new resource to be created.
    expiryTime string
    Timestamp when the webhook expires. Changing this forces a new resource to be created.
    resourceGroupName string
    The name of the resource group in which the Webhook is created. Changing this forces a new resource to be created.
    runbookName string
    Name of the Automation Runbook to execute by Webhook.
    enabled boolean
    Controls if Webhook is enabled. Defaults to true.
    name string
    Specifies the name of the Webhook. Changing this forces a new resource to be created.
    parameters {[key: string]: string}
    Map of input parameters passed to runbook.
    runOnWorkerGroup string
    Name of the hybrid worker group the Webhook job will run on.
    uri string
    URI to initiate the webhook. Can be generated using Generate URI API. By default, new URI is generated on each new resource creation.
    automation_account_name str
    The name of the automation account in which the Webhook is created. Changing this forces a new resource to be created.
    expiry_time str
    Timestamp when the webhook expires. Changing this forces a new resource to be created.
    resource_group_name str
    The name of the resource group in which the Webhook is created. Changing this forces a new resource to be created.
    runbook_name str
    Name of the Automation Runbook to execute by Webhook.
    enabled bool
    Controls if Webhook is enabled. Defaults to true.
    name str
    Specifies the name of the Webhook. Changing this forces a new resource to be created.
    parameters Mapping[str, str]
    Map of input parameters passed to runbook.
    run_on_worker_group str
    Name of the hybrid worker group the Webhook job will run on.
    uri str
    URI to initiate the webhook. Can be generated using Generate URI API. By default, new URI is generated on each new resource creation.
    automationAccountName String
    The name of the automation account in which the Webhook is created. Changing this forces a new resource to be created.
    expiryTime String
    Timestamp when the webhook expires. Changing this forces a new resource to be created.
    resourceGroupName String
    The name of the resource group in which the Webhook is created. Changing this forces a new resource to be created.
    runbookName String
    Name of the Automation Runbook to execute by Webhook.
    enabled Boolean
    Controls if Webhook is enabled. Defaults to true.
    name String
    Specifies the name of the Webhook. Changing this forces a new resource to be created.
    parameters Map<String>
    Map of input parameters passed to runbook.
    runOnWorkerGroup String
    Name of the hybrid worker group the Webhook job will run on.
    uri String
    URI to initiate the webhook. Can be generated using Generate URI API. By default, new URI is generated on each new resource creation.

    Outputs

    All input properties are implicitly available as output properties. Additionally, the Webhook resource produces the following output properties:

    Id string
    The provider-assigned unique ID for this managed resource.
    Id string
    The provider-assigned unique ID for this managed resource.
    id String
    The provider-assigned unique ID for this managed resource.
    id string
    The provider-assigned unique ID for this managed resource.
    id str
    The provider-assigned unique ID for this managed resource.
    id String
    The provider-assigned unique ID for this managed resource.

    Look up Existing Webhook Resource

    Get an existing Webhook resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.

    public static get(name: string, id: Input<ID>, state?: WebhookState, opts?: CustomResourceOptions): Webhook
    @staticmethod
    def get(resource_name: str,
            id: str,
            opts: Optional[ResourceOptions] = None,
            automation_account_name: Optional[str] = None,
            enabled: Optional[bool] = None,
            expiry_time: Optional[str] = None,
            name: Optional[str] = None,
            parameters: Optional[Mapping[str, str]] = None,
            resource_group_name: Optional[str] = None,
            run_on_worker_group: Optional[str] = None,
            runbook_name: Optional[str] = None,
            uri: Optional[str] = None) -> Webhook
    func GetWebhook(ctx *Context, name string, id IDInput, state *WebhookState, opts ...ResourceOption) (*Webhook, error)
    public static Webhook Get(string name, Input<string> id, WebhookState? state, CustomResourceOptions? opts = null)
    public static Webhook get(String name, Output<String> id, WebhookState state, CustomResourceOptions options)
    resources:  _:    type: azure:automation:Webhook    get:      id: ${id}
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    resource_name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    The following state arguments are supported:
    AutomationAccountName string
    The name of the automation account in which the Webhook is created. Changing this forces a new resource to be created.
    Enabled bool
    Controls if Webhook is enabled. Defaults to true.
    ExpiryTime string
    Timestamp when the webhook expires. Changing this forces a new resource to be created.
    Name string
    Specifies the name of the Webhook. Changing this forces a new resource to be created.
    Parameters Dictionary<string, string>
    Map of input parameters passed to runbook.
    ResourceGroupName string
    The name of the resource group in which the Webhook is created. Changing this forces a new resource to be created.
    RunOnWorkerGroup string
    Name of the hybrid worker group the Webhook job will run on.
    RunbookName string
    Name of the Automation Runbook to execute by Webhook.
    Uri string
    URI to initiate the webhook. Can be generated using Generate URI API. By default, new URI is generated on each new resource creation.
    AutomationAccountName string
    The name of the automation account in which the Webhook is created. Changing this forces a new resource to be created.
    Enabled bool
    Controls if Webhook is enabled. Defaults to true.
    ExpiryTime string
    Timestamp when the webhook expires. Changing this forces a new resource to be created.
    Name string
    Specifies the name of the Webhook. Changing this forces a new resource to be created.
    Parameters map[string]string
    Map of input parameters passed to runbook.
    ResourceGroupName string
    The name of the resource group in which the Webhook is created. Changing this forces a new resource to be created.
    RunOnWorkerGroup string
    Name of the hybrid worker group the Webhook job will run on.
    RunbookName string
    Name of the Automation Runbook to execute by Webhook.
    Uri string
    URI to initiate the webhook. Can be generated using Generate URI API. By default, new URI is generated on each new resource creation.
    automationAccountName String
    The name of the automation account in which the Webhook is created. Changing this forces a new resource to be created.
    enabled Boolean
    Controls if Webhook is enabled. Defaults to true.
    expiryTime String
    Timestamp when the webhook expires. Changing this forces a new resource to be created.
    name String
    Specifies the name of the Webhook. Changing this forces a new resource to be created.
    parameters Map<String,String>
    Map of input parameters passed to runbook.
    resourceGroupName String
    The name of the resource group in which the Webhook is created. Changing this forces a new resource to be created.
    runOnWorkerGroup String
    Name of the hybrid worker group the Webhook job will run on.
    runbookName String
    Name of the Automation Runbook to execute by Webhook.
    uri String
    URI to initiate the webhook. Can be generated using Generate URI API. By default, new URI is generated on each new resource creation.
    automationAccountName string
    The name of the automation account in which the Webhook is created. Changing this forces a new resource to be created.
    enabled boolean
    Controls if Webhook is enabled. Defaults to true.
    expiryTime string
    Timestamp when the webhook expires. Changing this forces a new resource to be created.
    name string
    Specifies the name of the Webhook. Changing this forces a new resource to be created.
    parameters {[key: string]: string}
    Map of input parameters passed to runbook.
    resourceGroupName string
    The name of the resource group in which the Webhook is created. Changing this forces a new resource to be created.
    runOnWorkerGroup string
    Name of the hybrid worker group the Webhook job will run on.
    runbookName string
    Name of the Automation Runbook to execute by Webhook.
    uri string
    URI to initiate the webhook. Can be generated using Generate URI API. By default, new URI is generated on each new resource creation.
    automation_account_name str
    The name of the automation account in which the Webhook is created. Changing this forces a new resource to be created.
    enabled bool
    Controls if Webhook is enabled. Defaults to true.
    expiry_time str
    Timestamp when the webhook expires. Changing this forces a new resource to be created.
    name str
    Specifies the name of the Webhook. Changing this forces a new resource to be created.
    parameters Mapping[str, str]
    Map of input parameters passed to runbook.
    resource_group_name str
    The name of the resource group in which the Webhook is created. Changing this forces a new resource to be created.
    run_on_worker_group str
    Name of the hybrid worker group the Webhook job will run on.
    runbook_name str
    Name of the Automation Runbook to execute by Webhook.
    uri str
    URI to initiate the webhook. Can be generated using Generate URI API. By default, new URI is generated on each new resource creation.
    automationAccountName String
    The name of the automation account in which the Webhook is created. Changing this forces a new resource to be created.
    enabled Boolean
    Controls if Webhook is enabled. Defaults to true.
    expiryTime String
    Timestamp when the webhook expires. Changing this forces a new resource to be created.
    name String
    Specifies the name of the Webhook. Changing this forces a new resource to be created.
    parameters Map<String>
    Map of input parameters passed to runbook.
    resourceGroupName String
    The name of the resource group in which the Webhook is created. Changing this forces a new resource to be created.
    runOnWorkerGroup String
    Name of the hybrid worker group the Webhook job will run on.
    runbookName String
    Name of the Automation Runbook to execute by Webhook.
    uri String
    URI to initiate the webhook. Can be generated using Generate URI API. By default, new URI is generated on each new resource creation.

    Import

    Automation Webhooks can be imported using the resource id, e.g.

     $ pulumi import azure:automation/webhook:Webhook TestRunbook_webhook /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.Automation/automationAccounts/account1/webhooks/TestRunbook_webhook
    

    To learn more about importing existing cloud resources, see Importing resources.

    Package Details

    Repository
    Azure Classic pulumi/pulumi-azure
    License
    Apache-2.0
    Notes
    This Pulumi package is based on the azurerm Terraform Provider.
    azure logo

    We recommend using Azure Native.

    Viewing docs for Azure v4.42.0 (Older version)
    published on Monday, Mar 9, 2026 by Pulumi
      Try Pulumi Cloud free. Your team will thank you.