1. Packages
  2. Azure Classic
  3. API Docs
  4. sentinel
  5. DataConnectorOffice365

We recommend using Azure Native.

Azure Classic v5.52.0 published on Monday, Oct 2, 2023 by Pulumi

azure.sentinel.DataConnectorOffice365

Explore with Pulumi AI

azure logo

We recommend using Azure Native.

Azure Classic v5.52.0 published on Monday, Oct 2, 2023 by Pulumi

    Manages a Office 365 Data Connector.

    Example Usage

    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using Azure = Pulumi.Azure;
    
    return await Deployment.RunAsync(() => 
    {
        var exampleResourceGroup = new Azure.Core.ResourceGroup("exampleResourceGroup", new()
        {
            Location = "West Europe",
        });
    
        var exampleAnalyticsWorkspace = new Azure.OperationalInsights.AnalyticsWorkspace("exampleAnalyticsWorkspace", new()
        {
            Location = exampleResourceGroup.Location,
            ResourceGroupName = exampleResourceGroup.Name,
            Sku = "PerGB2018",
        });
    
        var exampleLogAnalyticsWorkspaceOnboarding = new Azure.Sentinel.LogAnalyticsWorkspaceOnboarding("exampleLogAnalyticsWorkspaceOnboarding", new()
        {
            WorkspaceId = exampleAnalyticsWorkspace.Id,
        });
    
        var exampleDataConnectorOffice365 = new Azure.Sentinel.DataConnectorOffice365("exampleDataConnectorOffice365", new()
        {
            LogAnalyticsWorkspaceId = exampleLogAnalyticsWorkspaceOnboarding.WorkspaceId,
        });
    
    });
    
    package main
    
    import (
    	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/core"
    	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/operationalinsights"
    	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/sentinel"
    	"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
    		}
    		exampleAnalyticsWorkspace, err := operationalinsights.NewAnalyticsWorkspace(ctx, "exampleAnalyticsWorkspace", &operationalinsights.AnalyticsWorkspaceArgs{
    			Location:          exampleResourceGroup.Location,
    			ResourceGroupName: exampleResourceGroup.Name,
    			Sku:               pulumi.String("PerGB2018"),
    		})
    		if err != nil {
    			return err
    		}
    		exampleLogAnalyticsWorkspaceOnboarding, err := sentinel.NewLogAnalyticsWorkspaceOnboarding(ctx, "exampleLogAnalyticsWorkspaceOnboarding", &sentinel.LogAnalyticsWorkspaceOnboardingArgs{
    			WorkspaceId: exampleAnalyticsWorkspace.ID(),
    		})
    		if err != nil {
    			return err
    		}
    		_, err = sentinel.NewDataConnectorOffice365(ctx, "exampleDataConnectorOffice365", &sentinel.DataConnectorOffice365Args{
    			LogAnalyticsWorkspaceId: exampleLogAnalyticsWorkspaceOnboarding.WorkspaceId,
    		})
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.azure.core.ResourceGroup;
    import com.pulumi.azure.core.ResourceGroupArgs;
    import com.pulumi.azure.operationalinsights.AnalyticsWorkspace;
    import com.pulumi.azure.operationalinsights.AnalyticsWorkspaceArgs;
    import com.pulumi.azure.sentinel.LogAnalyticsWorkspaceOnboarding;
    import com.pulumi.azure.sentinel.LogAnalyticsWorkspaceOnboardingArgs;
    import com.pulumi.azure.sentinel.DataConnectorOffice365;
    import com.pulumi.azure.sentinel.DataConnectorOffice365Args;
    import java.util.List;
    import java.util.ArrayList;
    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) {
            var exampleResourceGroup = new ResourceGroup("exampleResourceGroup", ResourceGroupArgs.builder()        
                .location("West Europe")
                .build());
    
            var exampleAnalyticsWorkspace = new AnalyticsWorkspace("exampleAnalyticsWorkspace", AnalyticsWorkspaceArgs.builder()        
                .location(exampleResourceGroup.location())
                .resourceGroupName(exampleResourceGroup.name())
                .sku("PerGB2018")
                .build());
    
            var exampleLogAnalyticsWorkspaceOnboarding = new LogAnalyticsWorkspaceOnboarding("exampleLogAnalyticsWorkspaceOnboarding", LogAnalyticsWorkspaceOnboardingArgs.builder()        
                .workspaceId(exampleAnalyticsWorkspace.id())
                .build());
    
            var exampleDataConnectorOffice365 = new DataConnectorOffice365("exampleDataConnectorOffice365", DataConnectorOffice365Args.builder()        
                .logAnalyticsWorkspaceId(exampleLogAnalyticsWorkspaceOnboarding.workspaceId())
                .build());
    
        }
    }
    
    import pulumi
    import pulumi_azure as azure
    
    example_resource_group = azure.core.ResourceGroup("exampleResourceGroup", location="West Europe")
    example_analytics_workspace = azure.operationalinsights.AnalyticsWorkspace("exampleAnalyticsWorkspace",
        location=example_resource_group.location,
        resource_group_name=example_resource_group.name,
        sku="PerGB2018")
    example_log_analytics_workspace_onboarding = azure.sentinel.LogAnalyticsWorkspaceOnboarding("exampleLogAnalyticsWorkspaceOnboarding", workspace_id=example_analytics_workspace.id)
    example_data_connector_office365 = azure.sentinel.DataConnectorOffice365("exampleDataConnectorOffice365", log_analytics_workspace_id=example_log_analytics_workspace_onboarding.workspace_id)
    
    import * as pulumi from "@pulumi/pulumi";
    import * as azure from "@pulumi/azure";
    
    const exampleResourceGroup = new azure.core.ResourceGroup("exampleResourceGroup", {location: "West Europe"});
    const exampleAnalyticsWorkspace = new azure.operationalinsights.AnalyticsWorkspace("exampleAnalyticsWorkspace", {
        location: exampleResourceGroup.location,
        resourceGroupName: exampleResourceGroup.name,
        sku: "PerGB2018",
    });
    const exampleLogAnalyticsWorkspaceOnboarding = new azure.sentinel.LogAnalyticsWorkspaceOnboarding("exampleLogAnalyticsWorkspaceOnboarding", {workspaceId: exampleAnalyticsWorkspace.id});
    const exampleDataConnectorOffice365 = new azure.sentinel.DataConnectorOffice365("exampleDataConnectorOffice365", {logAnalyticsWorkspaceId: exampleLogAnalyticsWorkspaceOnboarding.workspaceId});
    
    resources:
      exampleResourceGroup:
        type: azure:core:ResourceGroup
        properties:
          location: West Europe
      exampleAnalyticsWorkspace:
        type: azure:operationalinsights:AnalyticsWorkspace
        properties:
          location: ${exampleResourceGroup.location}
          resourceGroupName: ${exampleResourceGroup.name}
          sku: PerGB2018
      exampleLogAnalyticsWorkspaceOnboarding:
        type: azure:sentinel:LogAnalyticsWorkspaceOnboarding
        properties:
          workspaceId: ${exampleAnalyticsWorkspace.id}
      exampleDataConnectorOffice365:
        type: azure:sentinel:DataConnectorOffice365
        properties:
          logAnalyticsWorkspaceId: ${exampleLogAnalyticsWorkspaceOnboarding.workspaceId}
    

    Create DataConnectorOffice365 Resource

    new DataConnectorOffice365(name: string, args: DataConnectorOffice365Args, opts?: CustomResourceOptions);
    @overload
    def DataConnectorOffice365(resource_name: str,
                               opts: Optional[ResourceOptions] = None,
                               exchange_enabled: Optional[bool] = None,
                               log_analytics_workspace_id: Optional[str] = None,
                               name: Optional[str] = None,
                               sharepoint_enabled: Optional[bool] = None,
                               teams_enabled: Optional[bool] = None,
                               tenant_id: Optional[str] = None)
    @overload
    def DataConnectorOffice365(resource_name: str,
                               args: DataConnectorOffice365Args,
                               opts: Optional[ResourceOptions] = None)
    func NewDataConnectorOffice365(ctx *Context, name string, args DataConnectorOffice365Args, opts ...ResourceOption) (*DataConnectorOffice365, error)
    public DataConnectorOffice365(string name, DataConnectorOffice365Args args, CustomResourceOptions? opts = null)
    public DataConnectorOffice365(String name, DataConnectorOffice365Args args)
    public DataConnectorOffice365(String name, DataConnectorOffice365Args args, CustomResourceOptions options)
    
    type: azure:sentinel:DataConnectorOffice365
    properties: # The arguments to resource properties.
    options: # Bag of options to control resource's behavior.
    
    
    name string
    The unique name of the resource.
    args DataConnectorOffice365Args
    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 DataConnectorOffice365Args
    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 DataConnectorOffice365Args
    The arguments to resource properties.
    opts ResourceOption
    Bag of options to control resource's behavior.
    name string
    The unique name of the resource.
    args DataConnectorOffice365Args
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    name String
    The unique name of the resource.
    args DataConnectorOffice365Args
    The arguments to resource properties.
    options CustomResourceOptions
    Bag of options to control resource's behavior.

    DataConnectorOffice365 Resource Properties

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

    Inputs

    The DataConnectorOffice365 resource accepts the following input properties:

    LogAnalyticsWorkspaceId string

    The ID of the Log Analytics Workspace that this Office 365 Data Connector resides in. Changing this forces a new Office 365 Data Connector to be created.

    ExchangeEnabled bool

    Should the Exchange data connector be enabled? Defaults to true.

    Name string

    The name which should be used for this Office 365 Data Connector. Changing this forces a new Office 365 Data Connector to be created.

    SharepointEnabled bool

    Should the SharePoint data connector be enabled? Defaults to true.

    TeamsEnabled bool

    Should the Microsoft Teams data connector be enabled? Defaults to true.

    NOTE: At least one of exchange_enabled, sharedpoint_enabled and teams_enabled has to be specified.

    TenantId string

    The ID of the Tenant that this Office 365 Data Connector connects to. Changing this forces a new Office 365 Data Connector to be created.

    NOTE Currently, only the same tenant as the running account is allowed. Cross-tenant scenario is not supported yet.

    LogAnalyticsWorkspaceId string

    The ID of the Log Analytics Workspace that this Office 365 Data Connector resides in. Changing this forces a new Office 365 Data Connector to be created.

    ExchangeEnabled bool

    Should the Exchange data connector be enabled? Defaults to true.

    Name string

    The name which should be used for this Office 365 Data Connector. Changing this forces a new Office 365 Data Connector to be created.

    SharepointEnabled bool

    Should the SharePoint data connector be enabled? Defaults to true.

    TeamsEnabled bool

    Should the Microsoft Teams data connector be enabled? Defaults to true.

    NOTE: At least one of exchange_enabled, sharedpoint_enabled and teams_enabled has to be specified.

    TenantId string

    The ID of the Tenant that this Office 365 Data Connector connects to. Changing this forces a new Office 365 Data Connector to be created.

    NOTE Currently, only the same tenant as the running account is allowed. Cross-tenant scenario is not supported yet.

    logAnalyticsWorkspaceId String

    The ID of the Log Analytics Workspace that this Office 365 Data Connector resides in. Changing this forces a new Office 365 Data Connector to be created.

    exchangeEnabled Boolean

    Should the Exchange data connector be enabled? Defaults to true.

    name String

    The name which should be used for this Office 365 Data Connector. Changing this forces a new Office 365 Data Connector to be created.

    sharepointEnabled Boolean

    Should the SharePoint data connector be enabled? Defaults to true.

    teamsEnabled Boolean

    Should the Microsoft Teams data connector be enabled? Defaults to true.

    NOTE: At least one of exchange_enabled, sharedpoint_enabled and teams_enabled has to be specified.

    tenantId String

    The ID of the Tenant that this Office 365 Data Connector connects to. Changing this forces a new Office 365 Data Connector to be created.

    NOTE Currently, only the same tenant as the running account is allowed. Cross-tenant scenario is not supported yet.

    logAnalyticsWorkspaceId string

    The ID of the Log Analytics Workspace that this Office 365 Data Connector resides in. Changing this forces a new Office 365 Data Connector to be created.

    exchangeEnabled boolean

    Should the Exchange data connector be enabled? Defaults to true.

    name string

    The name which should be used for this Office 365 Data Connector. Changing this forces a new Office 365 Data Connector to be created.

    sharepointEnabled boolean

    Should the SharePoint data connector be enabled? Defaults to true.

    teamsEnabled boolean

    Should the Microsoft Teams data connector be enabled? Defaults to true.

    NOTE: At least one of exchange_enabled, sharedpoint_enabled and teams_enabled has to be specified.

    tenantId string

    The ID of the Tenant that this Office 365 Data Connector connects to. Changing this forces a new Office 365 Data Connector to be created.

    NOTE Currently, only the same tenant as the running account is allowed. Cross-tenant scenario is not supported yet.

    log_analytics_workspace_id str

    The ID of the Log Analytics Workspace that this Office 365 Data Connector resides in. Changing this forces a new Office 365 Data Connector to be created.

    exchange_enabled bool

    Should the Exchange data connector be enabled? Defaults to true.

    name str

    The name which should be used for this Office 365 Data Connector. Changing this forces a new Office 365 Data Connector to be created.

    sharepoint_enabled bool

    Should the SharePoint data connector be enabled? Defaults to true.

    teams_enabled bool

    Should the Microsoft Teams data connector be enabled? Defaults to true.

    NOTE: At least one of exchange_enabled, sharedpoint_enabled and teams_enabled has to be specified.

    tenant_id str

    The ID of the Tenant that this Office 365 Data Connector connects to. Changing this forces a new Office 365 Data Connector to be created.

    NOTE Currently, only the same tenant as the running account is allowed. Cross-tenant scenario is not supported yet.

    logAnalyticsWorkspaceId String

    The ID of the Log Analytics Workspace that this Office 365 Data Connector resides in. Changing this forces a new Office 365 Data Connector to be created.

    exchangeEnabled Boolean

    Should the Exchange data connector be enabled? Defaults to true.

    name String

    The name which should be used for this Office 365 Data Connector. Changing this forces a new Office 365 Data Connector to be created.

    sharepointEnabled Boolean

    Should the SharePoint data connector be enabled? Defaults to true.

    teamsEnabled Boolean

    Should the Microsoft Teams data connector be enabled? Defaults to true.

    NOTE: At least one of exchange_enabled, sharedpoint_enabled and teams_enabled has to be specified.

    tenantId String

    The ID of the Tenant that this Office 365 Data Connector connects to. Changing this forces a new Office 365 Data Connector to be created.

    NOTE Currently, only the same tenant as the running account is allowed. Cross-tenant scenario is not supported yet.

    Outputs

    All input properties are implicitly available as output properties. Additionally, the DataConnectorOffice365 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 DataConnectorOffice365 Resource

    Get an existing DataConnectorOffice365 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?: DataConnectorOffice365State, opts?: CustomResourceOptions): DataConnectorOffice365
    @staticmethod
    def get(resource_name: str,
            id: str,
            opts: Optional[ResourceOptions] = None,
            exchange_enabled: Optional[bool] = None,
            log_analytics_workspace_id: Optional[str] = None,
            name: Optional[str] = None,
            sharepoint_enabled: Optional[bool] = None,
            teams_enabled: Optional[bool] = None,
            tenant_id: Optional[str] = None) -> DataConnectorOffice365
    func GetDataConnectorOffice365(ctx *Context, name string, id IDInput, state *DataConnectorOffice365State, opts ...ResourceOption) (*DataConnectorOffice365, error)
    public static DataConnectorOffice365 Get(string name, Input<string> id, DataConnectorOffice365State? state, CustomResourceOptions? opts = null)
    public static DataConnectorOffice365 get(String name, Output<String> id, DataConnectorOffice365State state, CustomResourceOptions options)
    Resource lookup is not supported in YAML
    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:
    ExchangeEnabled bool

    Should the Exchange data connector be enabled? Defaults to true.

    LogAnalyticsWorkspaceId string

    The ID of the Log Analytics Workspace that this Office 365 Data Connector resides in. Changing this forces a new Office 365 Data Connector to be created.

    Name string

    The name which should be used for this Office 365 Data Connector. Changing this forces a new Office 365 Data Connector to be created.

    SharepointEnabled bool

    Should the SharePoint data connector be enabled? Defaults to true.

    TeamsEnabled bool

    Should the Microsoft Teams data connector be enabled? Defaults to true.

    NOTE: At least one of exchange_enabled, sharedpoint_enabled and teams_enabled has to be specified.

    TenantId string

    The ID of the Tenant that this Office 365 Data Connector connects to. Changing this forces a new Office 365 Data Connector to be created.

    NOTE Currently, only the same tenant as the running account is allowed. Cross-tenant scenario is not supported yet.

    ExchangeEnabled bool

    Should the Exchange data connector be enabled? Defaults to true.

    LogAnalyticsWorkspaceId string

    The ID of the Log Analytics Workspace that this Office 365 Data Connector resides in. Changing this forces a new Office 365 Data Connector to be created.

    Name string

    The name which should be used for this Office 365 Data Connector. Changing this forces a new Office 365 Data Connector to be created.

    SharepointEnabled bool

    Should the SharePoint data connector be enabled? Defaults to true.

    TeamsEnabled bool

    Should the Microsoft Teams data connector be enabled? Defaults to true.

    NOTE: At least one of exchange_enabled, sharedpoint_enabled and teams_enabled has to be specified.

    TenantId string

    The ID of the Tenant that this Office 365 Data Connector connects to. Changing this forces a new Office 365 Data Connector to be created.

    NOTE Currently, only the same tenant as the running account is allowed. Cross-tenant scenario is not supported yet.

    exchangeEnabled Boolean

    Should the Exchange data connector be enabled? Defaults to true.

    logAnalyticsWorkspaceId String

    The ID of the Log Analytics Workspace that this Office 365 Data Connector resides in. Changing this forces a new Office 365 Data Connector to be created.

    name String

    The name which should be used for this Office 365 Data Connector. Changing this forces a new Office 365 Data Connector to be created.

    sharepointEnabled Boolean

    Should the SharePoint data connector be enabled? Defaults to true.

    teamsEnabled Boolean

    Should the Microsoft Teams data connector be enabled? Defaults to true.

    NOTE: At least one of exchange_enabled, sharedpoint_enabled and teams_enabled has to be specified.

    tenantId String

    The ID of the Tenant that this Office 365 Data Connector connects to. Changing this forces a new Office 365 Data Connector to be created.

    NOTE Currently, only the same tenant as the running account is allowed. Cross-tenant scenario is not supported yet.

    exchangeEnabled boolean

    Should the Exchange data connector be enabled? Defaults to true.

    logAnalyticsWorkspaceId string

    The ID of the Log Analytics Workspace that this Office 365 Data Connector resides in. Changing this forces a new Office 365 Data Connector to be created.

    name string

    The name which should be used for this Office 365 Data Connector. Changing this forces a new Office 365 Data Connector to be created.

    sharepointEnabled boolean

    Should the SharePoint data connector be enabled? Defaults to true.

    teamsEnabled boolean

    Should the Microsoft Teams data connector be enabled? Defaults to true.

    NOTE: At least one of exchange_enabled, sharedpoint_enabled and teams_enabled has to be specified.

    tenantId string

    The ID of the Tenant that this Office 365 Data Connector connects to. Changing this forces a new Office 365 Data Connector to be created.

    NOTE Currently, only the same tenant as the running account is allowed. Cross-tenant scenario is not supported yet.

    exchange_enabled bool

    Should the Exchange data connector be enabled? Defaults to true.

    log_analytics_workspace_id str

    The ID of the Log Analytics Workspace that this Office 365 Data Connector resides in. Changing this forces a new Office 365 Data Connector to be created.

    name str

    The name which should be used for this Office 365 Data Connector. Changing this forces a new Office 365 Data Connector to be created.

    sharepoint_enabled bool

    Should the SharePoint data connector be enabled? Defaults to true.

    teams_enabled bool

    Should the Microsoft Teams data connector be enabled? Defaults to true.

    NOTE: At least one of exchange_enabled, sharedpoint_enabled and teams_enabled has to be specified.

    tenant_id str

    The ID of the Tenant that this Office 365 Data Connector connects to. Changing this forces a new Office 365 Data Connector to be created.

    NOTE Currently, only the same tenant as the running account is allowed. Cross-tenant scenario is not supported yet.

    exchangeEnabled Boolean

    Should the Exchange data connector be enabled? Defaults to true.

    logAnalyticsWorkspaceId String

    The ID of the Log Analytics Workspace that this Office 365 Data Connector resides in. Changing this forces a new Office 365 Data Connector to be created.

    name String

    The name which should be used for this Office 365 Data Connector. Changing this forces a new Office 365 Data Connector to be created.

    sharepointEnabled Boolean

    Should the SharePoint data connector be enabled? Defaults to true.

    teamsEnabled Boolean

    Should the Microsoft Teams data connector be enabled? Defaults to true.

    NOTE: At least one of exchange_enabled, sharedpoint_enabled and teams_enabled has to be specified.

    tenantId String

    The ID of the Tenant that this Office 365 Data Connector connects to. Changing this forces a new Office 365 Data Connector to be created.

    NOTE Currently, only the same tenant as the running account is allowed. Cross-tenant scenario is not supported yet.

    Import

    Office 365 Data Connectors can be imported using the resource id, e.g.

     $ pulumi import azure:sentinel/dataConnectorOffice365:DataConnectorOffice365 example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.OperationalInsights/workspaces/workspace1/providers/Microsoft.SecurityInsights/dataConnectors/dc1
    

    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.

    Azure Classic v5.52.0 published on Monday, Oct 2, 2023 by Pulumi