This is the latest version of Azure Native. Use the Azure Native v1 docs if using the v1 version of this package.
Azure Native v2.63.0 published on Tuesday, Sep 24, 2024 by Pulumi
azure-native.security.getPricing
Explore with Pulumi AI
This is the latest version of Azure Native. Use the Azure Native v1 docs if using the v1 version of this package.
Azure Native v2.63.0 published on Tuesday, Sep 24, 2024 by Pulumi
Get the Defender plans pricing configurations of the selected scope (valid scopes are resource id or a subscription id). At the resource level, supported resource types are ‘VirtualMachines, VMSS and ARC Machines’. Azure REST API version: 2024-01-01.
Using getPricing
Two invocation forms are available. The direct form accepts plain arguments and either blocks until the result value is available, or returns a Promise-wrapped result. The output form accepts Input-wrapped arguments and returns an Output-wrapped result.
function getPricing(args: GetPricingArgs, opts?: InvokeOptions): Promise<GetPricingResult>
function getPricingOutput(args: GetPricingOutputArgs, opts?: InvokeOptions): Output<GetPricingResult>
def get_pricing(pricing_name: Optional[str] = None,
scope_id: Optional[str] = None,
opts: Optional[InvokeOptions] = None) -> GetPricingResult
def get_pricing_output(pricing_name: Optional[pulumi.Input[str]] = None,
scope_id: Optional[pulumi.Input[str]] = None,
opts: Optional[InvokeOptions] = None) -> Output[GetPricingResult]
func LookupPricing(ctx *Context, args *LookupPricingArgs, opts ...InvokeOption) (*LookupPricingResult, error)
func LookupPricingOutput(ctx *Context, args *LookupPricingOutputArgs, opts ...InvokeOption) LookupPricingResultOutput
> Note: This function is named LookupPricing
in the Go SDK.
public static class GetPricing
{
public static Task<GetPricingResult> InvokeAsync(GetPricingArgs args, InvokeOptions? opts = null)
public static Output<GetPricingResult> Invoke(GetPricingInvokeArgs args, InvokeOptions? opts = null)
}
public static CompletableFuture<GetPricingResult> getPricing(GetPricingArgs args, InvokeOptions options)
// Output-based functions aren't available in Java yet
fn::invoke:
function: azure-native:security:getPricing
arguments:
# arguments dictionary
The following arguments are supported:
- Pricing
Name string - name of the pricing configuration
- Scope
Id string - The scope id of the pricing. Valid scopes are: subscription (format: 'subscriptions/{subscriptionId}'), or a specific resource (format: 'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}) - Supported resources are (VirtualMachines)
- Pricing
Name string - name of the pricing configuration
- Scope
Id string - The scope id of the pricing. Valid scopes are: subscription (format: 'subscriptions/{subscriptionId}'), or a specific resource (format: 'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}) - Supported resources are (VirtualMachines)
- pricing
Name String - name of the pricing configuration
- scope
Id String - The scope id of the pricing. Valid scopes are: subscription (format: 'subscriptions/{subscriptionId}'), or a specific resource (format: 'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}) - Supported resources are (VirtualMachines)
- pricing
Name string - name of the pricing configuration
- scope
Id string - The scope id of the pricing. Valid scopes are: subscription (format: 'subscriptions/{subscriptionId}'), or a specific resource (format: 'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}) - Supported resources are (VirtualMachines)
- pricing_
name str - name of the pricing configuration
- scope_
id str - The scope id of the pricing. Valid scopes are: subscription (format: 'subscriptions/{subscriptionId}'), or a specific resource (format: 'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}) - Supported resources are (VirtualMachines)
- pricing
Name String - name of the pricing configuration
- scope
Id String - The scope id of the pricing. Valid scopes are: subscription (format: 'subscriptions/{subscriptionId}'), or a specific resource (format: 'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}) - Supported resources are (VirtualMachines)
getPricing Result
The following output properties are available:
- Deprecated bool
- Optional. True if the plan is deprecated. If there are replacing plans they will appear in
replacedBy
property - Enablement
Time string - Optional. If
pricingTier
isStandard
then this property holds the date of the last time thepricingTier
was set toStandard
, when available (e.g 2023-03-01T12:42:42.1921106Z). - Free
Trial stringRemaining Time - The duration left for the subscriptions free trial period - in ISO 8601 format (e.g. P3Y6M4DT12H30M5S).
- Id string
- Resource Id
- Inherited string
- "inherited" = "True" indicates that the current scope inherits its pricing configuration from its parent. The ID of the parent scope that provides the inherited configuration is displayed in the "inheritedFrom" field. On the other hand, "inherited" = "False" indicates that the current scope has its own pricing configuration explicitly set, and does not inherit from its parent. This field is read only and available only for resource-level pricing.
- Inherited
From string - The id of the scope inherited from. "Null" if not inherited. This field is only available for resource-level pricing.
- Name string
- Resource name
- Pricing
Tier string - Indicates whether the Defender plan is enabled on the selected scope. Microsoft Defender for Cloud is provided in two pricing tiers: free and standard. The standard tier offers advanced security capabilities, while the free tier offers basic security features.
- Replaced
By List<string> - Optional. List of plans that replace this plan. This property exists only if this plan is deprecated.
- Resources
Coverage stringStatus - This field is available for subscription-level only, and reflects the coverage status of the resources under the subscription. Please note: The "pricingTier" field reflects the plan status of the subscription. However, since the plan status can also be defined at the resource level, there might be misalignment between the subscription's plan status and the resource status. This field helps indicate the coverage status of the resources.
- Type string
- Resource type
- Enforce string
- If set to "False", it allows the descendants of this scope to override the pricing configuration set on this scope (allows setting inherited="False"). If set to "True", it prevents overrides and forces this pricing configuration on all the descendants of this scope. This field is only available for subscription-level pricing.
- Extensions
List<Pulumi.
Azure Native. Security. Outputs. Extension Response> - Optional. List of extensions offered under a plan.
- Sub
Plan string - The sub-plan selected for a Standard pricing configuration, when more than one sub-plan is available. Each sub-plan enables a set of security features. When not specified, full plan is applied. For VirtualMachines plan, available sub plans are 'P1' & 'P2', where for resource level only 'P1' sub plan is supported.
- Deprecated bool
- Optional. True if the plan is deprecated. If there are replacing plans they will appear in
replacedBy
property - Enablement
Time string - Optional. If
pricingTier
isStandard
then this property holds the date of the last time thepricingTier
was set toStandard
, when available (e.g 2023-03-01T12:42:42.1921106Z). - Free
Trial stringRemaining Time - The duration left for the subscriptions free trial period - in ISO 8601 format (e.g. P3Y6M4DT12H30M5S).
- Id string
- Resource Id
- Inherited string
- "inherited" = "True" indicates that the current scope inherits its pricing configuration from its parent. The ID of the parent scope that provides the inherited configuration is displayed in the "inheritedFrom" field. On the other hand, "inherited" = "False" indicates that the current scope has its own pricing configuration explicitly set, and does not inherit from its parent. This field is read only and available only for resource-level pricing.
- Inherited
From string - The id of the scope inherited from. "Null" if not inherited. This field is only available for resource-level pricing.
- Name string
- Resource name
- Pricing
Tier string - Indicates whether the Defender plan is enabled on the selected scope. Microsoft Defender for Cloud is provided in two pricing tiers: free and standard. The standard tier offers advanced security capabilities, while the free tier offers basic security features.
- Replaced
By []string - Optional. List of plans that replace this plan. This property exists only if this plan is deprecated.
- Resources
Coverage stringStatus - This field is available for subscription-level only, and reflects the coverage status of the resources under the subscription. Please note: The "pricingTier" field reflects the plan status of the subscription. However, since the plan status can also be defined at the resource level, there might be misalignment between the subscription's plan status and the resource status. This field helps indicate the coverage status of the resources.
- Type string
- Resource type
- Enforce string
- If set to "False", it allows the descendants of this scope to override the pricing configuration set on this scope (allows setting inherited="False"). If set to "True", it prevents overrides and forces this pricing configuration on all the descendants of this scope. This field is only available for subscription-level pricing.
- Extensions
[]Extension
Response - Optional. List of extensions offered under a plan.
- Sub
Plan string - The sub-plan selected for a Standard pricing configuration, when more than one sub-plan is available. Each sub-plan enables a set of security features. When not specified, full plan is applied. For VirtualMachines plan, available sub plans are 'P1' & 'P2', where for resource level only 'P1' sub plan is supported.
- deprecated Boolean
- Optional. True if the plan is deprecated. If there are replacing plans they will appear in
replacedBy
property - enablement
Time String - Optional. If
pricingTier
isStandard
then this property holds the date of the last time thepricingTier
was set toStandard
, when available (e.g 2023-03-01T12:42:42.1921106Z). - free
Trial StringRemaining Time - The duration left for the subscriptions free trial period - in ISO 8601 format (e.g. P3Y6M4DT12H30M5S).
- id String
- Resource Id
- inherited String
- "inherited" = "True" indicates that the current scope inherits its pricing configuration from its parent. The ID of the parent scope that provides the inherited configuration is displayed in the "inheritedFrom" field. On the other hand, "inherited" = "False" indicates that the current scope has its own pricing configuration explicitly set, and does not inherit from its parent. This field is read only and available only for resource-level pricing.
- inherited
From String - The id of the scope inherited from. "Null" if not inherited. This field is only available for resource-level pricing.
- name String
- Resource name
- pricing
Tier String - Indicates whether the Defender plan is enabled on the selected scope. Microsoft Defender for Cloud is provided in two pricing tiers: free and standard. The standard tier offers advanced security capabilities, while the free tier offers basic security features.
- replaced
By List<String> - Optional. List of plans that replace this plan. This property exists only if this plan is deprecated.
- resources
Coverage StringStatus - This field is available for subscription-level only, and reflects the coverage status of the resources under the subscription. Please note: The "pricingTier" field reflects the plan status of the subscription. However, since the plan status can also be defined at the resource level, there might be misalignment between the subscription's plan status and the resource status. This field helps indicate the coverage status of the resources.
- type String
- Resource type
- enforce String
- If set to "False", it allows the descendants of this scope to override the pricing configuration set on this scope (allows setting inherited="False"). If set to "True", it prevents overrides and forces this pricing configuration on all the descendants of this scope. This field is only available for subscription-level pricing.
- extensions
List<Extension
Response> - Optional. List of extensions offered under a plan.
- sub
Plan String - The sub-plan selected for a Standard pricing configuration, when more than one sub-plan is available. Each sub-plan enables a set of security features. When not specified, full plan is applied. For VirtualMachines plan, available sub plans are 'P1' & 'P2', where for resource level only 'P1' sub plan is supported.
- deprecated boolean
- Optional. True if the plan is deprecated. If there are replacing plans they will appear in
replacedBy
property - enablement
Time string - Optional. If
pricingTier
isStandard
then this property holds the date of the last time thepricingTier
was set toStandard
, when available (e.g 2023-03-01T12:42:42.1921106Z). - free
Trial stringRemaining Time - The duration left for the subscriptions free trial period - in ISO 8601 format (e.g. P3Y6M4DT12H30M5S).
- id string
- Resource Id
- inherited string
- "inherited" = "True" indicates that the current scope inherits its pricing configuration from its parent. The ID of the parent scope that provides the inherited configuration is displayed in the "inheritedFrom" field. On the other hand, "inherited" = "False" indicates that the current scope has its own pricing configuration explicitly set, and does not inherit from its parent. This field is read only and available only for resource-level pricing.
- inherited
From string - The id of the scope inherited from. "Null" if not inherited. This field is only available for resource-level pricing.
- name string
- Resource name
- pricing
Tier string - Indicates whether the Defender plan is enabled on the selected scope. Microsoft Defender for Cloud is provided in two pricing tiers: free and standard. The standard tier offers advanced security capabilities, while the free tier offers basic security features.
- replaced
By string[] - Optional. List of plans that replace this plan. This property exists only if this plan is deprecated.
- resources
Coverage stringStatus - This field is available for subscription-level only, and reflects the coverage status of the resources under the subscription. Please note: The "pricingTier" field reflects the plan status of the subscription. However, since the plan status can also be defined at the resource level, there might be misalignment between the subscription's plan status and the resource status. This field helps indicate the coverage status of the resources.
- type string
- Resource type
- enforce string
- If set to "False", it allows the descendants of this scope to override the pricing configuration set on this scope (allows setting inherited="False"). If set to "True", it prevents overrides and forces this pricing configuration on all the descendants of this scope. This field is only available for subscription-level pricing.
- extensions
Extension
Response[] - Optional. List of extensions offered under a plan.
- sub
Plan string - The sub-plan selected for a Standard pricing configuration, when more than one sub-plan is available. Each sub-plan enables a set of security features. When not specified, full plan is applied. For VirtualMachines plan, available sub plans are 'P1' & 'P2', where for resource level only 'P1' sub plan is supported.
- deprecated bool
- Optional. True if the plan is deprecated. If there are replacing plans they will appear in
replacedBy
property - enablement_
time str - Optional. If
pricingTier
isStandard
then this property holds the date of the last time thepricingTier
was set toStandard
, when available (e.g 2023-03-01T12:42:42.1921106Z). - free_
trial_ strremaining_ time - The duration left for the subscriptions free trial period - in ISO 8601 format (e.g. P3Y6M4DT12H30M5S).
- id str
- Resource Id
- inherited str
- "inherited" = "True" indicates that the current scope inherits its pricing configuration from its parent. The ID of the parent scope that provides the inherited configuration is displayed in the "inheritedFrom" field. On the other hand, "inherited" = "False" indicates that the current scope has its own pricing configuration explicitly set, and does not inherit from its parent. This field is read only and available only for resource-level pricing.
- inherited_
from str - The id of the scope inherited from. "Null" if not inherited. This field is only available for resource-level pricing.
- name str
- Resource name
- pricing_
tier str - Indicates whether the Defender plan is enabled on the selected scope. Microsoft Defender for Cloud is provided in two pricing tiers: free and standard. The standard tier offers advanced security capabilities, while the free tier offers basic security features.
- replaced_
by Sequence[str] - Optional. List of plans that replace this plan. This property exists only if this plan is deprecated.
- resources_
coverage_ strstatus - This field is available for subscription-level only, and reflects the coverage status of the resources under the subscription. Please note: The "pricingTier" field reflects the plan status of the subscription. However, since the plan status can also be defined at the resource level, there might be misalignment between the subscription's plan status and the resource status. This field helps indicate the coverage status of the resources.
- type str
- Resource type
- enforce str
- If set to "False", it allows the descendants of this scope to override the pricing configuration set on this scope (allows setting inherited="False"). If set to "True", it prevents overrides and forces this pricing configuration on all the descendants of this scope. This field is only available for subscription-level pricing.
- extensions
Sequence[Extension
Response] - Optional. List of extensions offered under a plan.
- sub_
plan str - The sub-plan selected for a Standard pricing configuration, when more than one sub-plan is available. Each sub-plan enables a set of security features. When not specified, full plan is applied. For VirtualMachines plan, available sub plans are 'P1' & 'P2', where for resource level only 'P1' sub plan is supported.
- deprecated Boolean
- Optional. True if the plan is deprecated. If there are replacing plans they will appear in
replacedBy
property - enablement
Time String - Optional. If
pricingTier
isStandard
then this property holds the date of the last time thepricingTier
was set toStandard
, when available (e.g 2023-03-01T12:42:42.1921106Z). - free
Trial StringRemaining Time - The duration left for the subscriptions free trial period - in ISO 8601 format (e.g. P3Y6M4DT12H30M5S).
- id String
- Resource Id
- inherited String
- "inherited" = "True" indicates that the current scope inherits its pricing configuration from its parent. The ID of the parent scope that provides the inherited configuration is displayed in the "inheritedFrom" field. On the other hand, "inherited" = "False" indicates that the current scope has its own pricing configuration explicitly set, and does not inherit from its parent. This field is read only and available only for resource-level pricing.
- inherited
From String - The id of the scope inherited from. "Null" if not inherited. This field is only available for resource-level pricing.
- name String
- Resource name
- pricing
Tier String - Indicates whether the Defender plan is enabled on the selected scope. Microsoft Defender for Cloud is provided in two pricing tiers: free and standard. The standard tier offers advanced security capabilities, while the free tier offers basic security features.
- replaced
By List<String> - Optional. List of plans that replace this plan. This property exists only if this plan is deprecated.
- resources
Coverage StringStatus - This field is available for subscription-level only, and reflects the coverage status of the resources under the subscription. Please note: The "pricingTier" field reflects the plan status of the subscription. However, since the plan status can also be defined at the resource level, there might be misalignment between the subscription's plan status and the resource status. This field helps indicate the coverage status of the resources.
- type String
- Resource type
- enforce String
- If set to "False", it allows the descendants of this scope to override the pricing configuration set on this scope (allows setting inherited="False"). If set to "True", it prevents overrides and forces this pricing configuration on all the descendants of this scope. This field is only available for subscription-level pricing.
- extensions List<Property Map>
- Optional. List of extensions offered under a plan.
- sub
Plan String - The sub-plan selected for a Standard pricing configuration, when more than one sub-plan is available. Each sub-plan enables a set of security features. When not specified, full plan is applied. For VirtualMachines plan, available sub plans are 'P1' & 'P2', where for resource level only 'P1' sub plan is supported.
Supporting Types
ExtensionResponse
- Is
Enabled string - Indicates whether the extension is enabled.
- Name string
- The extension name. Supported values are: AgentlessDiscoveryForKubernetes - API-based discovery of information about Kubernetes cluster architecture, workload objects, and setup. Required for Kubernetes inventory, identity and network exposure detection, attack path analysis and risk hunting as part of the cloud security explorer. Available for CloudPosture plan.OnUploadMalwareScanning - Limits the GB to be scanned per month for each storage account within the subscription. Once this limit reached on a given storage account, Blobs won't be scanned during current calendar month. Available for StorageAccounts plan.SensitiveDataDiscovery - Sensitive data discovery identifies Blob storage container with sensitive data such as credentials, credit cards, and more, to help prioritize and investigate security events. Available for StorageAccounts and CloudPosture plans.ContainerRegistriesVulnerabilityAssessments - Provides vulnerability management for images stored in your container registries. Available for CloudPosture and Containers plans.
- Operation
Status Pulumi.Azure Native. Security. Inputs. Operation Status Response - Optional. A status describing the success/failure of the extension's enablement/disablement operation.
- Additional
Extension objectProperties - Property values associated with the extension.
- Is
Enabled string - Indicates whether the extension is enabled.
- Name string
- The extension name. Supported values are: AgentlessDiscoveryForKubernetes - API-based discovery of information about Kubernetes cluster architecture, workload objects, and setup. Required for Kubernetes inventory, identity and network exposure detection, attack path analysis and risk hunting as part of the cloud security explorer. Available for CloudPosture plan.OnUploadMalwareScanning - Limits the GB to be scanned per month for each storage account within the subscription. Once this limit reached on a given storage account, Blobs won't be scanned during current calendar month. Available for StorageAccounts plan.SensitiveDataDiscovery - Sensitive data discovery identifies Blob storage container with sensitive data such as credentials, credit cards, and more, to help prioritize and investigate security events. Available for StorageAccounts and CloudPosture plans.ContainerRegistriesVulnerabilityAssessments - Provides vulnerability management for images stored in your container registries. Available for CloudPosture and Containers plans.
- Operation
Status OperationStatus Response - Optional. A status describing the success/failure of the extension's enablement/disablement operation.
- Additional
Extension interface{}Properties - Property values associated with the extension.
- is
Enabled String - Indicates whether the extension is enabled.
- name String
- The extension name. Supported values are: AgentlessDiscoveryForKubernetes - API-based discovery of information about Kubernetes cluster architecture, workload objects, and setup. Required for Kubernetes inventory, identity and network exposure detection, attack path analysis and risk hunting as part of the cloud security explorer. Available for CloudPosture plan.OnUploadMalwareScanning - Limits the GB to be scanned per month for each storage account within the subscription. Once this limit reached on a given storage account, Blobs won't be scanned during current calendar month. Available for StorageAccounts plan.SensitiveDataDiscovery - Sensitive data discovery identifies Blob storage container with sensitive data such as credentials, credit cards, and more, to help prioritize and investigate security events. Available for StorageAccounts and CloudPosture plans.ContainerRegistriesVulnerabilityAssessments - Provides vulnerability management for images stored in your container registries. Available for CloudPosture and Containers plans.
- operation
Status OperationStatus Response - Optional. A status describing the success/failure of the extension's enablement/disablement operation.
- additional
Extension ObjectProperties - Property values associated with the extension.
- is
Enabled string - Indicates whether the extension is enabled.
- name string
- The extension name. Supported values are: AgentlessDiscoveryForKubernetes - API-based discovery of information about Kubernetes cluster architecture, workload objects, and setup. Required for Kubernetes inventory, identity and network exposure detection, attack path analysis and risk hunting as part of the cloud security explorer. Available for CloudPosture plan.OnUploadMalwareScanning - Limits the GB to be scanned per month for each storage account within the subscription. Once this limit reached on a given storage account, Blobs won't be scanned during current calendar month. Available for StorageAccounts plan.SensitiveDataDiscovery - Sensitive data discovery identifies Blob storage container with sensitive data such as credentials, credit cards, and more, to help prioritize and investigate security events. Available for StorageAccounts and CloudPosture plans.ContainerRegistriesVulnerabilityAssessments - Provides vulnerability management for images stored in your container registries. Available for CloudPosture and Containers plans.
- operation
Status OperationStatus Response - Optional. A status describing the success/failure of the extension's enablement/disablement operation.
- additional
Extension anyProperties - Property values associated with the extension.
- is_
enabled str - Indicates whether the extension is enabled.
- name str
- The extension name. Supported values are: AgentlessDiscoveryForKubernetes - API-based discovery of information about Kubernetes cluster architecture, workload objects, and setup. Required for Kubernetes inventory, identity and network exposure detection, attack path analysis and risk hunting as part of the cloud security explorer. Available for CloudPosture plan.OnUploadMalwareScanning - Limits the GB to be scanned per month for each storage account within the subscription. Once this limit reached on a given storage account, Blobs won't be scanned during current calendar month. Available for StorageAccounts plan.SensitiveDataDiscovery - Sensitive data discovery identifies Blob storage container with sensitive data such as credentials, credit cards, and more, to help prioritize and investigate security events. Available for StorageAccounts and CloudPosture plans.ContainerRegistriesVulnerabilityAssessments - Provides vulnerability management for images stored in your container registries. Available for CloudPosture and Containers plans.
- operation_
status OperationStatus Response - Optional. A status describing the success/failure of the extension's enablement/disablement operation.
- additional_
extension_ Anyproperties - Property values associated with the extension.
- is
Enabled String - Indicates whether the extension is enabled.
- name String
- The extension name. Supported values are: AgentlessDiscoveryForKubernetes - API-based discovery of information about Kubernetes cluster architecture, workload objects, and setup. Required for Kubernetes inventory, identity and network exposure detection, attack path analysis and risk hunting as part of the cloud security explorer. Available for CloudPosture plan.OnUploadMalwareScanning - Limits the GB to be scanned per month for each storage account within the subscription. Once this limit reached on a given storage account, Blobs won't be scanned during current calendar month. Available for StorageAccounts plan.SensitiveDataDiscovery - Sensitive data discovery identifies Blob storage container with sensitive data such as credentials, credit cards, and more, to help prioritize and investigate security events. Available for StorageAccounts and CloudPosture plans.ContainerRegistriesVulnerabilityAssessments - Provides vulnerability management for images stored in your container registries. Available for CloudPosture and Containers plans.
- operation
Status Property Map - Optional. A status describing the success/failure of the extension's enablement/disablement operation.
- additional
Extension AnyProperties - Property values associated with the extension.
OperationStatusResponse
Package Details
- Repository
- Azure Native pulumi/pulumi-azure-native
- License
- Apache-2.0
This is the latest version of Azure Native. Use the Azure Native v1 docs if using the v1 version of this package.
Azure Native v2.63.0 published on Tuesday, Sep 24, 2024 by Pulumi