{"name":"fastly","displayName":"Fastly","version":"11.4.1","description":"A Pulumi package for creating and managing fastly cloud resources.","keywords":["pulumi","fastly"],"homepage":"https://pulumi.io","license":"Apache-2.0","attribution":"This Pulumi package is based on the [`fastly` Terraform Provider](https://github.com/fastly/terraform-provider-fastly).","repository":"https://github.com/pulumi/pulumi-fastly","meta":{"moduleFormat":"(.*)(?:/[^/]*)"},"language":{"csharp":{"packageReferences":{"Pulumi":"3.*"},"namespaces":{"fastly":"Fastly"},"compatibility":"tfbridge20","respectSchemaVersion":true},"go":{"importBasePath":"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly","generateResourceContainerTypes":true,"generateExtraInputTypes":true,"respectSchemaVersion":true},"nodejs":{"packageDescription":"A Pulumi package for creating and managing fastly cloud resources.. Based on terraform-provider-fastly: version v4","readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/fastly/terraform-provider-fastly)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-fastly` repo](https://github.com/pulumi/pulumi-fastly/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-fastly` repo](https://github.com/fastly/terraform-provider-fastly/issues).","devDependencies":{"@types/mime":"^2.0.0","@types/node":"^10.0.0"},"compatibility":"tfbridge20","disableUnionOutputTypes":true,"respectSchemaVersion":true},"python":{"readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/fastly/terraform-provider-fastly)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-fastly` repo](https://github.com/pulumi/pulumi-fastly/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-fastly` repo](https://github.com/fastly/terraform-provider-fastly/issues).","compatibility":"tfbridge20","respectSchemaVersion":true,"pyproject":{"enabled":true}}},"config":{"variables":{"apiKey":{"type":"string","description":"Fastly API Key from https://app.fastly.com/#account"},"baseUrl":{"type":"string","description":"Fastly API URL"},"forceHttp2":{"type":"boolean","description":"Set this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to disable HTTP/1.x fallback mechanism that the underlying Go library will attempt upon connection to `api.fastly.com:443` by default. This may slightly improve the provider's performance and reduce unnecessary TLS handshakes. Default: \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"noAuth":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e if your configuration only consumes data sources that do not require authentication, such as \u003cspan pulumi-lang-nodejs=\"`fastly.getFastlyIpRanges`\" pulumi-lang-dotnet=\"`fastly.getFastlyIpRanges`\" pulumi-lang-go=\"`getFastlyIpRanges`\" pulumi-lang-python=\"`get_fastly_ip_ranges`\" pulumi-lang-yaml=\"`fastly.getFastlyIpRanges`\" pulumi-lang-java=\"`fastly.getFastlyIpRanges`\"\u003e`fastly.getFastlyIpRanges`\u003c/span\u003e"}}},"types":{"fastly:index/AlertDimensions:AlertDimensions":{"properties":{"domains":{"type":"array","items":{"type":"string"},"description":"Names of a subset of domains that the alert monitors.\n"},"origins":{"type":"array","items":{"type":"string"},"description":"Addresses of a subset of backends that the alert monitors.\n"}},"type":"object"},"fastly:index/AlertEvaluationStrategy:AlertEvaluationStrategy":{"properties":{"ignoreBelow":{"type":"number","description":"Threshold for the denominator value used in evaluations that calculate a rate or ratio. Usually used to filter out noise.\n"},"period":{"type":"string","description":"The length of time to evaluate whether the conditions have been met. The data is polled every minute. One of: \u003cspan pulumi-lang-nodejs=\"`2m`\" pulumi-lang-dotnet=\"`2m`\" pulumi-lang-go=\"`2m`\" pulumi-lang-python=\"`2m`\" pulumi-lang-yaml=\"`2m`\" pulumi-lang-java=\"`2m`\"\u003e`2m`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`3m`\" pulumi-lang-dotnet=\"`3m`\" pulumi-lang-go=\"`3m`\" pulumi-lang-python=\"`3m`\" pulumi-lang-yaml=\"`3m`\" pulumi-lang-java=\"`3m`\"\u003e`3m`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`5m`\" pulumi-lang-dotnet=\"`5m`\" pulumi-lang-go=\"`5m`\" pulumi-lang-python=\"`5m`\" pulumi-lang-yaml=\"`5m`\" pulumi-lang-java=\"`5m`\"\u003e`5m`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`15m`\" pulumi-lang-dotnet=\"`15m`\" pulumi-lang-go=\"`15m`\" pulumi-lang-python=\"`15m`\" pulumi-lang-yaml=\"`15m`\" pulumi-lang-java=\"`15m`\"\u003e`15m`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`30m`\" pulumi-lang-dotnet=\"`30m`\" pulumi-lang-go=\"`30m`\" pulumi-lang-python=\"`30m`\" pulumi-lang-yaml=\"`30m`\" pulumi-lang-java=\"`30m`\"\u003e`30m`\u003c/span\u003e.\n"},"threshold":{"type":"number","description":"Threshold used to alert.\n"},"type":{"type":"string","description":"Type of strategy to use to evaluate. One of: \u003cspan pulumi-lang-nodejs=\"`aboveThreshold`\" pulumi-lang-dotnet=\"`AboveThreshold`\" pulumi-lang-go=\"`aboveThreshold`\" pulumi-lang-python=\"`above_threshold`\" pulumi-lang-yaml=\"`aboveThreshold`\" pulumi-lang-java=\"`aboveThreshold`\"\u003e`above_threshold`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`allAboveThreshold`\" pulumi-lang-dotnet=\"`AllAboveThreshold`\" pulumi-lang-go=\"`allAboveThreshold`\" pulumi-lang-python=\"`all_above_threshold`\" pulumi-lang-yaml=\"`allAboveThreshold`\" pulumi-lang-java=\"`allAboveThreshold`\"\u003e`all_above_threshold`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`belowThreshold`\" pulumi-lang-dotnet=\"`BelowThreshold`\" pulumi-lang-go=\"`belowThreshold`\" pulumi-lang-python=\"`below_threshold`\" pulumi-lang-yaml=\"`belowThreshold`\" pulumi-lang-java=\"`belowThreshold`\"\u003e`below_threshold`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`percentAbsolute`\" pulumi-lang-dotnet=\"`PercentAbsolute`\" pulumi-lang-go=\"`percentAbsolute`\" pulumi-lang-python=\"`percent_absolute`\" pulumi-lang-yaml=\"`percentAbsolute`\" pulumi-lang-java=\"`percentAbsolute`\"\u003e`percent_absolute`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`percentDecrease`\" pulumi-lang-dotnet=\"`PercentDecrease`\" pulumi-lang-go=\"`percentDecrease`\" pulumi-lang-python=\"`percent_decrease`\" pulumi-lang-yaml=\"`percentDecrease`\" pulumi-lang-java=\"`percentDecrease`\"\u003e`percent_decrease`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`percentIncrease`\" pulumi-lang-dotnet=\"`PercentIncrease`\" pulumi-lang-go=\"`percentIncrease`\" pulumi-lang-python=\"`percent_increase`\" pulumi-lang-yaml=\"`percentIncrease`\" pulumi-lang-java=\"`percentIncrease`\"\u003e`percent_increase`\u003c/span\u003e.\n"}},"type":"object","required":["period","threshold","type"]},"fastly:index/CustomDashboardDashboardItem:CustomDashboardDashboardItem":{"properties":{"dataSource":{"$ref":"#/types/fastly:index/CustomDashboardDashboardItemDataSource:CustomDashboardDashboardItemDataSource","description":"An object which describes the data to display.\n"},"id":{"type":"string","description":"Dashboard item identifier (alphanumeric). Must be unique, relative to other items in the same dashboard.\n"},"span":{"type":"integer","description":"The number of columns for the dashboard item to span. Dashboards are rendered on a 12-column grid on \"desktop\" screen sizes.\n"},"subtitle":{"type":"string","description":"A human-readable subtitle for the dashboard item. Often a description of the visualization.\n"},"title":{"type":"string","description":"A human-readable title for the dashboard item.\n"},"visualization":{"$ref":"#/types/fastly:index/CustomDashboardDashboardItemVisualization:CustomDashboardDashboardItemVisualization","description":"An object which describes the data visualization to display.\n"}},"type":"object","required":["dataSource","id","subtitle","title","visualization"]},"fastly:index/CustomDashboardDashboardItemDataSource:CustomDashboardDashboardItemDataSource":{"properties":{"config":{"$ref":"#/types/fastly:index/CustomDashboardDashboardItemDataSourceConfig:CustomDashboardDashboardItemDataSourceConfig","description":"Configuration options for the selected data source.\n"},"type":{"type":"string","description":"The source of the data to display. One of: `stats.edge`, `stats.domain`, `stats.origin`.\n"}},"type":"object","required":["config","type"]},"fastly:index/CustomDashboardDashboardItemDataSourceConfig:CustomDashboardDashboardItemDataSourceConfig":{"properties":{"metrics":{"type":"array","items":{"type":"string"},"description":"The metrics to visualize. Valid options are defined by the selected data source: [stats.edge](https://www.fastly.com/documentation/reference/api/observability/custom-dashboards/metrics/edge/), [stats.domain](https://www.fastly.com/documentation/reference/api/observability/custom-dashboards/metrics/domain/), [stats.origin](https://www.fastly.com/documentation/reference/api/observability/custom-dashboards/metrics/origin/).\n"}},"type":"object","required":["metrics"]},"fastly:index/CustomDashboardDashboardItemVisualization:CustomDashboardDashboardItemVisualization":{"properties":{"config":{"$ref":"#/types/fastly:index/CustomDashboardDashboardItemVisualizationConfig:CustomDashboardDashboardItemVisualizationConfig","description":"Configuration options for the selected data source.\n"},"type":{"type":"string","description":"The type of visualization to display. One of: \u003cspan pulumi-lang-nodejs=\"`chart`\" pulumi-lang-dotnet=\"`Chart`\" pulumi-lang-go=\"`chart`\" pulumi-lang-python=\"`chart`\" pulumi-lang-yaml=\"`chart`\" pulumi-lang-java=\"`chart`\"\u003e`chart`\u003c/span\u003e.\n"}},"type":"object","required":["config","type"]},"fastly:index/CustomDashboardDashboardItemVisualizationConfig:CustomDashboardDashboardItemVisualizationConfig":{"properties":{"calculationMethod":{"type":"string","description":"The aggregation function to apply to the dataset. One of: \u003cspan pulumi-lang-nodejs=\"`avg`\" pulumi-lang-dotnet=\"`Avg`\" pulumi-lang-go=\"`avg`\" pulumi-lang-python=\"`avg`\" pulumi-lang-yaml=\"`avg`\" pulumi-lang-java=\"`avg`\"\u003e`avg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`sum`\" pulumi-lang-dotnet=\"`Sum`\" pulumi-lang-go=\"`sum`\" pulumi-lang-python=\"`sum`\" pulumi-lang-yaml=\"`sum`\" pulumi-lang-java=\"`sum`\"\u003e`sum`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`min`\" pulumi-lang-dotnet=\"`Min`\" pulumi-lang-go=\"`min`\" pulumi-lang-python=\"`min`\" pulumi-lang-yaml=\"`min`\" pulumi-lang-java=\"`min`\"\u003e`min`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`max`\" pulumi-lang-dotnet=\"`Max`\" pulumi-lang-go=\"`max`\" pulumi-lang-python=\"`max`\" pulumi-lang-yaml=\"`max`\" pulumi-lang-java=\"`max`\"\u003e`max`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`latest`\" pulumi-lang-dotnet=\"`Latest`\" pulumi-lang-go=\"`latest`\" pulumi-lang-python=\"`latest`\" pulumi-lang-yaml=\"`latest`\" pulumi-lang-java=\"`latest`\"\u003e`latest`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`p95`\" pulumi-lang-dotnet=\"`P95`\" pulumi-lang-go=\"`p95`\" pulumi-lang-python=\"`p95`\" pulumi-lang-yaml=\"`p95`\" pulumi-lang-java=\"`p95`\"\u003e`p95`\u003c/span\u003e.\n"},"format":{"type":"string","description":"The units to use to format the data. One of: \u003cspan pulumi-lang-nodejs=\"`number`\" pulumi-lang-dotnet=\"`Number`\" pulumi-lang-go=\"`number`\" pulumi-lang-python=\"`number`\" pulumi-lang-yaml=\"`number`\" pulumi-lang-java=\"`number`\"\u003e`number`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bytes`\" pulumi-lang-dotnet=\"`Bytes`\" pulumi-lang-go=\"`bytes`\" pulumi-lang-python=\"`bytes`\" pulumi-lang-yaml=\"`bytes`\" pulumi-lang-java=\"`bytes`\"\u003e`bytes`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`percent`\" pulumi-lang-dotnet=\"`Percent`\" pulumi-lang-go=\"`percent`\" pulumi-lang-python=\"`percent`\" pulumi-lang-yaml=\"`percent`\" pulumi-lang-java=\"`percent`\"\u003e`percent`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requests`\" pulumi-lang-dotnet=\"`Requests`\" pulumi-lang-go=\"`requests`\" pulumi-lang-python=\"`requests`\" pulumi-lang-yaml=\"`requests`\" pulumi-lang-java=\"`requests`\"\u003e`requests`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`responses`\" pulumi-lang-dotnet=\"`Responses`\" pulumi-lang-go=\"`responses`\" pulumi-lang-python=\"`responses`\" pulumi-lang-yaml=\"`responses`\" pulumi-lang-java=\"`responses`\"\u003e`responses`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`seconds`\" pulumi-lang-dotnet=\"`Seconds`\" pulumi-lang-go=\"`seconds`\" pulumi-lang-python=\"`seconds`\" pulumi-lang-yaml=\"`seconds`\" pulumi-lang-java=\"`seconds`\"\u003e`seconds`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`milliseconds`\" pulumi-lang-dotnet=\"`Milliseconds`\" pulumi-lang-go=\"`milliseconds`\" pulumi-lang-python=\"`milliseconds`\" pulumi-lang-yaml=\"`milliseconds`\" pulumi-lang-java=\"`milliseconds`\"\u003e`milliseconds`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`ratio`\" pulumi-lang-dotnet=\"`Ratio`\" pulumi-lang-go=\"`ratio`\" pulumi-lang-python=\"`ratio`\" pulumi-lang-yaml=\"`ratio`\" pulumi-lang-java=\"`ratio`\"\u003e`ratio`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bitrate`\" pulumi-lang-dotnet=\"`Bitrate`\" pulumi-lang-go=\"`bitrate`\" pulumi-lang-python=\"`bitrate`\" pulumi-lang-yaml=\"`bitrate`\" pulumi-lang-java=\"`bitrate`\"\u003e`bitrate`\u003c/span\u003e.\n"},"plotType":{"type":"string","description":"The type of chart to display. One of: \u003cspan pulumi-lang-nodejs=\"`line`\" pulumi-lang-dotnet=\"`Line`\" pulumi-lang-go=\"`line`\" pulumi-lang-python=\"`line`\" pulumi-lang-yaml=\"`line`\" pulumi-lang-java=\"`line`\"\u003e`line`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bar`\" pulumi-lang-dotnet=\"`Bar`\" pulumi-lang-go=\"`bar`\" pulumi-lang-python=\"`bar`\" pulumi-lang-yaml=\"`bar`\" pulumi-lang-java=\"`bar`\"\u003e`bar`\u003c/span\u003e, `single-metric`, \u003cspan pulumi-lang-nodejs=\"`donut`\" pulumi-lang-dotnet=\"`Donut`\" pulumi-lang-go=\"`donut`\" pulumi-lang-python=\"`donut`\" pulumi-lang-yaml=\"`donut`\" pulumi-lang-java=\"`donut`\"\u003e`donut`\u003c/span\u003e.\n"}},"type":"object","required":["plotType"]},"fastly:index/NgwafAccountRuleAction:NgwafAccountRuleAction":{"properties":{"signal":{"type":"string","description":"Signal name to exclude (used when `type =\u003cspan pulumi-lang-nodejs=\" excludeSignal`\" pulumi-lang-dotnet=\" ExcludeSignal`\" pulumi-lang-go=\" excludeSignal`\" pulumi-lang-python=\" exclude_signal`\" pulumi-lang-yaml=\" excludeSignal`\" pulumi-lang-java=\" excludeSignal`\"\u003e exclude_signal`\u003c/span\u003e).\n"},"type":{"type":"string","description":"The action type. One of: \u003cspan pulumi-lang-nodejs=\"`addSignal`\" pulumi-lang-dotnet=\"`AddSignal`\" pulumi-lang-go=\"`addSignal`\" pulumi-lang-python=\"`add_signal`\" pulumi-lang-yaml=\"`addSignal`\" pulumi-lang-java=\"`addSignal`\"\u003e`add_signal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`allow`\" pulumi-lang-dotnet=\"`Allow`\" pulumi-lang-go=\"`allow`\" pulumi-lang-python=\"`allow`\" pulumi-lang-yaml=\"`allow`\" pulumi-lang-java=\"`allow`\"\u003e`allow`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`browserChallenge`\" pulumi-lang-dotnet=\"`BrowserChallenge`\" pulumi-lang-go=\"`browserChallenge`\" pulumi-lang-python=\"`browser_challenge`\" pulumi-lang-yaml=\"`browserChallenge`\" pulumi-lang-java=\"`browserChallenge`\"\u003e`browser_challenge`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`dynamicChallenge`\" pulumi-lang-dotnet=\"`DynamicChallenge`\" pulumi-lang-go=\"`dynamicChallenge`\" pulumi-lang-python=\"`dynamic_challenge`\" pulumi-lang-yaml=\"`dynamicChallenge`\" pulumi-lang-java=\"`dynamicChallenge`\"\u003e`dynamic_challenge`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`excludeSignal`\" pulumi-lang-dotnet=\"`ExcludeSignal`\" pulumi-lang-go=\"`excludeSignal`\" pulumi-lang-python=\"`exclude_signal`\" pulumi-lang-yaml=\"`excludeSignal`\" pulumi-lang-java=\"`excludeSignal`\"\u003e`exclude_signal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`verifyToken`\" pulumi-lang-dotnet=\"`VerifyToken`\" pulumi-lang-go=\"`verifyToken`\" pulumi-lang-python=\"`verify_token`\" pulumi-lang-yaml=\"`verifyToken`\" pulumi-lang-java=\"`verifyToken`\"\u003e`verify_token`\u003c/span\u003e or for rate limit rule valid values: \u003cspan pulumi-lang-nodejs=\"`logRequest`\" pulumi-lang-dotnet=\"`LogRequest`\" pulumi-lang-go=\"`logRequest`\" pulumi-lang-python=\"`log_request`\" pulumi-lang-yaml=\"`logRequest`\" pulumi-lang-java=\"`logRequest`\"\u003e`log_request`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`blockSignal`\" pulumi-lang-dotnet=\"`BlockSignal`\" pulumi-lang-go=\"`blockSignal`\" pulumi-lang-python=\"`block_signal`\" pulumi-lang-yaml=\"`blockSignal`\" pulumi-lang-java=\"`blockSignal`\"\u003e`block_signal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`browserChallenge`\" pulumi-lang-dotnet=\"`BrowserChallenge`\" pulumi-lang-go=\"`browserChallenge`\" pulumi-lang-python=\"`browser_challenge`\" pulumi-lang-yaml=\"`browserChallenge`\" pulumi-lang-java=\"`browserChallenge`\"\u003e`browser_challenge`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`verifyToken`\" pulumi-lang-dotnet=\"`VerifyToken`\" pulumi-lang-go=\"`verifyToken`\" pulumi-lang-python=\"`verify_token`\" pulumi-lang-yaml=\"`verifyToken`\" pulumi-lang-java=\"`verifyToken`\"\u003e`verify_token`\u003c/span\u003e\n"}},"type":"object","required":["type"]},"fastly:index/NgwafAccountRuleCondition:NgwafAccountRuleCondition":{"properties":{"field":{"type":"string","description":"Field to inspect (e.g., \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`path`\" pulumi-lang-dotnet=\"`Path`\" pulumi-lang-go=\"`path`\" pulumi-lang-python=\"`path`\" pulumi-lang-yaml=\"`path`\" pulumi-lang-java=\"`path`\"\u003e`path`\u003c/span\u003e).\n"},"operator":{"type":"string","description":"Operator to apply. One of: \u003cspan pulumi-lang-nodejs=\"`equals`\" pulumi-lang-dotnet=\"`Equals`\" pulumi-lang-go=\"`equals`\" pulumi-lang-python=\"`equals`\" pulumi-lang-yaml=\"`equals`\" pulumi-lang-java=\"`equals`\"\u003e`equals`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotEqual`\" pulumi-lang-dotnet=\"`DoesNotEqual`\" pulumi-lang-go=\"`doesNotEqual`\" pulumi-lang-python=\"`does_not_equal`\" pulumi-lang-yaml=\"`doesNotEqual`\" pulumi-lang-java=\"`doesNotEqual`\"\u003e`does_not_equal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`contains`\" pulumi-lang-dotnet=\"`Contains`\" pulumi-lang-go=\"`contains`\" pulumi-lang-python=\"`contains`\" pulumi-lang-yaml=\"`contains`\" pulumi-lang-java=\"`contains`\"\u003e`contains`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotContain`\" pulumi-lang-dotnet=\"`DoesNotContain`\" pulumi-lang-go=\"`doesNotContain`\" pulumi-lang-python=\"`does_not_contain`\" pulumi-lang-yaml=\"`doesNotContain`\" pulumi-lang-java=\"`doesNotContain`\"\u003e`does_not_contain`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`like`\" pulumi-lang-dotnet=\"`Like`\" pulumi-lang-go=\"`like`\" pulumi-lang-python=\"`like`\" pulumi-lang-yaml=\"`like`\" pulumi-lang-java=\"`like`\"\u003e`like`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notLike`\" pulumi-lang-dotnet=\"`NotLike`\" pulumi-lang-go=\"`notLike`\" pulumi-lang-python=\"`not_like`\" pulumi-lang-yaml=\"`notLike`\" pulumi-lang-java=\"`notLike`\"\u003e`not_like`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`inList`\" pulumi-lang-dotnet=\"`InList`\" pulumi-lang-go=\"`inList`\" pulumi-lang-python=\"`in_list`\" pulumi-lang-yaml=\"`inList`\" pulumi-lang-java=\"`inList`\"\u003e`in_list`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notInList`\" pulumi-lang-dotnet=\"`NotInList`\" pulumi-lang-go=\"`notInList`\" pulumi-lang-python=\"`not_in_list`\" pulumi-lang-yaml=\"`notInList`\" pulumi-lang-java=\"`notInList`\"\u003e`not_in_list`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`matches`\" pulumi-lang-dotnet=\"`Matches`\" pulumi-lang-go=\"`matches`\" pulumi-lang-python=\"`matches`\" pulumi-lang-yaml=\"`matches`\" pulumi-lang-java=\"`matches`\"\u003e`matches`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotMatch`\" pulumi-lang-dotnet=\"`DoesNotMatch`\" pulumi-lang-go=\"`doesNotMatch`\" pulumi-lang-python=\"`does_not_match`\" pulumi-lang-yaml=\"`doesNotMatch`\" pulumi-lang-java=\"`doesNotMatch`\"\u003e`does_not_match`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`greaterEqual`\" pulumi-lang-dotnet=\"`GreaterEqual`\" pulumi-lang-go=\"`greaterEqual`\" pulumi-lang-python=\"`greater_equal`\" pulumi-lang-yaml=\"`greaterEqual`\" pulumi-lang-java=\"`greaterEqual`\"\u003e`greater_equal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`lesserEqual`\" pulumi-lang-dotnet=\"`LesserEqual`\" pulumi-lang-go=\"`lesserEqual`\" pulumi-lang-python=\"`lesser_equal`\" pulumi-lang-yaml=\"`lesserEqual`\" pulumi-lang-java=\"`lesserEqual`\"\u003e`lesser_equal`\u003c/span\u003e.\n"},"value":{"type":"string","description":"The value to test the field against.\n"}},"type":"object","required":["field","operator","value"]},"fastly:index/NgwafAccountRuleGroupCondition:NgwafAccountRuleGroupCondition":{"properties":{"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleGroupConditionCondition:NgwafAccountRuleGroupConditionCondition"},"description":"A list of nested conditions in this group.\n"},"groupOperator":{"type":"string","description":"Logical operator for the group. Accepted values are \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e.\n"},"multivalConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleGroupConditionMultivalCondition:NgwafAccountRuleGroupConditionMultivalCondition"},"description":"List of nested multival conditions in this group. Each multival list must define a `field, operator,\u003cspan pulumi-lang-nodejs=\" groupOperator`\" pulumi-lang-dotnet=\" GroupOperator`\" pulumi-lang-go=\" groupOperator`\" pulumi-lang-python=\" group_operator`\" pulumi-lang-yaml=\" groupOperator`\" pulumi-lang-java=\" groupOperator`\"\u003e group_operator`\u003c/span\u003e and at least one condition.\n"}},"type":"object","required":["groupOperator"]},"fastly:index/NgwafAccountRuleGroupConditionCondition:NgwafAccountRuleGroupConditionCondition":{"properties":{"field":{"type":"string","description":"Field to inspect (e.g., \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`path`\" pulumi-lang-dotnet=\"`Path`\" pulumi-lang-go=\"`path`\" pulumi-lang-python=\"`path`\" pulumi-lang-yaml=\"`path`\" pulumi-lang-java=\"`path`\"\u003e`path`\u003c/span\u003e).\n"},"operator":{"type":"string","description":"Operator to apply. One of: \u003cspan pulumi-lang-nodejs=\"`equals`\" pulumi-lang-dotnet=\"`Equals`\" pulumi-lang-go=\"`equals`\" pulumi-lang-python=\"`equals`\" pulumi-lang-yaml=\"`equals`\" pulumi-lang-java=\"`equals`\"\u003e`equals`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotEqual`\" pulumi-lang-dotnet=\"`DoesNotEqual`\" pulumi-lang-go=\"`doesNotEqual`\" pulumi-lang-python=\"`does_not_equal`\" pulumi-lang-yaml=\"`doesNotEqual`\" pulumi-lang-java=\"`doesNotEqual`\"\u003e`does_not_equal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`contains`\" pulumi-lang-dotnet=\"`Contains`\" pulumi-lang-go=\"`contains`\" pulumi-lang-python=\"`contains`\" pulumi-lang-yaml=\"`contains`\" pulumi-lang-java=\"`contains`\"\u003e`contains`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotContain`\" pulumi-lang-dotnet=\"`DoesNotContain`\" pulumi-lang-go=\"`doesNotContain`\" pulumi-lang-python=\"`does_not_contain`\" pulumi-lang-yaml=\"`doesNotContain`\" pulumi-lang-java=\"`doesNotContain`\"\u003e`does_not_contain`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`like`\" pulumi-lang-dotnet=\"`Like`\" pulumi-lang-go=\"`like`\" pulumi-lang-python=\"`like`\" pulumi-lang-yaml=\"`like`\" pulumi-lang-java=\"`like`\"\u003e`like`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notLike`\" pulumi-lang-dotnet=\"`NotLike`\" pulumi-lang-go=\"`notLike`\" pulumi-lang-python=\"`not_like`\" pulumi-lang-yaml=\"`notLike`\" pulumi-lang-java=\"`notLike`\"\u003e`not_like`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`inList`\" pulumi-lang-dotnet=\"`InList`\" pulumi-lang-go=\"`inList`\" pulumi-lang-python=\"`in_list`\" pulumi-lang-yaml=\"`inList`\" pulumi-lang-java=\"`inList`\"\u003e`in_list`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notInList`\" pulumi-lang-dotnet=\"`NotInList`\" pulumi-lang-go=\"`notInList`\" pulumi-lang-python=\"`not_in_list`\" pulumi-lang-yaml=\"`notInList`\" pulumi-lang-java=\"`notInList`\"\u003e`not_in_list`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`matches`\" pulumi-lang-dotnet=\"`Matches`\" pulumi-lang-go=\"`matches`\" pulumi-lang-python=\"`matches`\" pulumi-lang-yaml=\"`matches`\" pulumi-lang-java=\"`matches`\"\u003e`matches`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotMatch`\" pulumi-lang-dotnet=\"`DoesNotMatch`\" pulumi-lang-go=\"`doesNotMatch`\" pulumi-lang-python=\"`does_not_match`\" pulumi-lang-yaml=\"`doesNotMatch`\" pulumi-lang-java=\"`doesNotMatch`\"\u003e`does_not_match`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`greaterEqual`\" pulumi-lang-dotnet=\"`GreaterEqual`\" pulumi-lang-go=\"`greaterEqual`\" pulumi-lang-python=\"`greater_equal`\" pulumi-lang-yaml=\"`greaterEqual`\" pulumi-lang-java=\"`greaterEqual`\"\u003e`greater_equal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`lesserEqual`\" pulumi-lang-dotnet=\"`LesserEqual`\" pulumi-lang-go=\"`lesserEqual`\" pulumi-lang-python=\"`lesser_equal`\" pulumi-lang-yaml=\"`lesserEqual`\" pulumi-lang-java=\"`lesserEqual`\"\u003e`lesser_equal`\u003c/span\u003e.\n"},"value":{"type":"string","description":"The value to test the field against.\n"}},"type":"object","required":["field","operator","value"]},"fastly:index/NgwafAccountRuleGroupConditionMultivalCondition:NgwafAccountRuleGroupConditionMultivalCondition":{"properties":{"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleGroupConditionMultivalConditionCondition:NgwafAccountRuleGroupConditionMultivalConditionCondition"},"description":"A list of nested conditions in this multival.\n"},"field":{"type":"string","description":"Enums for multival condition field. Accepted values are \u003cspan pulumi-lang-nodejs=\"`postParameter`\" pulumi-lang-dotnet=\"`PostParameter`\" pulumi-lang-go=\"`postParameter`\" pulumi-lang-python=\"`post_parameter`\" pulumi-lang-yaml=\"`postParameter`\" pulumi-lang-java=\"`postParameter`\"\u003e`post_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`queryParameter`\" pulumi-lang-dotnet=\"`QueryParameter`\" pulumi-lang-go=\"`queryParameter`\" pulumi-lang-python=\"`query_parameter`\" pulumi-lang-yaml=\"`queryParameter`\" pulumi-lang-java=\"`queryParameter`\"\u003e`query_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestCookie`\" pulumi-lang-dotnet=\"`RequestCookie`\" pulumi-lang-go=\"`requestCookie`\" pulumi-lang-python=\"`request_cookie`\" pulumi-lang-yaml=\"`requestCookie`\" pulumi-lang-java=\"`requestCookie`\"\u003e`request_cookie`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestHeader`\" pulumi-lang-dotnet=\"`RequestHeader`\" pulumi-lang-go=\"`requestHeader`\" pulumi-lang-python=\"`request_header`\" pulumi-lang-yaml=\"`requestHeader`\" pulumi-lang-java=\"`requestHeader`\"\u003e`request_header`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`responseHeader`\" pulumi-lang-dotnet=\"`ResponseHeader`\" pulumi-lang-go=\"`responseHeader`\" pulumi-lang-python=\"`response_header`\" pulumi-lang-yaml=\"`responseHeader`\" pulumi-lang-java=\"`responseHeader`\"\u003e`response_header`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n"},"groupOperator":{"type":"string","description":"Logical operator for the multival condition. Accepted values are \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e.\n"},"operator":{"type":"string","description":"Indicates whether the supplied conditions will check for existence or non-existence of matching field values. Accepted values are \u003cspan pulumi-lang-nodejs=\"`exists`\" pulumi-lang-dotnet=\"`Exists`\" pulumi-lang-go=\"`exists`\" pulumi-lang-python=\"`exists`\" pulumi-lang-yaml=\"`exists`\" pulumi-lang-java=\"`exists`\"\u003e`exists`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`doesNotExist`\" pulumi-lang-dotnet=\"`DoesNotExist`\" pulumi-lang-go=\"`doesNotExist`\" pulumi-lang-python=\"`does_not_exist`\" pulumi-lang-yaml=\"`doesNotExist`\" pulumi-lang-java=\"`doesNotExist`\"\u003e`does_not_exist`\u003c/span\u003e.\n"}},"type":"object","required":["conditions","field","groupOperator","operator"]},"fastly:index/NgwafAccountRuleGroupConditionMultivalConditionCondition:NgwafAccountRuleGroupConditionMultivalConditionCondition":{"properties":{"field":{"type":"string","description":"Field to inspect (e.g., \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`value`\" pulumi-lang-dotnet=\"`Value`\" pulumi-lang-go=\"`value`\" pulumi-lang-python=\"`value`\" pulumi-lang-yaml=\"`value`\" pulumi-lang-java=\"`value`\"\u003e`value`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`signalId`\" pulumi-lang-dotnet=\"`SignalId`\" pulumi-lang-go=\"`signalId`\" pulumi-lang-python=\"`signal_id`\" pulumi-lang-yaml=\"`signalId`\" pulumi-lang-java=\"`signalId`\"\u003e`signal_id`\u003c/span\u003e).\n"},"operator":{"type":"string","description":"Operator to apply (e.g., \u003cspan pulumi-lang-nodejs=\"`equals`\" pulumi-lang-dotnet=\"`Equals`\" pulumi-lang-go=\"`equals`\" pulumi-lang-python=\"`equals`\" pulumi-lang-yaml=\"`equals`\" pulumi-lang-java=\"`equals`\"\u003e`equals`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`contains`\" pulumi-lang-dotnet=\"`Contains`\" pulumi-lang-go=\"`contains`\" pulumi-lang-python=\"`contains`\" pulumi-lang-yaml=\"`contains`\" pulumi-lang-java=\"`contains`\"\u003e`contains`\u003c/span\u003e).\n"},"value":{"type":"string","description":"The value to test the field against.\n"}},"type":"object","required":["field","operator","value"]},"fastly:index/NgwafAccountRuleMultivalCondition:NgwafAccountRuleMultivalCondition":{"properties":{"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleMultivalConditionCondition:NgwafAccountRuleMultivalConditionCondition"},"description":"A list of nested conditions in this list.\n"},"field":{"type":"string","description":"Enums for multival condition field.. Accepted values are \u003cspan pulumi-lang-nodejs=\"`postParameter`\" pulumi-lang-dotnet=\"`PostParameter`\" pulumi-lang-go=\"`postParameter`\" pulumi-lang-python=\"`post_parameter`\" pulumi-lang-yaml=\"`postParameter`\" pulumi-lang-java=\"`postParameter`\"\u003e`post_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`queryParameter`\" pulumi-lang-dotnet=\"`QueryParameter`\" pulumi-lang-go=\"`queryParameter`\" pulumi-lang-python=\"`query_parameter`\" pulumi-lang-yaml=\"`queryParameter`\" pulumi-lang-java=\"`queryParameter`\"\u003e`query_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestCookie`\" pulumi-lang-dotnet=\"`RequestCookie`\" pulumi-lang-go=\"`requestCookie`\" pulumi-lang-python=\"`request_cookie`\" pulumi-lang-yaml=\"`requestCookie`\" pulumi-lang-java=\"`requestCookie`\"\u003e`request_cookie`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestHeader`\" pulumi-lang-dotnet=\"`RequestHeader`\" pulumi-lang-go=\"`requestHeader`\" pulumi-lang-python=\"`request_header`\" pulumi-lang-yaml=\"`requestHeader`\" pulumi-lang-java=\"`requestHeader`\"\u003e`request_header`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`responseHeader`\" pulumi-lang-dotnet=\"`ResponseHeader`\" pulumi-lang-go=\"`responseHeader`\" pulumi-lang-python=\"`response_header`\" pulumi-lang-yaml=\"`responseHeader`\" pulumi-lang-java=\"`responseHeader`\"\u003e`response_header`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n"},"groupOperator":{"type":"string","description":"Logical operator for the group. Accepted values are \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e.\n"},"operator":{"type":"string","description":"Indicates whether the supplied conditions will check for existence or non-existence of matching field values. Accepted values are \u003cspan pulumi-lang-nodejs=\"`exists`\" pulumi-lang-dotnet=\"`Exists`\" pulumi-lang-go=\"`exists`\" pulumi-lang-python=\"`exists`\" pulumi-lang-yaml=\"`exists`\" pulumi-lang-java=\"`exists`\"\u003e`exists`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`doesNotExist`\" pulumi-lang-dotnet=\"`DoesNotExist`\" pulumi-lang-go=\"`doesNotExist`\" pulumi-lang-python=\"`does_not_exist`\" pulumi-lang-yaml=\"`doesNotExist`\" pulumi-lang-java=\"`doesNotExist`\"\u003e`does_not_exist`\u003c/span\u003e.\n"}},"type":"object","required":["conditions","field","groupOperator","operator"]},"fastly:index/NgwafAccountRuleMultivalConditionCondition:NgwafAccountRuleMultivalConditionCondition":{"properties":{"field":{"type":"string","description":"Field to inspect (e.g., \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`value`\" pulumi-lang-dotnet=\"`Value`\" pulumi-lang-go=\"`value`\" pulumi-lang-python=\"`value`\" pulumi-lang-yaml=\"`value`\" pulumi-lang-java=\"`value`\"\u003e`value`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`signalId`\" pulumi-lang-dotnet=\"`SignalId`\" pulumi-lang-go=\"`signalId`\" pulumi-lang-python=\"`signal_id`\" pulumi-lang-yaml=\"`signalId`\" pulumi-lang-java=\"`signalId`\"\u003e`signal_id`\u003c/span\u003e).\n"},"operator":{"type":"string","description":"Operator to apply. One of: \u003cspan pulumi-lang-nodejs=\"`equals`\" pulumi-lang-dotnet=\"`Equals`\" pulumi-lang-go=\"`equals`\" pulumi-lang-python=\"`equals`\" pulumi-lang-yaml=\"`equals`\" pulumi-lang-java=\"`equals`\"\u003e`equals`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotEqual`\" pulumi-lang-dotnet=\"`DoesNotEqual`\" pulumi-lang-go=\"`doesNotEqual`\" pulumi-lang-python=\"`does_not_equal`\" pulumi-lang-yaml=\"`doesNotEqual`\" pulumi-lang-java=\"`doesNotEqual`\"\u003e`does_not_equal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`contains`\" pulumi-lang-dotnet=\"`Contains`\" pulumi-lang-go=\"`contains`\" pulumi-lang-python=\"`contains`\" pulumi-lang-yaml=\"`contains`\" pulumi-lang-java=\"`contains`\"\u003e`contains`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotContain`\" pulumi-lang-dotnet=\"`DoesNotContain`\" pulumi-lang-go=\"`doesNotContain`\" pulumi-lang-python=\"`does_not_contain`\" pulumi-lang-yaml=\"`doesNotContain`\" pulumi-lang-java=\"`doesNotContain`\"\u003e`does_not_contain`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`like`\" pulumi-lang-dotnet=\"`Like`\" pulumi-lang-go=\"`like`\" pulumi-lang-python=\"`like`\" pulumi-lang-yaml=\"`like`\" pulumi-lang-java=\"`like`\"\u003e`like`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notLike`\" pulumi-lang-dotnet=\"`NotLike`\" pulumi-lang-go=\"`notLike`\" pulumi-lang-python=\"`not_like`\" pulumi-lang-yaml=\"`notLike`\" pulumi-lang-java=\"`notLike`\"\u003e`not_like`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`inList`\" pulumi-lang-dotnet=\"`InList`\" pulumi-lang-go=\"`inList`\" pulumi-lang-python=\"`in_list`\" pulumi-lang-yaml=\"`inList`\" pulumi-lang-java=\"`inList`\"\u003e`in_list`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notInList`\" pulumi-lang-dotnet=\"`NotInList`\" pulumi-lang-go=\"`notInList`\" pulumi-lang-python=\"`not_in_list`\" pulumi-lang-yaml=\"`notInList`\" pulumi-lang-java=\"`notInList`\"\u003e`not_in_list`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`matches`\" pulumi-lang-dotnet=\"`Matches`\" pulumi-lang-go=\"`matches`\" pulumi-lang-python=\"`matches`\" pulumi-lang-yaml=\"`matches`\" pulumi-lang-java=\"`matches`\"\u003e`matches`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotMatch`\" pulumi-lang-dotnet=\"`DoesNotMatch`\" pulumi-lang-go=\"`doesNotMatch`\" pulumi-lang-python=\"`does_not_match`\" pulumi-lang-yaml=\"`doesNotMatch`\" pulumi-lang-java=\"`doesNotMatch`\"\u003e`does_not_match`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`greaterEqual`\" pulumi-lang-dotnet=\"`GreaterEqual`\" pulumi-lang-go=\"`greaterEqual`\" pulumi-lang-python=\"`greater_equal`\" pulumi-lang-yaml=\"`greaterEqual`\" pulumi-lang-java=\"`greaterEqual`\"\u003e`greater_equal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`lesserEqual`\" pulumi-lang-dotnet=\"`LesserEqual`\" pulumi-lang-go=\"`lesserEqual`\" pulumi-lang-python=\"`lesser_equal`\" pulumi-lang-yaml=\"`lesserEqual`\" pulumi-lang-java=\"`lesserEqual`\"\u003e`lesser_equal`\u003c/span\u003e.\n"},"value":{"type":"string","description":"The value to test the field against.\n"}},"type":"object","required":["field","operator","value"]},"fastly:index/NgwafWorkspaceAttackSignalThresholds:NgwafWorkspaceAttackSignalThresholds":{"properties":{"immediate":{"type":"boolean","description":"Ignore thresholds and block immediately when at least one attack signal is detected. Default value \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"oneHour":{"type":"integer","description":"The one-hour interval threshold. Minimum 1 and maximum 10,000. Default value 100.\n"},"oneMinute":{"type":"integer","description":"The one-minute interval threshold. Minimum 1 and maximum 10,000. Default value 1.\n"},"tenMinutes":{"type":"integer","description":"The ten-minute interval threshold. Minimum 1 and maximum 10,000. Default value 60.\n"}},"type":"object"},"fastly:index/NgwafWorkspaceRuleAction:NgwafWorkspaceRuleAction":{"properties":{"allowInteractive":{"type":"boolean","description":"Specifies if interaction is allowed (used when `type =\u003cspan pulumi-lang-nodejs=\" browserChallenge`\" pulumi-lang-dotnet=\" BrowserChallenge`\" pulumi-lang-go=\" browserChallenge`\" pulumi-lang-python=\" browser_challenge`\" pulumi-lang-yaml=\" browserChallenge`\" pulumi-lang-java=\" browserChallenge`\"\u003e browser_challenge`\u003c/span\u003e).\n"},"deceptionType":{"type":"string","description":"specifies the type of deception (used when `type = deception`).\n"},"redirectUrl":{"type":"string","description":"Redirect target (used when `type = redirect`).\n"},"responseCode":{"type":"integer","description":"Response code used with redirect.\n"},"signal":{"type":"string","description":"Signal name to exclude (used when `type =\u003cspan pulumi-lang-nodejs=\" excludeSignal`\" pulumi-lang-dotnet=\" ExcludeSignal`\" pulumi-lang-go=\" excludeSignal`\" pulumi-lang-python=\" exclude_signal`\" pulumi-lang-yaml=\" excludeSignal`\" pulumi-lang-java=\" excludeSignal`\"\u003e exclude_signal`\u003c/span\u003e).\n"},"type":{"type":"string","description":"The action type. One of: \u003cspan pulumi-lang-nodejs=\"`addSignal`\" pulumi-lang-dotnet=\"`AddSignal`\" pulumi-lang-go=\"`addSignal`\" pulumi-lang-python=\"`add_signal`\" pulumi-lang-yaml=\"`addSignal`\" pulumi-lang-java=\"`addSignal`\"\u003e`add_signal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`allow`\" pulumi-lang-dotnet=\"`Allow`\" pulumi-lang-go=\"`allow`\" pulumi-lang-python=\"`allow`\" pulumi-lang-yaml=\"`allow`\" pulumi-lang-java=\"`allow`\"\u003e`allow`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`browserChallenge`\" pulumi-lang-dotnet=\"`BrowserChallenge`\" pulumi-lang-go=\"`browserChallenge`\" pulumi-lang-python=\"`browser_challenge`\" pulumi-lang-yaml=\"`browserChallenge`\" pulumi-lang-java=\"`browserChallenge`\"\u003e`browser_challenge`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`dynamicChallenge`\" pulumi-lang-dotnet=\"`DynamicChallenge`\" pulumi-lang-go=\"`dynamicChallenge`\" pulumi-lang-python=\"`dynamic_challenge`\" pulumi-lang-yaml=\"`dynamicChallenge`\" pulumi-lang-java=\"`dynamicChallenge`\"\u003e`dynamic_challenge`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`excludeSignal`\" pulumi-lang-dotnet=\"`ExcludeSignal`\" pulumi-lang-go=\"`excludeSignal`\" pulumi-lang-python=\"`exclude_signal`\" pulumi-lang-yaml=\"`excludeSignal`\" pulumi-lang-java=\"`excludeSignal`\"\u003e`exclude_signal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`verifyToken`\" pulumi-lang-dotnet=\"`VerifyToken`\" pulumi-lang-go=\"`verifyToken`\" pulumi-lang-python=\"`verify_token`\" pulumi-lang-yaml=\"`verifyToken`\" pulumi-lang-java=\"`verifyToken`\"\u003e`verify_token`\u003c/span\u003e or for rate limit rule valid values: \u003cspan pulumi-lang-nodejs=\"`logRequest`\" pulumi-lang-dotnet=\"`LogRequest`\" pulumi-lang-go=\"`logRequest`\" pulumi-lang-python=\"`log_request`\" pulumi-lang-yaml=\"`logRequest`\" pulumi-lang-java=\"`logRequest`\"\u003e`log_request`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`blockSignal`\" pulumi-lang-dotnet=\"`BlockSignal`\" pulumi-lang-go=\"`blockSignal`\" pulumi-lang-python=\"`block_signal`\" pulumi-lang-yaml=\"`blockSignal`\" pulumi-lang-java=\"`blockSignal`\"\u003e`block_signal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`browserChallenge`\" pulumi-lang-dotnet=\"`BrowserChallenge`\" pulumi-lang-go=\"`browserChallenge`\" pulumi-lang-python=\"`browser_challenge`\" pulumi-lang-yaml=\"`browserChallenge`\" pulumi-lang-java=\"`browserChallenge`\"\u003e`browser_challenge`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`verifyToken`\" pulumi-lang-dotnet=\"`VerifyToken`\" pulumi-lang-go=\"`verifyToken`\" pulumi-lang-python=\"`verify_token`\" pulumi-lang-yaml=\"`verifyToken`\" pulumi-lang-java=\"`verifyToken`\"\u003e`verify_token`\u003c/span\u003e\n"}},"type":"object","required":["type"]},"fastly:index/NgwafWorkspaceRuleCondition:NgwafWorkspaceRuleCondition":{"properties":{"field":{"type":"string","description":"Field to inspect (e.g., \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`path`\" pulumi-lang-dotnet=\"`Path`\" pulumi-lang-go=\"`path`\" pulumi-lang-python=\"`path`\" pulumi-lang-yaml=\"`path`\" pulumi-lang-java=\"`path`\"\u003e`path`\u003c/span\u003e).\n"},"operator":{"type":"string","description":"Operator to apply. One of: \u003cspan pulumi-lang-nodejs=\"`equals`\" pulumi-lang-dotnet=\"`Equals`\" pulumi-lang-go=\"`equals`\" pulumi-lang-python=\"`equals`\" pulumi-lang-yaml=\"`equals`\" pulumi-lang-java=\"`equals`\"\u003e`equals`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotEqual`\" pulumi-lang-dotnet=\"`DoesNotEqual`\" pulumi-lang-go=\"`doesNotEqual`\" pulumi-lang-python=\"`does_not_equal`\" pulumi-lang-yaml=\"`doesNotEqual`\" pulumi-lang-java=\"`doesNotEqual`\"\u003e`does_not_equal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`contains`\" pulumi-lang-dotnet=\"`Contains`\" pulumi-lang-go=\"`contains`\" pulumi-lang-python=\"`contains`\" pulumi-lang-yaml=\"`contains`\" pulumi-lang-java=\"`contains`\"\u003e`contains`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotContain`\" pulumi-lang-dotnet=\"`DoesNotContain`\" pulumi-lang-go=\"`doesNotContain`\" pulumi-lang-python=\"`does_not_contain`\" pulumi-lang-yaml=\"`doesNotContain`\" pulumi-lang-java=\"`doesNotContain`\"\u003e`does_not_contain`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`like`\" pulumi-lang-dotnet=\"`Like`\" pulumi-lang-go=\"`like`\" pulumi-lang-python=\"`like`\" pulumi-lang-yaml=\"`like`\" pulumi-lang-java=\"`like`\"\u003e`like`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notLike`\" pulumi-lang-dotnet=\"`NotLike`\" pulumi-lang-go=\"`notLike`\" pulumi-lang-python=\"`not_like`\" pulumi-lang-yaml=\"`notLike`\" pulumi-lang-java=\"`notLike`\"\u003e`not_like`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`inList`\" pulumi-lang-dotnet=\"`InList`\" pulumi-lang-go=\"`inList`\" pulumi-lang-python=\"`in_list`\" pulumi-lang-yaml=\"`inList`\" pulumi-lang-java=\"`inList`\"\u003e`in_list`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notInList`\" pulumi-lang-dotnet=\"`NotInList`\" pulumi-lang-go=\"`notInList`\" pulumi-lang-python=\"`not_in_list`\" pulumi-lang-yaml=\"`notInList`\" pulumi-lang-java=\"`notInList`\"\u003e`not_in_list`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`matches`\" pulumi-lang-dotnet=\"`Matches`\" pulumi-lang-go=\"`matches`\" pulumi-lang-python=\"`matches`\" pulumi-lang-yaml=\"`matches`\" pulumi-lang-java=\"`matches`\"\u003e`matches`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotMatch`\" pulumi-lang-dotnet=\"`DoesNotMatch`\" pulumi-lang-go=\"`doesNotMatch`\" pulumi-lang-python=\"`does_not_match`\" pulumi-lang-yaml=\"`doesNotMatch`\" pulumi-lang-java=\"`doesNotMatch`\"\u003e`does_not_match`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`greaterEqual`\" pulumi-lang-dotnet=\"`GreaterEqual`\" pulumi-lang-go=\"`greaterEqual`\" pulumi-lang-python=\"`greater_equal`\" pulumi-lang-yaml=\"`greaterEqual`\" pulumi-lang-java=\"`greaterEqual`\"\u003e`greater_equal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`lesserEqual`\" pulumi-lang-dotnet=\"`LesserEqual`\" pulumi-lang-go=\"`lesserEqual`\" pulumi-lang-python=\"`lesser_equal`\" pulumi-lang-yaml=\"`lesserEqual`\" pulumi-lang-java=\"`lesserEqual`\"\u003e`lesser_equal`\u003c/span\u003e.\n"},"value":{"type":"string","description":"The value to test the field against.\n"}},"type":"object","required":["field","operator","value"]},"fastly:index/NgwafWorkspaceRuleGroupCondition:NgwafWorkspaceRuleGroupCondition":{"properties":{"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleGroupConditionCondition:NgwafWorkspaceRuleGroupConditionCondition"},"description":"A list of nested conditions in this group.\n"},"groupOperator":{"type":"string","description":"Logical operator for the group. Accepted values are \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e.\n"},"multivalConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleGroupConditionMultivalCondition:NgwafWorkspaceRuleGroupConditionMultivalCondition"},"description":"List of nested multival conditions in this group. Each multival list must define a `field, operator,\u003cspan pulumi-lang-nodejs=\" groupOperator`\" pulumi-lang-dotnet=\" GroupOperator`\" pulumi-lang-go=\" groupOperator`\" pulumi-lang-python=\" group_operator`\" pulumi-lang-yaml=\" groupOperator`\" pulumi-lang-java=\" groupOperator`\"\u003e group_operator`\u003c/span\u003e and at least one condition.\n"}},"type":"object","required":["groupOperator"]},"fastly:index/NgwafWorkspaceRuleGroupConditionCondition:NgwafWorkspaceRuleGroupConditionCondition":{"properties":{"field":{"type":"string","description":"Field to inspect (e.g., \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`path`\" pulumi-lang-dotnet=\"`Path`\" pulumi-lang-go=\"`path`\" pulumi-lang-python=\"`path`\" pulumi-lang-yaml=\"`path`\" pulumi-lang-java=\"`path`\"\u003e`path`\u003c/span\u003e).\n"},"operator":{"type":"string","description":"Operator to apply. One of: \u003cspan pulumi-lang-nodejs=\"`equals`\" pulumi-lang-dotnet=\"`Equals`\" pulumi-lang-go=\"`equals`\" pulumi-lang-python=\"`equals`\" pulumi-lang-yaml=\"`equals`\" pulumi-lang-java=\"`equals`\"\u003e`equals`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotEqual`\" pulumi-lang-dotnet=\"`DoesNotEqual`\" pulumi-lang-go=\"`doesNotEqual`\" pulumi-lang-python=\"`does_not_equal`\" pulumi-lang-yaml=\"`doesNotEqual`\" pulumi-lang-java=\"`doesNotEqual`\"\u003e`does_not_equal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`contains`\" pulumi-lang-dotnet=\"`Contains`\" pulumi-lang-go=\"`contains`\" pulumi-lang-python=\"`contains`\" pulumi-lang-yaml=\"`contains`\" pulumi-lang-java=\"`contains`\"\u003e`contains`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotContain`\" pulumi-lang-dotnet=\"`DoesNotContain`\" pulumi-lang-go=\"`doesNotContain`\" pulumi-lang-python=\"`does_not_contain`\" pulumi-lang-yaml=\"`doesNotContain`\" pulumi-lang-java=\"`doesNotContain`\"\u003e`does_not_contain`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`like`\" pulumi-lang-dotnet=\"`Like`\" pulumi-lang-go=\"`like`\" pulumi-lang-python=\"`like`\" pulumi-lang-yaml=\"`like`\" pulumi-lang-java=\"`like`\"\u003e`like`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notLike`\" pulumi-lang-dotnet=\"`NotLike`\" pulumi-lang-go=\"`notLike`\" pulumi-lang-python=\"`not_like`\" pulumi-lang-yaml=\"`notLike`\" pulumi-lang-java=\"`notLike`\"\u003e`not_like`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`inList`\" pulumi-lang-dotnet=\"`InList`\" pulumi-lang-go=\"`inList`\" pulumi-lang-python=\"`in_list`\" pulumi-lang-yaml=\"`inList`\" pulumi-lang-java=\"`inList`\"\u003e`in_list`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notInList`\" pulumi-lang-dotnet=\"`NotInList`\" pulumi-lang-go=\"`notInList`\" pulumi-lang-python=\"`not_in_list`\" pulumi-lang-yaml=\"`notInList`\" pulumi-lang-java=\"`notInList`\"\u003e`not_in_list`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`matches`\" pulumi-lang-dotnet=\"`Matches`\" pulumi-lang-go=\"`matches`\" pulumi-lang-python=\"`matches`\" pulumi-lang-yaml=\"`matches`\" pulumi-lang-java=\"`matches`\"\u003e`matches`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotMatch`\" pulumi-lang-dotnet=\"`DoesNotMatch`\" pulumi-lang-go=\"`doesNotMatch`\" pulumi-lang-python=\"`does_not_match`\" pulumi-lang-yaml=\"`doesNotMatch`\" pulumi-lang-java=\"`doesNotMatch`\"\u003e`does_not_match`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`greaterEqual`\" pulumi-lang-dotnet=\"`GreaterEqual`\" pulumi-lang-go=\"`greaterEqual`\" pulumi-lang-python=\"`greater_equal`\" pulumi-lang-yaml=\"`greaterEqual`\" pulumi-lang-java=\"`greaterEqual`\"\u003e`greater_equal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`lesserEqual`\" pulumi-lang-dotnet=\"`LesserEqual`\" pulumi-lang-go=\"`lesserEqual`\" pulumi-lang-python=\"`lesser_equal`\" pulumi-lang-yaml=\"`lesserEqual`\" pulumi-lang-java=\"`lesserEqual`\"\u003e`lesser_equal`\u003c/span\u003e.\n"},"value":{"type":"string","description":"The value to test the field against.\n"}},"type":"object","required":["field","operator","value"]},"fastly:index/NgwafWorkspaceRuleGroupConditionMultivalCondition:NgwafWorkspaceRuleGroupConditionMultivalCondition":{"properties":{"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleGroupConditionMultivalConditionCondition:NgwafWorkspaceRuleGroupConditionMultivalConditionCondition"},"description":"A list of nested conditions in this multival.\n"},"field":{"type":"string","description":"Enums for multival condition field. Accepted values are \u003cspan pulumi-lang-nodejs=\"`postParameter`\" pulumi-lang-dotnet=\"`PostParameter`\" pulumi-lang-go=\"`postParameter`\" pulumi-lang-python=\"`post_parameter`\" pulumi-lang-yaml=\"`postParameter`\" pulumi-lang-java=\"`postParameter`\"\u003e`post_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`queryParameter`\" pulumi-lang-dotnet=\"`QueryParameter`\" pulumi-lang-go=\"`queryParameter`\" pulumi-lang-python=\"`query_parameter`\" pulumi-lang-yaml=\"`queryParameter`\" pulumi-lang-java=\"`queryParameter`\"\u003e`query_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestCookie`\" pulumi-lang-dotnet=\"`RequestCookie`\" pulumi-lang-go=\"`requestCookie`\" pulumi-lang-python=\"`request_cookie`\" pulumi-lang-yaml=\"`requestCookie`\" pulumi-lang-java=\"`requestCookie`\"\u003e`request_cookie`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestHeader`\" pulumi-lang-dotnet=\"`RequestHeader`\" pulumi-lang-go=\"`requestHeader`\" pulumi-lang-python=\"`request_header`\" pulumi-lang-yaml=\"`requestHeader`\" pulumi-lang-java=\"`requestHeader`\"\u003e`request_header`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`responseHeader`\" pulumi-lang-dotnet=\"`ResponseHeader`\" pulumi-lang-go=\"`responseHeader`\" pulumi-lang-python=\"`response_header`\" pulumi-lang-yaml=\"`responseHeader`\" pulumi-lang-java=\"`responseHeader`\"\u003e`response_header`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n"},"groupOperator":{"type":"string","description":"Logical operator for the multival condition. Accepted values are \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e.\n"},"operator":{"type":"string","description":"Indicates whether the supplied conditions will check for existence or non-existence of matching field values. Accepted values are \u003cspan pulumi-lang-nodejs=\"`exists`\" pulumi-lang-dotnet=\"`Exists`\" pulumi-lang-go=\"`exists`\" pulumi-lang-python=\"`exists`\" pulumi-lang-yaml=\"`exists`\" pulumi-lang-java=\"`exists`\"\u003e`exists`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`doesNotExist`\" pulumi-lang-dotnet=\"`DoesNotExist`\" pulumi-lang-go=\"`doesNotExist`\" pulumi-lang-python=\"`does_not_exist`\" pulumi-lang-yaml=\"`doesNotExist`\" pulumi-lang-java=\"`doesNotExist`\"\u003e`does_not_exist`\u003c/span\u003e.\n"}},"type":"object","required":["conditions","field","groupOperator","operator"]},"fastly:index/NgwafWorkspaceRuleGroupConditionMultivalConditionCondition:NgwafWorkspaceRuleGroupConditionMultivalConditionCondition":{"properties":{"field":{"type":"string","description":"Field to inspect (e.g., \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`value`\" pulumi-lang-dotnet=\"`Value`\" pulumi-lang-go=\"`value`\" pulumi-lang-python=\"`value`\" pulumi-lang-yaml=\"`value`\" pulumi-lang-java=\"`value`\"\u003e`value`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`signalId`\" pulumi-lang-dotnet=\"`SignalId`\" pulumi-lang-go=\"`signalId`\" pulumi-lang-python=\"`signal_id`\" pulumi-lang-yaml=\"`signalId`\" pulumi-lang-java=\"`signalId`\"\u003e`signal_id`\u003c/span\u003e).\n"},"operator":{"type":"string","description":"Operator to apply (e.g., \u003cspan pulumi-lang-nodejs=\"`equals`\" pulumi-lang-dotnet=\"`Equals`\" pulumi-lang-go=\"`equals`\" pulumi-lang-python=\"`equals`\" pulumi-lang-yaml=\"`equals`\" pulumi-lang-java=\"`equals`\"\u003e`equals`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`contains`\" pulumi-lang-dotnet=\"`Contains`\" pulumi-lang-go=\"`contains`\" pulumi-lang-python=\"`contains`\" pulumi-lang-yaml=\"`contains`\" pulumi-lang-java=\"`contains`\"\u003e`contains`\u003c/span\u003e).\n"},"value":{"type":"string","description":"The value to test the field against.\n"}},"type":"object","required":["field","operator","value"]},"fastly:index/NgwafWorkspaceRuleMultivalCondition:NgwafWorkspaceRuleMultivalCondition":{"properties":{"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleMultivalConditionCondition:NgwafWorkspaceRuleMultivalConditionCondition"},"description":"A list of nested conditions in this list.\n"},"field":{"type":"string","description":"Enums for multival condition field.. Accepted values are \u003cspan pulumi-lang-nodejs=\"`postParameter`\" pulumi-lang-dotnet=\"`PostParameter`\" pulumi-lang-go=\"`postParameter`\" pulumi-lang-python=\"`post_parameter`\" pulumi-lang-yaml=\"`postParameter`\" pulumi-lang-java=\"`postParameter`\"\u003e`post_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`queryParameter`\" pulumi-lang-dotnet=\"`QueryParameter`\" pulumi-lang-go=\"`queryParameter`\" pulumi-lang-python=\"`query_parameter`\" pulumi-lang-yaml=\"`queryParameter`\" pulumi-lang-java=\"`queryParameter`\"\u003e`query_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestCookie`\" pulumi-lang-dotnet=\"`RequestCookie`\" pulumi-lang-go=\"`requestCookie`\" pulumi-lang-python=\"`request_cookie`\" pulumi-lang-yaml=\"`requestCookie`\" pulumi-lang-java=\"`requestCookie`\"\u003e`request_cookie`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestHeader`\" pulumi-lang-dotnet=\"`RequestHeader`\" pulumi-lang-go=\"`requestHeader`\" pulumi-lang-python=\"`request_header`\" pulumi-lang-yaml=\"`requestHeader`\" pulumi-lang-java=\"`requestHeader`\"\u003e`request_header`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`responseHeader`\" pulumi-lang-dotnet=\"`ResponseHeader`\" pulumi-lang-go=\"`responseHeader`\" pulumi-lang-python=\"`response_header`\" pulumi-lang-yaml=\"`responseHeader`\" pulumi-lang-java=\"`responseHeader`\"\u003e`response_header`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n"},"groupOperator":{"type":"string","description":"Logical operator for the group. Accepted values are \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e.\n"},"operator":{"type":"string","description":"Indicates whether the supplied conditions will check for existence or non-existence of matching field values. Accepted values are \u003cspan pulumi-lang-nodejs=\"`exists`\" pulumi-lang-dotnet=\"`Exists`\" pulumi-lang-go=\"`exists`\" pulumi-lang-python=\"`exists`\" pulumi-lang-yaml=\"`exists`\" pulumi-lang-java=\"`exists`\"\u003e`exists`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`doesNotExist`\" pulumi-lang-dotnet=\"`DoesNotExist`\" pulumi-lang-go=\"`doesNotExist`\" pulumi-lang-python=\"`does_not_exist`\" pulumi-lang-yaml=\"`doesNotExist`\" pulumi-lang-java=\"`doesNotExist`\"\u003e`does_not_exist`\u003c/span\u003e.\n"}},"type":"object","required":["conditions","field","groupOperator","operator"]},"fastly:index/NgwafWorkspaceRuleMultivalConditionCondition:NgwafWorkspaceRuleMultivalConditionCondition":{"properties":{"field":{"type":"string","description":"Field to inspect (e.g., \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`value`\" pulumi-lang-dotnet=\"`Value`\" pulumi-lang-go=\"`value`\" pulumi-lang-python=\"`value`\" pulumi-lang-yaml=\"`value`\" pulumi-lang-java=\"`value`\"\u003e`value`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`signalId`\" pulumi-lang-dotnet=\"`SignalId`\" pulumi-lang-go=\"`signalId`\" pulumi-lang-python=\"`signal_id`\" pulumi-lang-yaml=\"`signalId`\" pulumi-lang-java=\"`signalId`\"\u003e`signal_id`\u003c/span\u003e).\n"},"operator":{"type":"string","description":"Operator to apply. One of: \u003cspan pulumi-lang-nodejs=\"`equals`\" pulumi-lang-dotnet=\"`Equals`\" pulumi-lang-go=\"`equals`\" pulumi-lang-python=\"`equals`\" pulumi-lang-yaml=\"`equals`\" pulumi-lang-java=\"`equals`\"\u003e`equals`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotEqual`\" pulumi-lang-dotnet=\"`DoesNotEqual`\" pulumi-lang-go=\"`doesNotEqual`\" pulumi-lang-python=\"`does_not_equal`\" pulumi-lang-yaml=\"`doesNotEqual`\" pulumi-lang-java=\"`doesNotEqual`\"\u003e`does_not_equal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`contains`\" pulumi-lang-dotnet=\"`Contains`\" pulumi-lang-go=\"`contains`\" pulumi-lang-python=\"`contains`\" pulumi-lang-yaml=\"`contains`\" pulumi-lang-java=\"`contains`\"\u003e`contains`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotContain`\" pulumi-lang-dotnet=\"`DoesNotContain`\" pulumi-lang-go=\"`doesNotContain`\" pulumi-lang-python=\"`does_not_contain`\" pulumi-lang-yaml=\"`doesNotContain`\" pulumi-lang-java=\"`doesNotContain`\"\u003e`does_not_contain`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`like`\" pulumi-lang-dotnet=\"`Like`\" pulumi-lang-go=\"`like`\" pulumi-lang-python=\"`like`\" pulumi-lang-yaml=\"`like`\" pulumi-lang-java=\"`like`\"\u003e`like`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notLike`\" pulumi-lang-dotnet=\"`NotLike`\" pulumi-lang-go=\"`notLike`\" pulumi-lang-python=\"`not_like`\" pulumi-lang-yaml=\"`notLike`\" pulumi-lang-java=\"`notLike`\"\u003e`not_like`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`inList`\" pulumi-lang-dotnet=\"`InList`\" pulumi-lang-go=\"`inList`\" pulumi-lang-python=\"`in_list`\" pulumi-lang-yaml=\"`inList`\" pulumi-lang-java=\"`inList`\"\u003e`in_list`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notInList`\" pulumi-lang-dotnet=\"`NotInList`\" pulumi-lang-go=\"`notInList`\" pulumi-lang-python=\"`not_in_list`\" pulumi-lang-yaml=\"`notInList`\" pulumi-lang-java=\"`notInList`\"\u003e`not_in_list`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`matches`\" pulumi-lang-dotnet=\"`Matches`\" pulumi-lang-go=\"`matches`\" pulumi-lang-python=\"`matches`\" pulumi-lang-yaml=\"`matches`\" pulumi-lang-java=\"`matches`\"\u003e`matches`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`doesNotMatch`\" pulumi-lang-dotnet=\"`DoesNotMatch`\" pulumi-lang-go=\"`doesNotMatch`\" pulumi-lang-python=\"`does_not_match`\" pulumi-lang-yaml=\"`doesNotMatch`\" pulumi-lang-java=\"`doesNotMatch`\"\u003e`does_not_match`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`greaterEqual`\" pulumi-lang-dotnet=\"`GreaterEqual`\" pulumi-lang-go=\"`greaterEqual`\" pulumi-lang-python=\"`greater_equal`\" pulumi-lang-yaml=\"`greaterEqual`\" pulumi-lang-java=\"`greaterEqual`\"\u003e`greater_equal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`lesserEqual`\" pulumi-lang-dotnet=\"`LesserEqual`\" pulumi-lang-go=\"`lesserEqual`\" pulumi-lang-python=\"`lesser_equal`\" pulumi-lang-yaml=\"`lesserEqual`\" pulumi-lang-java=\"`lesserEqual`\"\u003e`lesser_equal`\u003c/span\u003e.\n"},"value":{"type":"string","description":"The value to test the field against.\n"}},"type":"object","required":["field","operator","value"]},"fastly:index/NgwafWorkspaceRuleRateLimit:NgwafWorkspaceRuleRateLimit":{"properties":{"clientIdentifiers":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleRateLimitClientIdentifier:NgwafWorkspaceRuleRateLimitClientIdentifier"},"description":"List of client identifiers used for rate limiting. Can only be length 1 or 2.\n"},"duration":{"type":"integer","description":"Duration in seconds for the rate limit.\n"},"interval":{"type":"integer","description":"Time interval for the rate limit in seconds. Accepted values are 60, 600, and 3600.\n"},"signal":{"type":"string","description":"Reference ID of the custom signal this rule uses to count requests.\n"},"threshold":{"type":"integer","description":"Rate limit threshold. Minimum 1 and maximum 10,000.\n"}},"type":"object","required":["clientIdentifiers","duration","interval","signal","threshold"]},"fastly:index/NgwafWorkspaceRuleRateLimitClientIdentifier:NgwafWorkspaceRuleRateLimitClientIdentifier":{"properties":{"key":{"type":"string","description":"Key for the Client Identifier.\n"},"name":{"type":"string","description":"Name for the Client Identifier.\n"},"type":{"type":"string","description":"Type of the Client Identifier. Accepted values are \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`postParameter`\" pulumi-lang-dotnet=\"`PostParameter`\" pulumi-lang-go=\"`postParameter`\" pulumi-lang-python=\"`post_parameter`\" pulumi-lang-yaml=\"`postParameter`\" pulumi-lang-java=\"`postParameter`\"\u003e`post_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestCookie`\" pulumi-lang-dotnet=\"`RequestCookie`\" pulumi-lang-go=\"`requestCookie`\" pulumi-lang-python=\"`request_cookie`\" pulumi-lang-yaml=\"`requestCookie`\" pulumi-lang-java=\"`requestCookie`\"\u003e`request_cookie`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestHeader`\" pulumi-lang-dotnet=\"`RequestHeader`\" pulumi-lang-go=\"`requestHeader`\" pulumi-lang-python=\"`request_header`\" pulumi-lang-yaml=\"`requestHeader`\" pulumi-lang-java=\"`requestHeader`\"\u003e`request_header`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`signalPayload`\" pulumi-lang-dotnet=\"`SignalPayload`\" pulumi-lang-go=\"`signalPayload`\" pulumi-lang-python=\"`signal_payload`\" pulumi-lang-yaml=\"`signalPayload`\" pulumi-lang-java=\"`signalPayload`\"\u003e`signal_payload`\u003c/span\u003e.\n"}},"type":"object","required":["type"]},"fastly:index/ServiceACLEntriesEntry:ServiceACLEntriesEntry":{"properties":{"comment":{"type":"string","description":"A personal freeform descriptive note\n"},"id":{"type":"string","description":"The unique ID of the entry\n"},"ip":{"type":"string","description":"An IP address that is the focus for the ACL\n"},"negated":{"type":"boolean","description":"A boolean that will negate the match if true\n"},"subnet":{"type":"string","description":"An optional subnet mask applied to the IP address\n"}},"type":"object","required":["ip"],"language":{"nodejs":{"requiredOutputs":["id","ip"]}}},"fastly:index/ServiceComputeBackend:ServiceComputeBackend":{"properties":{"address":{"type":"string","description":"An IPv4, hostname, or IPv6 address for the Backend\n"},"betweenBytesTimeout":{"type":"integer","description":"How long to wait between bytes in milliseconds. Default \u003cspan pulumi-lang-nodejs=\"`10000`\" pulumi-lang-dotnet=\"`10000`\" pulumi-lang-go=\"`10000`\" pulumi-lang-python=\"`10000`\" pulumi-lang-yaml=\"`10000`\" pulumi-lang-java=\"`10000`\"\u003e`10000`\u003c/span\u003e\n"},"connectTimeout":{"type":"integer","description":"How long to wait for a timeout in milliseconds. Default \u003cspan pulumi-lang-nodejs=\"`1000`\" pulumi-lang-dotnet=\"`1000`\" pulumi-lang-go=\"`1000`\" pulumi-lang-python=\"`1000`\" pulumi-lang-yaml=\"`1000`\" pulumi-lang-java=\"`1000`\"\u003e`1000`\u003c/span\u003e\n"},"errorThreshold":{"type":"integer","description":"Number of errors to allow before the Backend is marked as down. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"firstByteTimeout":{"type":"integer","description":"How long to wait for the first bytes in milliseconds. Default \u003cspan pulumi-lang-nodejs=\"`15000`\" pulumi-lang-dotnet=\"`15000`\" pulumi-lang-go=\"`15000`\" pulumi-lang-python=\"`15000`\" pulumi-lang-yaml=\"`15000`\" pulumi-lang-java=\"`15000`\"\u003e`15000`\u003c/span\u003e\n"},"healthcheck":{"type":"string","description":"Name of a defined \u003cspan pulumi-lang-nodejs=\"`healthcheck`\" pulumi-lang-dotnet=\"`Healthcheck`\" pulumi-lang-go=\"`healthcheck`\" pulumi-lang-python=\"`healthcheck`\" pulumi-lang-yaml=\"`healthcheck`\" pulumi-lang-java=\"`healthcheck`\"\u003e`healthcheck`\u003c/span\u003e to assign to this backend\n"},"keepaliveTime":{"type":"integer","description":"How long in seconds to keep a persistent connection to the backend between requests.\n"},"maxConn":{"type":"integer","description":"Maximum number of connections for this Backend. Default \u003cspan pulumi-lang-nodejs=\"`200`\" pulumi-lang-dotnet=\"`200`\" pulumi-lang-go=\"`200`\" pulumi-lang-python=\"`200`\" pulumi-lang-yaml=\"`200`\" pulumi-lang-java=\"`200`\"\u003e`200`\u003c/span\u003e\n"},"maxTlsVersion":{"type":"string","description":"Maximum allowed TLS version on SSL connections to this backend.\n"},"minTlsVersion":{"type":"string","description":"Minimum allowed TLS version on SSL connections to this backend.\n"},"name":{"type":"string","description":"Name for this Backend. Must be unique to this Service. It is important to note that changing this attribute will delete and recreate the resource\n"},"overrideHost":{"type":"string","description":"The hostname to override the Host header\n"},"port":{"type":"integer","description":"The port number on which the Backend responds. Default \u003cspan pulumi-lang-nodejs=\"`80`\" pulumi-lang-dotnet=\"`80`\" pulumi-lang-go=\"`80`\" pulumi-lang-python=\"`80`\" pulumi-lang-yaml=\"`80`\" pulumi-lang-java=\"`80`\"\u003e`80`\u003c/span\u003e\n"},"preferIpv6":{"type":"boolean","description":"Prefer IPv6 connections to origins for hostname backends. Default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e\n"},"shareKey":{"type":"string","description":"Value that when shared across backends will enable those backends to share the same health check.\n"},"shield":{"type":"string","description":"The POP of the shield designated to reduce inbound load. Valid values for \u003cspan pulumi-lang-nodejs=\"`shield`\" pulumi-lang-dotnet=\"`Shield`\" pulumi-lang-go=\"`shield`\" pulumi-lang-python=\"`shield`\" pulumi-lang-yaml=\"`shield`\" pulumi-lang-java=\"`shield`\"\u003e`shield`\u003c/span\u003e are included in the `GET /datacenters` API response\n"},"sslCaCert":{"type":"string","description":"CA certificate attached to origin.\n"},"sslCertHostname":{"type":"string","description":"Configure certificate validation. Does not affect SNI at all\n"},"sslCheckCert":{"type":"boolean","description":"Be strict about checking SSL certs. Default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e\n"},"sslCiphers":{"type":"string","description":"Cipher list consisting of one or more cipher strings separated by colons. Commas or spaces are also acceptable separators but colons are normally used.\n"},"sslClientCert":{"type":"string","description":"Client certificate attached to origin. Used when connecting to the backend\n","secret":true},"sslClientKey":{"type":"string","description":"Client key attached to origin. Used when connecting to the backend\n","secret":true},"sslSniHostname":{"type":"string","description":"Configure SNI in the TLS handshake. Does not affect cert validation at all\n"},"useSsl":{"type":"boolean","description":"Whether or not to use SSL to reach the Backend. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"},"weight":{"type":"integer","description":"The [portion of traffic](https://docs.fastly.com/en/guides/load-balancing-configuration#how-weight-affects-load-balancing) to send to this Backend. Each Backend receives weight / total of the traffic. Default \u003cspan pulumi-lang-nodejs=\"`100`\" pulumi-lang-dotnet=\"`100`\" pulumi-lang-go=\"`100`\" pulumi-lang-python=\"`100`\" pulumi-lang-yaml=\"`100`\" pulumi-lang-java=\"`100`\"\u003e`100`\u003c/span\u003e\n"}},"type":"object","required":["address","name"],"language":{"nodejs":{"requiredOutputs":["address","keepaliveTime","name"]}}},"fastly:index/ServiceComputeDictionary:ServiceComputeDictionary":{"properties":{"dictionaryId":{"type":"string","description":"The ID of the dictionary\n"},"forceDestroy":{"type":"boolean","description":"Allow the dictionary to be deleted, even if it contains entries. Defaults to false.\n"},"name":{"type":"string","description":"A unique name to identify this dictionary. It is important to note that changing this attribute will delete and recreate the dictionary, and discard the current items in the dictionary\n"},"writeOnly":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, the dictionary is a [private dictionary](https://docs.fastly.com/en/guides/private-dictionaries). Default is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. Please note that changing this attribute will delete and recreate the dictionary, and discard the current items in the dictionary. \u003cspan pulumi-lang-nodejs=\"`fastly.ServiceVcl`\" pulumi-lang-dotnet=\"`fastly.ServiceVcl`\" pulumi-lang-go=\"`ServiceVcl`\" pulumi-lang-python=\"`ServiceVcl`\" pulumi-lang-yaml=\"`fastly.ServiceVcl`\" pulumi-lang-java=\"`fastly.ServiceVcl`\"\u003e`fastly.ServiceVcl`\u003c/span\u003e resource will only manage the dictionary object itself, and items under private dictionaries can not be managed using [\u003cspan pulumi-lang-nodejs=\"`fastly.ServiceDictionaryItems`\" pulumi-lang-dotnet=\"`fastly.ServiceDictionaryItems`\" pulumi-lang-go=\"`ServiceDictionaryItems`\" pulumi-lang-python=\"`ServiceDictionaryItems`\" pulumi-lang-yaml=\"`fastly.ServiceDictionaryItems`\" pulumi-lang-java=\"`fastly.ServiceDictionaryItems`\"\u003e`fastly.ServiceDictionaryItems`\u003c/span\u003e](https://registry.terraform.io/providers/fastly/fastly/latest/docs/resources/service_dictionary_items#limitations) resource. Therefore, using a write-only/private dictionary should only be done if the items are managed outside of Terraform\n"}},"type":"object","required":["name"],"language":{"nodejs":{"requiredOutputs":["dictionaryId","name"]}}},"fastly:index/ServiceComputeDomain:ServiceComputeDomain":{"properties":{"comment":{"type":"string","description":"An optional comment about the Domain.\n"},"name":{"type":"string","description":"The domain that this Service will respond to. It is important to note that changing this attribute will delete and recreate the resource.\n"}},"type":"object","required":["name"]},"fastly:index/ServiceComputeHealthcheck:ServiceComputeHealthcheck":{"properties":{"checkInterval":{"type":"integer","description":"How often to run the Healthcheck in milliseconds. Default \u003cspan pulumi-lang-nodejs=\"`5000`\" pulumi-lang-dotnet=\"`5000`\" pulumi-lang-go=\"`5000`\" pulumi-lang-python=\"`5000`\" pulumi-lang-yaml=\"`5000`\" pulumi-lang-java=\"`5000`\"\u003e`5000`\u003c/span\u003e\n"},"expectedResponse":{"type":"integer","description":"The status code expected from the host. Default \u003cspan pulumi-lang-nodejs=\"`200`\" pulumi-lang-dotnet=\"`200`\" pulumi-lang-go=\"`200`\" pulumi-lang-python=\"`200`\" pulumi-lang-yaml=\"`200`\" pulumi-lang-java=\"`200`\"\u003e`200`\u003c/span\u003e\n"},"headers":{"type":"array","items":{"type":"string"},"description":"Custom health check HTTP headers (e.g. if your health check requires an API key to be provided).\n"},"host":{"type":"string","description":"The Host header to send for this Healthcheck\n"},"httpVersion":{"type":"string","description":"Whether to use version 1.0 or 1.1 HTTP. Default `1.1`\n"},"initial":{"type":"integer","description":"When loading a config, the initial number of probes to be seen as OK. Default \u003cspan pulumi-lang-nodejs=\"`3`\" pulumi-lang-dotnet=\"`3`\" pulumi-lang-go=\"`3`\" pulumi-lang-python=\"`3`\" pulumi-lang-yaml=\"`3`\" pulumi-lang-java=\"`3`\"\u003e`3`\u003c/span\u003e\n"},"method":{"type":"string","description":"Which HTTP method to use. Default `HEAD`\n"},"name":{"type":"string","description":"A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"The path to check\n"},"threshold":{"type":"integer","description":"How many Healthchecks must succeed to be considered healthy. Default \u003cspan pulumi-lang-nodejs=\"`3`\" pulumi-lang-dotnet=\"`3`\" pulumi-lang-go=\"`3`\" pulumi-lang-python=\"`3`\" pulumi-lang-yaml=\"`3`\" pulumi-lang-java=\"`3`\"\u003e`3`\u003c/span\u003e\n"},"timeout":{"type":"integer","description":"Timeout in milliseconds. Default \u003cspan pulumi-lang-nodejs=\"`5000`\" pulumi-lang-dotnet=\"`5000`\" pulumi-lang-go=\"`5000`\" pulumi-lang-python=\"`5000`\" pulumi-lang-yaml=\"`5000`\" pulumi-lang-java=\"`5000`\"\u003e`5000`\u003c/span\u003e\n"},"window":{"type":"integer","description":"The number of most recent Healthcheck queries to keep for this Healthcheck. Default \u003cspan pulumi-lang-nodejs=\"`5`\" pulumi-lang-dotnet=\"`5`\" pulumi-lang-go=\"`5`\" pulumi-lang-python=\"`5`\" pulumi-lang-yaml=\"`5`\" pulumi-lang-java=\"`5`\"\u003e`5`\u003c/span\u003e\n"}},"type":"object","required":["host","name","path"]},"fastly:index/ServiceComputeImageOptimizerDefaultSettings:ServiceComputeImageOptimizerDefaultSettings":{"properties":{"allowVideo":{"type":"boolean","description":"Enables GIF to MP4 transformations on this service.\n"},"jpegQuality":{"type":"integer","description":"The default quality to use with JPEG output. This can be overridden with the \"quality\" parameter on specific image optimizer requests.\n"},"jpegType":{"type":"string","description":"The default type of JPEG output to use. This can be overridden with \"format=bjpeg\" and \"format=pjpeg\" on specific image optimizer requests. Valid values are \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`baseline`\" pulumi-lang-dotnet=\"`Baseline`\" pulumi-lang-go=\"`baseline`\" pulumi-lang-python=\"`baseline`\" pulumi-lang-yaml=\"`baseline`\" pulumi-lang-java=\"`baseline`\"\u003e`baseline`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`progressive`\" pulumi-lang-dotnet=\"`Progressive`\" pulumi-lang-go=\"`progressive`\" pulumi-lang-python=\"`progressive`\" pulumi-lang-yaml=\"`progressive`\" pulumi-lang-java=\"`progressive`\"\u003e`progressive`\u003c/span\u003e.\n\t- auto: Match the input JPEG type, or baseline if transforming from a non-JPEG input.\n\t- baseline: Output baseline JPEG images\n\t- progressive: Output progressive JPEG images\n"},"name":{"type":"string","description":"Used by the provider to identify modified settings. Changing this value will force the entire block to be deleted, then recreated.\n"},"resizeFilter":{"type":"string","description":"The type of filter to use while resizing an image. Valid values are \u003cspan pulumi-lang-nodejs=\"`lanczos3`\" pulumi-lang-dotnet=\"`Lanczos3`\" pulumi-lang-go=\"`lanczos3`\" pulumi-lang-python=\"`lanczos3`\" pulumi-lang-yaml=\"`lanczos3`\" pulumi-lang-java=\"`lanczos3`\"\u003e`lanczos3`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`lanczos2`\" pulumi-lang-dotnet=\"`Lanczos2`\" pulumi-lang-go=\"`lanczos2`\" pulumi-lang-python=\"`lanczos2`\" pulumi-lang-yaml=\"`lanczos2`\" pulumi-lang-java=\"`lanczos2`\"\u003e`lanczos2`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bicubic`\" pulumi-lang-dotnet=\"`Bicubic`\" pulumi-lang-go=\"`bicubic`\" pulumi-lang-python=\"`bicubic`\" pulumi-lang-yaml=\"`bicubic`\" pulumi-lang-java=\"`bicubic`\"\u003e`bicubic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bilinear`\" pulumi-lang-dotnet=\"`Bilinear`\" pulumi-lang-go=\"`bilinear`\" pulumi-lang-python=\"`bilinear`\" pulumi-lang-yaml=\"`bilinear`\" pulumi-lang-java=\"`bilinear`\"\u003e`bilinear`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`nearest`\" pulumi-lang-dotnet=\"`Nearest`\" pulumi-lang-go=\"`nearest`\" pulumi-lang-python=\"`nearest`\" pulumi-lang-yaml=\"`nearest`\" pulumi-lang-java=\"`nearest`\"\u003e`nearest`\u003c/span\u003e.\n\t- lanczos3: A Lanczos filter with a kernel size of 3. Lanczos filters can detect edges and linear features within an image, providing the best possible reconstruction.\n\t- lanczos2: A Lanczos filter with a kernel size of 2.\n\t- bicubic: A filter using an average of a 4x4 environment of pixels, weighing the innermost pixels higher.\n\t- bilinear: A filter using an average of a 2x2 environment of pixels.\n\t- nearest: A filter using the value of nearby translated pixel values. Preserves hard edges.\n"},"upscale":{"type":"boolean","description":"Whether or not we should allow output images to render at sizes larger than input.\n"},"webp":{"type":"boolean","description":"Controls whether or not to default to WebP output when the client supports it. This is equivalent to adding \"auto=webp\" to all image optimizer requests.\n"},"webpQuality":{"type":"integer","description":"The default quality to use with WebP output. This can be overridden with the second option in the \"quality\" URL parameter on specific image optimizer requests.\n"}},"type":"object"},"fastly:index/ServiceComputeLoggingBigquery:ServiceComputeLoggingBigquery":{"properties":{"accountName":{"type":"string","description":"The google account name used to obtain temporary credentials (default none). Not required if 'email' and 'secret_key' are provided. You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n"},"dataset":{"type":"string","description":"The ID of your BigQuery dataset\n"},"email":{"type":"string","description":"The email for the service account with write access to your BigQuery dataset. If not provided, this will be pulled from a `FASTLY_BQ_EMAIL` environment variable\n","secret":true},"name":{"type":"string","description":"A unique name to identify this BigQuery logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"projectId":{"type":"string","description":"The ID of your GCP project\n"},"secretKey":{"type":"string","description":"The secret key associated with the service account that has write access to your BigQuery table. If not provided, this will be pulled from the `FASTLY_BQ_SECRET_KEY` environment variable. Typical format for this is a private key in a string with newlines\n","secret":true},"table":{"type":"string","description":"The ID of your BigQuery table\n"},"template":{"type":"string","description":"BigQuery table name suffix template\n"}},"type":"object","required":["dataset","email","name","projectId","secretKey","table"]},"fastly:index/ServiceComputeLoggingBlobstorage:ServiceComputeLoggingBlobstorage":{"properties":{"accountName":{"type":"string","description":"The unique Azure Blob Storage namespace in which your data objects are stored\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"container":{"type":"string","description":"The name of the Azure Blob Storage container in which to store logs\n"},"fileMaxBytes":{"type":"integer","description":"Maximum size of an uploaded log file, if non-zero.\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"A unique name to identify the Azure Blob Storage endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"The path to upload logs to. Must end with a trailing slash. If this field is left empty, the files will be saved in the container's root path\n"},"period":{"type":"integer","description":"How frequently the logs should be transferred in seconds. Default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"sasToken":{"type":"string","description":"The Azure shared access signature providing write access to the blob service objects. Be sure to update your token before it expires or the logging functionality will not work\n","secret":true},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"}},"type":"object","required":["accountName","container","name","sasToken"]},"fastly:index/ServiceComputeLoggingCloudfile:ServiceComputeLoggingCloudfile":{"properties":{"accessKey":{"type":"string","description":"Your Cloud File account access key\n","secret":true},"bucketName":{"type":"string","description":"The name of your Cloud Files container\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the Rackspace Cloud Files logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"The path to upload logs to\n"},"period":{"type":"integer","description":"How frequently log files are finalized so they can be available for reading (in seconds, default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e)\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"The PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"region":{"type":"string","description":"The region to stream logs to. One of: DFW (Dallas), ORD (Chicago), IAD (Northern Virginia), LON (London), SYD (Sydney), HKG (Hong Kong)\n"},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"},"user":{"type":"string","description":"The username for your Cloud Files account\n"}},"type":"object","required":["accessKey","bucketName","name","user"]},"fastly:index/ServiceComputeLoggingDatadog:ServiceComputeLoggingDatadog":{"properties":{"name":{"type":"string","description":"The unique name of the Datadog logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"region":{"type":"string","description":"The region that log data will be sent to. Defaults to `US` if undefined\n"},"token":{"type":"string","description":"The API key from your Datadog account\n","secret":true}},"type":"object","required":["name","token"]},"fastly:index/ServiceComputeLoggingDigitalocean:ServiceComputeLoggingDigitalocean":{"properties":{"accessKey":{"type":"string","description":"Your DigitalOcean Spaces account access key\n","secret":true},"bucketName":{"type":"string","description":"The name of the DigitalOcean Space\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"domain":{"type":"string","description":"The domain of the DigitalOcean Spaces endpoint (default `nyc3.digitaloceanspaces.com`)\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the DigitalOcean Spaces logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"The path to upload logs to\n"},"period":{"type":"integer","description":"How frequently log files are finalized so they can be available for reading (in seconds, default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e)\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"secretKey":{"type":"string","description":"Your DigitalOcean Spaces account secret key\n","secret":true},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"}},"type":"object","required":["accessKey","bucketName","name","secretKey"]},"fastly:index/ServiceComputeLoggingElasticsearch:ServiceComputeLoggingElasticsearch":{"properties":{"index":{"type":"string","description":"The name of the Elasticsearch index to send documents (logs) to\n"},"name":{"type":"string","description":"The unique name of the Elasticsearch logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"password":{"type":"string","description":"BasicAuth password for Elasticsearch\n","secret":true},"pipeline":{"type":"string","description":"The ID of the Elasticsearch ingest pipeline to apply pre-process transformations to before indexing\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"requestMaxBytes":{"type":"integer","description":"The maximum number of logs sent in one request. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e for unbounded\n"},"requestMaxEntries":{"type":"integer","description":"The maximum number of bytes sent in one request. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e for unbounded\n"},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format\n"},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format\n"},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format\n","secret":true},"tlsHostname":{"type":"string","description":"The hostname used to verify the server's certificate. It can either be the Common Name (CN) or a Subject Alternative Name (SAN)\n"},"url":{"type":"string","description":"The Elasticsearch URL to stream logs to\n"},"user":{"type":"string","description":"BasicAuth username for Elasticsearch\n"}},"type":"object","required":["index","name","url"]},"fastly:index/ServiceComputeLoggingFtp:ServiceComputeLoggingFtp":{"properties":{"address":{"type":"string","description":"The FTP address to stream logs to\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the FTP logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"password":{"type":"string","description":"The password for the server (for anonymous use an email address)\n","secret":true},"path":{"type":"string","description":"The path to upload log files to. If the path ends in `/` then it is treated as a directory\n"},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds (Default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e)\n"},"port":{"type":"integer","description":"The port number. Default: \u003cspan pulumi-lang-nodejs=\"`21`\" pulumi-lang-dotnet=\"`21`\" pulumi-lang-go=\"`21`\" pulumi-lang-python=\"`21`\" pulumi-lang-yaml=\"`21`\" pulumi-lang-java=\"`21`\"\u003e`21`\u003c/span\u003e\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"The PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"},"user":{"type":"string","description":"The username for the server (can be \u003cspan pulumi-lang-nodejs=\"`anonymous`\" pulumi-lang-dotnet=\"`Anonymous`\" pulumi-lang-go=\"`anonymous`\" pulumi-lang-python=\"`anonymous`\" pulumi-lang-yaml=\"`anonymous`\" pulumi-lang-java=\"`anonymous`\"\u003e`anonymous`\u003c/span\u003e)\n"}},"type":"object","required":["address","name","password","path","user"]},"fastly:index/ServiceComputeLoggingGc:ServiceComputeLoggingGc":{"properties":{"accountName":{"type":"string","description":"The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n"},"bucketName":{"type":"string","description":"The name of the bucket in which to store the logs\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"A unique name to identify this GCS endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"Path to store the files. Must end with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path\n"},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds (Default 3600)\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"projectId":{"type":"string","description":"The ID of your Google Cloud Platform project\n"},"secretKey":{"type":"string","description":"The secret key associated with the target gcs bucket on your account. You may optionally provide this secret via an environment variable, `FASTLY_GCS_SECRET_KEY`. A typical format for the key is PEM format, containing actual newline characters where required\n","secret":true},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"},"user":{"type":"string","description":"Your Google Cloud Platform service account email address. The \u003cspan pulumi-lang-nodejs=\"`clientEmail`\" pulumi-lang-dotnet=\"`ClientEmail`\" pulumi-lang-go=\"`clientEmail`\" pulumi-lang-python=\"`client_email`\" pulumi-lang-yaml=\"`clientEmail`\" pulumi-lang-java=\"`clientEmail`\"\u003e`client_email`\u003c/span\u003e field in your service account authentication JSON. You may optionally provide this via an environment variable, `FASTLY_GCS_EMAIL`.\n"}},"type":"object","required":["bucketName","name"]},"fastly:index/ServiceComputeLoggingGooglepubsub:ServiceComputeLoggingGooglepubsub":{"properties":{"accountName":{"type":"string","description":"The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n"},"name":{"type":"string","description":"The unique name of the Google Cloud Pub/Sub logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"projectId":{"type":"string","description":"The ID of your Google Cloud Platform project\n"},"secretKey":{"type":"string","description":"Your Google Cloud Platform account secret key. The \u003cspan pulumi-lang-nodejs=\"`privateKey`\" pulumi-lang-dotnet=\"`PrivateKey`\" pulumi-lang-go=\"`privateKey`\" pulumi-lang-python=\"`private_key`\" pulumi-lang-yaml=\"`privateKey`\" pulumi-lang-java=\"`privateKey`\"\u003e`private_key`\u003c/span\u003e field in your service account authentication JSON. You may optionally provide this secret via an environment variable, `FASTLY_GOOGLE_PUBSUB_SECRET_KEY`.\n","secret":true},"topic":{"type":"string","description":"The Google Cloud Pub/Sub topic to which logs will be published\n"},"user":{"type":"string","description":"Your Google Cloud Platform service account email address. The \u003cspan pulumi-lang-nodejs=\"`clientEmail`\" pulumi-lang-dotnet=\"`ClientEmail`\" pulumi-lang-go=\"`clientEmail`\" pulumi-lang-python=\"`client_email`\" pulumi-lang-yaml=\"`clientEmail`\" pulumi-lang-java=\"`clientEmail`\"\u003e`client_email`\u003c/span\u003e field in your service account authentication JSON. You may optionally provide this via an environment variable, `FASTLY_GOOGLE_PUBSUB_EMAIL`.\n"}},"type":"object","required":["name","projectId","secretKey","topic","user"]},"fastly:index/ServiceComputeLoggingGrafanacloudlog:ServiceComputeLoggingGrafanacloudlog":{"properties":{"index":{"type":"string","description":"The stream identifier as a JSON string\n"},"name":{"type":"string","description":"The unique name of the GrafanaCloudLogs logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"token":{"type":"string","description":"The Access Policy Token key for your GrafanaCloudLogs account\n","secret":true},"url":{"type":"string","description":"The URL to stream logs to\n"},"user":{"type":"string","description":"The Grafana User ID\n"}},"type":"object","required":["index","name","token","url","user"]},"fastly:index/ServiceComputeLoggingHeroku:ServiceComputeLoggingHeroku":{"properties":{"name":{"type":"string","description":"The unique name of the Heroku logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"token":{"type":"string","description":"The token to use for authentication (https://www.heroku.com/docs/customer-token-authentication-token/)\n","secret":true},"url":{"type":"string","description":"The URL to stream logs to\n"}},"type":"object","required":["name","token","url"]},"fastly:index/ServiceComputeLoggingHoneycomb:ServiceComputeLoggingHoneycomb":{"properties":{"dataset":{"type":"string","description":"The Honeycomb Dataset you want to log to\n"},"name":{"type":"string","description":"The unique name of the Honeycomb logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"token":{"type":"string","description":"The Write Key from the Account page of your Honeycomb account\n","secret":true}},"type":"object","required":["dataset","name","token"]},"fastly:index/ServiceComputeLoggingHttp:ServiceComputeLoggingHttp":{"properties":{"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"contentType":{"type":"string","description":"Value of the `Content-Type` header sent with the request\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"headerName":{"type":"string","description":"Custom header sent with the request\n"},"headerValue":{"type":"string","description":"Value of the custom header sent with the request\n"},"jsonFormat":{"type":"string","description":"Formats log entries as JSON. Can be either disabled (\u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e), array of json (\u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e), or newline delimited json (\u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e)\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"method":{"type":"string","description":"HTTP method used for request. Can be either `POST` or `PUT`. Default `POST`\n"},"name":{"type":"string","description":"The unique name of the HTTPS logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"period":{"type":"integer","description":"How frequently, in seconds, batches of log data are sent to the HTTPS endpoint. A value of 0 sends logs at the same interval as the default, which is 5 seconds.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"requestMaxBytes":{"type":"integer","description":"The maximum number of bytes sent in one request\n"},"requestMaxEntries":{"type":"integer","description":"The maximum number of logs sent in one request\n"},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format\n"},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format\n"},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format\n","secret":true},"tlsHostname":{"type":"string","description":"Used during the TLS handshake to validate the certificate\n"},"url":{"type":"string","description":"URL that log data will be sent to. Must use the https protocol\n"}},"type":"object","required":["name","url"]},"fastly:index/ServiceComputeLoggingKafka:ServiceComputeLoggingKafka":{"properties":{"authMethod":{"type":"string","description":"SASL authentication method. One of: plain, scram-sha-256, scram-sha-512\n"},"brokers":{"type":"string","description":"A comma-separated list of IP addresses or hostnames of Kafka brokers\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. One of: \u003cspan pulumi-lang-nodejs=\"`gzip`\" pulumi-lang-dotnet=\"`Gzip`\" pulumi-lang-go=\"`gzip`\" pulumi-lang-python=\"`gzip`\" pulumi-lang-yaml=\"`gzip`\" pulumi-lang-java=\"`gzip`\"\u003e`gzip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`snappy`\" pulumi-lang-dotnet=\"`Snappy`\" pulumi-lang-go=\"`snappy`\" pulumi-lang-python=\"`snappy`\" pulumi-lang-yaml=\"`snappy`\" pulumi-lang-java=\"`snappy`\"\u003e`snappy`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`lz4`\" pulumi-lang-dotnet=\"`Lz4`\" pulumi-lang-go=\"`lz4`\" pulumi-lang-python=\"`lz4`\" pulumi-lang-yaml=\"`lz4`\" pulumi-lang-java=\"`lz4`\"\u003e`lz4`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the Kafka logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"parseLogKeyvals":{"type":"boolean","description":"Enables parsing of key=value tuples from the beginning of a logline, turning them into record headers\n"},"password":{"type":"string","description":"SASL Pass\n","secret":true},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"requestMaxBytes":{"type":"integer","description":"Maximum size of log batch, if non-zero. Defaults to 0 for unbounded\n"},"requiredAcks":{"type":"string","description":"The Number of acknowledgements a leader must receive before a write is considered successful. One of: \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e (default) One server needs to respond. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e No servers need to respond. `-1` Wait for all in-sync replicas to respond\n"},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format\n"},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format\n"},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format\n","secret":true},"tlsHostname":{"type":"string","description":"The hostname used to verify the server's certificate. It can either be the Common Name or a Subject Alternative Name (SAN)\n"},"topic":{"type":"string","description":"The Kafka topic to send logs to\n"},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging. Can be either \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"},"user":{"type":"string","description":"SASL User\n"}},"type":"object","required":["brokers","name","topic"]},"fastly:index/ServiceComputeLoggingKinese:ServiceComputeLoggingKinese":{"properties":{"accessKey":{"type":"string","description":"The AWS access key to be used to write to the stream\n","secret":true},"iamRole":{"type":"string","description":"The Amazon Resource Name (ARN) for the IAM role granting Fastly access to Kinesis. Not required if \u003cspan pulumi-lang-nodejs=\"`accessKey`\" pulumi-lang-dotnet=\"`AccessKey`\" pulumi-lang-go=\"`accessKey`\" pulumi-lang-python=\"`access_key`\" pulumi-lang-yaml=\"`accessKey`\" pulumi-lang-java=\"`accessKey`\"\u003e`access_key`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`secretKey`\" pulumi-lang-dotnet=\"`SecretKey`\" pulumi-lang-go=\"`secretKey`\" pulumi-lang-python=\"`secret_key`\" pulumi-lang-yaml=\"`secretKey`\" pulumi-lang-java=\"`secretKey`\"\u003e`secret_key`\u003c/span\u003e are provided.\n"},"name":{"type":"string","description":"The unique name of the Kinesis logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"region":{"type":"string","description":"The AWS region the stream resides in. (Default: `us-east-1`)\n"},"secretKey":{"type":"string","description":"The AWS secret access key to authenticate with\n","secret":true},"topic":{"type":"string","description":"The Kinesis stream name\n"}},"type":"object","required":["name","topic"]},"fastly:index/ServiceComputeLoggingLogentry:ServiceComputeLoggingLogentry":{"properties":{"name":{"type":"string","description":"The unique name of the Logentries logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"port":{"type":"integer","description":"The port number configured in Logentries\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"token":{"type":"string","description":"Use token based authentication (https://logentries.com/doc/input-token/)\n"},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging\n"}},"type":"object","required":["name","token"]},"fastly:index/ServiceComputeLoggingLoggly:ServiceComputeLoggingLoggly":{"properties":{"name":{"type":"string","description":"The unique name of the Loggly logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"token":{"type":"string","description":"The token to use for authentication (https://www.loggly.com/docs/customer-token-authentication-token/).\n","secret":true}},"type":"object","required":["name","token"]},"fastly:index/ServiceComputeLoggingLogshuttle:ServiceComputeLoggingLogshuttle":{"properties":{"name":{"type":"string","description":"The unique name of the Log Shuttle logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"token":{"type":"string","description":"The data authentication token associated with this endpoint\n","secret":true},"url":{"type":"string","description":"Your Log Shuttle endpoint URL\n"}},"type":"object","required":["name","token","url"]},"fastly:index/ServiceComputeLoggingNewrelic:ServiceComputeLoggingNewrelic":{"properties":{"name":{"type":"string","description":"The unique name of the New Relic logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"region":{"type":"string","description":"The region that log data will be sent to. Default: `US`\n"},"token":{"type":"string","description":"The Insert API key from the Account page of your New Relic account\n","secret":true}},"type":"object","required":["name","token"]},"fastly:index/ServiceComputeLoggingNewrelicotlp:ServiceComputeLoggingNewrelicotlp":{"properties":{"format":{"type":"string","description":"Apache style log formatting. Your log must produce valid JSON that New Relic OTLP can ingest.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The unique name of the New Relic OTLP logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"region":{"type":"string","description":"The region that log data will be sent to. Default: `US`\n"},"responseCondition":{"type":"string","description":"The name of the condition to apply.\n"},"token":{"type":"string","description":"The Insert API key from the Account page of your New Relic account\n","secret":true},"url":{"type":"string","description":"The optional New Relic Trace Observer URL to stream logs to for Infinite Tracing.\n"}},"type":"object","required":["name","token"]},"fastly:index/ServiceComputeLoggingOpenstack:ServiceComputeLoggingOpenstack":{"properties":{"accessKey":{"type":"string","description":"Your OpenStack account access key\n","secret":true},"bucketName":{"type":"string","description":"The name of your OpenStack container\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the OpenStack logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"Path to store the files. Must end with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path\n"},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds. Default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"},"url":{"type":"string","description":"Your OpenStack auth url\n"},"user":{"type":"string","description":"The username for your OpenStack account\n"}},"type":"object","required":["accessKey","bucketName","name","url","user"]},"fastly:index/ServiceComputeLoggingPapertrail:ServiceComputeLoggingPapertrail":{"properties":{"address":{"type":"string","description":"The address of the Papertrail endpoint\n"},"name":{"type":"string","description":"A unique name to identify this Papertrail endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"port":{"type":"integer","description":"The port associated with the address where the Papertrail endpoint can be accessed\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"}},"type":"object","required":["address","name","port"]},"fastly:index/ServiceComputeLoggingS3:ServiceComputeLoggingS3":{"properties":{"acl":{"type":"string","description":"The AWS [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl) to use for objects uploaded to the S3 bucket. Options are: \u003cspan pulumi-lang-nodejs=\"`private`\" pulumi-lang-dotnet=\"`Private`\" pulumi-lang-go=\"`private`\" pulumi-lang-python=\"`private`\" pulumi-lang-yaml=\"`private`\" pulumi-lang-java=\"`private`\"\u003e`private`\u003c/span\u003e, `public-read`, `public-read-write`, `aws-exec-read`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n"},"bucketName":{"type":"string","description":"The name of the bucket in which to store the logs\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"domain":{"type":"string","description":"If you created the S3 bucket outside of `us-east-1`, then specify the corresponding bucket endpoint. Example: `s3-us-west-2.amazonaws.com`\n"},"fileMaxBytes":{"type":"integer","description":"Maximum size of an uploaded log file, if non-zero.\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the S3 logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"Path to store the files. Must end with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path\n"},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds. Default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"redundancy":{"type":"string","description":"The S3 storage class (redundancy level). Should be one of: \u003cspan pulumi-lang-nodejs=\"`standard`\" pulumi-lang-dotnet=\"`Standard`\" pulumi-lang-go=\"`standard`\" pulumi-lang-python=\"`standard`\" pulumi-lang-yaml=\"`standard`\" pulumi-lang-java=\"`standard`\"\u003e`standard`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`intelligentTiering`\" pulumi-lang-dotnet=\"`IntelligentTiering`\" pulumi-lang-go=\"`intelligentTiering`\" pulumi-lang-python=\"`intelligent_tiering`\" pulumi-lang-yaml=\"`intelligentTiering`\" pulumi-lang-java=\"`intelligentTiering`\"\u003e`intelligent_tiering`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`standardIa`\" pulumi-lang-dotnet=\"`StandardIa`\" pulumi-lang-go=\"`standardIa`\" pulumi-lang-python=\"`standard_ia`\" pulumi-lang-yaml=\"`standardIa`\" pulumi-lang-java=\"`standardIa`\"\u003e`standard_ia`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`onezoneIa`\" pulumi-lang-dotnet=\"`OnezoneIa`\" pulumi-lang-go=\"`onezoneIa`\" pulumi-lang-python=\"`onezone_ia`\" pulumi-lang-yaml=\"`onezoneIa`\" pulumi-lang-java=\"`onezoneIa`\"\u003e`onezone_ia`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`glacier`\" pulumi-lang-dotnet=\"`Glacier`\" pulumi-lang-go=\"`glacier`\" pulumi-lang-python=\"`glacier`\" pulumi-lang-yaml=\"`glacier`\" pulumi-lang-java=\"`glacier`\"\u003e`glacier`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`glacierIr`\" pulumi-lang-dotnet=\"`GlacierIr`\" pulumi-lang-go=\"`glacierIr`\" pulumi-lang-python=\"`glacier_ir`\" pulumi-lang-yaml=\"`glacierIr`\" pulumi-lang-java=\"`glacierIr`\"\u003e`glacier_ir`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`deepArchive`\" pulumi-lang-dotnet=\"`DeepArchive`\" pulumi-lang-go=\"`deepArchive`\" pulumi-lang-python=\"`deep_archive`\" pulumi-lang-yaml=\"`deepArchive`\" pulumi-lang-java=\"`deepArchive`\"\u003e`deep_archive`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`reducedRedundancy`\" pulumi-lang-dotnet=\"`ReducedRedundancy`\" pulumi-lang-go=\"`reducedRedundancy`\" pulumi-lang-python=\"`reduced_redundancy`\" pulumi-lang-yaml=\"`reducedRedundancy`\" pulumi-lang-java=\"`reducedRedundancy`\"\u003e`reduced_redundancy`\u003c/span\u003e\n"},"s3AccessKey":{"type":"string","description":"AWS Access Key of an account with the required permissions to post logs. It is **strongly** recommended you create a separate IAM user with permissions to only operate on this Bucket. This key will be not be encrypted. Not required if \u003cspan pulumi-lang-nodejs=\"`iamRole`\" pulumi-lang-dotnet=\"`IamRole`\" pulumi-lang-go=\"`iamRole`\" pulumi-lang-python=\"`iam_role`\" pulumi-lang-yaml=\"`iamRole`\" pulumi-lang-java=\"`iamRole`\"\u003e`iam_role`\u003c/span\u003e is provided. You can provide this key via an environment variable, `FASTLY_S3_ACCESS_KEY`\n","secret":true},"s3IamRole":{"type":"string","description":"The Amazon Resource Name (ARN) for the IAM role granting Fastly access to S3. Not required if \u003cspan pulumi-lang-nodejs=\"`accessKey`\" pulumi-lang-dotnet=\"`AccessKey`\" pulumi-lang-go=\"`accessKey`\" pulumi-lang-python=\"`access_key`\" pulumi-lang-yaml=\"`accessKey`\" pulumi-lang-java=\"`accessKey`\"\u003e`access_key`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`secretKey`\" pulumi-lang-dotnet=\"`SecretKey`\" pulumi-lang-go=\"`secretKey`\" pulumi-lang-python=\"`secret_key`\" pulumi-lang-yaml=\"`secretKey`\" pulumi-lang-java=\"`secretKey`\"\u003e`secret_key`\u003c/span\u003e are provided. You can provide this value via an environment variable, `FASTLY_S3_IAM_ROLE`\n"},"s3SecretKey":{"type":"string","description":"AWS Secret Key of an account with the required permissions to post logs. It is **strongly** recommended you create a separate IAM user with permissions to only operate on this Bucket. This secret will be not be encrypted. Not required if \u003cspan pulumi-lang-nodejs=\"`iamRole`\" pulumi-lang-dotnet=\"`IamRole`\" pulumi-lang-go=\"`iamRole`\" pulumi-lang-python=\"`iam_role`\" pulumi-lang-yaml=\"`iamRole`\" pulumi-lang-java=\"`iamRole`\"\u003e`iam_role`\u003c/span\u003e is provided. You can provide this secret via an environment variable, `FASTLY_S3_SECRET_KEY`\n","secret":true},"serverSideEncryption":{"type":"string","description":"Specify what type of server side encryption should be used. Can be either `AES256` or `aws:kms`\n"},"serverSideEncryptionKmsKeyId":{"type":"string","description":"Optional server-side KMS Key Id. Must be set if\u003cspan pulumi-lang-nodejs=\" serverSideEncryption \" pulumi-lang-dotnet=\" ServerSideEncryption \" pulumi-lang-go=\" serverSideEncryption \" pulumi-lang-python=\" server_side_encryption \" pulumi-lang-yaml=\" serverSideEncryption \" pulumi-lang-java=\" serverSideEncryption \"\u003e server_side_encryption \u003c/span\u003eis set to `aws:kms`\n"},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"}},"type":"object","required":["bucketName","name"]},"fastly:index/ServiceComputeLoggingScalyr:ServiceComputeLoggingScalyr":{"properties":{"name":{"type":"string","description":"The unique name of the Scalyr logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"projectId":{"type":"string","description":"The name of the logfile field sent to Scalyr\n"},"region":{"type":"string","description":"The region that log data will be sent to. One of `US` or `EU`. Defaults to `US` if undefined\n"},"token":{"type":"string","description":"The token to use for authentication (https://www.scalyr.com/keys)\n","secret":true}},"type":"object","required":["name","token"]},"fastly:index/ServiceComputeLoggingSftp:ServiceComputeLoggingSftp":{"properties":{"address":{"type":"string","description":"The SFTP address to stream logs to\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the SFTP logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"password":{"type":"string","description":"The password for the server. If both \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`secretKey`\" pulumi-lang-dotnet=\"`SecretKey`\" pulumi-lang-go=\"`secretKey`\" pulumi-lang-python=\"`secret_key`\" pulumi-lang-yaml=\"`secretKey`\" pulumi-lang-java=\"`secretKey`\"\u003e`secret_key`\u003c/span\u003e are passed, \u003cspan pulumi-lang-nodejs=\"`secretKey`\" pulumi-lang-dotnet=\"`SecretKey`\" pulumi-lang-go=\"`secretKey`\" pulumi-lang-python=\"`secret_key`\" pulumi-lang-yaml=\"`secretKey`\" pulumi-lang-java=\"`secretKey`\"\u003e`secret_key`\u003c/span\u003e will be preferred\n","secret":true},"path":{"type":"string","description":"The path to upload log files to. If the path ends in `/` then it is treated as a directory\n"},"period":{"type":"integer","description":"How frequently log files are finalized so they can be available for reading (in seconds, default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e)\n"},"port":{"type":"integer","description":"The port the SFTP service listens on. (Default: \u003cspan pulumi-lang-nodejs=\"`22`\" pulumi-lang-dotnet=\"`22`\" pulumi-lang-go=\"`22`\" pulumi-lang-python=\"`22`\" pulumi-lang-yaml=\"`22`\" pulumi-lang-java=\"`22`\"\u003e`22`\u003c/span\u003e)\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"secretKey":{"type":"string","description":"The SSH private key for the server. If both \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`secretKey`\" pulumi-lang-dotnet=\"`SecretKey`\" pulumi-lang-go=\"`secretKey`\" pulumi-lang-python=\"`secret_key`\" pulumi-lang-yaml=\"`secretKey`\" pulumi-lang-java=\"`secretKey`\"\u003e`secret_key`\u003c/span\u003e are passed, \u003cspan pulumi-lang-nodejs=\"`secretKey`\" pulumi-lang-dotnet=\"`SecretKey`\" pulumi-lang-go=\"`secretKey`\" pulumi-lang-python=\"`secret_key`\" pulumi-lang-yaml=\"`secretKey`\" pulumi-lang-java=\"`secretKey`\"\u003e`secret_key`\u003c/span\u003e will be preferred\n","secret":true},"sshKnownHosts":{"type":"string","description":"A list of host keys for all hosts we can connect to over SFTP\n"},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"},"user":{"type":"string","description":"The username for the server\n"}},"type":"object","required":["address","name","path","sshKnownHosts","user"]},"fastly:index/ServiceComputeLoggingSplunk:ServiceComputeLoggingSplunk":{"properties":{"name":{"type":"string","description":"A unique name to identify the Splunk endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format. You can provide this certificate via an environment variable, `FASTLY_SPLUNK_CA_CERT`\n"},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format.\n"},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format.\n","secret":true},"tlsHostname":{"type":"string","description":"The hostname used to verify the server's certificate. It can either be the Common Name or a Subject Alternative Name (SAN)\n"},"token":{"type":"string","description":"The Splunk token to be used for authentication\n","secret":true},"url":{"type":"string","description":"The Splunk URL to stream logs to\n"},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging. Default: \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"}},"type":"object","required":["name","token","url"]},"fastly:index/ServiceComputeLoggingSumologic:ServiceComputeLoggingSumologic":{"properties":{"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"A unique name to identify this Sumologic endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"url":{"type":"string","description":"The URL to Sumologic collector endpoint\n"}},"type":"object","required":["name","url"]},"fastly:index/ServiceComputeLoggingSyslog:ServiceComputeLoggingSyslog":{"properties":{"address":{"type":"string","description":"A hostname or IPv4 address of the Syslog endpoint\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"A unique name to identify this Syslog endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"port":{"type":"integer","description":"The port associated with the address where the Syslog endpoint can be accessed. Default \u003cspan pulumi-lang-nodejs=\"`514`\" pulumi-lang-dotnet=\"`514`\" pulumi-lang-go=\"`514`\" pulumi-lang-python=\"`514`\" pulumi-lang-yaml=\"`514`\" pulumi-lang-java=\"`514`\"\u003e`514`\u003c/span\u003e\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format. You can provide this certificate via an environment variable, `FASTLY_SYSLOG_CA_CERT`\n"},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format. You can provide this certificate via an environment variable, `FASTLY_SYSLOG_CLIENT_CERT`\n"},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format. You can provide this key via an environment variable, `FASTLY_SYSLOG_CLIENT_KEY`\n","secret":true},"tlsHostname":{"type":"string","description":"Used during the TLS handshake to validate the certificate\n"},"token":{"type":"string","description":"Whether to prepend each message with a specific token\n"},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"}},"type":"object","required":["address","name"]},"fastly:index/ServiceComputePackage:ServiceComputePackage":{"properties":{"content":{"type":"string","description":"The contents of the Wasm deployment package as a base64 encoded string (e.g. could be provided using an input variable or via external data source output variable). Conflicts with \u003cspan pulumi-lang-nodejs=\"`filename`\" pulumi-lang-dotnet=\"`Filename`\" pulumi-lang-go=\"`filename`\" pulumi-lang-python=\"`filename`\" pulumi-lang-yaml=\"`filename`\" pulumi-lang-java=\"`filename`\"\u003e`filename`\u003c/span\u003e. Exactly one of these two arguments must be specified\n"},"filename":{"type":"string","description":"The path to the Wasm deployment package within your local filesystem. Conflicts with \u003cspan pulumi-lang-nodejs=\"`content`\" pulumi-lang-dotnet=\"`Content`\" pulumi-lang-go=\"`content`\" pulumi-lang-python=\"`content`\" pulumi-lang-yaml=\"`content`\" pulumi-lang-java=\"`content`\"\u003e`content`\u003c/span\u003e. Exactly one of these two arguments must be specified\n"},"sourceCodeHash":{"type":"string","description":"Used to trigger updates. Must be set to a SHA512 hash of all files (in sorted order) within the package. The usual way to set this is using the\u003cspan pulumi-lang-nodejs=\" fastly.getPackageHash \" pulumi-lang-dotnet=\" fastly.getPackageHash \" pulumi-lang-go=\" getPackageHash \" pulumi-lang-python=\" get_package_hash \" pulumi-lang-yaml=\" fastly.getPackageHash \" pulumi-lang-java=\" fastly.getPackageHash \"\u003e fastly.getPackageHash \u003c/span\u003edata source.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["sourceCodeHash"]}}},"fastly:index/ServiceComputeProductEnablement:ServiceComputeProductEnablement":{"properties":{"apiDiscovery":{"type":"boolean","description":"Enable API Discovery support\n"},"ddosProtection":{"$ref":"#/types/fastly:index/ServiceComputeProductEnablementDdosProtection:ServiceComputeProductEnablementDdosProtection","description":"DDoS Protection product\n"},"domainInspector":{"type":"boolean","description":"Enable Domain Inspector support\n"},"fanout":{"type":"boolean","description":"Enable Fanout support\n"},"logExplorerInsights":{"type":"boolean","description":"Enable Log Explorer \u0026 Insights\n"},"name":{"type":"string","description":"Used by the provider to identify modified settings (changing this value will force the entire block to be deleted, then recreated)\n"},"ngwaf":{"$ref":"#/types/fastly:index/ServiceComputeProductEnablementNgwaf:ServiceComputeProductEnablementNgwaf","description":"Next-Gen WAF product\n"},"websockets":{"type":"boolean","description":"Enable WebSockets support\n"}},"type":"object"},"fastly:index/ServiceComputeProductEnablementDdosProtection:ServiceComputeProductEnablementDdosProtection":{"properties":{"enabled":{"type":"boolean","description":"Enable DDoS Protection support\n"},"mode":{"type":"string","description":"Operation mode. Can be either \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`log`\" pulumi-lang-dotnet=\"`Log`\" pulumi-lang-go=\"`log`\" pulumi-lang-python=\"`log`\" pulumi-lang-yaml=\"`log`\" pulumi-lang-java=\"`log`\"\u003e`log`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e.\n"}},"type":"object","required":["enabled","mode"]},"fastly:index/ServiceComputeProductEnablementNgwaf:ServiceComputeProductEnablementNgwaf":{"properties":{"enabled":{"type":"boolean","description":"Enable Next-Gen WAF support\n"},"trafficRamp":{"type":"integer","description":"The percentage of traffic to inspect\n"},"workspaceId":{"type":"string","description":"The workspace to link\n"}},"type":"object","required":["enabled","workspaceId"]},"fastly:index/ServiceComputeResourceLink:ServiceComputeResourceLink":{"properties":{"linkId":{"type":"string","description":"An alphanumeric string identifying the resource link.\n"},"name":{"type":"string","description":"The name of the resource link.\n"},"resourceId":{"type":"string","description":"The ID of the underlying linked resource.\n"}},"type":"object","required":["name","resourceId"],"language":{"nodejs":{"requiredOutputs":["linkId","name","resourceId"]}}},"fastly:index/ServiceVclAcl:ServiceVclAcl":{"properties":{"aclId":{"type":"string","description":"The ID of the ACL\n"},"forceDestroy":{"type":"boolean","description":"Allow the ACL to be deleted, even if it contains entries. Defaults to false.\n"},"name":{"type":"string","description":"A unique name to identify this ACL. It is important to note that changing this attribute will delete and recreate the ACL, and discard the current items in the ACL\n"}},"type":"object","required":["name"],"language":{"nodejs":{"requiredOutputs":["aclId","name"]}}},"fastly:index/ServiceVclBackend:ServiceVclBackend":{"properties":{"address":{"type":"string","description":"An IPv4, hostname, or IPv6 address for the Backend\n"},"autoLoadbalance":{"type":"boolean","description":"Denotes if this Backend should be included in the pool of backends that requests are load balanced against. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"},"betweenBytesTimeout":{"type":"integer","description":"How long to wait between bytes in milliseconds. Default \u003cspan pulumi-lang-nodejs=\"`10000`\" pulumi-lang-dotnet=\"`10000`\" pulumi-lang-go=\"`10000`\" pulumi-lang-python=\"`10000`\" pulumi-lang-yaml=\"`10000`\" pulumi-lang-java=\"`10000`\"\u003e`10000`\u003c/span\u003e\n"},"connectTimeout":{"type":"integer","description":"How long to wait for a timeout in milliseconds. Default \u003cspan pulumi-lang-nodejs=\"`1000`\" pulumi-lang-dotnet=\"`1000`\" pulumi-lang-go=\"`1000`\" pulumi-lang-python=\"`1000`\" pulumi-lang-yaml=\"`1000`\" pulumi-lang-java=\"`1000`\"\u003e`1000`\u003c/span\u003e\n"},"errorThreshold":{"type":"integer","description":"Number of errors to allow before the Backend is marked as down. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"firstByteTimeout":{"type":"integer","description":"How long to wait for the first bytes in milliseconds. Default \u003cspan pulumi-lang-nodejs=\"`15000`\" pulumi-lang-dotnet=\"`15000`\" pulumi-lang-go=\"`15000`\" pulumi-lang-python=\"`15000`\" pulumi-lang-yaml=\"`15000`\" pulumi-lang-java=\"`15000`\"\u003e`15000`\u003c/span\u003e\n"},"healthcheck":{"type":"string","description":"Name of a defined \u003cspan pulumi-lang-nodejs=\"`healthcheck`\" pulumi-lang-dotnet=\"`Healthcheck`\" pulumi-lang-go=\"`healthcheck`\" pulumi-lang-python=\"`healthcheck`\" pulumi-lang-yaml=\"`healthcheck`\" pulumi-lang-java=\"`healthcheck`\"\u003e`healthcheck`\u003c/span\u003e to assign to this backend\n"},"keepaliveTime":{"type":"integer","description":"How long in seconds to keep a persistent connection to the backend between requests.\n"},"maxConn":{"type":"integer","description":"Maximum number of connections for this Backend. Default \u003cspan pulumi-lang-nodejs=\"`200`\" pulumi-lang-dotnet=\"`200`\" pulumi-lang-go=\"`200`\" pulumi-lang-python=\"`200`\" pulumi-lang-yaml=\"`200`\" pulumi-lang-java=\"`200`\"\u003e`200`\u003c/span\u003e\n"},"maxTlsVersion":{"type":"string","description":"Maximum allowed TLS version on SSL connections to this backend.\n"},"minTlsVersion":{"type":"string","description":"Minimum allowed TLS version on SSL connections to this backend.\n"},"name":{"type":"string","description":"Name for this Backend. Must be unique to this Service. It is important to note that changing this attribute will delete and recreate the resource\n"},"overrideHost":{"type":"string","description":"The hostname to override the Host header\n"},"port":{"type":"integer","description":"The port number on which the Backend responds. Default \u003cspan pulumi-lang-nodejs=\"`80`\" pulumi-lang-dotnet=\"`80`\" pulumi-lang-go=\"`80`\" pulumi-lang-python=\"`80`\" pulumi-lang-yaml=\"`80`\" pulumi-lang-java=\"`80`\"\u003e`80`\u003c/span\u003e\n"},"preferIpv6":{"type":"boolean","description":"Prefer IPv6 connections to origins for hostname backends. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"},"requestCondition":{"type":"string","description":"Name of a condition, which if met, will select this backend during a request.\n"},"shareKey":{"type":"string","description":"Value that when shared across backends will enable those backends to share the same health check.\n"},"shield":{"type":"string","description":"The POP of the shield designated to reduce inbound load. Valid values for \u003cspan pulumi-lang-nodejs=\"`shield`\" pulumi-lang-dotnet=\"`Shield`\" pulumi-lang-go=\"`shield`\" pulumi-lang-python=\"`shield`\" pulumi-lang-yaml=\"`shield`\" pulumi-lang-java=\"`shield`\"\u003e`shield`\u003c/span\u003e are included in the `GET /datacenters` API response\n"},"sslCaCert":{"type":"string","description":"CA certificate attached to origin.\n"},"sslCertHostname":{"type":"string","description":"Configure certificate validation. Does not affect SNI at all\n"},"sslCheckCert":{"type":"boolean","description":"Be strict about checking SSL certs. Default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e\n"},"sslCiphers":{"type":"string","description":"Cipher list consisting of one or more cipher strings separated by colons. Commas or spaces are also acceptable separators but colons are normally used.\n"},"sslClientCert":{"type":"string","description":"Client certificate attached to origin. Used when connecting to the backend\n","secret":true},"sslClientKey":{"type":"string","description":"Client key attached to origin. Used when connecting to the backend\n","secret":true},"sslSniHostname":{"type":"string","description":"Configure SNI in the TLS handshake. Does not affect cert validation at all\n"},"useSsl":{"type":"boolean","description":"Whether or not to use SSL to reach the Backend. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"},"weight":{"type":"integer","description":"The [portion of traffic](https://docs.fastly.com/en/guides/load-balancing-configuration#how-weight-affects-load-balancing) to send to this Backend. Each Backend receives weight / total of the traffic. Default \u003cspan pulumi-lang-nodejs=\"`100`\" pulumi-lang-dotnet=\"`100`\" pulumi-lang-go=\"`100`\" pulumi-lang-python=\"`100`\" pulumi-lang-yaml=\"`100`\" pulumi-lang-java=\"`100`\"\u003e`100`\u003c/span\u003e\n"}},"type":"object","required":["address","name"],"language":{"nodejs":{"requiredOutputs":["address","keepaliveTime","name"]}}},"fastly:index/ServiceVclCacheSetting:ServiceVclCacheSetting":{"properties":{"action":{"type":"string","description":"One of cache, pass, or restart, as defined on Fastly's documentation under \"[Caching action descriptions](https://docs.fastly.com/en/guides/controlling-caching#caching-action-descriptions)\"\n"},"cacheCondition":{"type":"string","description":"Name of already defined \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e used to test whether this settings object should be used. This \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e must be of type `CACHE`\n"},"name":{"type":"string","description":"Unique name for this Cache Setting. It is important to note that changing this attribute will delete and recreate the resource\n"},"staleTtl":{"type":"integer","description":"Max \"Time To Live\" for stale (unreachable) objects\n"},"ttl":{"type":"integer","description":"The Time-To-Live (TTL) for the object\n"}},"type":"object","required":["name"]},"fastly:index/ServiceVclCondition:ServiceVclCondition":{"properties":{"name":{"type":"string","description":"The unique name for the condition. It is important to note that changing this attribute will delete and recreate the resource\n"},"priority":{"type":"integer","description":"A number used to determine the order in which multiple conditions execute. Lower numbers execute first. Default \u003cspan pulumi-lang-nodejs=\"`10`\" pulumi-lang-dotnet=\"`10`\" pulumi-lang-go=\"`10`\" pulumi-lang-python=\"`10`\" pulumi-lang-yaml=\"`10`\" pulumi-lang-java=\"`10`\"\u003e`10`\u003c/span\u003e\n"},"statement":{"type":"string","description":"The statement used to determine if the condition is met\n"},"type":{"type":"string","description":"Type of condition, either `REQUEST` (req), `RESPONSE` (req, resp), or `CACHE` (req, beresp)\n"}},"type":"object","required":["name","statement","type"]},"fastly:index/ServiceVclDictionary:ServiceVclDictionary":{"properties":{"dictionaryId":{"type":"string","description":"The ID of the dictionary\n"},"forceDestroy":{"type":"boolean","description":"Allow the dictionary to be deleted, even if it contains entries. Defaults to false.\n"},"name":{"type":"string","description":"A unique name to identify this dictionary. It is important to note that changing this attribute will delete and recreate the dictionary, and discard the current items in the dictionary\n"},"writeOnly":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, the dictionary is a [private dictionary](https://docs.fastly.com/en/guides/private-dictionaries). Default is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. Please note that changing this attribute will delete and recreate the dictionary, and discard the current items in the dictionary. \u003cspan pulumi-lang-nodejs=\"`fastly.ServiceVcl`\" pulumi-lang-dotnet=\"`fastly.ServiceVcl`\" pulumi-lang-go=\"`ServiceVcl`\" pulumi-lang-python=\"`ServiceVcl`\" pulumi-lang-yaml=\"`fastly.ServiceVcl`\" pulumi-lang-java=\"`fastly.ServiceVcl`\"\u003e`fastly.ServiceVcl`\u003c/span\u003e resource will only manage the dictionary object itself, and items under private dictionaries can not be managed using [\u003cspan pulumi-lang-nodejs=\"`fastly.ServiceDictionaryItems`\" pulumi-lang-dotnet=\"`fastly.ServiceDictionaryItems`\" pulumi-lang-go=\"`ServiceDictionaryItems`\" pulumi-lang-python=\"`ServiceDictionaryItems`\" pulumi-lang-yaml=\"`fastly.ServiceDictionaryItems`\" pulumi-lang-java=\"`fastly.ServiceDictionaryItems`\"\u003e`fastly.ServiceDictionaryItems`\u003c/span\u003e](https://registry.terraform.io/providers/fastly/fastly/latest/docs/resources/service_dictionary_items#limitations) resource. Therefore, using a write-only/private dictionary should only be done if the items are managed outside of Terraform\n"}},"type":"object","required":["name"],"language":{"nodejs":{"requiredOutputs":["dictionaryId","name"]}}},"fastly:index/ServiceVclDirector:ServiceVclDirector":{"properties":{"backends":{"type":"array","items":{"type":"string"},"description":"Names of defined backends to map the director to. Example: `[ \"origin1\", \"origin2\" ]`\n"},"comment":{"type":"string","description":"An optional comment about the Director\n"},"name":{"type":"string","description":"Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource\n"},"quorum":{"type":"integer","description":"Percentage of capacity that needs to be up for the director itself to be considered up. Default \u003cspan pulumi-lang-nodejs=\"`75`\" pulumi-lang-dotnet=\"`75`\" pulumi-lang-go=\"`75`\" pulumi-lang-python=\"`75`\" pulumi-lang-yaml=\"`75`\" pulumi-lang-java=\"`75`\"\u003e`75`\u003c/span\u003e\n"},"retries":{"type":"integer","description":"How many backends to search if it fails. Default \u003cspan pulumi-lang-nodejs=\"`5`\" pulumi-lang-dotnet=\"`5`\" pulumi-lang-go=\"`5`\" pulumi-lang-python=\"`5`\" pulumi-lang-yaml=\"`5`\" pulumi-lang-java=\"`5`\"\u003e`5`\u003c/span\u003e\n"},"shield":{"type":"string","description":"Selected POP to serve as a \"shield\" for backends. Valid values for \u003cspan pulumi-lang-nodejs=\"`shield`\" pulumi-lang-dotnet=\"`Shield`\" pulumi-lang-go=\"`shield`\" pulumi-lang-python=\"`shield`\" pulumi-lang-yaml=\"`shield`\" pulumi-lang-java=\"`shield`\"\u003e`shield`\u003c/span\u003e are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response\n"},"type":{"type":"integer","description":"Type of load balance group to use. Integer, 1 to 4. Values: \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e (random), \u003cspan pulumi-lang-nodejs=\"`3`\" pulumi-lang-dotnet=\"`3`\" pulumi-lang-go=\"`3`\" pulumi-lang-python=\"`3`\" pulumi-lang-yaml=\"`3`\" pulumi-lang-java=\"`3`\"\u003e`3`\u003c/span\u003e (hash), \u003cspan pulumi-lang-nodejs=\"`4`\" pulumi-lang-dotnet=\"`4`\" pulumi-lang-go=\"`4`\" pulumi-lang-python=\"`4`\" pulumi-lang-yaml=\"`4`\" pulumi-lang-java=\"`4`\"\u003e`4`\u003c/span\u003e (client). Default \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e\n"}},"type":"object","required":["backends","name"]},"fastly:index/ServiceVclDomain:ServiceVclDomain":{"properties":{"comment":{"type":"string","description":"An optional comment about the Domain.\n"},"name":{"type":"string","description":"The domain that this Service will respond to. It is important to note that changing this attribute will delete and recreate the resource.\n"}},"type":"object","required":["name"]},"fastly:index/ServiceVclDynamicsnippet:ServiceVclDynamicsnippet":{"properties":{"content":{"type":"string","description":"The VCL code that specifies exactly what the snippet does\n"},"name":{"type":"string","description":"A name that is unique across \"regular\" and \"dynamic\" VCL Snippet configuration blocks. It is important to note that changing this attribute will delete and recreate the resource\n"},"priority":{"type":"integer","description":"Priority determines the ordering for multiple snippets. Lower numbers execute first. Defaults to \u003cspan pulumi-lang-nodejs=\"`100`\" pulumi-lang-dotnet=\"`100`\" pulumi-lang-go=\"`100`\" pulumi-lang-python=\"`100`\" pulumi-lang-yaml=\"`100`\" pulumi-lang-java=\"`100`\"\u003e`100`\u003c/span\u003e\n"},"snippetId":{"type":"string","description":"The ID of the dynamic snippet\n"},"type":{"type":"string","description":"The location in generated VCL where the snippet should be placed (can be one of \u003cspan pulumi-lang-nodejs=\"`init`\" pulumi-lang-dotnet=\"`Init`\" pulumi-lang-go=\"`init`\" pulumi-lang-python=\"`init`\" pulumi-lang-yaml=\"`init`\" pulumi-lang-java=\"`init`\"\u003e`init`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`recv`\" pulumi-lang-dotnet=\"`Recv`\" pulumi-lang-go=\"`recv`\" pulumi-lang-python=\"`recv`\" pulumi-lang-yaml=\"`recv`\" pulumi-lang-java=\"`recv`\"\u003e`recv`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`hash`\" pulumi-lang-dotnet=\"`Hash`\" pulumi-lang-go=\"`hash`\" pulumi-lang-python=\"`hash`\" pulumi-lang-yaml=\"`hash`\" pulumi-lang-java=\"`hash`\"\u003e`hash`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`hit`\" pulumi-lang-dotnet=\"`Hit`\" pulumi-lang-go=\"`hit`\" pulumi-lang-python=\"`hit`\" pulumi-lang-yaml=\"`hit`\" pulumi-lang-java=\"`hit`\"\u003e`hit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`miss`\" pulumi-lang-dotnet=\"`Miss`\" pulumi-lang-go=\"`miss`\" pulumi-lang-python=\"`miss`\" pulumi-lang-yaml=\"`miss`\" pulumi-lang-java=\"`miss`\"\u003e`miss`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`pass`\" pulumi-lang-dotnet=\"`Pass`\" pulumi-lang-go=\"`pass`\" pulumi-lang-python=\"`pass`\" pulumi-lang-yaml=\"`pass`\" pulumi-lang-java=\"`pass`\"\u003e`pass`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`fetch`\" pulumi-lang-dotnet=\"`Fetch`\" pulumi-lang-go=\"`fetch`\" pulumi-lang-python=\"`fetch`\" pulumi-lang-yaml=\"`fetch`\" pulumi-lang-java=\"`fetch`\"\u003e`fetch`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\"\u003e`error`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`deliver`\" pulumi-lang-dotnet=\"`Deliver`\" pulumi-lang-go=\"`deliver`\" pulumi-lang-python=\"`deliver`\" pulumi-lang-yaml=\"`deliver`\" pulumi-lang-java=\"`deliver`\"\u003e`deliver`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`log`\" pulumi-lang-dotnet=\"`Log`\" pulumi-lang-go=\"`log`\" pulumi-lang-python=\"`log`\" pulumi-lang-yaml=\"`log`\" pulumi-lang-java=\"`log`\"\u003e`log`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e)\n"}},"type":"object","required":["name","type"],"language":{"nodejs":{"requiredOutputs":["name","snippetId","type"]}}},"fastly:index/ServiceVclGzip:ServiceVclGzip":{"properties":{"cacheCondition":{"type":"string","description":"Name of already defined \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e controlling when this gzip configuration applies. This \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e must be of type `CACHE`. For detailed information about Conditionals, see [Fastly's Documentation on Conditionals](https://docs.fastly.com/en/guides/using-conditions)\n"},"contentTypes":{"type":"array","items":{"type":"string"},"description":"The content-type for each type of content you wish to have dynamically gzip'ed. Example: `[\"text/html\", \"text/css\"]`\n"},"extensions":{"type":"array","items":{"type":"string"},"description":"File extensions for each file type to dynamically gzip. Example: `[\"css\", \"js\"]`\n"},"name":{"type":"string","description":"A name to refer to this gzip condition. It is important to note that changing this attribute will delete and recreate the resource\n"}},"type":"object","required":["name"]},"fastly:index/ServiceVclHeader:ServiceVclHeader":{"properties":{"action":{"type":"string","description":"The Header manipulation action to take; must be one of \u003cspan pulumi-lang-nodejs=\"`set`\" pulumi-lang-dotnet=\"`Set`\" pulumi-lang-go=\"`set`\" pulumi-lang-python=\"`set`\" pulumi-lang-yaml=\"`set`\" pulumi-lang-java=\"`set`\"\u003e`set`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`append`\" pulumi-lang-dotnet=\"`Append`\" pulumi-lang-go=\"`append`\" pulumi-lang-python=\"`append`\" pulumi-lang-yaml=\"`append`\" pulumi-lang-java=\"`append`\"\u003e`append`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`delete`\" pulumi-lang-dotnet=\"`Delete`\" pulumi-lang-go=\"`delete`\" pulumi-lang-python=\"`delete`\" pulumi-lang-yaml=\"`delete`\" pulumi-lang-java=\"`delete`\"\u003e`delete`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`regex`\" pulumi-lang-dotnet=\"`Regex`\" pulumi-lang-go=\"`regex`\" pulumi-lang-python=\"`regex`\" pulumi-lang-yaml=\"`regex`\" pulumi-lang-java=\"`regex`\"\u003e`regex`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`regexRepeat`\" pulumi-lang-dotnet=\"`RegexRepeat`\" pulumi-lang-go=\"`regexRepeat`\" pulumi-lang-python=\"`regex_repeat`\" pulumi-lang-yaml=\"`regexRepeat`\" pulumi-lang-java=\"`regexRepeat`\"\u003e`regex_repeat`\u003c/span\u003e\n"},"cacheCondition":{"type":"string","description":"Name of already defined \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e to apply. This \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e must be of type `CACHE`\n"},"destination":{"type":"string","description":"The name of the header that is going to be affected by the Action\n"},"ignoreIfSet":{"type":"boolean","description":"Don't add the header if it is already. (Only applies to \u003cspan pulumi-lang-nodejs=\"`set`\" pulumi-lang-dotnet=\"`Set`\" pulumi-lang-go=\"`set`\" pulumi-lang-python=\"`set`\" pulumi-lang-yaml=\"`set`\" pulumi-lang-java=\"`set`\"\u003e`set`\u003c/span\u003e action.). Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"},"name":{"type":"string","description":"Unique name for this header attribute. It is important to note that changing this attribute will delete and recreate the resource\n"},"priority":{"type":"integer","description":"Lower priorities execute first. Default: \u003cspan pulumi-lang-nodejs=\"`100`\" pulumi-lang-dotnet=\"`100`\" pulumi-lang-go=\"`100`\" pulumi-lang-python=\"`100`\" pulumi-lang-yaml=\"`100`\" pulumi-lang-java=\"`100`\"\u003e`100`\u003c/span\u003e\n"},"regex":{"type":"string","description":"Regular expression to use (Only applies to \u003cspan pulumi-lang-nodejs=\"`regex`\" pulumi-lang-dotnet=\"`Regex`\" pulumi-lang-go=\"`regex`\" pulumi-lang-python=\"`regex`\" pulumi-lang-yaml=\"`regex`\" pulumi-lang-java=\"`regex`\"\u003e`regex`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`regexRepeat`\" pulumi-lang-dotnet=\"`RegexRepeat`\" pulumi-lang-go=\"`regexRepeat`\" pulumi-lang-python=\"`regex_repeat`\" pulumi-lang-yaml=\"`regexRepeat`\" pulumi-lang-java=\"`regexRepeat`\"\u003e`regex_repeat`\u003c/span\u003e actions.)\n"},"requestCondition":{"type":"string","description":"Name of already defined \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e to apply. This \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e must be of type `REQUEST`\n"},"responseCondition":{"type":"string","description":"Name of already defined \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e to apply. This \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e must be of type `RESPONSE`. For detailed information about Conditionals, see [Fastly's Documentation on Conditionals](https://docs.fastly.com/en/guides/using-conditions)\n"},"source":{"type":"string","description":"Variable to be used as a source for the header content (Does not apply to \u003cspan pulumi-lang-nodejs=\"`delete`\" pulumi-lang-dotnet=\"`Delete`\" pulumi-lang-go=\"`delete`\" pulumi-lang-python=\"`delete`\" pulumi-lang-yaml=\"`delete`\" pulumi-lang-java=\"`delete`\"\u003e`delete`\u003c/span\u003e action.)\n"},"substitution":{"type":"string","description":"Value to substitute in place of regular expression. (Only applies to \u003cspan pulumi-lang-nodejs=\"`regex`\" pulumi-lang-dotnet=\"`Regex`\" pulumi-lang-go=\"`regex`\" pulumi-lang-python=\"`regex`\" pulumi-lang-yaml=\"`regex`\" pulumi-lang-java=\"`regex`\"\u003e`regex`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`regexRepeat`\" pulumi-lang-dotnet=\"`RegexRepeat`\" pulumi-lang-go=\"`regexRepeat`\" pulumi-lang-python=\"`regex_repeat`\" pulumi-lang-yaml=\"`regexRepeat`\" pulumi-lang-java=\"`regexRepeat`\"\u003e`regex_repeat`\u003c/span\u003e.)\n"},"type":{"type":"string","description":"The Request type on which to apply the selected Action; must be one of \u003cspan pulumi-lang-nodejs=\"`request`\" pulumi-lang-dotnet=\"`Request`\" pulumi-lang-go=\"`request`\" pulumi-lang-python=\"`request`\" pulumi-lang-yaml=\"`request`\" pulumi-lang-java=\"`request`\"\u003e`request`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`fetch`\" pulumi-lang-dotnet=\"`Fetch`\" pulumi-lang-go=\"`fetch`\" pulumi-lang-python=\"`fetch`\" pulumi-lang-yaml=\"`fetch`\" pulumi-lang-java=\"`fetch`\"\u003e`fetch`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`cache`\" pulumi-lang-dotnet=\"`Cache`\" pulumi-lang-go=\"`cache`\" pulumi-lang-python=\"`cache`\" pulumi-lang-yaml=\"`cache`\" pulumi-lang-java=\"`cache`\"\u003e`cache`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`response`\" pulumi-lang-dotnet=\"`Response`\" pulumi-lang-go=\"`response`\" pulumi-lang-python=\"`response`\" pulumi-lang-yaml=\"`response`\" pulumi-lang-java=\"`response`\"\u003e`response`\u003c/span\u003e\n"}},"type":"object","required":["action","destination","name","type"],"language":{"nodejs":{"requiredOutputs":["action","destination","name","regex","source","substitution","type"]}}},"fastly:index/ServiceVclHealthcheck:ServiceVclHealthcheck":{"properties":{"checkInterval":{"type":"integer","description":"How often to run the Healthcheck in milliseconds. Default \u003cspan pulumi-lang-nodejs=\"`5000`\" pulumi-lang-dotnet=\"`5000`\" pulumi-lang-go=\"`5000`\" pulumi-lang-python=\"`5000`\" pulumi-lang-yaml=\"`5000`\" pulumi-lang-java=\"`5000`\"\u003e`5000`\u003c/span\u003e\n"},"expectedResponse":{"type":"integer","description":"The status code expected from the host. Default \u003cspan pulumi-lang-nodejs=\"`200`\" pulumi-lang-dotnet=\"`200`\" pulumi-lang-go=\"`200`\" pulumi-lang-python=\"`200`\" pulumi-lang-yaml=\"`200`\" pulumi-lang-java=\"`200`\"\u003e`200`\u003c/span\u003e\n"},"headers":{"type":"array","items":{"type":"string"},"description":"Custom health check HTTP headers (e.g. if your health check requires an API key to be provided).\n"},"host":{"type":"string","description":"The Host header to send for this Healthcheck\n"},"httpVersion":{"type":"string","description":"Whether to use version 1.0 or 1.1 HTTP. Default `1.1`\n"},"initial":{"type":"integer","description":"When loading a config, the initial number of probes to be seen as OK. Default \u003cspan pulumi-lang-nodejs=\"`3`\" pulumi-lang-dotnet=\"`3`\" pulumi-lang-go=\"`3`\" pulumi-lang-python=\"`3`\" pulumi-lang-yaml=\"`3`\" pulumi-lang-java=\"`3`\"\u003e`3`\u003c/span\u003e\n"},"method":{"type":"string","description":"Which HTTP method to use. Default `HEAD`\n"},"name":{"type":"string","description":"A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"The path to check\n"},"threshold":{"type":"integer","description":"How many Healthchecks must succeed to be considered healthy. Default \u003cspan pulumi-lang-nodejs=\"`3`\" pulumi-lang-dotnet=\"`3`\" pulumi-lang-go=\"`3`\" pulumi-lang-python=\"`3`\" pulumi-lang-yaml=\"`3`\" pulumi-lang-java=\"`3`\"\u003e`3`\u003c/span\u003e\n"},"timeout":{"type":"integer","description":"Timeout in milliseconds. Default \u003cspan pulumi-lang-nodejs=\"`5000`\" pulumi-lang-dotnet=\"`5000`\" pulumi-lang-go=\"`5000`\" pulumi-lang-python=\"`5000`\" pulumi-lang-yaml=\"`5000`\" pulumi-lang-java=\"`5000`\"\u003e`5000`\u003c/span\u003e\n"},"window":{"type":"integer","description":"The number of most recent Healthcheck queries to keep for this Healthcheck. Default \u003cspan pulumi-lang-nodejs=\"`5`\" pulumi-lang-dotnet=\"`5`\" pulumi-lang-go=\"`5`\" pulumi-lang-python=\"`5`\" pulumi-lang-yaml=\"`5`\" pulumi-lang-java=\"`5`\"\u003e`5`\u003c/span\u003e\n"}},"type":"object","required":["host","name","path"]},"fastly:index/ServiceVclImageOptimizerDefaultSettings:ServiceVclImageOptimizerDefaultSettings":{"properties":{"allowVideo":{"type":"boolean","description":"Enables GIF to MP4 transformations on this service.\n"},"jpegQuality":{"type":"integer","description":"The default quality to use with JPEG output. This can be overridden with the \"quality\" parameter on specific image optimizer requests.\n"},"jpegType":{"type":"string","description":"The default type of JPEG output to use. This can be overridden with \"format=bjpeg\" and \"format=pjpeg\" on specific image optimizer requests. Valid values are \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`baseline`\" pulumi-lang-dotnet=\"`Baseline`\" pulumi-lang-go=\"`baseline`\" pulumi-lang-python=\"`baseline`\" pulumi-lang-yaml=\"`baseline`\" pulumi-lang-java=\"`baseline`\"\u003e`baseline`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`progressive`\" pulumi-lang-dotnet=\"`Progressive`\" pulumi-lang-go=\"`progressive`\" pulumi-lang-python=\"`progressive`\" pulumi-lang-yaml=\"`progressive`\" pulumi-lang-java=\"`progressive`\"\u003e`progressive`\u003c/span\u003e.\n\t- auto: Match the input JPEG type, or baseline if transforming from a non-JPEG input.\n\t- baseline: Output baseline JPEG images\n\t- progressive: Output progressive JPEG images\n"},"name":{"type":"string","description":"Used by the provider to identify modified settings. Changing this value will force the entire block to be deleted, then recreated.\n"},"resizeFilter":{"type":"string","description":"The type of filter to use while resizing an image. Valid values are \u003cspan pulumi-lang-nodejs=\"`lanczos3`\" pulumi-lang-dotnet=\"`Lanczos3`\" pulumi-lang-go=\"`lanczos3`\" pulumi-lang-python=\"`lanczos3`\" pulumi-lang-yaml=\"`lanczos3`\" pulumi-lang-java=\"`lanczos3`\"\u003e`lanczos3`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`lanczos2`\" pulumi-lang-dotnet=\"`Lanczos2`\" pulumi-lang-go=\"`lanczos2`\" pulumi-lang-python=\"`lanczos2`\" pulumi-lang-yaml=\"`lanczos2`\" pulumi-lang-java=\"`lanczos2`\"\u003e`lanczos2`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bicubic`\" pulumi-lang-dotnet=\"`Bicubic`\" pulumi-lang-go=\"`bicubic`\" pulumi-lang-python=\"`bicubic`\" pulumi-lang-yaml=\"`bicubic`\" pulumi-lang-java=\"`bicubic`\"\u003e`bicubic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bilinear`\" pulumi-lang-dotnet=\"`Bilinear`\" pulumi-lang-go=\"`bilinear`\" pulumi-lang-python=\"`bilinear`\" pulumi-lang-yaml=\"`bilinear`\" pulumi-lang-java=\"`bilinear`\"\u003e`bilinear`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`nearest`\" pulumi-lang-dotnet=\"`Nearest`\" pulumi-lang-go=\"`nearest`\" pulumi-lang-python=\"`nearest`\" pulumi-lang-yaml=\"`nearest`\" pulumi-lang-java=\"`nearest`\"\u003e`nearest`\u003c/span\u003e.\n\t- lanczos3: A Lanczos filter with a kernel size of 3. Lanczos filters can detect edges and linear features within an image, providing the best possible reconstruction.\n\t- lanczos2: A Lanczos filter with a kernel size of 2.\n\t- bicubic: A filter using an average of a 4x4 environment of pixels, weighing the innermost pixels higher.\n\t- bilinear: A filter using an average of a 2x2 environment of pixels.\n\t- nearest: A filter using the value of nearby translated pixel values. Preserves hard edges.\n"},"upscale":{"type":"boolean","description":"Whether or not we should allow output images to render at sizes larger than input.\n"},"webp":{"type":"boolean","description":"Controls whether or not to default to WebP output when the client supports it. This is equivalent to adding \"auto=webp\" to all image optimizer requests.\n"},"webpQuality":{"type":"integer","description":"The default quality to use with WebP output. This can be overridden with the second option in the \"quality\" URL parameter on specific image optimizer requests.\n"}},"type":"object"},"fastly:index/ServiceVclLoggingBigquery:ServiceVclLoggingBigquery":{"properties":{"accountName":{"type":"string","description":"The google account name used to obtain temporary credentials (default none). Not required if 'email' and 'secret_key' are provided. You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n"},"dataset":{"type":"string","description":"The ID of your BigQuery dataset\n"},"email":{"type":"string","description":"The email for the service account with write access to your BigQuery dataset. If not provided, this will be pulled from a `FASTLY_BQ_EMAIL` environment variable\n","secret":true},"format":{"type":"string","description":"The logging format desired.\n"},"name":{"type":"string","description":"A unique name to identify this BigQuery logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"projectId":{"type":"string","description":"The ID of your GCP project\n"},"responseCondition":{"type":"string","description":"Name of a condition to apply this logging.\n"},"secretKey":{"type":"string","description":"The secret key associated with the service account that has write access to your BigQuery table. If not provided, this will be pulled from the `FASTLY_BQ_SECRET_KEY` environment variable. Typical format for this is a private key in a string with newlines\n","secret":true},"table":{"type":"string","description":"The ID of your BigQuery table\n"},"template":{"type":"string","description":"BigQuery table name suffix template\n"}},"type":"object","required":["dataset","email","name","projectId","secretKey","table"]},"fastly:index/ServiceVclLoggingBlobstorage:ServiceVclLoggingBlobstorage":{"properties":{"accountName":{"type":"string","description":"The unique Azure Blob Storage namespace in which your data objects are stored\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"container":{"type":"string","description":"The name of the Azure Blob Storage container in which to store logs\n"},"fileMaxBytes":{"type":"integer","description":"Maximum size of an uploaded log file, if non-zero.\n"},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2)\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"A unique name to identify the Azure Blob Storage endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"The path to upload logs to. Must end with a trailing slash. If this field is left empty, the files will be saved in the container's root path\n"},"period":{"type":"integer","description":"How frequently the logs should be transferred in seconds. Default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"responseCondition":{"type":"string","description":"The name of the condition to apply\n"},"sasToken":{"type":"string","description":"The Azure shared access signature providing write access to the blob service objects. Be sure to update your token before it expires or the logging functionality will not work\n","secret":true},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"}},"type":"object","required":["accountName","container","name","sasToken"]},"fastly:index/ServiceVclLoggingCloudfile:ServiceVclLoggingCloudfile":{"properties":{"accessKey":{"type":"string","description":"Your Cloud File account access key\n","secret":true},"bucketName":{"type":"string","description":"The name of your Cloud Files container\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"format":{"type":"string","description":"Apache style log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the Rackspace Cloud Files logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"The path to upload logs to\n"},"period":{"type":"integer","description":"How frequently log files are finalized so they can be available for reading (in seconds, default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e)\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"The PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"region":{"type":"string","description":"The region to stream logs to. One of: DFW (Dallas), ORD (Chicago), IAD (Northern Virginia), LON (London), SYD (Sydney), HKG (Hong Kong)\n"},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n"},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"},"user":{"type":"string","description":"The username for your Cloud Files account\n"}},"type":"object","required":["accessKey","bucketName","name","user"]},"fastly:index/ServiceVclLoggingDatadog:ServiceVclLoggingDatadog":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The unique name of the Datadog logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"region":{"type":"string","description":"The region that log data will be sent to. Defaults to `US` if undefined\n"},"responseCondition":{"type":"string","description":"The name of the condition to apply.\n"},"token":{"type":"string","description":"The API key from your Datadog account\n","secret":true}},"type":"object","required":["name","token"]},"fastly:index/ServiceVclLoggingDigitalocean:ServiceVclLoggingDigitalocean":{"properties":{"accessKey":{"type":"string","description":"Your DigitalOcean Spaces account access key\n","secret":true},"bucketName":{"type":"string","description":"The name of the DigitalOcean Space\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"domain":{"type":"string","description":"The domain of the DigitalOcean Spaces endpoint (default `nyc3.digitaloceanspaces.com`)\n"},"format":{"type":"string","description":"Apache style log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the DigitalOcean Spaces logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"The path to upload logs to\n"},"period":{"type":"integer","description":"How frequently log files are finalized so they can be available for reading (in seconds, default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e)\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n"},"secretKey":{"type":"string","description":"Your DigitalOcean Spaces account secret key\n","secret":true},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"}},"type":"object","required":["accessKey","bucketName","name","secretKey"]},"fastly:index/ServiceVclLoggingElasticsearch:ServiceVclLoggingElasticsearch":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n"},"index":{"type":"string","description":"The name of the Elasticsearch index to send documents (logs) to\n"},"name":{"type":"string","description":"The unique name of the Elasticsearch logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"password":{"type":"string","description":"BasicAuth password for Elasticsearch\n","secret":true},"pipeline":{"type":"string","description":"The ID of the Elasticsearch ingest pipeline to apply pre-process transformations to before indexing\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"requestMaxBytes":{"type":"integer","description":"The maximum number of logs sent in one request. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e for unbounded\n"},"requestMaxEntries":{"type":"integer","description":"The maximum number of bytes sent in one request. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e for unbounded\n"},"responseCondition":{"type":"string","description":"The name of the condition to apply\n"},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format\n"},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format\n"},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format\n","secret":true},"tlsHostname":{"type":"string","description":"The hostname used to verify the server's certificate. It can either be the Common Name (CN) or a Subject Alternative Name (SAN)\n"},"url":{"type":"string","description":"The Elasticsearch URL to stream logs to\n"},"user":{"type":"string","description":"BasicAuth username for Elasticsearch\n"}},"type":"object","required":["index","name","url"]},"fastly:index/ServiceVclLoggingFtp:ServiceVclLoggingFtp":{"properties":{"address":{"type":"string","description":"The FTP address to stream logs to\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the FTP logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"password":{"type":"string","description":"The password for the server (for anonymous use an email address)\n","secret":true},"path":{"type":"string","description":"The path to upload log files to. If the path ends in `/` then it is treated as a directory\n"},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds (Default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e)\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"port":{"type":"integer","description":"The port number. Default: \u003cspan pulumi-lang-nodejs=\"`21`\" pulumi-lang-dotnet=\"`21`\" pulumi-lang-go=\"`21`\" pulumi-lang-python=\"`21`\" pulumi-lang-yaml=\"`21`\" pulumi-lang-java=\"`21`\"\u003e`21`\u003c/span\u003e\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"The PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"responseCondition":{"type":"string","description":"The name of the condition to apply.\n"},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"},"user":{"type":"string","description":"The username for the server (can be \u003cspan pulumi-lang-nodejs=\"`anonymous`\" pulumi-lang-dotnet=\"`Anonymous`\" pulumi-lang-go=\"`anonymous`\" pulumi-lang-python=\"`anonymous`\" pulumi-lang-yaml=\"`anonymous`\" pulumi-lang-java=\"`anonymous`\"\u003e`anonymous`\u003c/span\u003e)\n"}},"type":"object","required":["address","name","password","path","user"]},"fastly:index/ServiceVclLoggingGc:ServiceVclLoggingGc":{"properties":{"accountName":{"type":"string","description":"The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n"},"bucketName":{"type":"string","description":"The name of the bucket in which to store the logs\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (Default: 2)\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"A unique name to identify this GCS endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"Path to store the files. Must end with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path\n"},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds (Default 3600)\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"projectId":{"type":"string","description":"The ID of your Google Cloud Platform project\n"},"responseCondition":{"type":"string","description":"Name of a condition to apply this logging.\n"},"secretKey":{"type":"string","description":"The secret key associated with the target gcs bucket on your account. You may optionally provide this secret via an environment variable, `FASTLY_GCS_SECRET_KEY`. A typical format for the key is PEM format, containing actual newline characters where required\n","secret":true},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"},"user":{"type":"string","description":"Your Google Cloud Platform service account email address. The \u003cspan pulumi-lang-nodejs=\"`clientEmail`\" pulumi-lang-dotnet=\"`ClientEmail`\" pulumi-lang-go=\"`clientEmail`\" pulumi-lang-python=\"`client_email`\" pulumi-lang-yaml=\"`clientEmail`\" pulumi-lang-java=\"`clientEmail`\"\u003e`client_email`\u003c/span\u003e field in your service account authentication JSON. You may optionally provide this via an environment variable, `FASTLY_GCS_EMAIL`.\n"}},"type":"object","required":["bucketName","name"]},"fastly:index/ServiceVclLoggingGooglepubsub:ServiceVclLoggingGooglepubsub":{"properties":{"accountName":{"type":"string","description":"The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n"},"format":{"type":"string","description":"Apache style log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n"},"name":{"type":"string","description":"The unique name of the Google Cloud Pub/Sub logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"projectId":{"type":"string","description":"The ID of your Google Cloud Platform project\n"},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n"},"secretKey":{"type":"string","description":"Your Google Cloud Platform account secret key. The \u003cspan pulumi-lang-nodejs=\"`privateKey`\" pulumi-lang-dotnet=\"`PrivateKey`\" pulumi-lang-go=\"`privateKey`\" pulumi-lang-python=\"`private_key`\" pulumi-lang-yaml=\"`privateKey`\" pulumi-lang-java=\"`privateKey`\"\u003e`private_key`\u003c/span\u003e field in your service account authentication JSON. You may optionally provide this secret via an environment variable, `FASTLY_GOOGLE_PUBSUB_SECRET_KEY`.\n","secret":true},"topic":{"type":"string","description":"The Google Cloud Pub/Sub topic to which logs will be published\n"},"user":{"type":"string","description":"Your Google Cloud Platform service account email address. The \u003cspan pulumi-lang-nodejs=\"`clientEmail`\" pulumi-lang-dotnet=\"`ClientEmail`\" pulumi-lang-go=\"`clientEmail`\" pulumi-lang-python=\"`client_email`\" pulumi-lang-yaml=\"`clientEmail`\" pulumi-lang-java=\"`clientEmail`\"\u003e`client_email`\u003c/span\u003e field in your service account authentication JSON. You may optionally provide this via an environment variable, `FASTLY_GOOGLE_PUBSUB_EMAIL`.\n"}},"type":"object","required":["name","projectId","secretKey","topic","user"]},"fastly:index/ServiceVclLoggingGrafanacloudlog:ServiceVclLoggingGrafanacloudlog":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"index":{"type":"string","description":"The stream identifier as a JSON string\n"},"name":{"type":"string","description":"The unique name of the GrafanaCloudLogs logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"responseCondition":{"type":"string","description":"The name of the condition to apply.\n"},"token":{"type":"string","description":"The Access Policy Token key for your GrafanaCloudLogs account\n","secret":true},"url":{"type":"string","description":"The URL to stream logs to\n"},"user":{"type":"string","description":"The Grafana User ID\n"}},"type":"object","required":["index","name","token","url","user"]},"fastly:index/ServiceVclLoggingHerokus:ServiceVclLoggingHerokus":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The unique name of the Heroku logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n"},"token":{"type":"string","description":"The token to use for authentication (https://www.heroku.com/docs/customer-token-authentication-token/)\n","secret":true},"url":{"type":"string","description":"The URL to stream logs to\n"}},"type":"object","required":["name","token","url"]},"fastly:index/ServiceVclLoggingHoneycomb:ServiceVclLoggingHoneycomb":{"properties":{"dataset":{"type":"string","description":"The Honeycomb Dataset you want to log to\n"},"format":{"type":"string","description":"Apache style log formatting. Your log must produce valid JSON that Honeycomb can ingest.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The unique name of the Honeycomb logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n"},"token":{"type":"string","description":"The Write Key from the Account page of your Honeycomb account\n","secret":true}},"type":"object","required":["dataset","name","token"]},"fastly:index/ServiceVclLoggingHttp:ServiceVclLoggingHttp":{"properties":{"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"contentType":{"type":"string","description":"Value of the `Content-Type` header sent with the request\n"},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2)\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"headerName":{"type":"string","description":"Custom header sent with the request\n"},"headerValue":{"type":"string","description":"Value of the custom header sent with the request\n"},"jsonFormat":{"type":"string","description":"Formats log entries as JSON. Can be either disabled (\u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e), array of json (\u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e), or newline delimited json (\u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e)\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"method":{"type":"string","description":"HTTP method used for request. Can be either `POST` or `PUT`. Default `POST`\n"},"name":{"type":"string","description":"The unique name of the HTTPS logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"period":{"type":"integer","description":"How frequently, in seconds, batches of log data are sent to the HTTPS endpoint. A value of 0 sends logs at the same interval as the default, which is 5 seconds.\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"requestMaxBytes":{"type":"integer","description":"The maximum number of bytes sent in one request\n"},"requestMaxEntries":{"type":"integer","description":"The maximum number of logs sent in one request\n"},"responseCondition":{"type":"string","description":"The name of the condition to apply\n"},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format\n"},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format\n"},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format\n","secret":true},"tlsHostname":{"type":"string","description":"Used during the TLS handshake to validate the certificate\n"},"url":{"type":"string","description":"URL that log data will be sent to. Must use the https protocol\n"}},"type":"object","required":["name","url"]},"fastly:index/ServiceVclLoggingKafka:ServiceVclLoggingKafka":{"properties":{"authMethod":{"type":"string","description":"SASL authentication method. One of: plain, scram-sha-256, scram-sha-512\n"},"brokers":{"type":"string","description":"A comma-separated list of IP addresses or hostnames of Kafka brokers\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. One of: \u003cspan pulumi-lang-nodejs=\"`gzip`\" pulumi-lang-dotnet=\"`Gzip`\" pulumi-lang-go=\"`gzip`\" pulumi-lang-python=\"`gzip`\" pulumi-lang-yaml=\"`gzip`\" pulumi-lang-java=\"`gzip`\"\u003e`gzip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`snappy`\" pulumi-lang-dotnet=\"`Snappy`\" pulumi-lang-go=\"`snappy`\" pulumi-lang-python=\"`snappy`\" pulumi-lang-yaml=\"`snappy`\" pulumi-lang-java=\"`snappy`\"\u003e`snappy`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`lz4`\" pulumi-lang-dotnet=\"`Lz4`\" pulumi-lang-go=\"`lz4`\" pulumi-lang-python=\"`lz4`\" pulumi-lang-yaml=\"`lz4`\" pulumi-lang-java=\"`lz4`\"\u003e`lz4`\u003c/span\u003e\n"},"format":{"type":"string","description":"Apache style log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n"},"name":{"type":"string","description":"The unique name of the Kafka logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"parseLogKeyvals":{"type":"boolean","description":"Enables parsing of key=value tuples from the beginning of a logline, turning them into record headers\n"},"password":{"type":"string","description":"SASL Pass\n","secret":true},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"requestMaxBytes":{"type":"integer","description":"Maximum size of log batch, if non-zero. Defaults to 0 for unbounded\n"},"requiredAcks":{"type":"string","description":"The Number of acknowledgements a leader must receive before a write is considered successful. One of: \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e (default) One server needs to respond. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e No servers need to respond. `-1` Wait for all in-sync replicas to respond\n"},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n"},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format\n"},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format\n"},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format\n","secret":true},"tlsHostname":{"type":"string","description":"The hostname used to verify the server's certificate. It can either be the Common Name or a Subject Alternative Name (SAN)\n"},"topic":{"type":"string","description":"The Kafka topic to send logs to\n"},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging. Can be either \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"},"user":{"type":"string","description":"SASL User\n"}},"type":"object","required":["brokers","name","topic"]},"fastly:index/ServiceVclLoggingKinese:ServiceVclLoggingKinese":{"properties":{"accessKey":{"type":"string","description":"The AWS access key to be used to write to the stream\n","secret":true},"format":{"type":"string","description":"Apache style log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"iamRole":{"type":"string","description":"The Amazon Resource Name (ARN) for the IAM role granting Fastly access to Kinesis. Not required if \u003cspan pulumi-lang-nodejs=\"`accessKey`\" pulumi-lang-dotnet=\"`AccessKey`\" pulumi-lang-go=\"`accessKey`\" pulumi-lang-python=\"`access_key`\" pulumi-lang-yaml=\"`accessKey`\" pulumi-lang-java=\"`accessKey`\"\u003e`access_key`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`secretKey`\" pulumi-lang-dotnet=\"`SecretKey`\" pulumi-lang-go=\"`secretKey`\" pulumi-lang-python=\"`secret_key`\" pulumi-lang-yaml=\"`secretKey`\" pulumi-lang-java=\"`secretKey`\"\u003e`secret_key`\u003c/span\u003e are provided.\n"},"name":{"type":"string","description":"The unique name of the Kinesis logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"region":{"type":"string","description":"The AWS region the stream resides in. (Default: `us-east-1`)\n"},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n"},"secretKey":{"type":"string","description":"The AWS secret access key to authenticate with\n","secret":true},"topic":{"type":"string","description":"The Kinesis stream name\n"}},"type":"object","required":["name","topic"]},"fastly:index/ServiceVclLoggingLogentry:ServiceVclLoggingLogentry":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (Default: 2)\n"},"name":{"type":"string","description":"The unique name of the Logentries logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"port":{"type":"integer","description":"The port number configured in Logentries\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"responseCondition":{"type":"string","description":"Name of blockAttributes condition to apply this logging.\n"},"token":{"type":"string","description":"Use token based authentication (https://logentries.com/doc/input-token/)\n"},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging\n"}},"type":"object","required":["name","token"]},"fastly:index/ServiceVclLoggingLoggly:ServiceVclLoggingLoggly":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The unique name of the Loggly logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n"},"token":{"type":"string","description":"The token to use for authentication (https://www.loggly.com/docs/customer-token-authentication-token/).\n","secret":true}},"type":"object","required":["name","token"]},"fastly:index/ServiceVclLoggingLogshuttle:ServiceVclLoggingLogshuttle":{"properties":{"format":{"type":"string","description":"Apache style log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The unique name of the Log Shuttle logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n"},"token":{"type":"string","description":"The data authentication token associated with this endpoint\n","secret":true},"url":{"type":"string","description":"Your Log Shuttle endpoint URL\n"}},"type":"object","required":["name","token","url"]},"fastly:index/ServiceVclLoggingNewrelic:ServiceVclLoggingNewrelic":{"properties":{"format":{"type":"string","description":"Apache style log formatting. Your log must produce valid JSON that New Relic Logs can ingest.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The unique name of the New Relic logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"region":{"type":"string","description":"The region that log data will be sent to. Default: `US`\n"},"responseCondition":{"type":"string","description":"The name of the condition to apply.\n"},"token":{"type":"string","description":"The Insert API key from the Account page of your New Relic account\n","secret":true}},"type":"object","required":["name","token"]},"fastly:index/ServiceVclLoggingNewrelicotlp:ServiceVclLoggingNewrelicotlp":{"properties":{"format":{"type":"string","description":"Apache style log formatting. Your log must produce valid JSON that New Relic OTLP can ingest.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The unique name of the New Relic OTLP logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"region":{"type":"string","description":"The region that log data will be sent to. Default: `US`\n"},"responseCondition":{"type":"string","description":"The name of the condition to apply.\n"},"token":{"type":"string","description":"The Insert API key from the Account page of your New Relic account\n","secret":true},"url":{"type":"string","description":"The optional New Relic Trace Observer URL to stream logs to for Infinite Tracing.\n"}},"type":"object","required":["name","token"]},"fastly:index/ServiceVclLoggingOpenstack:ServiceVclLoggingOpenstack":{"properties":{"accessKey":{"type":"string","description":"Your OpenStack account access key\n","secret":true},"bucketName":{"type":"string","description":"The name of your OpenStack container\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"format":{"type":"string","description":"Apache style log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e. (default: \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the OpenStack logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"Path to store the files. Must end with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path\n"},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds. Default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n"},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"},"url":{"type":"string","description":"Your OpenStack auth url\n"},"user":{"type":"string","description":"The username for your OpenStack account\n"}},"type":"object","required":["accessKey","bucketName","name","url","user"]},"fastly:index/ServiceVclLoggingPapertrail:ServiceVclLoggingPapertrail":{"properties":{"address":{"type":"string","description":"The address of the Papertrail endpoint\n"},"format":{"type":"string","description":"A Fastly [log format string](https://docs.fastly.com/en/guides/custom-log-formats)\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. The logging call gets placed by default in \u003cspan pulumi-lang-nodejs=\"`vclLog`\" pulumi-lang-dotnet=\"`VclLog`\" pulumi-lang-go=\"`vclLog`\" pulumi-lang-python=\"`vcl_log`\" pulumi-lang-yaml=\"`vclLog`\" pulumi-lang-java=\"`vclLog`\"\u003e`vcl_log`\u003c/span\u003e if \u003cspan pulumi-lang-nodejs=\"`formatVersion`\" pulumi-lang-dotnet=\"`FormatVersion`\" pulumi-lang-go=\"`formatVersion`\" pulumi-lang-python=\"`format_version`\" pulumi-lang-yaml=\"`formatVersion`\" pulumi-lang-java=\"`formatVersion`\"\u003e`format_version`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e and in \u003cspan pulumi-lang-nodejs=\"`vclDeliver`\" pulumi-lang-dotnet=\"`VclDeliver`\" pulumi-lang-go=\"`vclDeliver`\" pulumi-lang-python=\"`vcl_deliver`\" pulumi-lang-yaml=\"`vclDeliver`\" pulumi-lang-java=\"`vclDeliver`\"\u003e`vcl_deliver`\u003c/span\u003e if \u003cspan pulumi-lang-nodejs=\"`formatVersion`\" pulumi-lang-dotnet=\"`FormatVersion`\" pulumi-lang-go=\"`formatVersion`\" pulumi-lang-python=\"`format_version`\" pulumi-lang-yaml=\"`formatVersion`\" pulumi-lang-java=\"`formatVersion`\"\u003e`format_version`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e\n"},"name":{"type":"string","description":"A unique name to identify this Papertrail endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. If not set, endpoints with \u003cspan pulumi-lang-nodejs=\"`formatVersion`\" pulumi-lang-dotnet=\"`FormatVersion`\" pulumi-lang-go=\"`formatVersion`\" pulumi-lang-python=\"`format_version`\" pulumi-lang-yaml=\"`formatVersion`\" pulumi-lang-java=\"`formatVersion`\"\u003e`format_version`\u003c/span\u003e of 2 are placed in \u003cspan pulumi-lang-nodejs=\"`vclLog`\" pulumi-lang-dotnet=\"`VclLog`\" pulumi-lang-go=\"`vclLog`\" pulumi-lang-python=\"`vcl_log`\" pulumi-lang-yaml=\"`vclLog`\" pulumi-lang-java=\"`vclLog`\"\u003e`vcl_log`\u003c/span\u003e and those with \u003cspan pulumi-lang-nodejs=\"`formatVersion`\" pulumi-lang-dotnet=\"`FormatVersion`\" pulumi-lang-go=\"`formatVersion`\" pulumi-lang-python=\"`format_version`\" pulumi-lang-yaml=\"`formatVersion`\" pulumi-lang-java=\"`formatVersion`\"\u003e`format_version`\u003c/span\u003e of 1 are placed in \u003cspan pulumi-lang-nodejs=\"`vclDeliver`\" pulumi-lang-dotnet=\"`VclDeliver`\" pulumi-lang-go=\"`vclDeliver`\" pulumi-lang-python=\"`vcl_deliver`\" pulumi-lang-yaml=\"`vclDeliver`\" pulumi-lang-java=\"`vclDeliver`\"\u003e`vcl_deliver`\u003c/span\u003e\n"},"port":{"type":"integer","description":"The port associated with the address where the Papertrail endpoint can be accessed\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute\n"}},"type":"object","required":["address","name","port"]},"fastly:index/ServiceVclLoggingS3:ServiceVclLoggingS3":{"properties":{"acl":{"type":"string","description":"The AWS [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl) to use for objects uploaded to the S3 bucket. Options are: \u003cspan pulumi-lang-nodejs=\"`private`\" pulumi-lang-dotnet=\"`Private`\" pulumi-lang-go=\"`private`\" pulumi-lang-python=\"`private`\" pulumi-lang-yaml=\"`private`\" pulumi-lang-java=\"`private`\"\u003e`private`\u003c/span\u003e, `public-read`, `public-read-write`, `aws-exec-read`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n"},"bucketName":{"type":"string","description":"The name of the bucket in which to store the logs\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"domain":{"type":"string","description":"If you created the S3 bucket outside of `us-east-1`, then specify the corresponding bucket endpoint. Example: `s3-us-west-2.amazonaws.com`\n"},"fileMaxBytes":{"type":"integer","description":"Maximum size of an uploaded log file, if non-zero.\n"},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (Default: 2).\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the S3 logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"path":{"type":"string","description":"Path to store the files. Must end with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path\n"},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds. Default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"redundancy":{"type":"string","description":"The S3 storage class (redundancy level). Should be one of: \u003cspan pulumi-lang-nodejs=\"`standard`\" pulumi-lang-dotnet=\"`Standard`\" pulumi-lang-go=\"`standard`\" pulumi-lang-python=\"`standard`\" pulumi-lang-yaml=\"`standard`\" pulumi-lang-java=\"`standard`\"\u003e`standard`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`intelligentTiering`\" pulumi-lang-dotnet=\"`IntelligentTiering`\" pulumi-lang-go=\"`intelligentTiering`\" pulumi-lang-python=\"`intelligent_tiering`\" pulumi-lang-yaml=\"`intelligentTiering`\" pulumi-lang-java=\"`intelligentTiering`\"\u003e`intelligent_tiering`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`standardIa`\" pulumi-lang-dotnet=\"`StandardIa`\" pulumi-lang-go=\"`standardIa`\" pulumi-lang-python=\"`standard_ia`\" pulumi-lang-yaml=\"`standardIa`\" pulumi-lang-java=\"`standardIa`\"\u003e`standard_ia`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`onezoneIa`\" pulumi-lang-dotnet=\"`OnezoneIa`\" pulumi-lang-go=\"`onezoneIa`\" pulumi-lang-python=\"`onezone_ia`\" pulumi-lang-yaml=\"`onezoneIa`\" pulumi-lang-java=\"`onezoneIa`\"\u003e`onezone_ia`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`glacier`\" pulumi-lang-dotnet=\"`Glacier`\" pulumi-lang-go=\"`glacier`\" pulumi-lang-python=\"`glacier`\" pulumi-lang-yaml=\"`glacier`\" pulumi-lang-java=\"`glacier`\"\u003e`glacier`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`glacierIr`\" pulumi-lang-dotnet=\"`GlacierIr`\" pulumi-lang-go=\"`glacierIr`\" pulumi-lang-python=\"`glacier_ir`\" pulumi-lang-yaml=\"`glacierIr`\" pulumi-lang-java=\"`glacierIr`\"\u003e`glacier_ir`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`deepArchive`\" pulumi-lang-dotnet=\"`DeepArchive`\" pulumi-lang-go=\"`deepArchive`\" pulumi-lang-python=\"`deep_archive`\" pulumi-lang-yaml=\"`deepArchive`\" pulumi-lang-java=\"`deepArchive`\"\u003e`deep_archive`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`reducedRedundancy`\" pulumi-lang-dotnet=\"`ReducedRedundancy`\" pulumi-lang-go=\"`reducedRedundancy`\" pulumi-lang-python=\"`reduced_redundancy`\" pulumi-lang-yaml=\"`reducedRedundancy`\" pulumi-lang-java=\"`reducedRedundancy`\"\u003e`reduced_redundancy`\u003c/span\u003e\n"},"responseCondition":{"type":"string","description":"Name of blockAttributes condition to apply this logging.\n"},"s3AccessKey":{"type":"string","description":"AWS Access Key of an account with the required permissions to post logs. It is **strongly** recommended you create a separate IAM user with permissions to only operate on this Bucket. This key will be not be encrypted. Not required if \u003cspan pulumi-lang-nodejs=\"`iamRole`\" pulumi-lang-dotnet=\"`IamRole`\" pulumi-lang-go=\"`iamRole`\" pulumi-lang-python=\"`iam_role`\" pulumi-lang-yaml=\"`iamRole`\" pulumi-lang-java=\"`iamRole`\"\u003e`iam_role`\u003c/span\u003e is provided. You can provide this key via an environment variable, `FASTLY_S3_ACCESS_KEY`\n","secret":true},"s3IamRole":{"type":"string","description":"The Amazon Resource Name (ARN) for the IAM role granting Fastly access to S3. Not required if \u003cspan pulumi-lang-nodejs=\"`accessKey`\" pulumi-lang-dotnet=\"`AccessKey`\" pulumi-lang-go=\"`accessKey`\" pulumi-lang-python=\"`access_key`\" pulumi-lang-yaml=\"`accessKey`\" pulumi-lang-java=\"`accessKey`\"\u003e`access_key`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`secretKey`\" pulumi-lang-dotnet=\"`SecretKey`\" pulumi-lang-go=\"`secretKey`\" pulumi-lang-python=\"`secret_key`\" pulumi-lang-yaml=\"`secretKey`\" pulumi-lang-java=\"`secretKey`\"\u003e`secret_key`\u003c/span\u003e are provided. You can provide this value via an environment variable, `FASTLY_S3_IAM_ROLE`\n"},"s3SecretKey":{"type":"string","description":"AWS Secret Key of an account with the required permissions to post logs. It is **strongly** recommended you create a separate IAM user with permissions to only operate on this Bucket. This secret will be not be encrypted. Not required if \u003cspan pulumi-lang-nodejs=\"`iamRole`\" pulumi-lang-dotnet=\"`IamRole`\" pulumi-lang-go=\"`iamRole`\" pulumi-lang-python=\"`iam_role`\" pulumi-lang-yaml=\"`iamRole`\" pulumi-lang-java=\"`iamRole`\"\u003e`iam_role`\u003c/span\u003e is provided. You can provide this secret via an environment variable, `FASTLY_S3_SECRET_KEY`\n","secret":true},"serverSideEncryption":{"type":"string","description":"Specify what type of server side encryption should be used. Can be either `AES256` or `aws:kms`\n"},"serverSideEncryptionKmsKeyId":{"type":"string","description":"Optional server-side KMS Key Id. Must be set if\u003cspan pulumi-lang-nodejs=\" serverSideEncryption \" pulumi-lang-dotnet=\" ServerSideEncryption \" pulumi-lang-go=\" serverSideEncryption \" pulumi-lang-python=\" server_side_encryption \" pulumi-lang-yaml=\" serverSideEncryption \" pulumi-lang-java=\" serverSideEncryption \"\u003e server_side_encryption \u003c/span\u003eis set to `aws:kms`\n"},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"}},"type":"object","required":["bucketName","name"]},"fastly:index/ServiceVclLoggingScalyr:ServiceVclLoggingScalyr":{"properties":{"format":{"type":"string","description":"Apache style log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n"},"name":{"type":"string","description":"The unique name of the Scalyr logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"projectId":{"type":"string","description":"The name of the logfile field sent to Scalyr\n"},"region":{"type":"string","description":"The region that log data will be sent to. One of `US` or `EU`. Defaults to `US` if undefined\n"},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n"},"token":{"type":"string","description":"The token to use for authentication (https://www.scalyr.com/keys)\n","secret":true}},"type":"object","required":["name","token"]},"fastly:index/ServiceVclLoggingSftp:ServiceVclLoggingSftp":{"properties":{"address":{"type":"string","description":"The SFTP address to stream logs to\n"},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\",\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ewill default to 3. To specify a different level, leave\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eblank and explicitly set the level using gzip_level. Specifying both\u003cspan pulumi-lang-nodejs=\" compressionCodec \" pulumi-lang-dotnet=\" CompressionCodec \" pulumi-lang-go=\" compressionCodec \" pulumi-lang-python=\" compression_codec \" pulumi-lang-yaml=\" compressionCodec \" pulumi-lang-java=\" compressionCodec \"\u003e compression_codec \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" gzipLevel \" pulumi-lang-dotnet=\" GzipLevel \" pulumi-lang-go=\" gzipLevel \" pulumi-lang-python=\" gzip_level \" pulumi-lang-yaml=\" gzipLevel \" pulumi-lang-java=\" gzipLevel \"\u003e gzip_level \u003c/span\u003ein the same API request will result in an error.\n"},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n"},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e means no compression. \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e is the fastest and the least compressed version, \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e is the slowest and the most compressed version. Default \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"The unique name of the SFTP logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"password":{"type":"string","description":"The password for the server. If both \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`secretKey`\" pulumi-lang-dotnet=\"`SecretKey`\" pulumi-lang-go=\"`secretKey`\" pulumi-lang-python=\"`secret_key`\" pulumi-lang-yaml=\"`secretKey`\" pulumi-lang-java=\"`secretKey`\"\u003e`secret_key`\u003c/span\u003e are passed, \u003cspan pulumi-lang-nodejs=\"`secretKey`\" pulumi-lang-dotnet=\"`SecretKey`\" pulumi-lang-go=\"`secretKey`\" pulumi-lang-python=\"`secret_key`\" pulumi-lang-yaml=\"`secretKey`\" pulumi-lang-java=\"`secretKey`\"\u003e`secret_key`\u003c/span\u003e will be preferred\n","secret":true},"path":{"type":"string","description":"The path to upload log files to. If the path ends in `/` then it is treated as a directory\n"},"period":{"type":"integer","description":"How frequently log files are finalized so they can be available for reading (in seconds, default \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e)\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"port":{"type":"integer","description":"The port the SFTP service listens on. (Default: \u003cspan pulumi-lang-nodejs=\"`22`\" pulumi-lang-dotnet=\"`22`\" pulumi-lang-go=\"`22`\" pulumi-lang-python=\"`22`\" pulumi-lang-yaml=\"`22`\" pulumi-lang-java=\"`22`\"\u003e`22`\u003c/span\u003e)\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n"},"responseCondition":{"type":"string","description":"The name of the condition to apply.\n"},"secretKey":{"type":"string","description":"The SSH private key for the server. If both \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`secretKey`\" pulumi-lang-dotnet=\"`SecretKey`\" pulumi-lang-go=\"`secretKey`\" pulumi-lang-python=\"`secret_key`\" pulumi-lang-yaml=\"`secretKey`\" pulumi-lang-java=\"`secretKey`\"\u003e`secret_key`\u003c/span\u003e are passed, \u003cspan pulumi-lang-nodejs=\"`secretKey`\" pulumi-lang-dotnet=\"`SecretKey`\" pulumi-lang-go=\"`secretKey`\" pulumi-lang-python=\"`secret_key`\" pulumi-lang-yaml=\"`secretKey`\" pulumi-lang-java=\"`secretKey`\"\u003e`secret_key`\u003c/span\u003e will be preferred\n","secret":true},"sshKnownHosts":{"type":"string","description":"A list of host keys for all hosts we can connect to over SFTP\n"},"timestampFormat":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`strftime`\" pulumi-lang-dotnet=\"`Strftime`\" pulumi-lang-go=\"`strftime`\" pulumi-lang-python=\"`strftime`\" pulumi-lang-yaml=\"`strftime`\" pulumi-lang-java=\"`strftime`\"\u003e`strftime`\u003c/span\u003e specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n"},"user":{"type":"string","description":"The username for the server\n"}},"type":"object","required":["address","name","path","sshKnownHosts","user"]},"fastly:index/ServiceVclLoggingSplunk:ServiceVclLoggingSplunk":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting (default: `%h %l %u %t \"%r\" %\u003es %b`)\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2)\n"},"name":{"type":"string","description":"A unique name to identify the Splunk endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"responseCondition":{"type":"string","description":"The name of the condition to apply\n"},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format. You can provide this certificate via an environment variable, `FASTLY_SPLUNK_CA_CERT`\n"},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format.\n"},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format.\n","secret":true},"tlsHostname":{"type":"string","description":"The hostname used to verify the server's certificate. It can either be the Common Name or a Subject Alternative Name (SAN)\n"},"token":{"type":"string","description":"The Splunk token to be used for authentication\n","secret":true},"url":{"type":"string","description":"The Splunk URL to stream logs to\n"},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging. Default: \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"}},"type":"object","required":["name","token","url"]},"fastly:index/ServiceVclLoggingSumologic:ServiceVclLoggingSumologic":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (Default: 2)\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"A unique name to identify this Sumologic endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"responseCondition":{"type":"string","description":"Name of blockAttributes condition to apply this logging.\n"},"url":{"type":"string","description":"The URL to Sumologic collector endpoint\n"}},"type":"object","required":["name","url"]},"fastly:index/ServiceVclLoggingSyslog:ServiceVclLoggingSyslog":{"properties":{"address":{"type":"string","description":"A hostname or IPv4 address of the Syslog endpoint\n"},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting\n"},"formatVersion":{"type":"integer","description":"The version of the custom logging format. Can be either 1 or 2. (Default: 2)\n"},"messageType":{"type":"string","description":"How the message should be formatted. Can be either \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`loggly`\" pulumi-lang-dotnet=\"`Loggly`\" pulumi-lang-go=\"`loggly`\" pulumi-lang-python=\"`loggly`\" pulumi-lang-yaml=\"`loggly`\" pulumi-lang-java=\"`loggly`\"\u003e`loggly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`logplex`\" pulumi-lang-dotnet=\"`Logplex`\" pulumi-lang-go=\"`logplex`\" pulumi-lang-python=\"`logplex`\" pulumi-lang-yaml=\"`logplex`\" pulumi-lang-java=\"`logplex`\"\u003e`logplex`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`blank`\" pulumi-lang-dotnet=\"`Blank`\" pulumi-lang-go=\"`blank`\" pulumi-lang-python=\"`blank`\" pulumi-lang-yaml=\"`blank`\" pulumi-lang-java=\"`blank`\"\u003e`blank`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`classic`\" pulumi-lang-dotnet=\"`Classic`\" pulumi-lang-go=\"`classic`\" pulumi-lang-python=\"`classic`\" pulumi-lang-yaml=\"`classic`\" pulumi-lang-java=\"`classic`\"\u003e`classic`\u003c/span\u003e\n"},"name":{"type":"string","description":"A unique name to identify this Syslog endpoint. It is important to note that changing this attribute will delete and recreate the resource\n"},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n"},"port":{"type":"integer","description":"The port associated with the address where the Syslog endpoint can be accessed. Default \u003cspan pulumi-lang-nodejs=\"`514`\" pulumi-lang-dotnet=\"`514`\" pulumi-lang-go=\"`514`\" pulumi-lang-python=\"`514`\" pulumi-lang-yaml=\"`514`\" pulumi-lang-java=\"`514`\"\u003e`514`\u003c/span\u003e\n"},"processingRegion":{"type":"string","description":"Region where logs will be processed before streaming to BigQuery. Valid values are 'none', 'us' and 'eu'.\n"},"responseCondition":{"type":"string","description":"Name of blockAttributes condition to apply this logging.\n"},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format. You can provide this certificate via an environment variable, `FASTLY_SYSLOG_CA_CERT`\n"},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format. You can provide this certificate via an environment variable, `FASTLY_SYSLOG_CLIENT_CERT`\n"},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format. You can provide this key via an environment variable, `FASTLY_SYSLOG_CLIENT_KEY`\n","secret":true},"tlsHostname":{"type":"string","description":"Used during the TLS handshake to validate the certificate\n"},"token":{"type":"string","description":"Whether to prepend each message with a specific token\n"},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"}},"type":"object","required":["address","name"]},"fastly:index/ServiceVclProductEnablement:ServiceVclProductEnablement":{"properties":{"apiDiscovery":{"type":"boolean","description":"Enable API Discovery support\n"},"botManagement":{"type":"boolean","description":"Enable Bot Management support\n"},"brotliCompression":{"type":"boolean","description":"Enable Brotli Compression support\n"},"ddosProtection":{"$ref":"#/types/fastly:index/ServiceVclProductEnablementDdosProtection:ServiceVclProductEnablementDdosProtection","description":"DDoS Protection product\n"},"domainInspector":{"type":"boolean","description":"Enable Domain Inspector support\n"},"imageOptimizer":{"type":"boolean","description":"Enable Image Optimizer support (all backends must have a \u003cspan pulumi-lang-nodejs=\"`shield`\" pulumi-lang-dotnet=\"`Shield`\" pulumi-lang-go=\"`shield`\" pulumi-lang-python=\"`shield`\" pulumi-lang-yaml=\"`shield`\" pulumi-lang-java=\"`shield`\"\u003e`shield`\u003c/span\u003e attribute)\n"},"logExplorerInsights":{"type":"boolean","description":"Enable Log Explorer \u0026 Insights\n"},"name":{"type":"string","description":"Used by the provider to identify modified settings (changing this value will force the entire block to be deleted, then recreated)\n"},"ngwaf":{"$ref":"#/types/fastly:index/ServiceVclProductEnablementNgwaf:ServiceVclProductEnablementNgwaf","description":"Next-Gen WAF product\n"},"originInspector":{"type":"boolean","description":"Enable Origin Inspector support\n"},"websockets":{"type":"boolean","description":"Enable WebSockets support\n"}},"type":"object"},"fastly:index/ServiceVclProductEnablementDdosProtection:ServiceVclProductEnablementDdosProtection":{"properties":{"enabled":{"type":"boolean","description":"Enable DDoS Protection support\n"},"mode":{"type":"string","description":"Operation mode. Can be either \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`log`\" pulumi-lang-dotnet=\"`Log`\" pulumi-lang-go=\"`log`\" pulumi-lang-python=\"`log`\" pulumi-lang-yaml=\"`log`\" pulumi-lang-java=\"`log`\"\u003e`log`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e.\n"}},"type":"object","required":["enabled","mode"]},"fastly:index/ServiceVclProductEnablementNgwaf:ServiceVclProductEnablementNgwaf":{"properties":{"enabled":{"type":"boolean","description":"Enable Next-Gen WAF support\n"},"trafficRamp":{"type":"integer","description":"The percentage of traffic to inspect\n"},"workspaceId":{"type":"string","description":"The workspace to link\n"}},"type":"object","required":["enabled","workspaceId"]},"fastly:index/ServiceVclRateLimiter:ServiceVclRateLimiter":{"properties":{"action":{"type":"string","description":"The action to take when a rate limiter violation is detected (one of: log_only, response, response_object)\n"},"clientKey":{"type":"string","description":"Comma-separated list of VCL variables used to generate a counter key to identify a client\n"},"featureRevision":{"type":"integer","description":"Revision number of the rate limiting feature implementation\n"},"httpMethods":{"type":"string","description":"Comma-separated list of HTTP methods to apply rate limiting to\n"},"loggerType":{"type":"string","description":"Name of the type of logging endpoint to be used when action is\u003cspan pulumi-lang-nodejs=\" logOnly \" pulumi-lang-dotnet=\" LogOnly \" pulumi-lang-go=\" logOnly \" pulumi-lang-python=\" log_only \" pulumi-lang-yaml=\" logOnly \" pulumi-lang-java=\" logOnly \"\u003e log_only \u003c/span\u003e(one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog)\n"},"name":{"type":"string","description":"A unique human readable name for the rate limiting rule\n"},"penaltyBoxDuration":{"type":"integer","description":"Length of time in minutes that the rate limiter is in effect after the initial violation is detected\n"},"ratelimiterId":{"type":"string","description":"Alphanumeric string identifying the rate limiter\n"},"response":{"$ref":"#/types/fastly:index/ServiceVclRateLimiterResponse:ServiceVclRateLimiterResponse","description":"Custom response to be sent when the rate limit is exceeded. Required if action is response\n"},"responseObjectName":{"type":"string","description":"Name of existing response object. Required if action is response_object\n"},"rpsLimit":{"type":"integer","description":"Upper limit of requests per second allowed by the rate limiter\n"},"uriDictionaryName":{"type":"string","description":"The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited\n"},"windowSize":{"type":"integer","description":"Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60)\n"}},"type":"object","required":["action","clientKey","httpMethods","name","penaltyBoxDuration","rpsLimit","windowSize"],"language":{"nodejs":{"requiredOutputs":["action","clientKey","httpMethods","name","penaltyBoxDuration","ratelimiterId","rpsLimit","windowSize"]}}},"fastly:index/ServiceVclRateLimiterResponse:ServiceVclRateLimiterResponse":{"properties":{"content":{"type":"string","description":"HTTP response body data\n"},"contentType":{"type":"string","description":"HTTP Content-Type (e.g. application/json)\n"},"status":{"type":"integer","description":"HTTP response status code (e.g. 429)\n"}},"type":"object","required":["content","contentType","status"]},"fastly:index/ServiceVclRequestSetting:ServiceVclRequestSetting":{"properties":{"action":{"type":"string","description":"Allows you to terminate request handling and immediately perform an action. When set it can be \u003cspan pulumi-lang-nodejs=\"`lookup`\" pulumi-lang-dotnet=\"`Lookup`\" pulumi-lang-go=\"`lookup`\" pulumi-lang-python=\"`lookup`\" pulumi-lang-yaml=\"`lookup`\" pulumi-lang-java=\"`lookup`\"\u003e`lookup`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`pass`\" pulumi-lang-dotnet=\"`Pass`\" pulumi-lang-go=\"`pass`\" pulumi-lang-python=\"`pass`\" pulumi-lang-yaml=\"`pass`\" pulumi-lang-java=\"`pass`\"\u003e`pass`\u003c/span\u003e (Ignore the cache completely)\n"},"bypassBusyWait":{"type":"boolean","description":"Disable collapsed forwarding, so you don't wait for other objects to origin\n"},"defaultHost":{"type":"string","description":"Sets the host header\n"},"forceMiss":{"type":"boolean","description":"Force a cache miss for the request. If specified, can be \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"},"forceSsl":{"type":"boolean","description":"Forces the request to use SSL (Redirects a non-SSL request to SSL)\n"},"hashKeys":{"type":"string","description":"Comma separated list of varnish request object fields that should be in the hash key\n"},"maxStaleAge":{"type":"integer","description":"How old an object is allowed to be to serve `stale-if-error` or `stale-while-revalidate`, in seconds\n"},"name":{"type":"string","description":"Unique name to refer to this Request Setting. It is important to note that changing this attribute will delete and recreate the resource\n"},"requestCondition":{"type":"string","description":"Name of already defined \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e to determine if this request setting should be applied (should be unique across multiple instances of \u003cspan pulumi-lang-nodejs=\"`requestSetting`\" pulumi-lang-dotnet=\"`RequestSetting`\" pulumi-lang-go=\"`requestSetting`\" pulumi-lang-python=\"`request_setting`\" pulumi-lang-yaml=\"`requestSetting`\" pulumi-lang-java=\"`requestSetting`\"\u003e`request_setting`\u003c/span\u003e)\n"},"timerSupport":{"type":"boolean","description":"Injects the X-Timer info into the request for viewing origin fetch durations\n"},"xff":{"type":"string","description":"X-Forwarded-For, should be \u003cspan pulumi-lang-nodejs=\"`clear`\" pulumi-lang-dotnet=\"`Clear`\" pulumi-lang-go=\"`clear`\" pulumi-lang-python=\"`clear`\" pulumi-lang-yaml=\"`clear`\" pulumi-lang-java=\"`clear`\"\u003e`clear`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`leave`\" pulumi-lang-dotnet=\"`Leave`\" pulumi-lang-go=\"`leave`\" pulumi-lang-python=\"`leave`\" pulumi-lang-yaml=\"`leave`\" pulumi-lang-java=\"`leave`\"\u003e`leave`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`append`\" pulumi-lang-dotnet=\"`Append`\" pulumi-lang-go=\"`append`\" pulumi-lang-python=\"`append`\" pulumi-lang-yaml=\"`append`\" pulumi-lang-java=\"`append`\"\u003e`append`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`appendAll`\" pulumi-lang-dotnet=\"`AppendAll`\" pulumi-lang-go=\"`appendAll`\" pulumi-lang-python=\"`append_all`\" pulumi-lang-yaml=\"`appendAll`\" pulumi-lang-java=\"`appendAll`\"\u003e`append_all`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`overwrite`\" pulumi-lang-dotnet=\"`Overwrite`\" pulumi-lang-go=\"`overwrite`\" pulumi-lang-python=\"`overwrite`\" pulumi-lang-yaml=\"`overwrite`\" pulumi-lang-java=\"`overwrite`\"\u003e`overwrite`\u003c/span\u003e\n"}},"type":"object","required":["name"]},"fastly:index/ServiceVclResponseObject:ServiceVclResponseObject":{"properties":{"cacheCondition":{"type":"string","description":"Name of already defined \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e to check after we have retrieved an object. If the condition passes then deliver this Request Object instead. This \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e must be of type `CACHE`. For detailed information about Conditionals, see [Fastly's Documentation on Conditionals](https://docs.fastly.com/en/guides/using-conditions)\n"},"content":{"type":"string","description":"The content to deliver for the response object\n"},"contentType":{"type":"string","description":"The MIME type of the content\n"},"name":{"type":"string","description":"A unique name to identify this Response Object. It is important to note that changing this attribute will delete and recreate the resource\n"},"requestCondition":{"type":"string","description":"Name of already defined \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e to be checked during the request phase. If the condition passes then this object will be delivered. This \u003cspan pulumi-lang-nodejs=\"`condition`\" pulumi-lang-dotnet=\"`Condition`\" pulumi-lang-go=\"`condition`\" pulumi-lang-python=\"`condition`\" pulumi-lang-yaml=\"`condition`\" pulumi-lang-java=\"`condition`\"\u003e`condition`\u003c/span\u003e must be of type `REQUEST`\n"},"response":{"type":"string","description":"The HTTP Response. Default `OK`\n"},"status":{"type":"integer","description":"The HTTP Status Code. Default \u003cspan pulumi-lang-nodejs=\"`200`\" pulumi-lang-dotnet=\"`200`\" pulumi-lang-go=\"`200`\" pulumi-lang-python=\"`200`\" pulumi-lang-yaml=\"`200`\" pulumi-lang-java=\"`200`\"\u003e`200`\u003c/span\u003e\n"}},"type":"object","required":["name"]},"fastly:index/ServiceVclSnippet:ServiceVclSnippet":{"properties":{"content":{"type":"string","description":"The VCL code that specifies exactly what the snippet does\n"},"name":{"type":"string","description":"A name that is unique across \"regular\" and \"dynamic\" VCL Snippet configuration blocks. It is important to note that changing this attribute will delete and recreate the resource\n"},"priority":{"type":"integer","description":"Priority determines the ordering for multiple snippets. Lower numbers execute first. Defaults to \u003cspan pulumi-lang-nodejs=\"`100`\" pulumi-lang-dotnet=\"`100`\" pulumi-lang-go=\"`100`\" pulumi-lang-python=\"`100`\" pulumi-lang-yaml=\"`100`\" pulumi-lang-java=\"`100`\"\u003e`100`\u003c/span\u003e\n"},"type":{"type":"string","description":"The location in generated VCL where the snippet should be placed (can be one of \u003cspan pulumi-lang-nodejs=\"`init`\" pulumi-lang-dotnet=\"`Init`\" pulumi-lang-go=\"`init`\" pulumi-lang-python=\"`init`\" pulumi-lang-yaml=\"`init`\" pulumi-lang-java=\"`init`\"\u003e`init`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`recv`\" pulumi-lang-dotnet=\"`Recv`\" pulumi-lang-go=\"`recv`\" pulumi-lang-python=\"`recv`\" pulumi-lang-yaml=\"`recv`\" pulumi-lang-java=\"`recv`\"\u003e`recv`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`hash`\" pulumi-lang-dotnet=\"`Hash`\" pulumi-lang-go=\"`hash`\" pulumi-lang-python=\"`hash`\" pulumi-lang-yaml=\"`hash`\" pulumi-lang-java=\"`hash`\"\u003e`hash`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`hit`\" pulumi-lang-dotnet=\"`Hit`\" pulumi-lang-go=\"`hit`\" pulumi-lang-python=\"`hit`\" pulumi-lang-yaml=\"`hit`\" pulumi-lang-java=\"`hit`\"\u003e`hit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`miss`\" pulumi-lang-dotnet=\"`Miss`\" pulumi-lang-go=\"`miss`\" pulumi-lang-python=\"`miss`\" pulumi-lang-yaml=\"`miss`\" pulumi-lang-java=\"`miss`\"\u003e`miss`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`pass`\" pulumi-lang-dotnet=\"`Pass`\" pulumi-lang-go=\"`pass`\" pulumi-lang-python=\"`pass`\" pulumi-lang-yaml=\"`pass`\" pulumi-lang-java=\"`pass`\"\u003e`pass`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`fetch`\" pulumi-lang-dotnet=\"`Fetch`\" pulumi-lang-go=\"`fetch`\" pulumi-lang-python=\"`fetch`\" pulumi-lang-yaml=\"`fetch`\" pulumi-lang-java=\"`fetch`\"\u003e`fetch`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\"\u003e`error`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`deliver`\" pulumi-lang-dotnet=\"`Deliver`\" pulumi-lang-go=\"`deliver`\" pulumi-lang-python=\"`deliver`\" pulumi-lang-yaml=\"`deliver`\" pulumi-lang-java=\"`deliver`\"\u003e`deliver`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`log`\" pulumi-lang-dotnet=\"`Log`\" pulumi-lang-go=\"`log`\" pulumi-lang-python=\"`log`\" pulumi-lang-yaml=\"`log`\" pulumi-lang-java=\"`log`\"\u003e`log`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e)\n"}},"type":"object","required":["content","name","type"]},"fastly:index/ServiceVclVcl:ServiceVclVcl":{"properties":{"content":{"type":"string","description":"The custom VCL code to upload\n"},"main":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, use this block as the main configuration. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, use this block as an includable library. Only a single VCL block can be marked as the main block. Default is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e\n"},"name":{"type":"string","description":"A unique name for this configuration block. It is important to note that changing this attribute will delete and recreate the resource\n"}},"type":"object","required":["content","name"]},"fastly:index/TlsSubscriptionManagedDnsChallenge:TlsSubscriptionManagedDnsChallenge":{"properties":{"recordName":{"type":"string","description":"The name of the DNS record to add. For example `_acme-challenge.example.com`.\n"},"recordType":{"type":"string","description":"The type of DNS record to add, e.g. `A`, or `CNAME`.\n"},"recordValue":{"type":"string","description":"The value to which the DNS record should point, e.g. `xxxxx.fastly-validations.com`.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["recordName","recordType","recordValue"]}}},"fastly:index/TlsSubscriptionManagedHttpChallenge:TlsSubscriptionManagedHttpChallenge":{"properties":{"recordName":{"type":"string","description":"The name of the DNS record to add. For example `example.com`. Best accessed through a \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expression to filter the relevant record.\n"},"recordType":{"type":"string","description":"The type of DNS record to add, e.g. `A`, or `CNAME`.\n"},"recordValues":{"type":"array","items":{"type":"string"},"description":"A list with the value(s) to which the DNS record should point.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["recordName","recordType","recordValues"]}}},"fastly:index/getComputeAclsAcl:getComputeAclsAcl":{"properties":{"id":{"type":"string","description":"Identifier of the Compute ACL.\n"},"name":{"type":"string","description":"Name of the Compute ACL.\n"}},"type":"object","required":["id","name"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getConfigstoresStore:getConfigstoresStore":{"properties":{"id":{"type":"string","description":"Alphanumeric string identifying the Config Store.\n"},"name":{"type":"string","description":"Name for the Config Store.\n"}},"type":"object","required":["id","name"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getDatacentersPop:getDatacentersPop":{"properties":{"code":{"type":"string","description":"A code representing the POP location.\n"},"group":{"type":"string","description":"A code representing the general region of the world in which the POP location resides.\n"},"name":{"type":"string","description":"The name of the POP.\n"},"shield":{"type":"string","description":"A code representing the shielding name of the POP. The value may be empty if the POP is not available for shielding.\n"}},"type":"object","required":["code","group","name","shield"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getDictionariesDictionary:getDictionariesDictionary":{"properties":{"id":{"type":"string","description":"Alphanumeric string identifying the Dictionary.\n"},"name":{"type":"string","description":"Name for the Dictionary.\n"},"writeOnly":{"type":"boolean","description":"Indicates if items in the dictionary are readable or not.\n"}},"type":"object","required":["id","name","writeOnly"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getDomainsDomain:getDomainsDomain":{"properties":{"fqdn":{"type":"string","description":"The fully-qualified domain name for your domain.\n"},"id":{"type":"string","description":"Domain Identifier (UUID).\n"},"serviceId":{"type":"string","description":"The 'service_id' associated with your domain or 'null' if there is no association.\n"}},"type":"object","required":["fqdn","id","serviceId"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getDomainsV1Domain:getDomainsV1Domain":{"properties":{"fqdn":{"type":"string","description":"The fully-qualified domain name for your domain.\n"},"id":{"type":"string","description":"Domain Identifier (UUID).\n"},"serviceId":{"type":"string","description":"The 'service_id' associated with your domain or 'null' if there is no association.\n"}},"type":"object","required":["fqdn","id","serviceId"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getKvstoresStore:getKvstoresStore":{"properties":{"id":{"type":"string","description":"Alphanumeric string identifying the KV Store.\n"},"name":{"type":"string","description":"Name for the KV Store.\n"}},"type":"object","required":["id","name"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafAccountListsList:getNgwafAccountListsList":{"properties":{"createdAt":{"type":"string","description":"The date and time in ISO 8601 format when the list was created.\n"},"description":{"type":"string","description":"The description of the list.\n"},"id":{"type":"string","description":"The ID of the list.\n"},"name":{"type":"string","description":"The name of the list.\n"},"referenceId":{"type":"string","description":"The reference ID of the list.\n"},"type":{"type":"string","description":"The type of the list.\n"},"updatedAt":{"type":"string","description":"The date and time in ISO 8601 format when the list was last updated.\n"}},"type":"object","required":["createdAt","description","id","name","referenceId","type","updatedAt"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafAccountRulesRule:getNgwafAccountRulesRule":{"properties":{"createdAt":{"type":"string","description":"The date and time in ISO 8601 format when the rule was created.\n"},"description":{"type":"string","description":"The description of the rule.\n"},"enabled":{"type":"boolean","description":"Whether the rule is currently enabled.\n"},"id":{"type":"string","description":"The ID of the rule.\n"},"type":{"type":"string","description":"The type of the rule.\n"},"updatedAt":{"type":"string","description":"The date and time in ISO 8601 format when the rule was last updated.\n"}},"type":"object","required":["createdAt","description","enabled","id","type","updatedAt"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafAccountSignalsSignal:getNgwafAccountSignalsSignal":{"properties":{"description":{"type":"string","description":"The description of the signal.\n"},"id":{"type":"string","description":"The ID of the signal.\n"},"name":{"type":"string","description":"The name of the signal.\n"},"tagName":{"type":"string","description":"The tag name of the signal.\n"}},"type":"object","required":["description","id","name","tagName"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafAlertDatadogIntegrationDatadogAlert:getNgwafAlertDatadogIntegrationDatadogAlert":{"properties":{"id":{"type":"string","description":"The ID of the workspace alert.\n"}},"type":"object","required":["id"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafAlertJiraIntegrationJiraAlert:getNgwafAlertJiraIntegrationJiraAlert":{"properties":{"id":{"type":"string","description":"The ID of the workspace alert.\n"}},"type":"object","required":["id"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafAlertMailingListIntegrationMailingListAlert:getNgwafAlertMailingListIntegrationMailingListAlert":{"properties":{"id":{"type":"string","description":"The ID of the workspace alert.\n"}},"type":"object","required":["id"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafAlertMicrosoftTeamsIntegrationMicrosoftTeamsAlert:getNgwafAlertMicrosoftTeamsIntegrationMicrosoftTeamsAlert":{"properties":{"id":{"type":"string","description":"The ID of the workspace alert.\n"}},"type":"object","required":["id"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafAlertOpsgenieIntegrationOpsgenieAlert:getNgwafAlertOpsgenieIntegrationOpsgenieAlert":{"properties":{"id":{"type":"string","description":"The ID of the workspace alert.\n"}},"type":"object","required":["id"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafAlertPagerdutyIntegrationPagerdutyAlert:getNgwafAlertPagerdutyIntegrationPagerdutyAlert":{"properties":{"id":{"type":"string","description":"The ID of the workspace alert.\n"}},"type":"object","required":["id"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafAlertSlackIntegrationSlackAlert:getNgwafAlertSlackIntegrationSlackAlert":{"properties":{"id":{"type":"string","description":"The ID of the workspace alert.\n"}},"type":"object","required":["id"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafAlertWebhookIntegrationWebhookAlert:getNgwafAlertWebhookIntegrationWebhookAlert":{"properties":{"id":{"type":"string","description":"The ID of the workspace alert.\n"}},"type":"object","required":["id"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafRedactionsRedaction:getNgwafRedactionsRedaction":{"properties":{"field":{"type":"string","description":"The name of the field that is being redacted.\n"},"id":{"type":"string","description":"The ID of the redaction.\n"},"type":{"type":"string","description":"The type of field being redacted. One of \u003cspan pulumi-lang-nodejs=\"`requestParameter`\" pulumi-lang-dotnet=\"`RequestParameter`\" pulumi-lang-go=\"`requestParameter`\" pulumi-lang-python=\"`request_parameter`\" pulumi-lang-yaml=\"`requestParameter`\" pulumi-lang-java=\"`requestParameter`\"\u003e`request_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestHeader`\" pulumi-lang-dotnet=\"`RequestHeader`\" pulumi-lang-go=\"`requestHeader`\" pulumi-lang-python=\"`request_header`\" pulumi-lang-yaml=\"`requestHeader`\" pulumi-lang-java=\"`requestHeader`\"\u003e`request_header`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`responseHeader`\" pulumi-lang-dotnet=\"`ResponseHeader`\" pulumi-lang-go=\"`responseHeader`\" pulumi-lang-python=\"`response_header`\" pulumi-lang-yaml=\"`responseHeader`\" pulumi-lang-java=\"`responseHeader`\"\u003e`response_header`\u003c/span\u003e.\n"}},"type":"object","required":["field","id","type"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafThresholdsThreshold:getNgwafThresholdsThreshold":{"properties":{"id":{"type":"string","description":"The ID of the threshold.\n"}},"type":"object","required":["id"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafVirtualPatchesVirtualPatch:getNgwafVirtualPatchesVirtualPatch":{"properties":{"enabled":{"type":"boolean","description":"Whether the virtual patch is enabled or disabled.\n"},"id":{"type":"string","description":"The ID of the virtual patch.\n"},"mode":{"type":"string","description":"Action to take when a signal for the virtual patch is detected. One of \u003cspan pulumi-lang-nodejs=\"`log`\" pulumi-lang-dotnet=\"`Log`\" pulumi-lang-go=\"`log`\" pulumi-lang-python=\"`log`\" pulumi-lang-yaml=\"`log`\" pulumi-lang-java=\"`log`\"\u003e`log`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e.\n"}},"type":"object","required":["enabled","id","mode"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafWorkspaceListsList:getNgwafWorkspaceListsList":{"properties":{"createdAt":{"type":"string","description":"The date and time in ISO 8601 format when the list was created.\n"},"description":{"type":"string","description":"The description of the list.\n"},"id":{"type":"string","description":"The ID of the list.\n"},"name":{"type":"string","description":"The name of the list.\n"},"referenceId":{"type":"string","description":"The reference ID of the list.\n"},"type":{"type":"string","description":"The type of the list.\n"},"updatedAt":{"type":"string","description":"The date and time in ISO 8601 format when the list was last updated.\n"}},"type":"object","required":["createdAt","description","id","name","referenceId","type","updatedAt"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafWorkspaceRulesRule:getNgwafWorkspaceRulesRule":{"properties":{"createdAt":{"type":"string","description":"The date and time in ISO 8601 format when the rule was created.\n"},"description":{"type":"string","description":"The description of the rule.\n"},"enabled":{"type":"boolean","description":"Whether the rule is currently enabled.\n"},"id":{"type":"string","description":"The ID of the rule.\n"},"type":{"type":"string","description":"The type of the rule.\n"},"updatedAt":{"type":"string","description":"The date and time in ISO 8601 format when the rule was last updated.\n"}},"type":"object","required":["createdAt","description","enabled","id","type","updatedAt"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafWorkspaceSignalsSignal:getNgwafWorkspaceSignalsSignal":{"properties":{"description":{"type":"string","description":"The description of the signal.\n"},"id":{"type":"string","description":"The ID of the signal.\n"},"name":{"type":"string","description":"The name of the signal.\n"},"tagName":{"type":"string","description":"The tag name of the signal.\n"}},"type":"object","required":["description","id","name","tagName"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getNgwafWorkspacesWorkspace:getNgwafWorkspacesWorkspace":{"properties":{"id":{"type":"string","description":"The ID of the workspace.\n"},"name":{"type":"string","description":"The name of the workspace.\n"}},"type":"object","required":["id","name"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getSecretstoresStore:getSecretstoresStore":{"properties":{"id":{"type":"string","description":"Alphanumeric string identifying the Secrets Store.\n"},"name":{"type":"string","description":"Name for the Secrets Store.\n"}},"type":"object","required":["id","name"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getServicesDetail:getServicesDetail":{"properties":{"comment":{"type":"string","description":"A freeform descriptive note.\n"},"createdAt":{"type":"string","description":"Date and time in ISO 8601 format.\n"},"customerId":{"type":"string","description":"Alphanumeric string identifying the customer.\n"},"id":{"type":"string","description":"Alphanumeric string identifying the service.\n"},"name":{"type":"string","description":"The name of the service.\n"},"type":{"type":"string","description":"The type of this service. One of \u003cspan pulumi-lang-nodejs=\"`vcl`\" pulumi-lang-dotnet=\"`Vcl`\" pulumi-lang-go=\"`vcl`\" pulumi-lang-python=\"`vcl`\" pulumi-lang-yaml=\"`vcl`\" pulumi-lang-java=\"`vcl`\"\u003e`vcl`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`wasm`\" pulumi-lang-dotnet=\"`Wasm`\" pulumi-lang-go=\"`wasm`\" pulumi-lang-python=\"`wasm`\" pulumi-lang-yaml=\"`wasm`\" pulumi-lang-java=\"`wasm`\"\u003e`wasm`\u003c/span\u003e.\n"},"updatedAt":{"type":"string","description":"Date and time in ISO 8601 format.\n"},"version":{"type":"integer","description":"The currently activated version.\n"}},"type":"object","required":["comment","createdAt","customerId","id","name","type","updatedAt","version"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getStagingIpsDomain:getStagingIpsDomain":{"properties":{"name":{"type":"string","description":"The domain name.\n"},"stagingIp":{"type":"string","description":"The staging IP address for the domain.\n"}},"type":"object","required":["name","stagingIp"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getTlsConfigurationDnsRecord:getTlsConfigurationDnsRecord":{"properties":{"recordType":{"type":"string","description":"Type of DNS record to set, e.g. A, AAAA, or CNAME.\n"},"recordValue":{"type":"string","description":"The IP address or hostname of the DNS record.\n"},"region":{"type":"string","description":"The regions that will be used to route traffic. Select DNS Records with a \u003cspan pulumi-lang-nodejs=\"`global`\" pulumi-lang-dotnet=\"`Global`\" pulumi-lang-go=\"`global`\" pulumi-lang-python=\"`global`\" pulumi-lang-yaml=\"`global`\" pulumi-lang-java=\"`global`\"\u003e`global`\u003c/span\u003e region to route traffic to the most performant point of presence (POP) worldwide (global pricing will apply). Select DNS records with a `us-eu` region to exclusively land traffic on North American and European POPs.\n"}},"type":"object","required":["recordType","recordValue","region"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getVclSnippetsVclSnippet:getVclSnippetsVclSnippet":{"properties":{"content":{"type":"string","description":"The VCL code that specifies exactly what the snippet does.\n"},"id":{"type":"string","description":"Alphanumeric string identifying a VCL Snippet.\n"},"name":{"type":"string","description":"The name for the snippet.\n"},"priority":{"type":"integer","description":"Priority determines execution order. Lower numbers execute first.\n"},"type":{"type":"string","description":"The location in generated VCL where the snippet should be placed.\n"}},"type":"object","required":["content","id","name","priority","type"],"language":{"nodejs":{"requiredInputs":[]}}}},"provider":{"description":"The provider type for the fastly package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n","properties":{"apiKey":{"type":"string","description":"Fastly API Key from https://app.fastly.com/#account"},"baseUrl":{"type":"string","description":"Fastly API URL"},"forceHttp2":{"type":"boolean","description":"Set this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to disable HTTP/1.x fallback mechanism that the underlying Go library will attempt upon connection to `api.fastly.com:443` by default. This may slightly improve the provider's performance and reduce unnecessary TLS handshakes. Default: \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"noAuth":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e if your configuration only consumes data sources that do not require authentication, such as \u003cspan pulumi-lang-nodejs=\"`fastly.getFastlyIpRanges`\" pulumi-lang-dotnet=\"`fastly.getFastlyIpRanges`\" pulumi-lang-go=\"`getFastlyIpRanges`\" pulumi-lang-python=\"`get_fastly_ip_ranges`\" pulumi-lang-yaml=\"`fastly.getFastlyIpRanges`\" pulumi-lang-java=\"`fastly.getFastlyIpRanges`\"\u003e`fastly.getFastlyIpRanges`\u003c/span\u003e"}},"inputProperties":{"apiKey":{"type":"string","description":"Fastly API Key from https://app.fastly.com/#account"},"baseUrl":{"type":"string","description":"Fastly API URL"},"forceHttp2":{"type":"boolean","description":"Set this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to disable HTTP/1.x fallback mechanism that the underlying Go library will attempt upon connection to `api.fastly.com:443` by default. This may slightly improve the provider's performance and reduce unnecessary TLS handshakes. Default: \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"noAuth":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e if your configuration only consumes data sources that do not require authentication, such as \u003cspan pulumi-lang-nodejs=\"`fastly.getFastlyIpRanges`\" pulumi-lang-dotnet=\"`fastly.getFastlyIpRanges`\" pulumi-lang-go=\"`getFastlyIpRanges`\" pulumi-lang-python=\"`get_fastly_ip_ranges`\" pulumi-lang-yaml=\"`fastly.getFastlyIpRanges`\" pulumi-lang-java=\"`fastly.getFastlyIpRanges`\"\u003e`fastly.getFastlyIpRanges`\u003c/span\u003e"}},"methods":{"terraformConfig":"pulumi:providers:fastly/terraformConfig"}},"resources":{"fastly:index/alert:Alert":{"description":"Provides a Fastly Alert. Alerts send notifications to custom integrations (e.g., Slack channels, PagerDuty, Microsoft Teams and New Relic) when an observed metric either exceeds or falls below a threshold.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.ServiceVcl(\"example\", {\n    name: \"my_vcl_service\",\n    domains: [{\n        name: \"demo.notexample.com\",\n        comment: \"demo\",\n    }],\n});\nconst exampleIntegration = new fastly.Integration(\"example\", {\n    name: \"my_integration\",\n    type: \"a_valid_type\",\n    config: {\n        webhook: \"some_webhook\",\n    },\n});\nconst exampleAlert = new fastly.Alert(\"example\", {\n    name: \"my_vcl_service errors\",\n    serviceId: example.id,\n    source: \"stats\",\n    metric: \"status_5xx\",\n    evaluationStrategy: {\n        type: \"above_threshold\",\n        period: \"5m\",\n        threshold: 10,\n    },\n    integrationIds: [exampleIntegration.id],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.ServiceVcl(\"example\",\n    name=\"my_vcl_service\",\n    domains=[{\n        \"name\": \"demo.notexample.com\",\n        \"comment\": \"demo\",\n    }])\nexample_integration = fastly.Integration(\"example\",\n    name=\"my_integration\",\n    type=\"a_valid_type\",\n    config={\n        \"webhook\": \"some_webhook\",\n    })\nexample_alert = fastly.Alert(\"example\",\n    name=\"my_vcl_service errors\",\n    service_id=example.id,\n    source=\"stats\",\n    metric=\"status_5xx\",\n    evaluation_strategy={\n        \"type\": \"above_threshold\",\n        \"period\": \"5m\",\n        \"threshold\": 10,\n    },\n    integration_ids=[example_integration.id])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.ServiceVcl(\"example\", new()\n    {\n        Name = \"my_vcl_service\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"demo.notexample.com\",\n                Comment = \"demo\",\n            },\n        },\n    });\n\n    var exampleIntegration = new Fastly.Integration(\"example\", new()\n    {\n        Name = \"my_integration\",\n        Type = \"a_valid_type\",\n        Config = \n        {\n            { \"webhook\", \"some_webhook\" },\n        },\n    });\n\n    var exampleAlert = new Fastly.Alert(\"example\", new()\n    {\n        Name = \"my_vcl_service errors\",\n        ServiceId = example.Id,\n        Source = \"stats\",\n        Metric = \"status_5xx\",\n        EvaluationStrategy = new Fastly.Inputs.AlertEvaluationStrategyArgs\n        {\n            Type = \"above_threshold\",\n            Period = \"5m\",\n            Threshold = 10,\n        },\n        IntegrationIds = new[]\n        {\n            exampleIntegration.Id,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.NewServiceVcl(ctx, \"example\", \u0026fastly.ServiceVclArgs{\n\t\t\tName: pulumi.String(\"my_vcl_service\"),\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName:    pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleIntegration, err := fastly.NewIntegration(ctx, \"example\", \u0026fastly.IntegrationArgs{\n\t\t\tName: pulumi.String(\"my_integration\"),\n\t\t\tType: pulumi.String(\"a_valid_type\"),\n\t\t\tConfig: pulumi.StringMap{\n\t\t\t\t\"webhook\": pulumi.String(\"some_webhook\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewAlert(ctx, \"example\", \u0026fastly.AlertArgs{\n\t\t\tName:      pulumi.String(\"my_vcl_service errors\"),\n\t\t\tServiceId: example.ID(),\n\t\t\tSource:    pulumi.String(\"stats\"),\n\t\t\tMetric:    pulumi.String(\"status_5xx\"),\n\t\t\tEvaluationStrategy: \u0026fastly.AlertEvaluationStrategyArgs{\n\t\t\t\tType:      pulumi.String(\"above_threshold\"),\n\t\t\t\tPeriod:    pulumi.String(\"5m\"),\n\t\t\t\tThreshold: pulumi.Float64(10),\n\t\t\t},\n\t\t\tIntegrationIds: pulumi.StringArray{\n\t\t\t\texampleIntegration.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.Integration;\nimport com.pulumi.fastly.IntegrationArgs;\nimport com.pulumi.fastly.Alert;\nimport com.pulumi.fastly.AlertArgs;\nimport com.pulumi.fastly.inputs.AlertEvaluationStrategyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new ServiceVcl(\"example\", ServiceVclArgs.builder()\n            .name(\"my_vcl_service\")\n            .domains(ServiceVclDomainArgs.builder()\n                .name(\"demo.notexample.com\")\n                .comment(\"demo\")\n                .build())\n            .build());\n\n        var exampleIntegration = new Integration(\"exampleIntegration\", IntegrationArgs.builder()\n            .name(\"my_integration\")\n            .type(\"a_valid_type\")\n            .config(Map.of(\"webhook\", \"some_webhook\"))\n            .build());\n\n        var exampleAlert = new Alert(\"exampleAlert\", AlertArgs.builder()\n            .name(\"my_vcl_service errors\")\n            .serviceId(example.id())\n            .source(\"stats\")\n            .metric(\"status_5xx\")\n            .evaluationStrategy(AlertEvaluationStrategyArgs.builder()\n                .type(\"above_threshold\")\n                .period(\"5m\")\n                .threshold(10.0)\n                .build())\n            .integrationIds(exampleIntegration.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:ServiceVcl\n    properties:\n      name: my_vcl_service\n      domains:\n        - name: demo.notexample.com\n          comment: demo\n  exampleIntegration:\n    type: fastly:Integration\n    name: example\n    properties:\n      name: my_integration\n      type: a_valid_type\n      config:\n        webhook: some_webhook\n  exampleAlert:\n    type: fastly:Alert\n    name: example\n    properties:\n      name: my_vcl_service errors\n      serviceId: ${example.id}\n      source: stats\n      metric: status_5xx\n      evaluationStrategy:\n        type: above_threshold\n        period: 5m\n        threshold: 10\n      integrationIds:\n        - ${exampleIntegration.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Alerts can be imported using their ID, e.g.\n\n```sh\n$ pulumi import fastly:index/alert:Alert example xxxxxxxxxxxxxxxxxxxx\n```\n\n","properties":{"description":{"type":"string","description":"Additional text that is included in the alert notification.\n"},"dimensions":{"$ref":"#/types/fastly:index/AlertDimensions:AlertDimensions","description":"More filters depending on the source type.\n"},"evaluationStrategy":{"$ref":"#/types/fastly:index/AlertEvaluationStrategy:AlertEvaluationStrategy","description":"Criteria on how to alert.\n"},"integrationIds":{"type":"array","items":{"type":"string"},"description":"List of integrations used to notify when alert fires.\n"},"metric":{"type":"string","description":"The metric name to alert on for a specific source: [domains](https://developer.fastly.com/reference/api/metrics-stats/domain-inspector/historical), [origins](https://developer.fastly.com/reference/api/metrics-stats/origin-inspector/historical), or [stats](https://developer.fastly.com/reference/api/metrics-stats/historical-stats).\n"},"name":{"type":"string","description":"The name of the alert.\n"},"serviceId":{"type":"string","description":"The service which the alert monitors. Optional when using \u003cspan pulumi-lang-nodejs=\"`stats`\" pulumi-lang-dotnet=\"`Stats`\" pulumi-lang-go=\"`stats`\" pulumi-lang-python=\"`stats`\" pulumi-lang-yaml=\"`stats`\" pulumi-lang-java=\"`stats`\"\u003e`stats`\u003c/span\u003e as the \u003cspan pulumi-lang-nodejs=\"`source`\" pulumi-lang-dotnet=\"`Source`\" pulumi-lang-go=\"`source`\" pulumi-lang-python=\"`source`\" pulumi-lang-yaml=\"`source`\" pulumi-lang-java=\"`source`\"\u003e`source`\u003c/span\u003e.\n"},"source":{"type":"string","description":"The source where the metric comes from. One of: \u003cspan pulumi-lang-nodejs=\"`domains`\" pulumi-lang-dotnet=\"`Domains`\" pulumi-lang-go=\"`domains`\" pulumi-lang-python=\"`domains`\" pulumi-lang-yaml=\"`domains`\" pulumi-lang-java=\"`domains`\"\u003e`domains`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`origins`\" pulumi-lang-dotnet=\"`Origins`\" pulumi-lang-go=\"`origins`\" pulumi-lang-python=\"`origins`\" pulumi-lang-yaml=\"`origins`\" pulumi-lang-java=\"`origins`\"\u003e`origins`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`stats`\" pulumi-lang-dotnet=\"`Stats`\" pulumi-lang-go=\"`stats`\" pulumi-lang-python=\"`stats`\" pulumi-lang-yaml=\"`stats`\" pulumi-lang-java=\"`stats`\"\u003e`stats`\u003c/span\u003e.\n"}},"required":["evaluationStrategy","metric","name","source"],"inputProperties":{"description":{"type":"string","description":"Additional text that is included in the alert notification.\n"},"dimensions":{"$ref":"#/types/fastly:index/AlertDimensions:AlertDimensions","description":"More filters depending on the source type.\n"},"evaluationStrategy":{"$ref":"#/types/fastly:index/AlertEvaluationStrategy:AlertEvaluationStrategy","description":"Criteria on how to alert.\n"},"integrationIds":{"type":"array","items":{"type":"string"},"description":"List of integrations used to notify when alert fires.\n"},"metric":{"type":"string","description":"The metric name to alert on for a specific source: [domains](https://developer.fastly.com/reference/api/metrics-stats/domain-inspector/historical), [origins](https://developer.fastly.com/reference/api/metrics-stats/origin-inspector/historical), or [stats](https://developer.fastly.com/reference/api/metrics-stats/historical-stats).\n"},"name":{"type":"string","description":"The name of the alert.\n"},"serviceId":{"type":"string","description":"The service which the alert monitors. Optional when using \u003cspan pulumi-lang-nodejs=\"`stats`\" pulumi-lang-dotnet=\"`Stats`\" pulumi-lang-go=\"`stats`\" pulumi-lang-python=\"`stats`\" pulumi-lang-yaml=\"`stats`\" pulumi-lang-java=\"`stats`\"\u003e`stats`\u003c/span\u003e as the \u003cspan pulumi-lang-nodejs=\"`source`\" pulumi-lang-dotnet=\"`Source`\" pulumi-lang-go=\"`source`\" pulumi-lang-python=\"`source`\" pulumi-lang-yaml=\"`source`\" pulumi-lang-java=\"`source`\"\u003e`source`\u003c/span\u003e.\n","willReplaceOnChanges":true},"source":{"type":"string","description":"The source where the metric comes from. One of: \u003cspan pulumi-lang-nodejs=\"`domains`\" pulumi-lang-dotnet=\"`Domains`\" pulumi-lang-go=\"`domains`\" pulumi-lang-python=\"`domains`\" pulumi-lang-yaml=\"`domains`\" pulumi-lang-java=\"`domains`\"\u003e`domains`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`origins`\" pulumi-lang-dotnet=\"`Origins`\" pulumi-lang-go=\"`origins`\" pulumi-lang-python=\"`origins`\" pulumi-lang-yaml=\"`origins`\" pulumi-lang-java=\"`origins`\"\u003e`origins`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`stats`\" pulumi-lang-dotnet=\"`Stats`\" pulumi-lang-go=\"`stats`\" pulumi-lang-python=\"`stats`\" pulumi-lang-yaml=\"`stats`\" pulumi-lang-java=\"`stats`\"\u003e`stats`\u003c/span\u003e.\n","willReplaceOnChanges":true}},"requiredInputs":["evaluationStrategy","metric","source"],"stateInputs":{"description":"Input properties used for looking up and filtering Alert resources.\n","properties":{"description":{"type":"string","description":"Additional text that is included in the alert notification.\n"},"dimensions":{"$ref":"#/types/fastly:index/AlertDimensions:AlertDimensions","description":"More filters depending on the source type.\n"},"evaluationStrategy":{"$ref":"#/types/fastly:index/AlertEvaluationStrategy:AlertEvaluationStrategy","description":"Criteria on how to alert.\n"},"integrationIds":{"type":"array","items":{"type":"string"},"description":"List of integrations used to notify when alert fires.\n"},"metric":{"type":"string","description":"The metric name to alert on for a specific source: [domains](https://developer.fastly.com/reference/api/metrics-stats/domain-inspector/historical), [origins](https://developer.fastly.com/reference/api/metrics-stats/origin-inspector/historical), or [stats](https://developer.fastly.com/reference/api/metrics-stats/historical-stats).\n"},"name":{"type":"string","description":"The name of the alert.\n"},"serviceId":{"type":"string","description":"The service which the alert monitors. Optional when using \u003cspan pulumi-lang-nodejs=\"`stats`\" pulumi-lang-dotnet=\"`Stats`\" pulumi-lang-go=\"`stats`\" pulumi-lang-python=\"`stats`\" pulumi-lang-yaml=\"`stats`\" pulumi-lang-java=\"`stats`\"\u003e`stats`\u003c/span\u003e as the \u003cspan pulumi-lang-nodejs=\"`source`\" pulumi-lang-dotnet=\"`Source`\" pulumi-lang-go=\"`source`\" pulumi-lang-python=\"`source`\" pulumi-lang-yaml=\"`source`\" pulumi-lang-java=\"`source`\"\u003e`source`\u003c/span\u003e.\n","willReplaceOnChanges":true},"source":{"type":"string","description":"The source where the metric comes from. One of: \u003cspan pulumi-lang-nodejs=\"`domains`\" pulumi-lang-dotnet=\"`Domains`\" pulumi-lang-go=\"`domains`\" pulumi-lang-python=\"`domains`\" pulumi-lang-yaml=\"`domains`\" pulumi-lang-java=\"`domains`\"\u003e`domains`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`origins`\" pulumi-lang-dotnet=\"`Origins`\" pulumi-lang-go=\"`origins`\" pulumi-lang-python=\"`origins`\" pulumi-lang-yaml=\"`origins`\" pulumi-lang-java=\"`origins`\"\u003e`origins`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`stats`\" pulumi-lang-dotnet=\"`Stats`\" pulumi-lang-go=\"`stats`\" pulumi-lang-python=\"`stats`\" pulumi-lang-yaml=\"`stats`\" pulumi-lang-java=\"`stats`\"\u003e`stats`\u003c/span\u003e.\n","willReplaceOnChanges":true}},"type":"object"}},"fastly:index/computeAcl:ComputeAcl":{"description":"Provides a Compute Access Control List (ACL) that defines CIDR-based access rules (e.g., allow/block IP ranges) and is accessible to Compute services during request processing.\n\nIn order for a Compute ACL (\u003cspan pulumi-lang-nodejs=\"`fastly.ComputeAcl`\" pulumi-lang-dotnet=\"`fastly.ComputeAcl`\" pulumi-lang-go=\"`ComputeAcl`\" pulumi-lang-python=\"`ComputeAcl`\" pulumi-lang-yaml=\"`fastly.ComputeAcl`\" pulumi-lang-java=\"`fastly.ComputeAcl`\"\u003e`fastly.ComputeAcl`\u003c/span\u003e) to be accessible to a [Compute](https://developer.fastly.com/learning/compute/) service you'll first need to define a Compute service (\u003cspan pulumi-lang-nodejs=\"`fastly.ServiceCompute`\" pulumi-lang-dotnet=\"`fastly.ServiceCompute`\" pulumi-lang-go=\"`ServiceCompute`\" pulumi-lang-python=\"`ServiceCompute`\" pulumi-lang-yaml=\"`fastly.ServiceCompute`\" pulumi-lang-java=\"`fastly.ServiceCompute`\"\u003e`fastly.ServiceCompute`\u003c/span\u003e) in your configuration, and then create a link to the ACL from within the service using the \u003cspan pulumi-lang-nodejs=\"`resourceLink`\" pulumi-lang-dotnet=\"`ResourceLink`\" pulumi-lang-go=\"`resourceLink`\" pulumi-lang-python=\"`resource_link`\" pulumi-lang-yaml=\"`resourceLink`\" pulumi-lang-java=\"`resourceLink`\"\u003e`resource_link`\u003c/span\u003e block (shown in the below examples).\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\n// IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n// This requires a two-step `pulumi up` because we can't guarantee deletion order.\nconst exampleComputeAcl = new fastly.ComputeAcl(\"example\", {name: \"my_compute_acl\"});\nconst example = fastly.getPackageHash({\n    filename: \"package.tar.gz\",\n});\nconst exampleServiceCompute = new fastly.ServiceCompute(\"example\", {\n    name: \"my_compute_service\",\n    domains: [{\n        name: \"demo.example.com\",\n    }],\n    \"package\": {\n        filename: \"package.tar.gz\",\n        sourceCodeHash: example.then(example =\u003e example.hash),\n    },\n    resourceLinks: [{\n        name: \"my_acl_link\",\n        resourceId: exampleComputeAcl.id,\n    }],\n    forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\n# IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n# This requires a two-step `pulumi up` because we can't guarantee deletion order.\nexample_compute_acl = fastly.ComputeAcl(\"example\", name=\"my_compute_acl\")\nexample = fastly.get_package_hash(filename=\"package.tar.gz\")\nexample_service_compute = fastly.ServiceCompute(\"example\",\n    name=\"my_compute_service\",\n    domains=[{\n        \"name\": \"demo.example.com\",\n    }],\n    package={\n        \"filename\": \"package.tar.gz\",\n        \"source_code_hash\": example.hash,\n    },\n    resource_links=[{\n        \"name\": \"my_acl_link\",\n        \"resource_id\": example_compute_acl.id,\n    }],\n    force_destroy=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n    // This requires a two-step `pulumi up` because we can't guarantee deletion order.\n    var exampleComputeAcl = new Fastly.ComputeAcl(\"example\", new()\n    {\n        Name = \"my_compute_acl\",\n    });\n\n    var example = Fastly.GetPackageHash.Invoke(new()\n    {\n        Filename = \"package.tar.gz\",\n    });\n\n    var exampleServiceCompute = new Fastly.ServiceCompute(\"example\", new()\n    {\n        Name = \"my_compute_service\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceComputeDomainArgs\n            {\n                Name = \"demo.example.com\",\n            },\n        },\n        Package = new Fastly.Inputs.ServiceComputePackageArgs\n        {\n            Filename = \"package.tar.gz\",\n            SourceCodeHash = example.Apply(getPackageHashResult =\u003e getPackageHashResult.Hash),\n        },\n        ResourceLinks = new[]\n        {\n            new Fastly.Inputs.ServiceComputeResourceLinkArgs\n            {\n                Name = \"my_acl_link\",\n                ResourceId = exampleComputeAcl.Id,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n\t\t// This requires a two-step `pulumi up` because we can't guarantee deletion order.\n\t\texampleComputeAcl, err := fastly.NewComputeAcl(ctx, \"example\", \u0026fastly.ComputeAclArgs{\n\t\t\tName: pulumi.String(\"my_compute_acl\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := fastly.GetPackageHash(ctx, \u0026fastly.GetPackageHashArgs{\n\t\t\tFilename: pulumi.StringRef(\"package.tar.gz\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceCompute(ctx, \"example\", \u0026fastly.ServiceComputeArgs{\n\t\t\tName: pulumi.String(\"my_compute_service\"),\n\t\t\tDomains: fastly.ServiceComputeDomainArray{\n\t\t\t\t\u0026fastly.ServiceComputeDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"demo.example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackage: \u0026fastly.ServiceComputePackageArgs{\n\t\t\t\tFilename:       pulumi.String(\"package.tar.gz\"),\n\t\t\t\tSourceCodeHash: pulumi.String(example.Hash),\n\t\t\t},\n\t\t\tResourceLinks: fastly.ServiceComputeResourceLinkArray{\n\t\t\t\t\u0026fastly.ServiceComputeResourceLinkArgs{\n\t\t\t\t\tName:       pulumi.String(\"my_acl_link\"),\n\t\t\t\t\tResourceId: exampleComputeAcl.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ComputeAcl;\nimport com.pulumi.fastly.ComputeAclArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetPackageHashArgs;\nimport com.pulumi.fastly.ServiceCompute;\nimport com.pulumi.fastly.ServiceComputeArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceComputePackageArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeResourceLinkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n        // This requires a two-step `pulumi up` because we can't guarantee deletion order.\n        var exampleComputeAcl = new ComputeAcl(\"exampleComputeAcl\", ComputeAclArgs.builder()\n            .name(\"my_compute_acl\")\n            .build());\n\n        final var example = FastlyFunctions.getPackageHash(GetPackageHashArgs.builder()\n            .filename(\"package.tar.gz\")\n            .build());\n\n        var exampleServiceCompute = new ServiceCompute(\"exampleServiceCompute\", ServiceComputeArgs.builder()\n            .name(\"my_compute_service\")\n            .domains(ServiceComputeDomainArgs.builder()\n                .name(\"demo.example.com\")\n                .build())\n            .package_(ServiceComputePackageArgs.builder()\n                .filename(\"package.tar.gz\")\n                .sourceCodeHash(example.hash())\n                .build())\n            .resourceLinks(ServiceComputeResourceLinkArgs.builder()\n                .name(\"my_acl_link\")\n                .resourceId(exampleComputeAcl.id())\n                .build())\n            .forceDestroy(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n  # This requires a two-step `pulumi up` because we can't guarantee deletion order.\n  exampleComputeAcl:\n    type: fastly:ComputeAcl\n    name: example\n    properties:\n      name: my_compute_acl\n  exampleServiceCompute:\n    type: fastly:ServiceCompute\n    name: example\n    properties:\n      name: my_compute_service\n      domains:\n        - name: demo.example.com\n      package:\n        filename: package.tar.gz\n        sourceCodeHash: ${example.hash}\n      resourceLinks:\n        - name: my_acl_link\n          resourceId: ${exampleComputeAcl.id}\n      forceDestroy: true\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getPackageHash\n      arguments:\n        filename: package.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Compute ACLs can be imported using their ACL ID, e.g.\n\n```sh\n$ pulumi import fastly:index/computeAcl:ComputeAcl example \u003ccompute_acl_id\u003e\n```\n\n","properties":{"name":{"type":"string","description":"A unique name to identify the Compute ACL. It is important to note that changing this attribute will delete and recreate the Compute ACL, and discard the current entries. You MUST first delete the associated\u003cspan pulumi-lang-nodejs=\" resourceLink \" pulumi-lang-dotnet=\" ResourceLink \" pulumi-lang-go=\" resourceLink \" pulumi-lang-python=\" resource_link \" pulumi-lang-yaml=\" resourceLink \" pulumi-lang-java=\" resourceLink \"\u003e resource_link \u003c/span\u003eblock from your service before modifying this field.\n"}},"required":["name"],"inputProperties":{"name":{"type":"string","description":"A unique name to identify the Compute ACL. It is important to note that changing this attribute will delete and recreate the Compute ACL, and discard the current entries. You MUST first delete the associated\u003cspan pulumi-lang-nodejs=\" resourceLink \" pulumi-lang-dotnet=\" ResourceLink \" pulumi-lang-go=\" resourceLink \" pulumi-lang-python=\" resource_link \" pulumi-lang-yaml=\" resourceLink \" pulumi-lang-java=\" resourceLink \"\u003e resource_link \u003c/span\u003eblock from your service before modifying this field.\n","willReplaceOnChanges":true}},"stateInputs":{"description":"Input properties used for looking up and filtering ComputeAcl resources.\n","properties":{"name":{"type":"string","description":"A unique name to identify the Compute ACL. It is important to note that changing this attribute will delete and recreate the Compute ACL, and discard the current entries. You MUST first delete the associated\u003cspan pulumi-lang-nodejs=\" resourceLink \" pulumi-lang-dotnet=\" ResourceLink \" pulumi-lang-go=\" resourceLink \" pulumi-lang-python=\" resource_link \" pulumi-lang-yaml=\" resourceLink \" pulumi-lang-java=\" resourceLink \"\u003e resource_link \u003c/span\u003eblock from your service before modifying this field.\n","willReplaceOnChanges":true}},"type":"object"}},"fastly:index/computeAclEntries:ComputeAclEntries":{"description":"The \u003cspan pulumi-lang-nodejs=\"`fastly.ComputeAclEntries`\" pulumi-lang-dotnet=\"`fastly.ComputeAclEntries`\" pulumi-lang-go=\"`ComputeAclEntries`\" pulumi-lang-python=\"`ComputeAclEntries`\" pulumi-lang-yaml=\"`fastly.ComputeAclEntries`\" pulumi-lang-java=\"`fastly.ComputeAclEntries`\"\u003e`fastly.ComputeAclEntries`\u003c/span\u003e resource allows you to manage CIDR-based allow/block rules (ACL entries) inside a Fastly Compute ACL.\n\nBy default, Terraform does not continue to manage the entries after the initial `pulumi up`. This allows you to make changes to ACL entries outside of Terraform using the [Fastly API](https://developer.fastly.com/reference/api/) or [Fastly CLI](https://developer.fastly.com/learning/tools/cli/)) without Terraform resetting them.\n\nTo have Terraform continue managing the entries after creation (e.g., deleting any entries not defined in the config), set \u003cspan pulumi-lang-nodejs=\"`manageEntries \" pulumi-lang-dotnet=\"`ManageEntries \" pulumi-lang-go=\"`manageEntries \" pulumi-lang-python=\"`manage_entries \" pulumi-lang-yaml=\"`manageEntries \" pulumi-lang-java=\"`manageEntries \"\u003e`manage_entries \u003c/span\u003e= true`.\n\n\u003e **Note:** Use \u003cspan pulumi-lang-nodejs=\"`manageEntries \" pulumi-lang-dotnet=\"`ManageEntries \" pulumi-lang-go=\"`manageEntries \" pulumi-lang-python=\"`manage_entries \" pulumi-lang-yaml=\"`manageEntries \" pulumi-lang-java=\"`manageEntries \"\u003e`manage_entries \u003c/span\u003e= true` cautiously. Terraform will overwrite external changes and delete any unmanaged entries.\n\n## Example Usage\n\nBasic usage (with seeded values, unmanaged after initial apply):\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\n// IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n// This requires a two-step `pulumi up` as we can't guarantee deletion order.\nconst exampleComputeAcl = new fastly.ComputeAcl(\"example\", {name: \"my_compute_acl\"});\nconst exampleComputeAclEntries = new fastly.ComputeAclEntries(\"example\", {\n    computeAclId: exampleComputeAcl.id,\n    entries: {\n        \"192.0.2.0/24\": \"ALLOW\",\n        \"198.51.100.0/24\": \"BLOCK\",\n    },\n});\nconst example = fastly.getPackageHash({\n    filename: \"package.tar.gz\",\n});\nconst exampleServiceCompute = new fastly.ServiceCompute(\"example\", {\n    name: \"my_compute_service\",\n    domains: [{\n        name: \"demo.example.com\",\n    }],\n    \"package\": {\n        filename: \"package.tar.gz\",\n        sourceCodeHash: example.then(example =\u003e example.hash),\n    },\n    resourceLinks: [{\n        name: \"my_acl_link\",\n        resourceId: exampleComputeAcl.id,\n    }],\n    forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\n# IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n# This requires a two-step `pulumi up` as we can't guarantee deletion order.\nexample_compute_acl = fastly.ComputeAcl(\"example\", name=\"my_compute_acl\")\nexample_compute_acl_entries = fastly.ComputeAclEntries(\"example\",\n    compute_acl_id=example_compute_acl.id,\n    entries={\n        \"192.0.2.0/24\": \"ALLOW\",\n        \"198.51.100.0/24\": \"BLOCK\",\n    })\nexample = fastly.get_package_hash(filename=\"package.tar.gz\")\nexample_service_compute = fastly.ServiceCompute(\"example\",\n    name=\"my_compute_service\",\n    domains=[{\n        \"name\": \"demo.example.com\",\n    }],\n    package={\n        \"filename\": \"package.tar.gz\",\n        \"source_code_hash\": example.hash,\n    },\n    resource_links=[{\n        \"name\": \"my_acl_link\",\n        \"resource_id\": example_compute_acl.id,\n    }],\n    force_destroy=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n    // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n    var exampleComputeAcl = new Fastly.ComputeAcl(\"example\", new()\n    {\n        Name = \"my_compute_acl\",\n    });\n\n    var exampleComputeAclEntries = new Fastly.ComputeAclEntries(\"example\", new()\n    {\n        ComputeAclId = exampleComputeAcl.Id,\n        Entries = \n        {\n            { \"192.0.2.0/24\", \"ALLOW\" },\n            { \"198.51.100.0/24\", \"BLOCK\" },\n        },\n    });\n\n    var example = Fastly.GetPackageHash.Invoke(new()\n    {\n        Filename = \"package.tar.gz\",\n    });\n\n    var exampleServiceCompute = new Fastly.ServiceCompute(\"example\", new()\n    {\n        Name = \"my_compute_service\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceComputeDomainArgs\n            {\n                Name = \"demo.example.com\",\n            },\n        },\n        Package = new Fastly.Inputs.ServiceComputePackageArgs\n        {\n            Filename = \"package.tar.gz\",\n            SourceCodeHash = example.Apply(getPackageHashResult =\u003e getPackageHashResult.Hash),\n        },\n        ResourceLinks = new[]\n        {\n            new Fastly.Inputs.ServiceComputeResourceLinkArgs\n            {\n                Name = \"my_acl_link\",\n                ResourceId = exampleComputeAcl.Id,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n\t\t// This requires a two-step `pulumi up` as we can't guarantee deletion order.\n\t\texampleComputeAcl, err := fastly.NewComputeAcl(ctx, \"example\", \u0026fastly.ComputeAclArgs{\n\t\t\tName: pulumi.String(\"my_compute_acl\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewComputeAclEntries(ctx, \"example\", \u0026fastly.ComputeAclEntriesArgs{\n\t\t\tComputeAclId: exampleComputeAcl.ID(),\n\t\t\tEntries: pulumi.StringMap{\n\t\t\t\t\"192.0.2.0/24\":    pulumi.String(\"ALLOW\"),\n\t\t\t\t\"198.51.100.0/24\": pulumi.String(\"BLOCK\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := fastly.GetPackageHash(ctx, \u0026fastly.GetPackageHashArgs{\n\t\t\tFilename: pulumi.StringRef(\"package.tar.gz\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceCompute(ctx, \"example\", \u0026fastly.ServiceComputeArgs{\n\t\t\tName: pulumi.String(\"my_compute_service\"),\n\t\t\tDomains: fastly.ServiceComputeDomainArray{\n\t\t\t\t\u0026fastly.ServiceComputeDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"demo.example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackage: \u0026fastly.ServiceComputePackageArgs{\n\t\t\t\tFilename:       pulumi.String(\"package.tar.gz\"),\n\t\t\t\tSourceCodeHash: pulumi.String(example.Hash),\n\t\t\t},\n\t\t\tResourceLinks: fastly.ServiceComputeResourceLinkArray{\n\t\t\t\t\u0026fastly.ServiceComputeResourceLinkArgs{\n\t\t\t\t\tName:       pulumi.String(\"my_acl_link\"),\n\t\t\t\t\tResourceId: exampleComputeAcl.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ComputeAcl;\nimport com.pulumi.fastly.ComputeAclArgs;\nimport com.pulumi.fastly.ComputeAclEntries;\nimport com.pulumi.fastly.ComputeAclEntriesArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetPackageHashArgs;\nimport com.pulumi.fastly.ServiceCompute;\nimport com.pulumi.fastly.ServiceComputeArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceComputePackageArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeResourceLinkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n        // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n        var exampleComputeAcl = new ComputeAcl(\"exampleComputeAcl\", ComputeAclArgs.builder()\n            .name(\"my_compute_acl\")\n            .build());\n\n        var exampleComputeAclEntries = new ComputeAclEntries(\"exampleComputeAclEntries\", ComputeAclEntriesArgs.builder()\n            .computeAclId(exampleComputeAcl.id())\n            .entries(Map.ofEntries(\n                Map.entry(\"192.0.2.0/24\", \"ALLOW\"),\n                Map.entry(\"198.51.100.0/24\", \"BLOCK\")\n            ))\n            .build());\n\n        final var example = FastlyFunctions.getPackageHash(GetPackageHashArgs.builder()\n            .filename(\"package.tar.gz\")\n            .build());\n\n        var exampleServiceCompute = new ServiceCompute(\"exampleServiceCompute\", ServiceComputeArgs.builder()\n            .name(\"my_compute_service\")\n            .domains(ServiceComputeDomainArgs.builder()\n                .name(\"demo.example.com\")\n                .build())\n            .package_(ServiceComputePackageArgs.builder()\n                .filename(\"package.tar.gz\")\n                .sourceCodeHash(example.hash())\n                .build())\n            .resourceLinks(ServiceComputeResourceLinkArgs.builder()\n                .name(\"my_acl_link\")\n                .resourceId(exampleComputeAcl.id())\n                .build())\n            .forceDestroy(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n  # This requires a two-step `pulumi up` as we can't guarantee deletion order.\n  exampleComputeAcl:\n    type: fastly:ComputeAcl\n    name: example\n    properties:\n      name: my_compute_acl\n  exampleComputeAclEntries:\n    type: fastly:ComputeAclEntries\n    name: example\n    properties:\n      computeAclId: ${exampleComputeAcl.id}\n      entries:\n        192.0.2.0/24: ALLOW\n        198.51.100.0/24: BLOCK\n  exampleServiceCompute:\n    type: fastly:ServiceCompute\n    name: example\n    properties:\n      name: my_compute_service\n      domains:\n        - name: demo.example.com\n      package:\n        filename: package.tar.gz\n        sourceCodeHash: ${example.hash}\n      resourceLinks:\n        - name: my_acl_link\n          resourceId: ${exampleComputeAcl.id}\n      forceDestroy: true\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getPackageHash\n      arguments:\n        filename: package.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nTerraform-managed usage (where Terraform controls entries long-term):\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\n// IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n// This requires a two-step `pulumi up` as we can't guarantee deletion order.\nconst exampleComputeAcl = new fastly.ComputeAcl(\"example\", {name: \"my_compute_acl\"});\nconst exampleComputeAclEntries = new fastly.ComputeAclEntries(\"example\", {\n    computeAclId: exampleComputeAcl.id,\n    entries: {\n        \"203.0.113.0/24\": \"BLOCK\",\n        \"198.51.100.0/24\": \"ALLOW\",\n    },\n    manageEntries: true,\n});\nconst example = fastly.getPackageHash({\n    filename: \"package.tar.gz\",\n});\nconst exampleServiceCompute = new fastly.ServiceCompute(\"example\", {\n    name: \"my_compute_service\",\n    domains: [{\n        name: \"demo.example.com\",\n    }],\n    \"package\": {\n        filename: \"package.tar.gz\",\n        sourceCodeHash: example.then(example =\u003e example.hash),\n    },\n    resourceLinks: [{\n        name: \"my_acl_link\",\n        resourceId: exampleComputeAcl.id,\n    }],\n    forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\n# IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n# This requires a two-step `pulumi up` as we can't guarantee deletion order.\nexample_compute_acl = fastly.ComputeAcl(\"example\", name=\"my_compute_acl\")\nexample_compute_acl_entries = fastly.ComputeAclEntries(\"example\",\n    compute_acl_id=example_compute_acl.id,\n    entries={\n        \"203.0.113.0/24\": \"BLOCK\",\n        \"198.51.100.0/24\": \"ALLOW\",\n    },\n    manage_entries=True)\nexample = fastly.get_package_hash(filename=\"package.tar.gz\")\nexample_service_compute = fastly.ServiceCompute(\"example\",\n    name=\"my_compute_service\",\n    domains=[{\n        \"name\": \"demo.example.com\",\n    }],\n    package={\n        \"filename\": \"package.tar.gz\",\n        \"source_code_hash\": example.hash,\n    },\n    resource_links=[{\n        \"name\": \"my_acl_link\",\n        \"resource_id\": example_compute_acl.id,\n    }],\n    force_destroy=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n    // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n    var exampleComputeAcl = new Fastly.ComputeAcl(\"example\", new()\n    {\n        Name = \"my_compute_acl\",\n    });\n\n    var exampleComputeAclEntries = new Fastly.ComputeAclEntries(\"example\", new()\n    {\n        ComputeAclId = exampleComputeAcl.Id,\n        Entries = \n        {\n            { \"203.0.113.0/24\", \"BLOCK\" },\n            { \"198.51.100.0/24\", \"ALLOW\" },\n        },\n        ManageEntries = true,\n    });\n\n    var example = Fastly.GetPackageHash.Invoke(new()\n    {\n        Filename = \"package.tar.gz\",\n    });\n\n    var exampleServiceCompute = new Fastly.ServiceCompute(\"example\", new()\n    {\n        Name = \"my_compute_service\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceComputeDomainArgs\n            {\n                Name = \"demo.example.com\",\n            },\n        },\n        Package = new Fastly.Inputs.ServiceComputePackageArgs\n        {\n            Filename = \"package.tar.gz\",\n            SourceCodeHash = example.Apply(getPackageHashResult =\u003e getPackageHashResult.Hash),\n        },\n        ResourceLinks = new[]\n        {\n            new Fastly.Inputs.ServiceComputeResourceLinkArgs\n            {\n                Name = \"my_acl_link\",\n                ResourceId = exampleComputeAcl.Id,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n\t\t// This requires a two-step `pulumi up` as we can't guarantee deletion order.\n\t\texampleComputeAcl, err := fastly.NewComputeAcl(ctx, \"example\", \u0026fastly.ComputeAclArgs{\n\t\t\tName: pulumi.String(\"my_compute_acl\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewComputeAclEntries(ctx, \"example\", \u0026fastly.ComputeAclEntriesArgs{\n\t\t\tComputeAclId: exampleComputeAcl.ID(),\n\t\t\tEntries: pulumi.StringMap{\n\t\t\t\t\"203.0.113.0/24\":  pulumi.String(\"BLOCK\"),\n\t\t\t\t\"198.51.100.0/24\": pulumi.String(\"ALLOW\"),\n\t\t\t},\n\t\t\tManageEntries: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := fastly.GetPackageHash(ctx, \u0026fastly.GetPackageHashArgs{\n\t\t\tFilename: pulumi.StringRef(\"package.tar.gz\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceCompute(ctx, \"example\", \u0026fastly.ServiceComputeArgs{\n\t\t\tName: pulumi.String(\"my_compute_service\"),\n\t\t\tDomains: fastly.ServiceComputeDomainArray{\n\t\t\t\t\u0026fastly.ServiceComputeDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"demo.example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackage: \u0026fastly.ServiceComputePackageArgs{\n\t\t\t\tFilename:       pulumi.String(\"package.tar.gz\"),\n\t\t\t\tSourceCodeHash: pulumi.String(example.Hash),\n\t\t\t},\n\t\t\tResourceLinks: fastly.ServiceComputeResourceLinkArray{\n\t\t\t\t\u0026fastly.ServiceComputeResourceLinkArgs{\n\t\t\t\t\tName:       pulumi.String(\"my_acl_link\"),\n\t\t\t\t\tResourceId: exampleComputeAcl.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ComputeAcl;\nimport com.pulumi.fastly.ComputeAclArgs;\nimport com.pulumi.fastly.ComputeAclEntries;\nimport com.pulumi.fastly.ComputeAclEntriesArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetPackageHashArgs;\nimport com.pulumi.fastly.ServiceCompute;\nimport com.pulumi.fastly.ServiceComputeArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceComputePackageArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeResourceLinkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n        // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n        var exampleComputeAcl = new ComputeAcl(\"exampleComputeAcl\", ComputeAclArgs.builder()\n            .name(\"my_compute_acl\")\n            .build());\n\n        var exampleComputeAclEntries = new ComputeAclEntries(\"exampleComputeAclEntries\", ComputeAclEntriesArgs.builder()\n            .computeAclId(exampleComputeAcl.id())\n            .entries(Map.ofEntries(\n                Map.entry(\"203.0.113.0/24\", \"BLOCK\"),\n                Map.entry(\"198.51.100.0/24\", \"ALLOW\")\n            ))\n            .manageEntries(true)\n            .build());\n\n        final var example = FastlyFunctions.getPackageHash(GetPackageHashArgs.builder()\n            .filename(\"package.tar.gz\")\n            .build());\n\n        var exampleServiceCompute = new ServiceCompute(\"exampleServiceCompute\", ServiceComputeArgs.builder()\n            .name(\"my_compute_service\")\n            .domains(ServiceComputeDomainArgs.builder()\n                .name(\"demo.example.com\")\n                .build())\n            .package_(ServiceComputePackageArgs.builder()\n                .filename(\"package.tar.gz\")\n                .sourceCodeHash(example.hash())\n                .build())\n            .resourceLinks(ServiceComputeResourceLinkArgs.builder()\n                .name(\"my_acl_link\")\n                .resourceId(exampleComputeAcl.id())\n                .build())\n            .forceDestroy(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # IMPORTANT: Deleting a Compute ACL requires first deleting its resource_link.\n  # This requires a two-step `pulumi up` as we can't guarantee deletion order.\n  exampleComputeAcl:\n    type: fastly:ComputeAcl\n    name: example\n    properties:\n      name: my_compute_acl\n  exampleComputeAclEntries:\n    type: fastly:ComputeAclEntries\n    name: example\n    properties:\n      computeAclId: ${exampleComputeAcl.id}\n      entries:\n        203.0.113.0/24: BLOCK\n        198.51.100.0/24: ALLOW\n      manageEntries: true\n  exampleServiceCompute:\n    type: fastly:ServiceCompute\n    name: example\n    properties:\n      name: my_compute_service\n      domains:\n        - name: demo.example.com\n      package:\n        filename: package.tar.gz\n        sourceCodeHash: ${example.hash}\n      resourceLinks:\n        - name: my_acl_link\n          resourceId: ${exampleComputeAcl.id}\n      forceDestroy: true\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getPackageHash\n      arguments:\n        filename: package.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Compute ACL entries can be imported using the format `\u003ccompute_acl_id\u003e/entries`, e.g.\n\n```sh\n$ pulumi import fastly:index/computeAclEntries:ComputeAclEntries example \u003ccompute_acl_id\u003e/entries\n```\n\n","properties":{"computeAclId":{"type":"string","description":"Manages entries for a Fastly Compute Access Control List (ACL). To import, use the format \\n\\n/entries.\n"},"entries":{"type":"object","additionalProperties":{"type":"string"},"description":"A map representing the entries in the Compute ACL, where the keys are the prefixes and the values are the actions (ALLOW or BLOCK).\n"},"manageEntries":{"type":"boolean","description":"Manage the ACL entries in Terraform (default: false). If true, Terraform will ensure that the ACL's entries match the entries in the Terraform configuration.\n"}},"required":["computeAclId","entries"],"inputProperties":{"computeAclId":{"type":"string","description":"Manages entries for a Fastly Compute Access Control List (ACL). To import, use the format \\n\\n/entries.\n"},"entries":{"type":"object","additionalProperties":{"type":"string"},"description":"A map representing the entries in the Compute ACL, where the keys are the prefixes and the values are the actions (ALLOW or BLOCK).\n"},"manageEntries":{"type":"boolean","description":"Manage the ACL entries in Terraform (default: false). If true, Terraform will ensure that the ACL's entries match the entries in the Terraform configuration.\n"}},"requiredInputs":["computeAclId","entries"],"stateInputs":{"description":"Input properties used for looking up and filtering ComputeAclEntries resources.\n","properties":{"computeAclId":{"type":"string","description":"Manages entries for a Fastly Compute Access Control List (ACL). To import, use the format \\n\\n/entries.\n"},"entries":{"type":"object","additionalProperties":{"type":"string"},"description":"A map representing the entries in the Compute ACL, where the keys are the prefixes and the values are the actions (ALLOW or BLOCK).\n"},"manageEntries":{"type":"boolean","description":"Manage the ACL entries in Terraform (default: false). If true, Terraform will ensure that the ACL's entries match the entries in the Terraform configuration.\n"}},"type":"object"}},"fastly:index/configstore:Configstore":{"description":"Provides a container that lets you store data in key-value pairs that are accessible to Compute services during request processing.\n\nIn order for a Config Store (\u003cspan pulumi-lang-nodejs=\"`fastly.Configstore`\" pulumi-lang-dotnet=\"`fastly.Configstore`\" pulumi-lang-go=\"`Configstore`\" pulumi-lang-python=\"`Configstore`\" pulumi-lang-yaml=\"`fastly.Configstore`\" pulumi-lang-java=\"`fastly.Configstore`\"\u003e`fastly.Configstore`\u003c/span\u003e) to be accessible to a [Compute](https://developer.fastly.com/learning/compute/) service you'll first need to define a Compute service (\u003cspan pulumi-lang-nodejs=\"`fastly.ServiceCompute`\" pulumi-lang-dotnet=\"`fastly.ServiceCompute`\" pulumi-lang-go=\"`ServiceCompute`\" pulumi-lang-python=\"`ServiceCompute`\" pulumi-lang-yaml=\"`fastly.ServiceCompute`\" pulumi-lang-java=\"`fastly.ServiceCompute`\"\u003e`fastly.ServiceCompute`\u003c/span\u003e) in your configuration, and then create a link to the Config Store from within the service using the \u003cspan pulumi-lang-nodejs=\"`resourceLink`\" pulumi-lang-dotnet=\"`ResourceLink`\" pulumi-lang-go=\"`resourceLink`\" pulumi-lang-python=\"`resource_link`\" pulumi-lang-yaml=\"`resourceLink`\" pulumi-lang-java=\"`resourceLink`\"\u003e`resource_link`\u003c/span\u003e block (shown in the below examples).\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\n// IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n// This requires a two-step `pulumi up` as we can't guarantee deletion order.\n// e.g. resource_link deletion within fastly_service_compute might not finish first.\nconst exampleConfigstore = new fastly.Configstore(\"example\", {name: \"my_config_store\"});\nconst example = fastly.getPackageHash({\n    filename: \"package.tar.gz\",\n});\nconst exampleServiceCompute = new fastly.ServiceCompute(\"example\", {\n    name: \"my_compute_service\",\n    domains: [{\n        name: \"demo.example.com\",\n    }],\n    \"package\": {\n        filename: \"package.tar.gz\",\n        sourceCodeHash: example.then(example =\u003e example.hash),\n    },\n    resourceLinks: [{\n        name: \"my_resource_link\",\n        resourceId: exampleConfigstore.id,\n    }],\n    forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\n# IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n# This requires a two-step `pulumi up` as we can't guarantee deletion order.\n# e.g. resource_link deletion within fastly_service_compute might not finish first.\nexample_configstore = fastly.Configstore(\"example\", name=\"my_config_store\")\nexample = fastly.get_package_hash(filename=\"package.tar.gz\")\nexample_service_compute = fastly.ServiceCompute(\"example\",\n    name=\"my_compute_service\",\n    domains=[{\n        \"name\": \"demo.example.com\",\n    }],\n    package={\n        \"filename\": \"package.tar.gz\",\n        \"source_code_hash\": example.hash,\n    },\n    resource_links=[{\n        \"name\": \"my_resource_link\",\n        \"resource_id\": example_configstore.id,\n    }],\n    force_destroy=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n    // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n    // e.g. resource_link deletion within fastly_service_compute might not finish first.\n    var exampleConfigstore = new Fastly.Configstore(\"example\", new()\n    {\n        Name = \"my_config_store\",\n    });\n\n    var example = Fastly.GetPackageHash.Invoke(new()\n    {\n        Filename = \"package.tar.gz\",\n    });\n\n    var exampleServiceCompute = new Fastly.ServiceCompute(\"example\", new()\n    {\n        Name = \"my_compute_service\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceComputeDomainArgs\n            {\n                Name = \"demo.example.com\",\n            },\n        },\n        Package = new Fastly.Inputs.ServiceComputePackageArgs\n        {\n            Filename = \"package.tar.gz\",\n            SourceCodeHash = example.Apply(getPackageHashResult =\u003e getPackageHashResult.Hash),\n        },\n        ResourceLinks = new[]\n        {\n            new Fastly.Inputs.ServiceComputeResourceLinkArgs\n            {\n                Name = \"my_resource_link\",\n                ResourceId = exampleConfigstore.Id,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n\t\t// This requires a two-step `pulumi up` as we can't guarantee deletion order.\n\t\t// e.g. resource_link deletion within fastly_service_compute might not finish first.\n\t\texampleConfigstore, err := fastly.NewConfigstore(ctx, \"example\", \u0026fastly.ConfigstoreArgs{\n\t\t\tName: pulumi.String(\"my_config_store\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := fastly.GetPackageHash(ctx, \u0026fastly.GetPackageHashArgs{\n\t\t\tFilename: pulumi.StringRef(\"package.tar.gz\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceCompute(ctx, \"example\", \u0026fastly.ServiceComputeArgs{\n\t\t\tName: pulumi.String(\"my_compute_service\"),\n\t\t\tDomains: fastly.ServiceComputeDomainArray{\n\t\t\t\t\u0026fastly.ServiceComputeDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"demo.example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackage: \u0026fastly.ServiceComputePackageArgs{\n\t\t\t\tFilename:       pulumi.String(\"package.tar.gz\"),\n\t\t\t\tSourceCodeHash: pulumi.String(example.Hash),\n\t\t\t},\n\t\t\tResourceLinks: fastly.ServiceComputeResourceLinkArray{\n\t\t\t\t\u0026fastly.ServiceComputeResourceLinkArgs{\n\t\t\t\t\tName:       pulumi.String(\"my_resource_link\"),\n\t\t\t\t\tResourceId: exampleConfigstore.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.Configstore;\nimport com.pulumi.fastly.ConfigstoreArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetPackageHashArgs;\nimport com.pulumi.fastly.ServiceCompute;\nimport com.pulumi.fastly.ServiceComputeArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceComputePackageArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeResourceLinkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n        // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n        // e.g. resource_link deletion within fastly_service_compute might not finish first.\n        var exampleConfigstore = new Configstore(\"exampleConfigstore\", ConfigstoreArgs.builder()\n            .name(\"my_config_store\")\n            .build());\n\n        final var example = FastlyFunctions.getPackageHash(GetPackageHashArgs.builder()\n            .filename(\"package.tar.gz\")\n            .build());\n\n        var exampleServiceCompute = new ServiceCompute(\"exampleServiceCompute\", ServiceComputeArgs.builder()\n            .name(\"my_compute_service\")\n            .domains(ServiceComputeDomainArgs.builder()\n                .name(\"demo.example.com\")\n                .build())\n            .package_(ServiceComputePackageArgs.builder()\n                .filename(\"package.tar.gz\")\n                .sourceCodeHash(example.hash())\n                .build())\n            .resourceLinks(ServiceComputeResourceLinkArgs.builder()\n                .name(\"my_resource_link\")\n                .resourceId(exampleConfigstore.id())\n                .build())\n            .forceDestroy(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n  # This requires a two-step `pulumi up` as we can't guarantee deletion order.\n  # e.g. resource_link deletion within fastly_service_compute might not finish first.\n  exampleConfigstore:\n    type: fastly:Configstore\n    name: example\n    properties:\n      name: my_config_store\n  exampleServiceCompute:\n    type: fastly:ServiceCompute\n    name: example\n    properties:\n      name: my_compute_service\n      domains:\n        - name: demo.example.com\n      package:\n        filename: package.tar.gz\n        sourceCodeHash: ${example.hash}\n      resourceLinks:\n        - name: my_resource_link\n          resourceId: ${exampleConfigstore.id}\n      forceDestroy: true\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getPackageHash\n      arguments:\n        filename: package.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Config Stores can be imported using their Store ID, e.g.\n\n```sh\n$ pulumi import fastly:index/configstore:Configstore example xxxxxxxxxxxxxxxxxxxx\n```\n\n","properties":{"forceDestroy":{"type":"boolean","description":"Allow the Config Store to be deleted, even if it contains entries. Defaults to false.\n"},"name":{"type":"string","description":"A unique name to identify the Config Store. It is important to note that changing this attribute will delete and recreate the Config Store, and discard the current entries. You MUST first delete the associated\u003cspan pulumi-lang-nodejs=\" resourceLink \" pulumi-lang-dotnet=\" ResourceLink \" pulumi-lang-go=\" resourceLink \" pulumi-lang-python=\" resource_link \" pulumi-lang-yaml=\" resourceLink \" pulumi-lang-java=\" resourceLink \"\u003e resource_link \u003c/span\u003eblock from your service before modifying this field.\n"}},"required":["name"],"inputProperties":{"forceDestroy":{"type":"boolean","description":"Allow the Config Store to be deleted, even if it contains entries. Defaults to false.\n"},"name":{"type":"string","description":"A unique name to identify the Config Store. It is important to note that changing this attribute will delete and recreate the Config Store, and discard the current entries. You MUST first delete the associated\u003cspan pulumi-lang-nodejs=\" resourceLink \" pulumi-lang-dotnet=\" ResourceLink \" pulumi-lang-go=\" resourceLink \" pulumi-lang-python=\" resource_link \" pulumi-lang-yaml=\" resourceLink \" pulumi-lang-java=\" resourceLink \"\u003e resource_link \u003c/span\u003eblock from your service before modifying this field.\n","willReplaceOnChanges":true}},"stateInputs":{"description":"Input properties used for looking up and filtering Configstore resources.\n","properties":{"forceDestroy":{"type":"boolean","description":"Allow the Config Store to be deleted, even if it contains entries. Defaults to false.\n"},"name":{"type":"string","description":"A unique name to identify the Config Store. It is important to note that changing this attribute will delete and recreate the Config Store, and discard the current entries. You MUST first delete the associated\u003cspan pulumi-lang-nodejs=\" resourceLink \" pulumi-lang-dotnet=\" ResourceLink \" pulumi-lang-go=\" resourceLink \" pulumi-lang-python=\" resource_link \" pulumi-lang-yaml=\" resourceLink \" pulumi-lang-java=\" resourceLink \"\u003e resource_link \u003c/span\u003eblock from your service before modifying this field.\n","willReplaceOnChanges":true}},"type":"object"}},"fastly:index/configstoreEntries:ConfigstoreEntries":{"description":"The Config Store (\u003cspan pulumi-lang-nodejs=\"`fastly.Configstore`\" pulumi-lang-dotnet=\"`fastly.Configstore`\" pulumi-lang-go=\"`Configstore`\" pulumi-lang-python=\"`Configstore`\" pulumi-lang-yaml=\"`fastly.Configstore`\" pulumi-lang-java=\"`fastly.Configstore`\"\u003e`fastly.Configstore`\u003c/span\u003e) can be seeded with initial key-value pairs using the \u003cspan pulumi-lang-nodejs=\"`fastly.ConfigstoreEntries`\" pulumi-lang-dotnet=\"`fastly.ConfigstoreEntries`\" pulumi-lang-go=\"`ConfigstoreEntries`\" pulumi-lang-python=\"`ConfigstoreEntries`\" pulumi-lang-yaml=\"`fastly.ConfigstoreEntries`\" pulumi-lang-java=\"`fastly.ConfigstoreEntries`\"\u003e`fastly.ConfigstoreEntries`\u003c/span\u003e resource.\n\nAfter the first `pulumi up` the default behaviour is to ignore any further configuration changes to those key-value pairs. Terraform will expect modifications to happen outside of Terraform (e.g. new key-value pairs to be managed using the [Fastly API](https://developer.fastly.com/reference/api/) or [Fastly CLI](https://developer.fastly.com/learning/tools/cli/)).\n\nTo change the default behaviour (so Terraform continues to manage the key-value pairs within the configuration) set \u003cspan pulumi-lang-nodejs=\"`manageEntries \" pulumi-lang-dotnet=\"`ManageEntries \" pulumi-lang-go=\"`manageEntries \" pulumi-lang-python=\"`manage_entries \" pulumi-lang-yaml=\"`manageEntries \" pulumi-lang-java=\"`manageEntries \"\u003e`manage_entries \u003c/span\u003e= true`.\n\n\u003e **Note:** Terraform should not be used to store large amounts of data, so it's recommended you leave the default behaviour in place and only seed the store with a small amount of key-value pairs. For more information see \"Configuration not data\".\n\n## Example Usage\n\nBasic usage (with seeded values):\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\n// IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n// This requires a two-step `pulumi up` as we can't guarantee deletion order.\n// e.g. resource_link deletion within fastly_service_compute might not finish first.\nconst exampleConfigstore = new fastly.Configstore(\"example\", {name: \"%s\"});\nconst exampleConfigstoreEntries = new fastly.ConfigstoreEntries(\"example\", {\n    storeId: exampleConfigstore.id,\n    entries: {\n        key1: \"value1\",\n        key2: \"value2\",\n    },\n});\nconst example = fastly.getPackageHash({\n    filename: \"package.tar.gz\",\n});\nconst exampleServiceCompute = new fastly.ServiceCompute(\"example\", {\n    name: \"my_compute_service\",\n    domains: [{\n        name: \"demo.example.com\",\n    }],\n    \"package\": {\n        filename: \"package.tar.gz\",\n        sourceCodeHash: example.then(example =\u003e example.hash),\n    },\n    resourceLinks: [{\n        name: \"my_resource_link\",\n        resourceId: exampleConfigstore.id,\n    }],\n    forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\n# IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n# This requires a two-step `pulumi up` as we can't guarantee deletion order.\n# e.g. resource_link deletion within fastly_service_compute might not finish first.\nexample_configstore = fastly.Configstore(\"example\", name=\"%s\")\nexample_configstore_entries = fastly.ConfigstoreEntries(\"example\",\n    store_id=example_configstore.id,\n    entries={\n        \"key1\": \"value1\",\n        \"key2\": \"value2\",\n    })\nexample = fastly.get_package_hash(filename=\"package.tar.gz\")\nexample_service_compute = fastly.ServiceCompute(\"example\",\n    name=\"my_compute_service\",\n    domains=[{\n        \"name\": \"demo.example.com\",\n    }],\n    package={\n        \"filename\": \"package.tar.gz\",\n        \"source_code_hash\": example.hash,\n    },\n    resource_links=[{\n        \"name\": \"my_resource_link\",\n        \"resource_id\": example_configstore.id,\n    }],\n    force_destroy=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n    // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n    // e.g. resource_link deletion within fastly_service_compute might not finish first.\n    var exampleConfigstore = new Fastly.Configstore(\"example\", new()\n    {\n        Name = \"%s\",\n    });\n\n    var exampleConfigstoreEntries = new Fastly.ConfigstoreEntries(\"example\", new()\n    {\n        StoreId = exampleConfigstore.Id,\n        Entries = \n        {\n            { \"key1\", \"value1\" },\n            { \"key2\", \"value2\" },\n        },\n    });\n\n    var example = Fastly.GetPackageHash.Invoke(new()\n    {\n        Filename = \"package.tar.gz\",\n    });\n\n    var exampleServiceCompute = new Fastly.ServiceCompute(\"example\", new()\n    {\n        Name = \"my_compute_service\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceComputeDomainArgs\n            {\n                Name = \"demo.example.com\",\n            },\n        },\n        Package = new Fastly.Inputs.ServiceComputePackageArgs\n        {\n            Filename = \"package.tar.gz\",\n            SourceCodeHash = example.Apply(getPackageHashResult =\u003e getPackageHashResult.Hash),\n        },\n        ResourceLinks = new[]\n        {\n            new Fastly.Inputs.ServiceComputeResourceLinkArgs\n            {\n                Name = \"my_resource_link\",\n                ResourceId = exampleConfigstore.Id,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n\t\t// This requires a two-step `pulumi up` as we can't guarantee deletion order.\n\t\t// e.g. resource_link deletion within fastly_service_compute might not finish first.\n\t\texampleConfigstore, err := fastly.NewConfigstore(ctx, \"example\", \u0026fastly.ConfigstoreArgs{\n\t\t\tName: pulumi.String(\"%s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewConfigstoreEntries(ctx, \"example\", \u0026fastly.ConfigstoreEntriesArgs{\n\t\t\tStoreId: exampleConfigstore.ID(),\n\t\t\tEntries: pulumi.StringMap{\n\t\t\t\t\"key1\": pulumi.String(\"value1\"),\n\t\t\t\t\"key2\": pulumi.String(\"value2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := fastly.GetPackageHash(ctx, \u0026fastly.GetPackageHashArgs{\n\t\t\tFilename: pulumi.StringRef(\"package.tar.gz\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceCompute(ctx, \"example\", \u0026fastly.ServiceComputeArgs{\n\t\t\tName: pulumi.String(\"my_compute_service\"),\n\t\t\tDomains: fastly.ServiceComputeDomainArray{\n\t\t\t\t\u0026fastly.ServiceComputeDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"demo.example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackage: \u0026fastly.ServiceComputePackageArgs{\n\t\t\t\tFilename:       pulumi.String(\"package.tar.gz\"),\n\t\t\t\tSourceCodeHash: pulumi.String(example.Hash),\n\t\t\t},\n\t\t\tResourceLinks: fastly.ServiceComputeResourceLinkArray{\n\t\t\t\t\u0026fastly.ServiceComputeResourceLinkArgs{\n\t\t\t\t\tName:       pulumi.String(\"my_resource_link\"),\n\t\t\t\t\tResourceId: exampleConfigstore.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.Configstore;\nimport com.pulumi.fastly.ConfigstoreArgs;\nimport com.pulumi.fastly.ConfigstoreEntries;\nimport com.pulumi.fastly.ConfigstoreEntriesArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetPackageHashArgs;\nimport com.pulumi.fastly.ServiceCompute;\nimport com.pulumi.fastly.ServiceComputeArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceComputePackageArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeResourceLinkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n        // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n        // e.g. resource_link deletion within fastly_service_compute might not finish first.\n        var exampleConfigstore = new Configstore(\"exampleConfigstore\", ConfigstoreArgs.builder()\n            .name(\"%s\")\n            .build());\n\n        var exampleConfigstoreEntries = new ConfigstoreEntries(\"exampleConfigstoreEntries\", ConfigstoreEntriesArgs.builder()\n            .storeId(exampleConfigstore.id())\n            .entries(Map.ofEntries(\n                Map.entry(\"key1\", \"value1\"),\n                Map.entry(\"key2\", \"value2\")\n            ))\n            .build());\n\n        final var example = FastlyFunctions.getPackageHash(GetPackageHashArgs.builder()\n            .filename(\"package.tar.gz\")\n            .build());\n\n        var exampleServiceCompute = new ServiceCompute(\"exampleServiceCompute\", ServiceComputeArgs.builder()\n            .name(\"my_compute_service\")\n            .domains(ServiceComputeDomainArgs.builder()\n                .name(\"demo.example.com\")\n                .build())\n            .package_(ServiceComputePackageArgs.builder()\n                .filename(\"package.tar.gz\")\n                .sourceCodeHash(example.hash())\n                .build())\n            .resourceLinks(ServiceComputeResourceLinkArgs.builder()\n                .name(\"my_resource_link\")\n                .resourceId(exampleConfigstore.id())\n                .build())\n            .forceDestroy(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n  # This requires a two-step `pulumi up` as we can't guarantee deletion order.\n  # e.g. resource_link deletion within fastly_service_compute might not finish first.\n  exampleConfigstore:\n    type: fastly:Configstore\n    name: example\n    properties:\n      name: '%s'\n  exampleConfigstoreEntries:\n    type: fastly:ConfigstoreEntries\n    name: example\n    properties:\n      storeId: ${exampleConfigstore.id}\n      entries:\n        key1: value1\n        key2: value2\n  exampleServiceCompute:\n    type: fastly:ServiceCompute\n    name: example\n    properties:\n      name: my_compute_service\n      domains:\n        - name: demo.example.com\n      package:\n        filename: package.tar.gz\n        sourceCodeHash: ${example.hash}\n      resourceLinks:\n        - name: my_resource_link\n          resourceId: ${exampleConfigstore.id}\n      forceDestroy: true\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getPackageHash\n      arguments:\n        filename: package.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nTo have Terraform manage the initially seeded key-value pairs defined in your configuration, then you must set \u003cspan pulumi-lang-nodejs=\"`manageEntries \" pulumi-lang-dotnet=\"`ManageEntries \" pulumi-lang-go=\"`manageEntries \" pulumi-lang-python=\"`manage_entries \" pulumi-lang-yaml=\"`manageEntries \" pulumi-lang-java=\"`manageEntries \"\u003e`manage_entries \u003c/span\u003e= true` (this will cause any key-value pairs added outside of Terraform to be deleted):\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\n// IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n// This requires a two-step `pulumi up` as we can't guarantee deletion order.\n// e.g. resource_link deletion within fastly_service_compute might not finish first.\nconst exampleConfigstore = new fastly.Configstore(\"example\", {name: \"%s\"});\nconst exampleConfigstoreEntries = new fastly.ConfigstoreEntries(\"example\", {\n    storeId: exampleConfigstore.id,\n    entries: {\n        key1: \"value1\",\n        key2: \"value2\",\n    },\n    manageEntries: true,\n});\nconst example = fastly.getPackageHash({\n    filename: \"package.tar.gz\",\n});\nconst exampleServiceCompute = new fastly.ServiceCompute(\"example\", {\n    name: \"my_compute_service\",\n    domains: [{\n        name: \"demo.example.com\",\n    }],\n    \"package\": {\n        filename: \"package.tar.gz\",\n        sourceCodeHash: example.then(example =\u003e example.hash),\n    },\n    resourceLinks: [{\n        name: \"my_resource_link\",\n        resourceId: exampleConfigstore.id,\n    }],\n    forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\n# IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n# This requires a two-step `pulumi up` as we can't guarantee deletion order.\n# e.g. resource_link deletion within fastly_service_compute might not finish first.\nexample_configstore = fastly.Configstore(\"example\", name=\"%s\")\nexample_configstore_entries = fastly.ConfigstoreEntries(\"example\",\n    store_id=example_configstore.id,\n    entries={\n        \"key1\": \"value1\",\n        \"key2\": \"value2\",\n    },\n    manage_entries=True)\nexample = fastly.get_package_hash(filename=\"package.tar.gz\")\nexample_service_compute = fastly.ServiceCompute(\"example\",\n    name=\"my_compute_service\",\n    domains=[{\n        \"name\": \"demo.example.com\",\n    }],\n    package={\n        \"filename\": \"package.tar.gz\",\n        \"source_code_hash\": example.hash,\n    },\n    resource_links=[{\n        \"name\": \"my_resource_link\",\n        \"resource_id\": example_configstore.id,\n    }],\n    force_destroy=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n    // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n    // e.g. resource_link deletion within fastly_service_compute might not finish first.\n    var exampleConfigstore = new Fastly.Configstore(\"example\", new()\n    {\n        Name = \"%s\",\n    });\n\n    var exampleConfigstoreEntries = new Fastly.ConfigstoreEntries(\"example\", new()\n    {\n        StoreId = exampleConfigstore.Id,\n        Entries = \n        {\n            { \"key1\", \"value1\" },\n            { \"key2\", \"value2\" },\n        },\n        ManageEntries = true,\n    });\n\n    var example = Fastly.GetPackageHash.Invoke(new()\n    {\n        Filename = \"package.tar.gz\",\n    });\n\n    var exampleServiceCompute = new Fastly.ServiceCompute(\"example\", new()\n    {\n        Name = \"my_compute_service\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceComputeDomainArgs\n            {\n                Name = \"demo.example.com\",\n            },\n        },\n        Package = new Fastly.Inputs.ServiceComputePackageArgs\n        {\n            Filename = \"package.tar.gz\",\n            SourceCodeHash = example.Apply(getPackageHashResult =\u003e getPackageHashResult.Hash),\n        },\n        ResourceLinks = new[]\n        {\n            new Fastly.Inputs.ServiceComputeResourceLinkArgs\n            {\n                Name = \"my_resource_link\",\n                ResourceId = exampleConfigstore.Id,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n\t\t// This requires a two-step `pulumi up` as we can't guarantee deletion order.\n\t\t// e.g. resource_link deletion within fastly_service_compute might not finish first.\n\t\texampleConfigstore, err := fastly.NewConfigstore(ctx, \"example\", \u0026fastly.ConfigstoreArgs{\n\t\t\tName: pulumi.String(\"%s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewConfigstoreEntries(ctx, \"example\", \u0026fastly.ConfigstoreEntriesArgs{\n\t\t\tStoreId: exampleConfigstore.ID(),\n\t\t\tEntries: pulumi.StringMap{\n\t\t\t\t\"key1\": pulumi.String(\"value1\"),\n\t\t\t\t\"key2\": pulumi.String(\"value2\"),\n\t\t\t},\n\t\t\tManageEntries: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := fastly.GetPackageHash(ctx, \u0026fastly.GetPackageHashArgs{\n\t\t\tFilename: pulumi.StringRef(\"package.tar.gz\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceCompute(ctx, \"example\", \u0026fastly.ServiceComputeArgs{\n\t\t\tName: pulumi.String(\"my_compute_service\"),\n\t\t\tDomains: fastly.ServiceComputeDomainArray{\n\t\t\t\t\u0026fastly.ServiceComputeDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"demo.example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackage: \u0026fastly.ServiceComputePackageArgs{\n\t\t\t\tFilename:       pulumi.String(\"package.tar.gz\"),\n\t\t\t\tSourceCodeHash: pulumi.String(example.Hash),\n\t\t\t},\n\t\t\tResourceLinks: fastly.ServiceComputeResourceLinkArray{\n\t\t\t\t\u0026fastly.ServiceComputeResourceLinkArgs{\n\t\t\t\t\tName:       pulumi.String(\"my_resource_link\"),\n\t\t\t\t\tResourceId: exampleConfigstore.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.Configstore;\nimport com.pulumi.fastly.ConfigstoreArgs;\nimport com.pulumi.fastly.ConfigstoreEntries;\nimport com.pulumi.fastly.ConfigstoreEntriesArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetPackageHashArgs;\nimport com.pulumi.fastly.ServiceCompute;\nimport com.pulumi.fastly.ServiceComputeArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceComputePackageArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeResourceLinkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n        // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n        // e.g. resource_link deletion within fastly_service_compute might not finish first.\n        var exampleConfigstore = new Configstore(\"exampleConfigstore\", ConfigstoreArgs.builder()\n            .name(\"%s\")\n            .build());\n\n        var exampleConfigstoreEntries = new ConfigstoreEntries(\"exampleConfigstoreEntries\", ConfigstoreEntriesArgs.builder()\n            .storeId(exampleConfigstore.id())\n            .entries(Map.ofEntries(\n                Map.entry(\"key1\", \"value1\"),\n                Map.entry(\"key2\", \"value2\")\n            ))\n            .manageEntries(true)\n            .build());\n\n        final var example = FastlyFunctions.getPackageHash(GetPackageHashArgs.builder()\n            .filename(\"package.tar.gz\")\n            .build());\n\n        var exampleServiceCompute = new ServiceCompute(\"exampleServiceCompute\", ServiceComputeArgs.builder()\n            .name(\"my_compute_service\")\n            .domains(ServiceComputeDomainArgs.builder()\n                .name(\"demo.example.com\")\n                .build())\n            .package_(ServiceComputePackageArgs.builder()\n                .filename(\"package.tar.gz\")\n                .sourceCodeHash(example.hash())\n                .build())\n            .resourceLinks(ServiceComputeResourceLinkArgs.builder()\n                .name(\"my_resource_link\")\n                .resourceId(exampleConfigstore.id())\n                .build())\n            .forceDestroy(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # IMPORTANT: Deleting a Config Store requires first deleting its resource_link.\n  # This requires a two-step `pulumi up` as we can't guarantee deletion order.\n  # e.g. resource_link deletion within fastly_service_compute might not finish first.\n  exampleConfigstore:\n    type: fastly:Configstore\n    name: example\n    properties:\n      name: '%s'\n  exampleConfigstoreEntries:\n    type: fastly:ConfigstoreEntries\n    name: example\n    properties:\n      storeId: ${exampleConfigstore.id}\n      entries:\n        key1: value1\n        key2: value2\n      manageEntries: true\n  exampleServiceCompute:\n    type: fastly:ServiceCompute\n    name: example\n    properties:\n      name: my_compute_service\n      domains:\n        - name: demo.example.com\n      package:\n        filename: package.tar.gz\n        sourceCodeHash: ${example.hash}\n      resourceLinks:\n        - name: my_resource_link\n          resourceId: ${exampleConfigstore.id}\n      forceDestroy: true\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getPackageHash\n      arguments:\n        filename: package.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Config Stores entries can be imported using the corresponding Config Store ID with the `/entries` suffix, e.g.\n\n```sh\n$ pulumi import fastly:index/configstoreEntries:ConfigstoreEntries example xxxxxxxxxxxxxxxxxxxx/entries\n```\n\n","properties":{"entries":{"type":"object","additionalProperties":{"type":"string"},"description":"A map representing an entry in the Config Store, (key/value)\n"},"manageEntries":{"type":"boolean","description":"Have Terraform manage the entries (default: false). If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e Terraform will remove any entries that were added externally from the config seeded values.\n"},"storeId":{"type":"string","description":"An alphanumeric string identifying the Config Store.\n"}},"required":["entries","storeId"],"inputProperties":{"entries":{"type":"object","additionalProperties":{"type":"string"},"description":"A map representing an entry in the Config Store, (key/value)\n"},"manageEntries":{"type":"boolean","description":"Have Terraform manage the entries (default: false). If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e Terraform will remove any entries that were added externally from the config seeded values.\n"},"storeId":{"type":"string","description":"An alphanumeric string identifying the Config Store.\n"}},"requiredInputs":["entries","storeId"],"stateInputs":{"description":"Input properties used for looking up and filtering ConfigstoreEntries resources.\n","properties":{"entries":{"type":"object","additionalProperties":{"type":"string"},"description":"A map representing an entry in the Config Store, (key/value)\n"},"manageEntries":{"type":"boolean","description":"Have Terraform manage the entries (default: false). If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e Terraform will remove any entries that were added externally from the config seeded values.\n"},"storeId":{"type":"string","description":"An alphanumeric string identifying the Config Store.\n"}},"type":"object"}},"fastly:index/customDashboard:CustomDashboard":{"description":"Provides a Custom Dashboard which can be viewed in the Fastly Control Panel.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.CustomDashboard(\"example\", {\n    name: \"Example Custom Dashboard\",\n    description: \"This is an example custom dashboard. A few dashboard items are provided to help you get started.\",\n    dashboardItems: [\n        {\n            id: \"example1\",\n            title: \"Total Requests\",\n            subtitle: \"Number of requests processed.\",\n            dataSource: {\n                type: \"stats.edge\",\n                config: {\n                    metrics: [\"requests\"],\n                },\n            },\n            visualization: {\n                type: \"chart\",\n                config: {\n                    format: \"requests\",\n                    plotType: \"line\",\n                },\n            },\n        },\n        {\n            id: \"example2\",\n            title: \"Hit Ratio\",\n            subtitle: \"Ratio of requests served from Fastly.\",\n            dataSource: {\n                type: \"stats.edge\",\n                config: {\n                    metrics: [\"hit_ratio\"],\n                },\n            },\n            visualization: {\n                type: \"chart\",\n                config: {\n                    format: \"percent\",\n                    plotType: \"donut\",\n                    calculationMethod: \"latest\",\n                },\n            },\n        },\n        {\n            id: \"example3\",\n            title: \"Client \u0026 Server Errors\",\n            subtitle: \"Total errors served from the client or server.\",\n            dataSource: {\n                type: \"stats.edge\",\n                config: {\n                    metrics: [\n                        \"status_4xx\",\n                        \"status_5xx\",\n                    ],\n                },\n            },\n            visualization: {\n                type: \"chart\",\n                config: {\n                    format: \"requests\",\n                    plotType: \"bar\",\n                },\n            },\n        },\n        {\n            id: \"example4\",\n            title: \"Domain Requests\",\n            subtitle: \"Requests by Domain.\",\n            span: 6,\n            dataSource: {\n                type: \"stats.domain\",\n                config: {\n                    metrics: [\"requests\"],\n                },\n            },\n            visualization: {\n                type: \"chart\",\n                config: {\n                    format: \"requests\",\n                    plotType: \"line\",\n                },\n            },\n        },\n        {\n            id: \"example5\",\n            title: \"Origin Responses\",\n            subtitle: \"Responses by Origin.\",\n            span: 6,\n            dataSource: {\n                type: \"stats.origin\",\n                config: {\n                    metrics: [\"all_responses\"],\n                },\n            },\n            visualization: {\n                type: \"chart\",\n                config: {\n                    plotType: \"line\",\n                },\n            },\n        },\n        {\n            id: \"example6\",\n            title: \"Total Bandwidth\",\n            subtitle: \"Total bandwidth served.\",\n            span: 12,\n            dataSource: {\n                type: \"stats.edge\",\n                config: {\n                    metrics: [\"bandwidth\"],\n                },\n            },\n            visualization: {\n                type: \"chart\",\n                config: {\n                    format: \"bytes\",\n                    plotType: \"bar\",\n                },\n            },\n        },\n        {\n            id: \"example7\",\n            title: \"Products - Image Optimizer \u0026 Real-Time Log Streaming\",\n            subtitle: \"Total IO images served and log statements sent.\",\n            span: 8,\n            dataSource: {\n                type: \"stats.edge\",\n                config: {\n                    metrics: [\n                        \"imgopto\",\n                        \"log\",\n                    ],\n                },\n            },\n            visualization: {\n                type: \"chart\",\n                config: {\n                    plotType: \"line\",\n                },\n            },\n        },\n        {\n            id: \"example8\",\n            title: \"Transport Protocols \u0026 Security\",\n            subtitle: \"HTTP Protocols \u0026 TLS.\",\n            dataSource: {\n                type: \"stats.edge\",\n                config: {\n                    metrics: [\n                        \"http1\",\n                        \"http2\",\n                        \"http3\",\n                        \"tls_v10\",\n                        \"tls_v11\",\n                        \"tls_v12\",\n                        \"tls_v13\",\n                    ],\n                },\n            },\n            visualization: {\n                type: \"chart\",\n                config: {\n                    format: \"requests\",\n                    plotType: \"line\",\n                },\n            },\n        },\n        {\n            id: \"example9\",\n            title: \"Origin Miss Latency\",\n            subtitle: \"Miss latency times for your origins.\",\n            span: 12,\n            dataSource: {\n                type: \"stats.edge\",\n                config: {\n                    metrics: [\"origin_latency\"],\n                },\n            },\n            visualization: {\n                type: \"chart\",\n                config: {\n                    format: \"milliseconds\",\n                    plotType: \"line\",\n                },\n            },\n        },\n        {\n            id: \"example10\",\n            title: \"DDoS - Request Flood Attempts\",\n            subtitle: \"Number of connections the limit-streams action was applied.\",\n            span: 6,\n            dataSource: {\n                type: \"stats.edge\",\n                config: {\n                    metrics: [\n                        \"ddos_action_limit_streams_connections\",\n                        \"ddos_action_limit_streams_requests\",\n                    ],\n                },\n            },\n            visualization: {\n                type: \"chart\",\n                config: {\n                    format: \"requests\",\n                    plotType: \"line\",\n                },\n            },\n        },\n        {\n            id: \"example11\",\n            title: \"DDoS - Malicious Bot Attack\",\n            subtitle: \"Number of times the blackhole action was taken.\",\n            span: 6,\n            dataSource: {\n                type: \"stats.edge\",\n                config: {\n                    metrics: [\n                        \"ddos_action_close\",\n                        \"ddos_action_blackhole\",\n                    ],\n                },\n            },\n            visualization: {\n                type: \"chart\",\n                config: {\n                    format: \"number\",\n                    plotType: \"line\",\n                },\n            },\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.CustomDashboard(\"example\",\n    name=\"Example Custom Dashboard\",\n    description=\"This is an example custom dashboard. A few dashboard items are provided to help you get started.\",\n    dashboard_items=[\n        {\n            \"id\": \"example1\",\n            \"title\": \"Total Requests\",\n            \"subtitle\": \"Number of requests processed.\",\n            \"data_source\": {\n                \"type\": \"stats.edge\",\n                \"config\": {\n                    \"metrics\": [\"requests\"],\n                },\n            },\n            \"visualization\": {\n                \"type\": \"chart\",\n                \"config\": {\n                    \"format\": \"requests\",\n                    \"plot_type\": \"line\",\n                },\n            },\n        },\n        {\n            \"id\": \"example2\",\n            \"title\": \"Hit Ratio\",\n            \"subtitle\": \"Ratio of requests served from Fastly.\",\n            \"data_source\": {\n                \"type\": \"stats.edge\",\n                \"config\": {\n                    \"metrics\": [\"hit_ratio\"],\n                },\n            },\n            \"visualization\": {\n                \"type\": \"chart\",\n                \"config\": {\n                    \"format\": \"percent\",\n                    \"plot_type\": \"donut\",\n                    \"calculation_method\": \"latest\",\n                },\n            },\n        },\n        {\n            \"id\": \"example3\",\n            \"title\": \"Client \u0026 Server Errors\",\n            \"subtitle\": \"Total errors served from the client or server.\",\n            \"data_source\": {\n                \"type\": \"stats.edge\",\n                \"config\": {\n                    \"metrics\": [\n                        \"status_4xx\",\n                        \"status_5xx\",\n                    ],\n                },\n            },\n            \"visualization\": {\n                \"type\": \"chart\",\n                \"config\": {\n                    \"format\": \"requests\",\n                    \"plot_type\": \"bar\",\n                },\n            },\n        },\n        {\n            \"id\": \"example4\",\n            \"title\": \"Domain Requests\",\n            \"subtitle\": \"Requests by Domain.\",\n            \"span\": 6,\n            \"data_source\": {\n                \"type\": \"stats.domain\",\n                \"config\": {\n                    \"metrics\": [\"requests\"],\n                },\n            },\n            \"visualization\": {\n                \"type\": \"chart\",\n                \"config\": {\n                    \"format\": \"requests\",\n                    \"plot_type\": \"line\",\n                },\n            },\n        },\n        {\n            \"id\": \"example5\",\n            \"title\": \"Origin Responses\",\n            \"subtitle\": \"Responses by Origin.\",\n            \"span\": 6,\n            \"data_source\": {\n                \"type\": \"stats.origin\",\n                \"config\": {\n                    \"metrics\": [\"all_responses\"],\n                },\n            },\n            \"visualization\": {\n                \"type\": \"chart\",\n                \"config\": {\n                    \"plot_type\": \"line\",\n                },\n            },\n        },\n        {\n            \"id\": \"example6\",\n            \"title\": \"Total Bandwidth\",\n            \"subtitle\": \"Total bandwidth served.\",\n            \"span\": 12,\n            \"data_source\": {\n                \"type\": \"stats.edge\",\n                \"config\": {\n                    \"metrics\": [\"bandwidth\"],\n                },\n            },\n            \"visualization\": {\n                \"type\": \"chart\",\n                \"config\": {\n                    \"format\": \"bytes\",\n                    \"plot_type\": \"bar\",\n                },\n            },\n        },\n        {\n            \"id\": \"example7\",\n            \"title\": \"Products - Image Optimizer \u0026 Real-Time Log Streaming\",\n            \"subtitle\": \"Total IO images served and log statements sent.\",\n            \"span\": 8,\n            \"data_source\": {\n                \"type\": \"stats.edge\",\n                \"config\": {\n                    \"metrics\": [\n                        \"imgopto\",\n                        \"log\",\n                    ],\n                },\n            },\n            \"visualization\": {\n                \"type\": \"chart\",\n                \"config\": {\n                    \"plot_type\": \"line\",\n                },\n            },\n        },\n        {\n            \"id\": \"example8\",\n            \"title\": \"Transport Protocols \u0026 Security\",\n            \"subtitle\": \"HTTP Protocols \u0026 TLS.\",\n            \"data_source\": {\n                \"type\": \"stats.edge\",\n                \"config\": {\n                    \"metrics\": [\n                        \"http1\",\n                        \"http2\",\n                        \"http3\",\n                        \"tls_v10\",\n                        \"tls_v11\",\n                        \"tls_v12\",\n                        \"tls_v13\",\n                    ],\n                },\n            },\n            \"visualization\": {\n                \"type\": \"chart\",\n                \"config\": {\n                    \"format\": \"requests\",\n                    \"plot_type\": \"line\",\n                },\n            },\n        },\n        {\n            \"id\": \"example9\",\n            \"title\": \"Origin Miss Latency\",\n            \"subtitle\": \"Miss latency times for your origins.\",\n            \"span\": 12,\n            \"data_source\": {\n                \"type\": \"stats.edge\",\n                \"config\": {\n                    \"metrics\": [\"origin_latency\"],\n                },\n            },\n            \"visualization\": {\n                \"type\": \"chart\",\n                \"config\": {\n                    \"format\": \"milliseconds\",\n                    \"plot_type\": \"line\",\n                },\n            },\n        },\n        {\n            \"id\": \"example10\",\n            \"title\": \"DDoS - Request Flood Attempts\",\n            \"subtitle\": \"Number of connections the limit-streams action was applied.\",\n            \"span\": 6,\n            \"data_source\": {\n                \"type\": \"stats.edge\",\n                \"config\": {\n                    \"metrics\": [\n                        \"ddos_action_limit_streams_connections\",\n                        \"ddos_action_limit_streams_requests\",\n                    ],\n                },\n            },\n            \"visualization\": {\n                \"type\": \"chart\",\n                \"config\": {\n                    \"format\": \"requests\",\n                    \"plot_type\": \"line\",\n                },\n            },\n        },\n        {\n            \"id\": \"example11\",\n            \"title\": \"DDoS - Malicious Bot Attack\",\n            \"subtitle\": \"Number of times the blackhole action was taken.\",\n            \"span\": 6,\n            \"data_source\": {\n                \"type\": \"stats.edge\",\n                \"config\": {\n                    \"metrics\": [\n                        \"ddos_action_close\",\n                        \"ddos_action_blackhole\",\n                    ],\n                },\n            },\n            \"visualization\": {\n                \"type\": \"chart\",\n                \"config\": {\n                    \"format\": \"number\",\n                    \"plot_type\": \"line\",\n                },\n            },\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.CustomDashboard(\"example\", new()\n    {\n        Name = \"Example Custom Dashboard\",\n        Description = \"This is an example custom dashboard. A few dashboard items are provided to help you get started.\",\n        DashboardItems = new[]\n        {\n            new Fastly.Inputs.CustomDashboardDashboardItemArgs\n            {\n                Id = \"example1\",\n                Title = \"Total Requests\",\n                Subtitle = \"Number of requests processed.\",\n                DataSource = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceArgs\n                {\n                    Type = \"stats.edge\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceConfigArgs\n                    {\n                        Metrics = new[]\n                        {\n                            \"requests\",\n                        },\n                    },\n                },\n                Visualization = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationArgs\n                {\n                    Type = \"chart\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationConfigArgs\n                    {\n                        Format = \"requests\",\n                        PlotType = \"line\",\n                    },\n                },\n            },\n            new Fastly.Inputs.CustomDashboardDashboardItemArgs\n            {\n                Id = \"example2\",\n                Title = \"Hit Ratio\",\n                Subtitle = \"Ratio of requests served from Fastly.\",\n                DataSource = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceArgs\n                {\n                    Type = \"stats.edge\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceConfigArgs\n                    {\n                        Metrics = new[]\n                        {\n                            \"hit_ratio\",\n                        },\n                    },\n                },\n                Visualization = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationArgs\n                {\n                    Type = \"chart\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationConfigArgs\n                    {\n                        Format = \"percent\",\n                        PlotType = \"donut\",\n                        CalculationMethod = \"latest\",\n                    },\n                },\n            },\n            new Fastly.Inputs.CustomDashboardDashboardItemArgs\n            {\n                Id = \"example3\",\n                Title = \"Client \u0026 Server Errors\",\n                Subtitle = \"Total errors served from the client or server.\",\n                DataSource = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceArgs\n                {\n                    Type = \"stats.edge\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceConfigArgs\n                    {\n                        Metrics = new[]\n                        {\n                            \"status_4xx\",\n                            \"status_5xx\",\n                        },\n                    },\n                },\n                Visualization = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationArgs\n                {\n                    Type = \"chart\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationConfigArgs\n                    {\n                        Format = \"requests\",\n                        PlotType = \"bar\",\n                    },\n                },\n            },\n            new Fastly.Inputs.CustomDashboardDashboardItemArgs\n            {\n                Id = \"example4\",\n                Title = \"Domain Requests\",\n                Subtitle = \"Requests by Domain.\",\n                Span = 6,\n                DataSource = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceArgs\n                {\n                    Type = \"stats.domain\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceConfigArgs\n                    {\n                        Metrics = new[]\n                        {\n                            \"requests\",\n                        },\n                    },\n                },\n                Visualization = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationArgs\n                {\n                    Type = \"chart\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationConfigArgs\n                    {\n                        Format = \"requests\",\n                        PlotType = \"line\",\n                    },\n                },\n            },\n            new Fastly.Inputs.CustomDashboardDashboardItemArgs\n            {\n                Id = \"example5\",\n                Title = \"Origin Responses\",\n                Subtitle = \"Responses by Origin.\",\n                Span = 6,\n                DataSource = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceArgs\n                {\n                    Type = \"stats.origin\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceConfigArgs\n                    {\n                        Metrics = new[]\n                        {\n                            \"all_responses\",\n                        },\n                    },\n                },\n                Visualization = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationArgs\n                {\n                    Type = \"chart\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationConfigArgs\n                    {\n                        PlotType = \"line\",\n                    },\n                },\n            },\n            new Fastly.Inputs.CustomDashboardDashboardItemArgs\n            {\n                Id = \"example6\",\n                Title = \"Total Bandwidth\",\n                Subtitle = \"Total bandwidth served.\",\n                Span = 12,\n                DataSource = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceArgs\n                {\n                    Type = \"stats.edge\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceConfigArgs\n                    {\n                        Metrics = new[]\n                        {\n                            \"bandwidth\",\n                        },\n                    },\n                },\n                Visualization = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationArgs\n                {\n                    Type = \"chart\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationConfigArgs\n                    {\n                        Format = \"bytes\",\n                        PlotType = \"bar\",\n                    },\n                },\n            },\n            new Fastly.Inputs.CustomDashboardDashboardItemArgs\n            {\n                Id = \"example7\",\n                Title = \"Products - Image Optimizer \u0026 Real-Time Log Streaming\",\n                Subtitle = \"Total IO images served and log statements sent.\",\n                Span = 8,\n                DataSource = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceArgs\n                {\n                    Type = \"stats.edge\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceConfigArgs\n                    {\n                        Metrics = new[]\n                        {\n                            \"imgopto\",\n                            \"log\",\n                        },\n                    },\n                },\n                Visualization = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationArgs\n                {\n                    Type = \"chart\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationConfigArgs\n                    {\n                        PlotType = \"line\",\n                    },\n                },\n            },\n            new Fastly.Inputs.CustomDashboardDashboardItemArgs\n            {\n                Id = \"example8\",\n                Title = \"Transport Protocols \u0026 Security\",\n                Subtitle = \"HTTP Protocols \u0026 TLS.\",\n                DataSource = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceArgs\n                {\n                    Type = \"stats.edge\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceConfigArgs\n                    {\n                        Metrics = new[]\n                        {\n                            \"http1\",\n                            \"http2\",\n                            \"http3\",\n                            \"tls_v10\",\n                            \"tls_v11\",\n                            \"tls_v12\",\n                            \"tls_v13\",\n                        },\n                    },\n                },\n                Visualization = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationArgs\n                {\n                    Type = \"chart\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationConfigArgs\n                    {\n                        Format = \"requests\",\n                        PlotType = \"line\",\n                    },\n                },\n            },\n            new Fastly.Inputs.CustomDashboardDashboardItemArgs\n            {\n                Id = \"example9\",\n                Title = \"Origin Miss Latency\",\n                Subtitle = \"Miss latency times for your origins.\",\n                Span = 12,\n                DataSource = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceArgs\n                {\n                    Type = \"stats.edge\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceConfigArgs\n                    {\n                        Metrics = new[]\n                        {\n                            \"origin_latency\",\n                        },\n                    },\n                },\n                Visualization = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationArgs\n                {\n                    Type = \"chart\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationConfigArgs\n                    {\n                        Format = \"milliseconds\",\n                        PlotType = \"line\",\n                    },\n                },\n            },\n            new Fastly.Inputs.CustomDashboardDashboardItemArgs\n            {\n                Id = \"example10\",\n                Title = \"DDoS - Request Flood Attempts\",\n                Subtitle = \"Number of connections the limit-streams action was applied.\",\n                Span = 6,\n                DataSource = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceArgs\n                {\n                    Type = \"stats.edge\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceConfigArgs\n                    {\n                        Metrics = new[]\n                        {\n                            \"ddos_action_limit_streams_connections\",\n                            \"ddos_action_limit_streams_requests\",\n                        },\n                    },\n                },\n                Visualization = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationArgs\n                {\n                    Type = \"chart\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationConfigArgs\n                    {\n                        Format = \"requests\",\n                        PlotType = \"line\",\n                    },\n                },\n            },\n            new Fastly.Inputs.CustomDashboardDashboardItemArgs\n            {\n                Id = \"example11\",\n                Title = \"DDoS - Malicious Bot Attack\",\n                Subtitle = \"Number of times the blackhole action was taken.\",\n                Span = 6,\n                DataSource = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceArgs\n                {\n                    Type = \"stats.edge\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemDataSourceConfigArgs\n                    {\n                        Metrics = new[]\n                        {\n                            \"ddos_action_close\",\n                            \"ddos_action_blackhole\",\n                        },\n                    },\n                },\n                Visualization = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationArgs\n                {\n                    Type = \"chart\",\n                    Config = new Fastly.Inputs.CustomDashboardDashboardItemVisualizationConfigArgs\n                    {\n                        Format = \"number\",\n                        PlotType = \"line\",\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewCustomDashboard(ctx, \"example\", \u0026fastly.CustomDashboardArgs{\n\t\t\tName:        pulumi.String(\"Example Custom Dashboard\"),\n\t\t\tDescription: pulumi.String(\"This is an example custom dashboard. A few dashboard items are provided to help you get started.\"),\n\t\t\tDashboardItems: fastly.CustomDashboardDashboardItemArray{\n\t\t\t\t\u0026fastly.CustomDashboardDashboardItemArgs{\n\t\t\t\t\tId:       pulumi.String(\"example1\"),\n\t\t\t\t\tTitle:    pulumi.String(\"Total Requests\"),\n\t\t\t\t\tSubtitle: pulumi.String(\"Number of requests processed.\"),\n\t\t\t\t\tDataSource: \u0026fastly.CustomDashboardDashboardItemDataSourceArgs{\n\t\t\t\t\t\tType: pulumi.String(\"stats.edge\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemDataSourceConfigArgs{\n\t\t\t\t\t\t\tMetrics: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"requests\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVisualization: \u0026fastly.CustomDashboardDashboardItemVisualizationArgs{\n\t\t\t\t\t\tType: pulumi.String(\"chart\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemVisualizationConfigArgs{\n\t\t\t\t\t\t\tFormat:   pulumi.String(\"requests\"),\n\t\t\t\t\t\t\tPlotType: pulumi.String(\"line\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026fastly.CustomDashboardDashboardItemArgs{\n\t\t\t\t\tId:       pulumi.String(\"example2\"),\n\t\t\t\t\tTitle:    pulumi.String(\"Hit Ratio\"),\n\t\t\t\t\tSubtitle: pulumi.String(\"Ratio of requests served from Fastly.\"),\n\t\t\t\t\tDataSource: \u0026fastly.CustomDashboardDashboardItemDataSourceArgs{\n\t\t\t\t\t\tType: pulumi.String(\"stats.edge\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemDataSourceConfigArgs{\n\t\t\t\t\t\t\tMetrics: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"hit_ratio\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVisualization: \u0026fastly.CustomDashboardDashboardItemVisualizationArgs{\n\t\t\t\t\t\tType: pulumi.String(\"chart\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemVisualizationConfigArgs{\n\t\t\t\t\t\t\tFormat:            pulumi.String(\"percent\"),\n\t\t\t\t\t\t\tPlotType:          pulumi.String(\"donut\"),\n\t\t\t\t\t\t\tCalculationMethod: pulumi.String(\"latest\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026fastly.CustomDashboardDashboardItemArgs{\n\t\t\t\t\tId:       pulumi.String(\"example3\"),\n\t\t\t\t\tTitle:    pulumi.String(\"Client \u0026 Server Errors\"),\n\t\t\t\t\tSubtitle: pulumi.String(\"Total errors served from the client or server.\"),\n\t\t\t\t\tDataSource: \u0026fastly.CustomDashboardDashboardItemDataSourceArgs{\n\t\t\t\t\t\tType: pulumi.String(\"stats.edge\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemDataSourceConfigArgs{\n\t\t\t\t\t\t\tMetrics: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"status_4xx\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"status_5xx\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVisualization: \u0026fastly.CustomDashboardDashboardItemVisualizationArgs{\n\t\t\t\t\t\tType: pulumi.String(\"chart\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemVisualizationConfigArgs{\n\t\t\t\t\t\t\tFormat:   pulumi.String(\"requests\"),\n\t\t\t\t\t\t\tPlotType: pulumi.String(\"bar\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026fastly.CustomDashboardDashboardItemArgs{\n\t\t\t\t\tId:       pulumi.String(\"example4\"),\n\t\t\t\t\tTitle:    pulumi.String(\"Domain Requests\"),\n\t\t\t\t\tSubtitle: pulumi.String(\"Requests by Domain.\"),\n\t\t\t\t\tSpan:     pulumi.Int(6),\n\t\t\t\t\tDataSource: \u0026fastly.CustomDashboardDashboardItemDataSourceArgs{\n\t\t\t\t\t\tType: pulumi.String(\"stats.domain\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemDataSourceConfigArgs{\n\t\t\t\t\t\t\tMetrics: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"requests\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVisualization: \u0026fastly.CustomDashboardDashboardItemVisualizationArgs{\n\t\t\t\t\t\tType: pulumi.String(\"chart\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemVisualizationConfigArgs{\n\t\t\t\t\t\t\tFormat:   pulumi.String(\"requests\"),\n\t\t\t\t\t\t\tPlotType: pulumi.String(\"line\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026fastly.CustomDashboardDashboardItemArgs{\n\t\t\t\t\tId:       pulumi.String(\"example5\"),\n\t\t\t\t\tTitle:    pulumi.String(\"Origin Responses\"),\n\t\t\t\t\tSubtitle: pulumi.String(\"Responses by Origin.\"),\n\t\t\t\t\tSpan:     pulumi.Int(6),\n\t\t\t\t\tDataSource: \u0026fastly.CustomDashboardDashboardItemDataSourceArgs{\n\t\t\t\t\t\tType: pulumi.String(\"stats.origin\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemDataSourceConfigArgs{\n\t\t\t\t\t\t\tMetrics: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"all_responses\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVisualization: \u0026fastly.CustomDashboardDashboardItemVisualizationArgs{\n\t\t\t\t\t\tType: pulumi.String(\"chart\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemVisualizationConfigArgs{\n\t\t\t\t\t\t\tPlotType: pulumi.String(\"line\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026fastly.CustomDashboardDashboardItemArgs{\n\t\t\t\t\tId:       pulumi.String(\"example6\"),\n\t\t\t\t\tTitle:    pulumi.String(\"Total Bandwidth\"),\n\t\t\t\t\tSubtitle: pulumi.String(\"Total bandwidth served.\"),\n\t\t\t\t\tSpan:     pulumi.Int(12),\n\t\t\t\t\tDataSource: \u0026fastly.CustomDashboardDashboardItemDataSourceArgs{\n\t\t\t\t\t\tType: pulumi.String(\"stats.edge\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemDataSourceConfigArgs{\n\t\t\t\t\t\t\tMetrics: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"bandwidth\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVisualization: \u0026fastly.CustomDashboardDashboardItemVisualizationArgs{\n\t\t\t\t\t\tType: pulumi.String(\"chart\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemVisualizationConfigArgs{\n\t\t\t\t\t\t\tFormat:   pulumi.String(\"bytes\"),\n\t\t\t\t\t\t\tPlotType: pulumi.String(\"bar\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026fastly.CustomDashboardDashboardItemArgs{\n\t\t\t\t\tId:       pulumi.String(\"example7\"),\n\t\t\t\t\tTitle:    pulumi.String(\"Products - Image Optimizer \u0026 Real-Time Log Streaming\"),\n\t\t\t\t\tSubtitle: pulumi.String(\"Total IO images served and log statements sent.\"),\n\t\t\t\t\tSpan:     pulumi.Int(8),\n\t\t\t\t\tDataSource: \u0026fastly.CustomDashboardDashboardItemDataSourceArgs{\n\t\t\t\t\t\tType: pulumi.String(\"stats.edge\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemDataSourceConfigArgs{\n\t\t\t\t\t\t\tMetrics: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"imgopto\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"log\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVisualization: \u0026fastly.CustomDashboardDashboardItemVisualizationArgs{\n\t\t\t\t\t\tType: pulumi.String(\"chart\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemVisualizationConfigArgs{\n\t\t\t\t\t\t\tPlotType: pulumi.String(\"line\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026fastly.CustomDashboardDashboardItemArgs{\n\t\t\t\t\tId:       pulumi.String(\"example8\"),\n\t\t\t\t\tTitle:    pulumi.String(\"Transport Protocols \u0026 Security\"),\n\t\t\t\t\tSubtitle: pulumi.String(\"HTTP Protocols \u0026 TLS.\"),\n\t\t\t\t\tDataSource: \u0026fastly.CustomDashboardDashboardItemDataSourceArgs{\n\t\t\t\t\t\tType: pulumi.String(\"stats.edge\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemDataSourceConfigArgs{\n\t\t\t\t\t\t\tMetrics: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"http1\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"http2\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"http3\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"tls_v10\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"tls_v11\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"tls_v12\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"tls_v13\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVisualization: \u0026fastly.CustomDashboardDashboardItemVisualizationArgs{\n\t\t\t\t\t\tType: pulumi.String(\"chart\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemVisualizationConfigArgs{\n\t\t\t\t\t\t\tFormat:   pulumi.String(\"requests\"),\n\t\t\t\t\t\t\tPlotType: pulumi.String(\"line\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026fastly.CustomDashboardDashboardItemArgs{\n\t\t\t\t\tId:       pulumi.String(\"example9\"),\n\t\t\t\t\tTitle:    pulumi.String(\"Origin Miss Latency\"),\n\t\t\t\t\tSubtitle: pulumi.String(\"Miss latency times for your origins.\"),\n\t\t\t\t\tSpan:     pulumi.Int(12),\n\t\t\t\t\tDataSource: \u0026fastly.CustomDashboardDashboardItemDataSourceArgs{\n\t\t\t\t\t\tType: pulumi.String(\"stats.edge\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemDataSourceConfigArgs{\n\t\t\t\t\t\t\tMetrics: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"origin_latency\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVisualization: \u0026fastly.CustomDashboardDashboardItemVisualizationArgs{\n\t\t\t\t\t\tType: pulumi.String(\"chart\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemVisualizationConfigArgs{\n\t\t\t\t\t\t\tFormat:   pulumi.String(\"milliseconds\"),\n\t\t\t\t\t\t\tPlotType: pulumi.String(\"line\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026fastly.CustomDashboardDashboardItemArgs{\n\t\t\t\t\tId:       pulumi.String(\"example10\"),\n\t\t\t\t\tTitle:    pulumi.String(\"DDoS - Request Flood Attempts\"),\n\t\t\t\t\tSubtitle: pulumi.String(\"Number of connections the limit-streams action was applied.\"),\n\t\t\t\t\tSpan:     pulumi.Int(6),\n\t\t\t\t\tDataSource: \u0026fastly.CustomDashboardDashboardItemDataSourceArgs{\n\t\t\t\t\t\tType: pulumi.String(\"stats.edge\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemDataSourceConfigArgs{\n\t\t\t\t\t\t\tMetrics: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"ddos_action_limit_streams_connections\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"ddos_action_limit_streams_requests\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVisualization: \u0026fastly.CustomDashboardDashboardItemVisualizationArgs{\n\t\t\t\t\t\tType: pulumi.String(\"chart\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemVisualizationConfigArgs{\n\t\t\t\t\t\t\tFormat:   pulumi.String(\"requests\"),\n\t\t\t\t\t\t\tPlotType: pulumi.String(\"line\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026fastly.CustomDashboardDashboardItemArgs{\n\t\t\t\t\tId:       pulumi.String(\"example11\"),\n\t\t\t\t\tTitle:    pulumi.String(\"DDoS - Malicious Bot Attack\"),\n\t\t\t\t\tSubtitle: pulumi.String(\"Number of times the blackhole action was taken.\"),\n\t\t\t\t\tSpan:     pulumi.Int(6),\n\t\t\t\t\tDataSource: \u0026fastly.CustomDashboardDashboardItemDataSourceArgs{\n\t\t\t\t\t\tType: pulumi.String(\"stats.edge\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemDataSourceConfigArgs{\n\t\t\t\t\t\t\tMetrics: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"ddos_action_close\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"ddos_action_blackhole\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVisualization: \u0026fastly.CustomDashboardDashboardItemVisualizationArgs{\n\t\t\t\t\t\tType: pulumi.String(\"chart\"),\n\t\t\t\t\t\tConfig: \u0026fastly.CustomDashboardDashboardItemVisualizationConfigArgs{\n\t\t\t\t\t\t\tFormat:   pulumi.String(\"number\"),\n\t\t\t\t\t\t\tPlotType: pulumi.String(\"line\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.CustomDashboard;\nimport com.pulumi.fastly.CustomDashboardArgs;\nimport com.pulumi.fastly.inputs.CustomDashboardDashboardItemArgs;\nimport com.pulumi.fastly.inputs.CustomDashboardDashboardItemDataSourceArgs;\nimport com.pulumi.fastly.inputs.CustomDashboardDashboardItemDataSourceConfigArgs;\nimport com.pulumi.fastly.inputs.CustomDashboardDashboardItemVisualizationArgs;\nimport com.pulumi.fastly.inputs.CustomDashboardDashboardItemVisualizationConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new CustomDashboard(\"example\", CustomDashboardArgs.builder()\n            .name(\"Example Custom Dashboard\")\n            .description(\"This is an example custom dashboard. A few dashboard items are provided to help you get started.\")\n            .dashboardItems(            \n                CustomDashboardDashboardItemArgs.builder()\n                    .id(\"example1\")\n                    .title(\"Total Requests\")\n                    .subtitle(\"Number of requests processed.\")\n                    .dataSource(CustomDashboardDashboardItemDataSourceArgs.builder()\n                        .type(\"stats.edge\")\n                        .config(CustomDashboardDashboardItemDataSourceConfigArgs.builder()\n                            .metrics(\"requests\")\n                            .build())\n                        .build())\n                    .visualization(CustomDashboardDashboardItemVisualizationArgs.builder()\n                        .type(\"chart\")\n                        .config(CustomDashboardDashboardItemVisualizationConfigArgs.builder()\n                            .format(\"requests\")\n                            .plotType(\"line\")\n                            .build())\n                        .build())\n                    .build(),\n                CustomDashboardDashboardItemArgs.builder()\n                    .id(\"example2\")\n                    .title(\"Hit Ratio\")\n                    .subtitle(\"Ratio of requests served from Fastly.\")\n                    .dataSource(CustomDashboardDashboardItemDataSourceArgs.builder()\n                        .type(\"stats.edge\")\n                        .config(CustomDashboardDashboardItemDataSourceConfigArgs.builder()\n                            .metrics(\"hit_ratio\")\n                            .build())\n                        .build())\n                    .visualization(CustomDashboardDashboardItemVisualizationArgs.builder()\n                        .type(\"chart\")\n                        .config(CustomDashboardDashboardItemVisualizationConfigArgs.builder()\n                            .format(\"percent\")\n                            .plotType(\"donut\")\n                            .calculationMethod(\"latest\")\n                            .build())\n                        .build())\n                    .build(),\n                CustomDashboardDashboardItemArgs.builder()\n                    .id(\"example3\")\n                    .title(\"Client \u0026 Server Errors\")\n                    .subtitle(\"Total errors served from the client or server.\")\n                    .dataSource(CustomDashboardDashboardItemDataSourceArgs.builder()\n                        .type(\"stats.edge\")\n                        .config(CustomDashboardDashboardItemDataSourceConfigArgs.builder()\n                            .metrics(                            \n                                \"status_4xx\",\n                                \"status_5xx\")\n                            .build())\n                        .build())\n                    .visualization(CustomDashboardDashboardItemVisualizationArgs.builder()\n                        .type(\"chart\")\n                        .config(CustomDashboardDashboardItemVisualizationConfigArgs.builder()\n                            .format(\"requests\")\n                            .plotType(\"bar\")\n                            .build())\n                        .build())\n                    .build(),\n                CustomDashboardDashboardItemArgs.builder()\n                    .id(\"example4\")\n                    .title(\"Domain Requests\")\n                    .subtitle(\"Requests by Domain.\")\n                    .span(6)\n                    .dataSource(CustomDashboardDashboardItemDataSourceArgs.builder()\n                        .type(\"stats.domain\")\n                        .config(CustomDashboardDashboardItemDataSourceConfigArgs.builder()\n                            .metrics(\"requests\")\n                            .build())\n                        .build())\n                    .visualization(CustomDashboardDashboardItemVisualizationArgs.builder()\n                        .type(\"chart\")\n                        .config(CustomDashboardDashboardItemVisualizationConfigArgs.builder()\n                            .format(\"requests\")\n                            .plotType(\"line\")\n                            .build())\n                        .build())\n                    .build(),\n                CustomDashboardDashboardItemArgs.builder()\n                    .id(\"example5\")\n                    .title(\"Origin Responses\")\n                    .subtitle(\"Responses by Origin.\")\n                    .span(6)\n                    .dataSource(CustomDashboardDashboardItemDataSourceArgs.builder()\n                        .type(\"stats.origin\")\n                        .config(CustomDashboardDashboardItemDataSourceConfigArgs.builder()\n                            .metrics(\"all_responses\")\n                            .build())\n                        .build())\n                    .visualization(CustomDashboardDashboardItemVisualizationArgs.builder()\n                        .type(\"chart\")\n                        .config(CustomDashboardDashboardItemVisualizationConfigArgs.builder()\n                            .plotType(\"line\")\n                            .build())\n                        .build())\n                    .build(),\n                CustomDashboardDashboardItemArgs.builder()\n                    .id(\"example6\")\n                    .title(\"Total Bandwidth\")\n                    .subtitle(\"Total bandwidth served.\")\n                    .span(12)\n                    .dataSource(CustomDashboardDashboardItemDataSourceArgs.builder()\n                        .type(\"stats.edge\")\n                        .config(CustomDashboardDashboardItemDataSourceConfigArgs.builder()\n                            .metrics(\"bandwidth\")\n                            .build())\n                        .build())\n                    .visualization(CustomDashboardDashboardItemVisualizationArgs.builder()\n                        .type(\"chart\")\n                        .config(CustomDashboardDashboardItemVisualizationConfigArgs.builder()\n                            .format(\"bytes\")\n                            .plotType(\"bar\")\n                            .build())\n                        .build())\n                    .build(),\n                CustomDashboardDashboardItemArgs.builder()\n                    .id(\"example7\")\n                    .title(\"Products - Image Optimizer \u0026 Real-Time Log Streaming\")\n                    .subtitle(\"Total IO images served and log statements sent.\")\n                    .span(8)\n                    .dataSource(CustomDashboardDashboardItemDataSourceArgs.builder()\n                        .type(\"stats.edge\")\n                        .config(CustomDashboardDashboardItemDataSourceConfigArgs.builder()\n                            .metrics(                            \n                                \"imgopto\",\n                                \"log\")\n                            .build())\n                        .build())\n                    .visualization(CustomDashboardDashboardItemVisualizationArgs.builder()\n                        .type(\"chart\")\n                        .config(CustomDashboardDashboardItemVisualizationConfigArgs.builder()\n                            .plotType(\"line\")\n                            .build())\n                        .build())\n                    .build(),\n                CustomDashboardDashboardItemArgs.builder()\n                    .id(\"example8\")\n                    .title(\"Transport Protocols \u0026 Security\")\n                    .subtitle(\"HTTP Protocols \u0026 TLS.\")\n                    .dataSource(CustomDashboardDashboardItemDataSourceArgs.builder()\n                        .type(\"stats.edge\")\n                        .config(CustomDashboardDashboardItemDataSourceConfigArgs.builder()\n                            .metrics(                            \n                                \"http1\",\n                                \"http2\",\n                                \"http3\",\n                                \"tls_v10\",\n                                \"tls_v11\",\n                                \"tls_v12\",\n                                \"tls_v13\")\n                            .build())\n                        .build())\n                    .visualization(CustomDashboardDashboardItemVisualizationArgs.builder()\n                        .type(\"chart\")\n                        .config(CustomDashboardDashboardItemVisualizationConfigArgs.builder()\n                            .format(\"requests\")\n                            .plotType(\"line\")\n                            .build())\n                        .build())\n                    .build(),\n                CustomDashboardDashboardItemArgs.builder()\n                    .id(\"example9\")\n                    .title(\"Origin Miss Latency\")\n                    .subtitle(\"Miss latency times for your origins.\")\n                    .span(12)\n                    .dataSource(CustomDashboardDashboardItemDataSourceArgs.builder()\n                        .type(\"stats.edge\")\n                        .config(CustomDashboardDashboardItemDataSourceConfigArgs.builder()\n                            .metrics(\"origin_latency\")\n                            .build())\n                        .build())\n                    .visualization(CustomDashboardDashboardItemVisualizationArgs.builder()\n                        .type(\"chart\")\n                        .config(CustomDashboardDashboardItemVisualizationConfigArgs.builder()\n                            .format(\"milliseconds\")\n                            .plotType(\"line\")\n                            .build())\n                        .build())\n                    .build(),\n                CustomDashboardDashboardItemArgs.builder()\n                    .id(\"example10\")\n                    .title(\"DDoS - Request Flood Attempts\")\n                    .subtitle(\"Number of connections the limit-streams action was applied.\")\n                    .span(6)\n                    .dataSource(CustomDashboardDashboardItemDataSourceArgs.builder()\n                        .type(\"stats.edge\")\n                        .config(CustomDashboardDashboardItemDataSourceConfigArgs.builder()\n                            .metrics(                            \n                                \"ddos_action_limit_streams_connections\",\n                                \"ddos_action_limit_streams_requests\")\n                            .build())\n                        .build())\n                    .visualization(CustomDashboardDashboardItemVisualizationArgs.builder()\n                        .type(\"chart\")\n                        .config(CustomDashboardDashboardItemVisualizationConfigArgs.builder()\n                            .format(\"requests\")\n                            .plotType(\"line\")\n                            .build())\n                        .build())\n                    .build(),\n                CustomDashboardDashboardItemArgs.builder()\n                    .id(\"example11\")\n                    .title(\"DDoS - Malicious Bot Attack\")\n                    .subtitle(\"Number of times the blackhole action was taken.\")\n                    .span(6)\n                    .dataSource(CustomDashboardDashboardItemDataSourceArgs.builder()\n                        .type(\"stats.edge\")\n                        .config(CustomDashboardDashboardItemDataSourceConfigArgs.builder()\n                            .metrics(                            \n                                \"ddos_action_close\",\n                                \"ddos_action_blackhole\")\n                            .build())\n                        .build())\n                    .visualization(CustomDashboardDashboardItemVisualizationArgs.builder()\n                        .type(\"chart\")\n                        .config(CustomDashboardDashboardItemVisualizationConfigArgs.builder()\n                            .format(\"number\")\n                            .plotType(\"line\")\n                            .build())\n                        .build())\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:CustomDashboard\n    properties:\n      name: Example Custom Dashboard\n      description: This is an example custom dashboard. A few dashboard items are provided to help you get started.\n      dashboardItems:\n        - id: example1\n          title: Total Requests\n          subtitle: Number of requests processed.\n          dataSource:\n            type: stats.edge\n            config:\n              metrics:\n                - requests\n          visualization:\n            type: chart\n            config:\n              format: requests\n              plotType: line\n        - id: example2\n          title: Hit Ratio\n          subtitle: Ratio of requests served from Fastly.\n          dataSource:\n            type: stats.edge\n            config:\n              metrics:\n                - hit_ratio\n          visualization:\n            type: chart\n            config:\n              format: percent\n              plotType: donut\n              calculationMethod: latest\n        - id: example3\n          title: Client \u0026 Server Errors\n          subtitle: Total errors served from the client or server.\n          dataSource:\n            type: stats.edge\n            config:\n              metrics:\n                - status_4xx\n                - status_5xx\n          visualization:\n            type: chart\n            config:\n              format: requests\n              plotType: bar\n        - id: example4\n          title: Domain Requests\n          subtitle: Requests by Domain.\n          span: 6\n          dataSource:\n            type: stats.domain\n            config:\n              metrics:\n                - requests\n          visualization:\n            type: chart\n            config:\n              format: requests\n              plotType: line\n        - id: example5\n          title: Origin Responses\n          subtitle: Responses by Origin.\n          span: 6\n          dataSource:\n            type: stats.origin\n            config:\n              metrics:\n                - all_responses\n          visualization:\n            type: chart\n            config:\n              plotType: line\n        - id: example6\n          title: Total Bandwidth\n          subtitle: Total bandwidth served.\n          span: 12\n          dataSource:\n            type: stats.edge\n            config:\n              metrics:\n                - bandwidth\n          visualization:\n            type: chart\n            config:\n              format: bytes\n              plotType: bar\n        - id: example7\n          title: Products - Image Optimizer \u0026 Real-Time Log Streaming\n          subtitle: Total IO images served and log statements sent.\n          span: 8\n          dataSource:\n            type: stats.edge\n            config:\n              metrics:\n                - imgopto\n                - log\n          visualization:\n            type: chart\n            config:\n              plotType: line\n        - id: example8\n          title: Transport Protocols \u0026 Security\n          subtitle: HTTP Protocols \u0026 TLS.\n          dataSource:\n            type: stats.edge\n            config:\n              metrics:\n                - http1\n                - http2\n                - http3\n                - tls_v10\n                - tls_v11\n                - tls_v12\n                - tls_v13\n          visualization:\n            type: chart\n            config:\n              format: requests\n              plotType: line\n        - id: example9\n          title: Origin Miss Latency\n          subtitle: Miss latency times for your origins.\n          span: 12\n          dataSource:\n            type: stats.edge\n            config:\n              metrics:\n                - origin_latency\n          visualization:\n            type: chart\n            config:\n              format: milliseconds\n              plotType: line\n        - id: example10\n          title: DDoS - Request Flood Attempts\n          subtitle: Number of connections the limit-streams action was applied.\n          span: 6\n          dataSource:\n            type: stats.edge\n            config:\n              metrics:\n                - ddos_action_limit_streams_connections\n                - ddos_action_limit_streams_requests\n          visualization:\n            type: chart\n            config:\n              format: requests\n              plotType: line\n        - id: example11\n          title: DDoS - Malicious Bot Attack\n          subtitle: Number of times the blackhole action was taken.\n          span: 6\n          dataSource:\n            type: stats.edge\n            config:\n              metrics:\n                - ddos_action_close\n                - ddos_action_blackhole\n          visualization:\n            type: chart\n            config:\n              format: number\n              plotType: line\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Custom Dashboards can be imported using their ID, e.g.\n\n```sh\n$ pulumi import fastly:index/customDashboard:CustomDashboard example xxxxxxxxxxxxxxxxxxxx\n```\n\n","properties":{"dashboardItems":{"type":"array","items":{"$ref":"#/types/fastly:index/CustomDashboardDashboardItem:CustomDashboardDashboardItem"},"description":"A list of dashboard items.\n"},"description":{"type":"string","description":"A short description of the dashboard.\n"},"name":{"type":"string","description":"A human-readable name.\n"}},"required":["name"],"inputProperties":{"dashboardItems":{"type":"array","items":{"$ref":"#/types/fastly:index/CustomDashboardDashboardItem:CustomDashboardDashboardItem"},"description":"A list of dashboard items.\n"},"description":{"type":"string","description":"A short description of the dashboard.\n"},"name":{"type":"string","description":"A human-readable name.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering CustomDashboard resources.\n","properties":{"dashboardItems":{"type":"array","items":{"$ref":"#/types/fastly:index/CustomDashboardDashboardItem:CustomDashboardDashboardItem"},"description":"A list of dashboard items.\n"},"description":{"type":"string","description":"A short description of the dashboard.\n"},"name":{"type":"string","description":"A human-readable name.\n"}},"type":"object"}},"fastly:index/domain:Domain":{"description":"Domain management allows you to manage your domains on Fastly and the services that they interact with.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.Domain(\"example\", {\n    fqdn: \"example.com\",\n    serviceId: \"12345abcde\",\n    description: \"This is a test domain.\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.Domain(\"example\",\n    fqdn=\"example.com\",\n    service_id=\"12345abcde\",\n    description=\"This is a test domain.\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.Domain(\"example\", new()\n    {\n        Fqdn = \"example.com\",\n        ServiceId = \"12345abcde\",\n        Description = \"This is a test domain.\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewDomain(ctx, \"example\", \u0026fastly.DomainArgs{\n\t\t\tFqdn:        pulumi.String(\"example.com\"),\n\t\t\tServiceId:   pulumi.String(\"12345abcde\"),\n\t\t\tDescription: pulumi.String(\"This is a test domain.\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.Domain;\nimport com.pulumi.fastly.DomainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new Domain(\"example\", DomainArgs.builder()\n            .fqdn(\"example.com\")\n            .serviceId(\"12345abcde\")\n            .description(\"This is a test domain.\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:Domain\n    properties:\n      fqdn: example.com\n      serviceId: 12345abcde\n      description: This is a test domain.\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDomains can be imported using the domain ID, e.g.\n\n```sh\n$ pulumi import fastly:index/domain:Domain example \u003cdomain_id\u003e\n```\n\n","properties":{"description":{"type":"string","description":"The description for your domain.\n"},"domainId":{"type":"string","description":"The Domain Identifier (UUID).\n"},"fqdn":{"type":"string","description":"The fully-qualified domain name for your domain (e.g. `www.example.com`, no trailing dot). Can be created, but not updated.\n"},"serviceId":{"type":"string","description":"The\u003cspan pulumi-lang-nodejs=\" serviceId \" pulumi-lang-dotnet=\" ServiceId \" pulumi-lang-go=\" serviceId \" pulumi-lang-python=\" service_id \" pulumi-lang-yaml=\" serviceId \" pulumi-lang-java=\" serviceId \"\u003e service_id \u003c/span\u003eassociated with your domain or null if there is no association.\n"}},"required":["domainId","fqdn"],"inputProperties":{"description":{"type":"string","description":"The description for your domain.\n"},"fqdn":{"type":"string","description":"The fully-qualified domain name for your domain (e.g. `www.example.com`, no trailing dot). Can be created, but not updated.\n","willReplaceOnChanges":true},"serviceId":{"type":"string","description":"The\u003cspan pulumi-lang-nodejs=\" serviceId \" pulumi-lang-dotnet=\" ServiceId \" pulumi-lang-go=\" serviceId \" pulumi-lang-python=\" service_id \" pulumi-lang-yaml=\" serviceId \" pulumi-lang-java=\" serviceId \"\u003e service_id \u003c/span\u003eassociated with your domain or null if there is no association.\n"}},"requiredInputs":["fqdn"],"stateInputs":{"description":"Input properties used for looking up and filtering Domain resources.\n","properties":{"description":{"type":"string","description":"The description for your domain.\n"},"domainId":{"type":"string","description":"The Domain Identifier (UUID).\n"},"fqdn":{"type":"string","description":"The fully-qualified domain name for your domain (e.g. `www.example.com`, no trailing dot). Can be created, but not updated.\n","willReplaceOnChanges":true},"serviceId":{"type":"string","description":"The\u003cspan pulumi-lang-nodejs=\" serviceId \" pulumi-lang-dotnet=\" ServiceId \" pulumi-lang-go=\" serviceId \" pulumi-lang-python=\" service_id \" pulumi-lang-yaml=\" serviceId \" pulumi-lang-java=\" serviceId \"\u003e service_id \u003c/span\u003eassociated with your domain or null if there is no association.\n"}},"type":"object"}},"fastly:index/domainServiceLink:DomainServiceLink":{"description":"Domain service links are for managing versionless domains for services. The link associates an existing service\nwith an existing domain, but doesn't create or delete either resource.\n\nIf you are managing your versionless domain with a service link, you may not also use a \u003cspan pulumi-lang-nodejs=\"`resourceFastlyDomain`\" pulumi-lang-dotnet=\"`ResourceFastlyDomain`\" pulumi-lang-go=\"`resourceFastlyDomain`\" pulumi-lang-python=\"`resource_fastly_domain`\" pulumi-lang-yaml=\"`resourceFastlyDomain`\" pulumi-lang-java=\"`resourceFastlyDomain`\"\u003e`resource_fastly_domain`\u003c/span\u003e block as well.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.DomainServiceLink(\"example\", {\n    domainId: exampleFastlyDomain.id,\n    serviceId: exampleFastlyServiceVcl.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.DomainServiceLink(\"example\",\n    domain_id=example_fastly_domain[\"id\"],\n    service_id=example_fastly_service_vcl[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.DomainServiceLink(\"example\", new()\n    {\n        DomainId = exampleFastlyDomain.Id,\n        ServiceId = exampleFastlyServiceVcl.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewDomainServiceLink(ctx, \"example\", \u0026fastly.DomainServiceLinkArgs{\n\t\t\tDomainId:  pulumi.Any(exampleFastlyDomain.Id),\n\t\t\tServiceId: pulumi.Any(exampleFastlyServiceVcl.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.DomainServiceLink;\nimport com.pulumi.fastly.DomainServiceLinkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new DomainServiceLink(\"example\", DomainServiceLinkArgs.builder()\n            .domainId(exampleFastlyDomain.id())\n            .serviceId(exampleFastlyServiceVcl.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:DomainServiceLink\n    properties:\n      domainId: ${exampleFastlyDomain.id}\n      serviceId: ${exampleFastlyServiceVcl.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDomain service links can be imported using the domain ID, e.g.\n\n```sh\n$ pulumi import fastly:index/domainServiceLink:DomainServiceLink example \u003cdomain_id\u003e\n```\n\n","properties":{"domainId":{"type":"string","description":"The Domain Identifier of the versionless domain being linked (UUID).\n"},"serviceId":{"type":"string","description":"The\u003cspan pulumi-lang-nodejs=\" serviceId \" pulumi-lang-dotnet=\" ServiceId \" pulumi-lang-go=\" serviceId \" pulumi-lang-python=\" service_id \" pulumi-lang-yaml=\" serviceId \" pulumi-lang-java=\" serviceId \"\u003e service_id \u003c/span\u003eassociated with your domain\n"}},"required":["domainId","serviceId"],"inputProperties":{"domainId":{"type":"string","description":"The Domain Identifier of the versionless domain being linked (UUID).\n"},"serviceId":{"type":"string","description":"The\u003cspan pulumi-lang-nodejs=\" serviceId \" pulumi-lang-dotnet=\" ServiceId \" pulumi-lang-go=\" serviceId \" pulumi-lang-python=\" service_id \" pulumi-lang-yaml=\" serviceId \" pulumi-lang-java=\" serviceId \"\u003e service_id \u003c/span\u003eassociated with your domain\n"}},"requiredInputs":["domainId","serviceId"],"stateInputs":{"description":"Input properties used for looking up and filtering DomainServiceLink resources.\n","properties":{"domainId":{"type":"string","description":"The Domain Identifier of the versionless domain being linked (UUID).\n"},"serviceId":{"type":"string","description":"The\u003cspan pulumi-lang-nodejs=\" serviceId \" pulumi-lang-dotnet=\" ServiceId \" pulumi-lang-go=\" serviceId \" pulumi-lang-python=\" service_id \" pulumi-lang-yaml=\" serviceId \" pulumi-lang-java=\" serviceId \"\u003e service_id \u003c/span\u003eassociated with your domain\n"}},"type":"object"}},"fastly:index/domainV1:DomainV1":{"properties":{"description":{"type":"string","description":"The description for your domain.\n"},"domainId":{"type":"string","description":"The Domain Identifier (UUID).\n"},"fqdn":{"type":"string","description":"The fully-qualified domain name for your domain (e.g. `www.example.com`, no trailing dot). Can be created, but not updated.\n"},"serviceId":{"type":"string","description":"The\u003cspan pulumi-lang-nodejs=\" serviceId \" pulumi-lang-dotnet=\" ServiceId \" pulumi-lang-go=\" serviceId \" pulumi-lang-python=\" service_id \" pulumi-lang-yaml=\" serviceId \" pulumi-lang-java=\" serviceId \"\u003e service_id \u003c/span\u003eassociated with your domain or null if there is no association.\n"}},"required":["domainId","fqdn"],"inputProperties":{"description":{"type":"string","description":"The description for your domain.\n"},"fqdn":{"type":"string","description":"The fully-qualified domain name for your domain (e.g. `www.example.com`, no trailing dot). Can be created, but not updated.\n","willReplaceOnChanges":true},"serviceId":{"type":"string","description":"The\u003cspan pulumi-lang-nodejs=\" serviceId \" pulumi-lang-dotnet=\" ServiceId \" pulumi-lang-go=\" serviceId \" pulumi-lang-python=\" service_id \" pulumi-lang-yaml=\" serviceId \" pulumi-lang-java=\" serviceId \"\u003e service_id \u003c/span\u003eassociated with your domain or null if there is no association.\n"}},"requiredInputs":["fqdn"],"stateInputs":{"description":"Input properties used for looking up and filtering DomainV1 resources.\n","properties":{"description":{"type":"string","description":"The description for your domain.\n"},"domainId":{"type":"string","description":"The Domain Identifier (UUID).\n"},"fqdn":{"type":"string","description":"The fully-qualified domain name for your domain (e.g. `www.example.com`, no trailing dot). Can be created, but not updated.\n","willReplaceOnChanges":true},"serviceId":{"type":"string","description":"The\u003cspan pulumi-lang-nodejs=\" serviceId \" pulumi-lang-dotnet=\" ServiceId \" pulumi-lang-go=\" serviceId \" pulumi-lang-python=\" service_id \" pulumi-lang-yaml=\" serviceId \" pulumi-lang-java=\" serviceId \"\u003e service_id \u003c/span\u003eassociated with your domain or null if there is no association.\n"}},"type":"object"}},"fastly:index/domainV1ServiceLink:DomainV1ServiceLink":{"properties":{"domainId":{"type":"string","description":"The Domain Identifier of the versionless domain being linked (UUID).\n"},"serviceId":{"type":"string","description":"The\u003cspan pulumi-lang-nodejs=\" serviceId \" pulumi-lang-dotnet=\" ServiceId \" pulumi-lang-go=\" serviceId \" pulumi-lang-python=\" service_id \" pulumi-lang-yaml=\" serviceId \" pulumi-lang-java=\" serviceId \"\u003e service_id \u003c/span\u003eassociated with your domain\n"}},"required":["domainId","serviceId"],"inputProperties":{"domainId":{"type":"string","description":"The Domain Identifier of the versionless domain being linked (UUID).\n"},"serviceId":{"type":"string","description":"The\u003cspan pulumi-lang-nodejs=\" serviceId \" pulumi-lang-dotnet=\" ServiceId \" pulumi-lang-go=\" serviceId \" pulumi-lang-python=\" service_id \" pulumi-lang-yaml=\" serviceId \" pulumi-lang-java=\" serviceId \"\u003e service_id \u003c/span\u003eassociated with your domain\n"}},"requiredInputs":["domainId","serviceId"],"stateInputs":{"description":"Input properties used for looking up and filtering DomainV1ServiceLink resources.\n","properties":{"domainId":{"type":"string","description":"The Domain Identifier of the versionless domain being linked (UUID).\n"},"serviceId":{"type":"string","description":"The\u003cspan pulumi-lang-nodejs=\" serviceId \" pulumi-lang-dotnet=\" ServiceId \" pulumi-lang-go=\" serviceId \" pulumi-lang-python=\" service_id \" pulumi-lang-yaml=\" serviceId \" pulumi-lang-java=\" serviceId \"\u003e service_id \u003c/span\u003eassociated with your domain\n"}},"type":"object"}},"fastly:index/integration:Integration":{"description":"Provides a Fastly integration. Fastly will use these integrations to send you notifications and alerts related to the Fastly product. Mailing list, Microsoft Teams, New Relic, PagerDuty, Slack, and webhook are supported as integrations.\n\n\u003e **IMPORTANT:** The mailing list integrations require confirmation. To send a confirmation email and verify integration status, after applying changes using Terraform, please visit https://manage.fastly.com/observability/alerts/integrations\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst mailinglistExample = new fastly.Integration(\"mailinglist_example\", {\n    name: \"my mailing list integration\",\n    description: \"example mailing list integration\",\n    type: \"mailinglist\",\n    config: {\n        address: \"incoming-hook@my.domain.com\",\n    },\n});\nconst microsoftteamsExample = new fastly.Integration(\"microsoftteams_example\", {\n    name: \"my Microsoft Teams integration\",\n    description: \"example Microsoft Teams integration\",\n    type: \"microsoftteams\",\n    config: {\n        webhook: \"https://m365x012345.webhook.office.com\",\n    },\n});\nconst newrelicExample = new fastly.Integration(\"newrelic_example\", {\n    name: \"my New Relic integration\",\n    description: \"example New Relic integration\",\n    type: \"newrelic\",\n    config: {\n        account: \"XXXXXXX\",\n        key: \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\",\n    },\n});\nconst pagerdutyExample = new fastly.Integration(\"pagerduty_example\", {\n    name: \"my PagerDuty integration\",\n    description: \"example PagerDuty integration\",\n    type: \"pagerduty\",\n    config: {\n        key: \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\",\n    },\n});\nconst slackExample = new fastly.Integration(\"slack_example\", {\n    name: \"my Slack integration\",\n    description: \"example Slack integration\",\n    type: \"slack\",\n    config: {\n        webhook: \"https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX\",\n    },\n});\nconst webhookExample = new fastly.Integration(\"webhook_example\", {\n    name: \"my webhook integration\",\n    description: \"example webhook integration\",\n    type: \"webhook\",\n    config: {\n        webhook: \"https://my.domain.com/webhook\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nmailinglist_example = fastly.Integration(\"mailinglist_example\",\n    name=\"my mailing list integration\",\n    description=\"example mailing list integration\",\n    type=\"mailinglist\",\n    config={\n        \"address\": \"incoming-hook@my.domain.com\",\n    })\nmicrosoftteams_example = fastly.Integration(\"microsoftteams_example\",\n    name=\"my Microsoft Teams integration\",\n    description=\"example Microsoft Teams integration\",\n    type=\"microsoftteams\",\n    config={\n        \"webhook\": \"https://m365x012345.webhook.office.com\",\n    })\nnewrelic_example = fastly.Integration(\"newrelic_example\",\n    name=\"my New Relic integration\",\n    description=\"example New Relic integration\",\n    type=\"newrelic\",\n    config={\n        \"account\": \"XXXXXXX\",\n        \"key\": \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\",\n    })\npagerduty_example = fastly.Integration(\"pagerduty_example\",\n    name=\"my PagerDuty integration\",\n    description=\"example PagerDuty integration\",\n    type=\"pagerduty\",\n    config={\n        \"key\": \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\",\n    })\nslack_example = fastly.Integration(\"slack_example\",\n    name=\"my Slack integration\",\n    description=\"example Slack integration\",\n    type=\"slack\",\n    config={\n        \"webhook\": \"https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX\",\n    })\nwebhook_example = fastly.Integration(\"webhook_example\",\n    name=\"my webhook integration\",\n    description=\"example webhook integration\",\n    type=\"webhook\",\n    config={\n        \"webhook\": \"https://my.domain.com/webhook\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var mailinglistExample = new Fastly.Integration(\"mailinglist_example\", new()\n    {\n        Name = \"my mailing list integration\",\n        Description = \"example mailing list integration\",\n        Type = \"mailinglist\",\n        Config = \n        {\n            { \"address\", \"incoming-hook@my.domain.com\" },\n        },\n    });\n\n    var microsoftteamsExample = new Fastly.Integration(\"microsoftteams_example\", new()\n    {\n        Name = \"my Microsoft Teams integration\",\n        Description = \"example Microsoft Teams integration\",\n        Type = \"microsoftteams\",\n        Config = \n        {\n            { \"webhook\", \"https://m365x012345.webhook.office.com\" },\n        },\n    });\n\n    var newrelicExample = new Fastly.Integration(\"newrelic_example\", new()\n    {\n        Name = \"my New Relic integration\",\n        Description = \"example New Relic integration\",\n        Type = \"newrelic\",\n        Config = \n        {\n            { \"account\", \"XXXXXXX\" },\n            { \"key\", \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\" },\n        },\n    });\n\n    var pagerdutyExample = new Fastly.Integration(\"pagerduty_example\", new()\n    {\n        Name = \"my PagerDuty integration\",\n        Description = \"example PagerDuty integration\",\n        Type = \"pagerduty\",\n        Config = \n        {\n            { \"key\", \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\" },\n        },\n    });\n\n    var slackExample = new Fastly.Integration(\"slack_example\", new()\n    {\n        Name = \"my Slack integration\",\n        Description = \"example Slack integration\",\n        Type = \"slack\",\n        Config = \n        {\n            { \"webhook\", \"https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX\" },\n        },\n    });\n\n    var webhookExample = new Fastly.Integration(\"webhook_example\", new()\n    {\n        Name = \"my webhook integration\",\n        Description = \"example webhook integration\",\n        Type = \"webhook\",\n        Config = \n        {\n            { \"webhook\", \"https://my.domain.com/webhook\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewIntegration(ctx, \"mailinglist_example\", \u0026fastly.IntegrationArgs{\n\t\t\tName:        pulumi.String(\"my mailing list integration\"),\n\t\t\tDescription: pulumi.String(\"example mailing list integration\"),\n\t\t\tType:        pulumi.String(\"mailinglist\"),\n\t\t\tConfig: pulumi.StringMap{\n\t\t\t\t\"address\": pulumi.String(\"incoming-hook@my.domain.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewIntegration(ctx, \"microsoftteams_example\", \u0026fastly.IntegrationArgs{\n\t\t\tName:        pulumi.String(\"my Microsoft Teams integration\"),\n\t\t\tDescription: pulumi.String(\"example Microsoft Teams integration\"),\n\t\t\tType:        pulumi.String(\"microsoftteams\"),\n\t\t\tConfig: pulumi.StringMap{\n\t\t\t\t\"webhook\": pulumi.String(\"https://m365x012345.webhook.office.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewIntegration(ctx, \"newrelic_example\", \u0026fastly.IntegrationArgs{\n\t\t\tName:        pulumi.String(\"my New Relic integration\"),\n\t\t\tDescription: pulumi.String(\"example New Relic integration\"),\n\t\t\tType:        pulumi.String(\"newrelic\"),\n\t\t\tConfig: pulumi.StringMap{\n\t\t\t\t\"account\": pulumi.String(\"XXXXXXX\"),\n\t\t\t\t\"key\":     pulumi.String(\"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewIntegration(ctx, \"pagerduty_example\", \u0026fastly.IntegrationArgs{\n\t\t\tName:        pulumi.String(\"my PagerDuty integration\"),\n\t\t\tDescription: pulumi.String(\"example PagerDuty integration\"),\n\t\t\tType:        pulumi.String(\"pagerduty\"),\n\t\t\tConfig: pulumi.StringMap{\n\t\t\t\t\"key\": pulumi.String(\"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewIntegration(ctx, \"slack_example\", \u0026fastly.IntegrationArgs{\n\t\t\tName:        pulumi.String(\"my Slack integration\"),\n\t\t\tDescription: pulumi.String(\"example Slack integration\"),\n\t\t\tType:        pulumi.String(\"slack\"),\n\t\t\tConfig: pulumi.StringMap{\n\t\t\t\t\"webhook\": pulumi.String(\"https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewIntegration(ctx, \"webhook_example\", \u0026fastly.IntegrationArgs{\n\t\t\tName:        pulumi.String(\"my webhook integration\"),\n\t\t\tDescription: pulumi.String(\"example webhook integration\"),\n\t\t\tType:        pulumi.String(\"webhook\"),\n\t\t\tConfig: pulumi.StringMap{\n\t\t\t\t\"webhook\": pulumi.String(\"https://my.domain.com/webhook\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.Integration;\nimport com.pulumi.fastly.IntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var mailinglistExample = new Integration(\"mailinglistExample\", IntegrationArgs.builder()\n            .name(\"my mailing list integration\")\n            .description(\"example mailing list integration\")\n            .type(\"mailinglist\")\n            .config(Map.of(\"address\", \"incoming-hook@my.domain.com\"))\n            .build());\n\n        var microsoftteamsExample = new Integration(\"microsoftteamsExample\", IntegrationArgs.builder()\n            .name(\"my Microsoft Teams integration\")\n            .description(\"example Microsoft Teams integration\")\n            .type(\"microsoftteams\")\n            .config(Map.of(\"webhook\", \"https://m365x012345.webhook.office.com\"))\n            .build());\n\n        var newrelicExample = new Integration(\"newrelicExample\", IntegrationArgs.builder()\n            .name(\"my New Relic integration\")\n            .description(\"example New Relic integration\")\n            .type(\"newrelic\")\n            .config(Map.ofEntries(\n                Map.entry(\"account\", \"XXXXXXX\"),\n                Map.entry(\"key\", \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\")\n            ))\n            .build());\n\n        var pagerdutyExample = new Integration(\"pagerdutyExample\", IntegrationArgs.builder()\n            .name(\"my PagerDuty integration\")\n            .description(\"example PagerDuty integration\")\n            .type(\"pagerduty\")\n            .config(Map.of(\"key\", \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"))\n            .build());\n\n        var slackExample = new Integration(\"slackExample\", IntegrationArgs.builder()\n            .name(\"my Slack integration\")\n            .description(\"example Slack integration\")\n            .type(\"slack\")\n            .config(Map.of(\"webhook\", \"https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX\"))\n            .build());\n\n        var webhookExample = new Integration(\"webhookExample\", IntegrationArgs.builder()\n            .name(\"my webhook integration\")\n            .description(\"example webhook integration\")\n            .type(\"webhook\")\n            .config(Map.of(\"webhook\", \"https://my.domain.com/webhook\"))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  mailinglistExample:\n    type: fastly:Integration\n    name: mailinglist_example\n    properties:\n      name: my mailing list integration\n      description: example mailing list integration\n      type: mailinglist\n      config:\n        address: incoming-hook@my.domain.com\n  microsoftteamsExample:\n    type: fastly:Integration\n    name: microsoftteams_example\n    properties:\n      name: my Microsoft Teams integration\n      description: example Microsoft Teams integration\n      type: microsoftteams\n      config:\n        webhook: https://m365x012345.webhook.office.com\n  newrelicExample:\n    type: fastly:Integration\n    name: newrelic_example\n    properties:\n      name: my New Relic integration\n      description: example New Relic integration\n      type: newrelic\n      config:\n        account: XXXXXXX\n        key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n  pagerdutyExample:\n    type: fastly:Integration\n    name: pagerduty_example\n    properties:\n      name: my PagerDuty integration\n      description: example PagerDuty integration\n      type: pagerduty\n      config:\n        key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n  slackExample:\n    type: fastly:Integration\n    name: slack_example\n    properties:\n      name: my Slack integration\n      description: example Slack integration\n      type: slack\n      config:\n        webhook: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX\n  webhookExample:\n    type: fastly:Integration\n    name: webhook_example\n    properties:\n      name: my webhook integration\n      description: example webhook integration\n      type: webhook\n      config:\n        webhook: https://my.domain.com/webhook\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"config":{"type":"object","additionalProperties":{"type":"string"},"description":"Configuration specific to the integration \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\"\u003e`type`\u003c/span\u003e (see documentation examples).\n","secret":true},"description":{"type":"string","description":"User submitted description of the integration.\n"},"name":{"type":"string","description":"User submitted name of the integration.\n"},"type":{"type":"string","description":"Type of the integration. One of: \u003cspan pulumi-lang-nodejs=\"`mailinglist`\" pulumi-lang-dotnet=\"`Mailinglist`\" pulumi-lang-go=\"`mailinglist`\" pulumi-lang-python=\"`mailinglist`\" pulumi-lang-yaml=\"`mailinglist`\" pulumi-lang-java=\"`mailinglist`\"\u003e`mailinglist`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`microsoftteams`\" pulumi-lang-dotnet=\"`Microsoftteams`\" pulumi-lang-go=\"`microsoftteams`\" pulumi-lang-python=\"`microsoftteams`\" pulumi-lang-yaml=\"`microsoftteams`\" pulumi-lang-java=\"`microsoftteams`\"\u003e`microsoftteams`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`newrelic`\" pulumi-lang-dotnet=\"`Newrelic`\" pulumi-lang-go=\"`newrelic`\" pulumi-lang-python=\"`newrelic`\" pulumi-lang-yaml=\"`newrelic`\" pulumi-lang-java=\"`newrelic`\"\u003e`newrelic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`pagerduty`\" pulumi-lang-dotnet=\"`Pagerduty`\" pulumi-lang-go=\"`pagerduty`\" pulumi-lang-python=\"`pagerduty`\" pulumi-lang-yaml=\"`pagerduty`\" pulumi-lang-java=\"`pagerduty`\"\u003e`pagerduty`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`slack`\" pulumi-lang-dotnet=\"`Slack`\" pulumi-lang-go=\"`slack`\" pulumi-lang-python=\"`slack`\" pulumi-lang-yaml=\"`slack`\" pulumi-lang-java=\"`slack`\"\u003e`slack`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`webhook`\" pulumi-lang-dotnet=\"`Webhook`\" pulumi-lang-go=\"`webhook`\" pulumi-lang-python=\"`webhook`\" pulumi-lang-yaml=\"`webhook`\" pulumi-lang-java=\"`webhook`\"\u003e`webhook`\u003c/span\u003e.\n"}},"required":["config","name","type"],"inputProperties":{"config":{"type":"object","additionalProperties":{"type":"string"},"description":"Configuration specific to the integration \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\"\u003e`type`\u003c/span\u003e (see documentation examples).\n","secret":true},"description":{"type":"string","description":"User submitted description of the integration.\n"},"name":{"type":"string","description":"User submitted name of the integration.\n"},"type":{"type":"string","description":"Type of the integration. One of: \u003cspan pulumi-lang-nodejs=\"`mailinglist`\" pulumi-lang-dotnet=\"`Mailinglist`\" pulumi-lang-go=\"`mailinglist`\" pulumi-lang-python=\"`mailinglist`\" pulumi-lang-yaml=\"`mailinglist`\" pulumi-lang-java=\"`mailinglist`\"\u003e`mailinglist`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`microsoftteams`\" pulumi-lang-dotnet=\"`Microsoftteams`\" pulumi-lang-go=\"`microsoftteams`\" pulumi-lang-python=\"`microsoftteams`\" pulumi-lang-yaml=\"`microsoftteams`\" pulumi-lang-java=\"`microsoftteams`\"\u003e`microsoftteams`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`newrelic`\" pulumi-lang-dotnet=\"`Newrelic`\" pulumi-lang-go=\"`newrelic`\" pulumi-lang-python=\"`newrelic`\" pulumi-lang-yaml=\"`newrelic`\" pulumi-lang-java=\"`newrelic`\"\u003e`newrelic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`pagerduty`\" pulumi-lang-dotnet=\"`Pagerduty`\" pulumi-lang-go=\"`pagerduty`\" pulumi-lang-python=\"`pagerduty`\" pulumi-lang-yaml=\"`pagerduty`\" pulumi-lang-java=\"`pagerduty`\"\u003e`pagerduty`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`slack`\" pulumi-lang-dotnet=\"`Slack`\" pulumi-lang-go=\"`slack`\" pulumi-lang-python=\"`slack`\" pulumi-lang-yaml=\"`slack`\" pulumi-lang-java=\"`slack`\"\u003e`slack`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`webhook`\" pulumi-lang-dotnet=\"`Webhook`\" pulumi-lang-go=\"`webhook`\" pulumi-lang-python=\"`webhook`\" pulumi-lang-yaml=\"`webhook`\" pulumi-lang-java=\"`webhook`\"\u003e`webhook`\u003c/span\u003e.\n"}},"requiredInputs":["config","type"],"stateInputs":{"description":"Input properties used for looking up and filtering Integration resources.\n","properties":{"config":{"type":"object","additionalProperties":{"type":"string"},"description":"Configuration specific to the integration \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\"\u003e`type`\u003c/span\u003e (see documentation examples).\n","secret":true},"description":{"type":"string","description":"User submitted description of the integration.\n"},"name":{"type":"string","description":"User submitted name of the integration.\n"},"type":{"type":"string","description":"Type of the integration. One of: \u003cspan pulumi-lang-nodejs=\"`mailinglist`\" pulumi-lang-dotnet=\"`Mailinglist`\" pulumi-lang-go=\"`mailinglist`\" pulumi-lang-python=\"`mailinglist`\" pulumi-lang-yaml=\"`mailinglist`\" pulumi-lang-java=\"`mailinglist`\"\u003e`mailinglist`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`microsoftteams`\" pulumi-lang-dotnet=\"`Microsoftteams`\" pulumi-lang-go=\"`microsoftteams`\" pulumi-lang-python=\"`microsoftteams`\" pulumi-lang-yaml=\"`microsoftteams`\" pulumi-lang-java=\"`microsoftteams`\"\u003e`microsoftteams`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`newrelic`\" pulumi-lang-dotnet=\"`Newrelic`\" pulumi-lang-go=\"`newrelic`\" pulumi-lang-python=\"`newrelic`\" pulumi-lang-yaml=\"`newrelic`\" pulumi-lang-java=\"`newrelic`\"\u003e`newrelic`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`pagerduty`\" pulumi-lang-dotnet=\"`Pagerduty`\" pulumi-lang-go=\"`pagerduty`\" pulumi-lang-python=\"`pagerduty`\" pulumi-lang-yaml=\"`pagerduty`\" pulumi-lang-java=\"`pagerduty`\"\u003e`pagerduty`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`slack`\" pulumi-lang-dotnet=\"`Slack`\" pulumi-lang-go=\"`slack`\" pulumi-lang-python=\"`slack`\" pulumi-lang-yaml=\"`slack`\" pulumi-lang-java=\"`slack`\"\u003e`slack`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`webhook`\" pulumi-lang-dotnet=\"`Webhook`\" pulumi-lang-go=\"`webhook`\" pulumi-lang-python=\"`webhook`\" pulumi-lang-yaml=\"`webhook`\" pulumi-lang-java=\"`webhook`\"\u003e`webhook`\u003c/span\u003e.\n"}},"type":"object"}},"fastly:index/kvstore:Kvstore":{"description":"Provides a persistent, globally consistent key-value store accessible to Compute services during request processing.\n\n\u003e **Note** The \u003cspan pulumi-lang-nodejs=\"`kvStore`\" pulumi-lang-dotnet=\"`KvStore`\" pulumi-lang-go=\"`kvStore`\" pulumi-lang-python=\"`kv_store`\" pulumi-lang-yaml=\"`kvStore`\" pulumi-lang-java=\"`kvStore`\"\u003e`kv_store`\u003c/span\u003e feature does not support seeding the store with data. This is because the size of objects that can be stored is very large and Terraform is designed for containing configuration, not data. You should use either the [Fastly CLI](https://developer.fastly.com/learning/tools/cli/), [Fastly API](https://developer.fastly.com/reference/api/) or one of the available [Fastly API Clients](https://developer.fastly.com/reference/api/#clients) to populate your KV Store.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\n// IMPORTANT: Deleting a KV Store requires first deleting its resource_link.\n// This requires a two-step `pulumi up` as we can't guarantee deletion order.\n// e.g. resource_link deletion within fastly_service_compute might not finish first.\nconst exampleKvstore = new fastly.Kvstore(\"example\", {name: \"my_kv_store\"});\nconst example = fastly.getPackageHash({\n    filename: \"package.tar.gz\",\n});\nconst exampleServiceCompute = new fastly.ServiceCompute(\"example\", {\n    name: \"my_compute_service\",\n    domains: [{\n        name: \"demo.example.com\",\n    }],\n    \"package\": {\n        filename: \"package.tar.gz\",\n        sourceCodeHash: example.then(example =\u003e example.hash),\n    },\n    resourceLinks: [{\n        name: \"my_resource_link\",\n        resourceId: exampleKvstore.id,\n    }],\n    forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\n# IMPORTANT: Deleting a KV Store requires first deleting its resource_link.\n# This requires a two-step `pulumi up` as we can't guarantee deletion order.\n# e.g. resource_link deletion within fastly_service_compute might not finish first.\nexample_kvstore = fastly.Kvstore(\"example\", name=\"my_kv_store\")\nexample = fastly.get_package_hash(filename=\"package.tar.gz\")\nexample_service_compute = fastly.ServiceCompute(\"example\",\n    name=\"my_compute_service\",\n    domains=[{\n        \"name\": \"demo.example.com\",\n    }],\n    package={\n        \"filename\": \"package.tar.gz\",\n        \"source_code_hash\": example.hash,\n    },\n    resource_links=[{\n        \"name\": \"my_resource_link\",\n        \"resource_id\": example_kvstore.id,\n    }],\n    force_destroy=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // IMPORTANT: Deleting a KV Store requires first deleting its resource_link.\n    // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n    // e.g. resource_link deletion within fastly_service_compute might not finish first.\n    var exampleKvstore = new Fastly.Kvstore(\"example\", new()\n    {\n        Name = \"my_kv_store\",\n    });\n\n    var example = Fastly.GetPackageHash.Invoke(new()\n    {\n        Filename = \"package.tar.gz\",\n    });\n\n    var exampleServiceCompute = new Fastly.ServiceCompute(\"example\", new()\n    {\n        Name = \"my_compute_service\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceComputeDomainArgs\n            {\n                Name = \"demo.example.com\",\n            },\n        },\n        Package = new Fastly.Inputs.ServiceComputePackageArgs\n        {\n            Filename = \"package.tar.gz\",\n            SourceCodeHash = example.Apply(getPackageHashResult =\u003e getPackageHashResult.Hash),\n        },\n        ResourceLinks = new[]\n        {\n            new Fastly.Inputs.ServiceComputeResourceLinkArgs\n            {\n                Name = \"my_resource_link\",\n                ResourceId = exampleKvstore.Id,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// IMPORTANT: Deleting a KV Store requires first deleting its resource_link.\n\t\t// This requires a two-step `pulumi up` as we can't guarantee deletion order.\n\t\t// e.g. resource_link deletion within fastly_service_compute might not finish first.\n\t\texampleKvstore, err := fastly.NewKvstore(ctx, \"example\", \u0026fastly.KvstoreArgs{\n\t\t\tName: pulumi.String(\"my_kv_store\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := fastly.GetPackageHash(ctx, \u0026fastly.GetPackageHashArgs{\n\t\t\tFilename: pulumi.StringRef(\"package.tar.gz\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceCompute(ctx, \"example\", \u0026fastly.ServiceComputeArgs{\n\t\t\tName: pulumi.String(\"my_compute_service\"),\n\t\t\tDomains: fastly.ServiceComputeDomainArray{\n\t\t\t\t\u0026fastly.ServiceComputeDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"demo.example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackage: \u0026fastly.ServiceComputePackageArgs{\n\t\t\t\tFilename:       pulumi.String(\"package.tar.gz\"),\n\t\t\t\tSourceCodeHash: pulumi.String(example.Hash),\n\t\t\t},\n\t\t\tResourceLinks: fastly.ServiceComputeResourceLinkArray{\n\t\t\t\t\u0026fastly.ServiceComputeResourceLinkArgs{\n\t\t\t\t\tName:       pulumi.String(\"my_resource_link\"),\n\t\t\t\t\tResourceId: exampleKvstore.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.Kvstore;\nimport com.pulumi.fastly.KvstoreArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetPackageHashArgs;\nimport com.pulumi.fastly.ServiceCompute;\nimport com.pulumi.fastly.ServiceComputeArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceComputePackageArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeResourceLinkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // IMPORTANT: Deleting a KV Store requires first deleting its resource_link.\n        // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n        // e.g. resource_link deletion within fastly_service_compute might not finish first.\n        var exampleKvstore = new Kvstore(\"exampleKvstore\", KvstoreArgs.builder()\n            .name(\"my_kv_store\")\n            .build());\n\n        final var example = FastlyFunctions.getPackageHash(GetPackageHashArgs.builder()\n            .filename(\"package.tar.gz\")\n            .build());\n\n        var exampleServiceCompute = new ServiceCompute(\"exampleServiceCompute\", ServiceComputeArgs.builder()\n            .name(\"my_compute_service\")\n            .domains(ServiceComputeDomainArgs.builder()\n                .name(\"demo.example.com\")\n                .build())\n            .package_(ServiceComputePackageArgs.builder()\n                .filename(\"package.tar.gz\")\n                .sourceCodeHash(example.hash())\n                .build())\n            .resourceLinks(ServiceComputeResourceLinkArgs.builder()\n                .name(\"my_resource_link\")\n                .resourceId(exampleKvstore.id())\n                .build())\n            .forceDestroy(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # IMPORTANT: Deleting a KV Store requires first deleting its resource_link.\n  # This requires a two-step `pulumi up` as we can't guarantee deletion order.\n  # e.g. resource_link deletion within fastly_service_compute might not finish first.\n  exampleKvstore:\n    type: fastly:Kvstore\n    name: example\n    properties:\n      name: my_kv_store\n  exampleServiceCompute:\n    type: fastly:ServiceCompute\n    name: example\n    properties:\n      name: my_compute_service\n      domains:\n        - name: demo.example.com\n      package:\n        filename: package.tar.gz\n        sourceCodeHash: ${example.hash}\n      resourceLinks:\n        - name: my_resource_link\n          resourceId: ${exampleKvstore.id}\n      forceDestroy: true\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getPackageHash\n      arguments:\n        filename: package.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly KV Stores can be imported using their Store ID, e.g.\n\n```sh\n$ pulumi import fastly:index/kvstore:Kvstore example xxxxxxxxxxxxxxxxxxxx\n```\n\n","properties":{"forceDestroy":{"type":"boolean","description":"Allow the KV Store to be deleted, even if it contains entries. Defaults to false.\n"},"location":{"type":"string","description":"The regional location of the KV Store. Valid values are `US`, `EU`, `ASIA`, and `AUS`.\n"},"name":{"type":"string","description":"A unique name to identify the KV Store. It is important to note that changing this attribute will delete and recreate the KV Store, and discard the current entries. You MUST first delete the associated\u003cspan pulumi-lang-nodejs=\" resourceLink \" pulumi-lang-dotnet=\" ResourceLink \" pulumi-lang-go=\" resourceLink \" pulumi-lang-python=\" resource_link \" pulumi-lang-yaml=\" resourceLink \" pulumi-lang-java=\" resourceLink \"\u003e resource_link \u003c/span\u003eblock from your service before modifying this field.\n"}},"required":["name"],"inputProperties":{"forceDestroy":{"type":"boolean","description":"Allow the KV Store to be deleted, even if it contains entries. Defaults to false.\n"},"location":{"type":"string","description":"The regional location of the KV Store. Valid values are `US`, `EU`, `ASIA`, and `AUS`.\n"},"name":{"type":"string","description":"A unique name to identify the KV Store. It is important to note that changing this attribute will delete and recreate the KV Store, and discard the current entries. You MUST first delete the associated\u003cspan pulumi-lang-nodejs=\" resourceLink \" pulumi-lang-dotnet=\" ResourceLink \" pulumi-lang-go=\" resourceLink \" pulumi-lang-python=\" resource_link \" pulumi-lang-yaml=\" resourceLink \" pulumi-lang-java=\" resourceLink \"\u003e resource_link \u003c/span\u003eblock from your service before modifying this field.\n","willReplaceOnChanges":true}},"stateInputs":{"description":"Input properties used for looking up and filtering Kvstore resources.\n","properties":{"forceDestroy":{"type":"boolean","description":"Allow the KV Store to be deleted, even if it contains entries. Defaults to false.\n"},"location":{"type":"string","description":"The regional location of the KV Store. Valid values are `US`, `EU`, `ASIA`, and `AUS`.\n"},"name":{"type":"string","description":"A unique name to identify the KV Store. It is important to note that changing this attribute will delete and recreate the KV Store, and discard the current entries. You MUST first delete the associated\u003cspan pulumi-lang-nodejs=\" resourceLink \" pulumi-lang-dotnet=\" ResourceLink \" pulumi-lang-go=\" resourceLink \" pulumi-lang-python=\" resource_link \" pulumi-lang-yaml=\" resourceLink \" pulumi-lang-java=\" resourceLink \"\u003e resource_link \u003c/span\u003eblock from your service before modifying this field.\n","willReplaceOnChanges":true}},"type":"object"}},"fastly:index/ngwafAccountList:NgwafAccountList":{"description":"Provides a Fastly Next-Gen WAF **List** resource scoped to an **account**.\n\nAccount-scoped lists are reusable across all workspaces in the account and can be referenced in account-level or workspace-level rules.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.NgwafAccountList(\"example\", {\n    name: \"shared-bot-ip-list\",\n    description: \"List of known bot IPs shared across workspaces\",\n    type: \"ip\",\n    entries: [\n        \"1.2.3.4\",\n        \"5.6.7.8\",\n        \"203.0.113.42\",\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.NgwafAccountList(\"example\",\n    name=\"shared-bot-ip-list\",\n    description=\"List of known bot IPs shared across workspaces\",\n    type=\"ip\",\n    entries=[\n        \"1.2.3.4\",\n        \"5.6.7.8\",\n        \"203.0.113.42\",\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.NgwafAccountList(\"example\", new()\n    {\n        Name = \"shared-bot-ip-list\",\n        Description = \"List of known bot IPs shared across workspaces\",\n        Type = \"ip\",\n        Entries = new[]\n        {\n            \"1.2.3.4\",\n            \"5.6.7.8\",\n            \"203.0.113.42\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafAccountList(ctx, \"example\", \u0026fastly.NgwafAccountListArgs{\n\t\t\tName:        pulumi.String(\"shared-bot-ip-list\"),\n\t\t\tDescription: pulumi.String(\"List of known bot IPs shared across workspaces\"),\n\t\t\tType:        pulumi.String(\"ip\"),\n\t\t\tEntries: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"1.2.3.4\"),\n\t\t\t\tpulumi.String(\"5.6.7.8\"),\n\t\t\t\tpulumi.String(\"203.0.113.42\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafAccountList;\nimport com.pulumi.fastly.NgwafAccountListArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new NgwafAccountList(\"example\", NgwafAccountListArgs.builder()\n            .name(\"shared-bot-ip-list\")\n            .description(\"List of known bot IPs shared across workspaces\")\n            .type(\"ip\")\n            .entries(            \n                \"1.2.3.4\",\n                \"5.6.7.8\",\n                \"203.0.113.42\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:NgwafAccountList\n    properties:\n      name: shared-bot-ip-list\n      description: List of known bot IPs shared across workspaces\n      type: ip\n      entries:\n        - 1.2.3.4\n        - 5.6.7.8\n        - 203.0.113.42\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF account-scoped lists can be imported using just the list ID, e.g.:\n\n```sh\n$ pulumi import fastly:index/ngwafAccountList:NgwafAccountList demo \u003clistID\u003e\n```\n\n","properties":{"appliesTos":{"type":"array","items":{"type":"string"},"description":"INTERNAL: Used to build scope for account-scoped lists. Not user-configurable.\n","secret":true},"description":{"type":"string","description":"The description of the list.\n"},"entries":{"type":"array","items":{"type":"string"},"description":"The values in the list.\n"},"name":{"type":"string","description":"The name of the list.\n"},"type":{"type":"string","description":"The type of list. Accepted values are \u003cspan pulumi-lang-nodejs=\"`string`\" pulumi-lang-dotnet=\"`String`\" pulumi-lang-go=\"`string`\" pulumi-lang-python=\"`string`\" pulumi-lang-yaml=\"`string`\" pulumi-lang-java=\"`string`\"\u003e`string`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`wildcard`\" pulumi-lang-dotnet=\"`Wildcard`\" pulumi-lang-go=\"`wildcard`\" pulumi-lang-python=\"`wildcard`\" pulumi-lang-yaml=\"`wildcard`\" pulumi-lang-java=\"`wildcard`\"\u003e`wildcard`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`country`\" pulumi-lang-dotnet=\"`Country`\" pulumi-lang-go=\"`country`\" pulumi-lang-python=\"`country`\" pulumi-lang-yaml=\"`country`\" pulumi-lang-java=\"`country`\"\u003e`country`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n"}},"required":["appliesTos","entries","name","type"],"inputProperties":{"description":{"type":"string","description":"The description of the list.\n"},"entries":{"type":"array","items":{"type":"string"},"description":"The values in the list.\n"},"name":{"type":"string","description":"The name of the list.\n","willReplaceOnChanges":true},"type":{"type":"string","description":"The type of list. Accepted values are \u003cspan pulumi-lang-nodejs=\"`string`\" pulumi-lang-dotnet=\"`String`\" pulumi-lang-go=\"`string`\" pulumi-lang-python=\"`string`\" pulumi-lang-yaml=\"`string`\" pulumi-lang-java=\"`string`\"\u003e`string`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`wildcard`\" pulumi-lang-dotnet=\"`Wildcard`\" pulumi-lang-go=\"`wildcard`\" pulumi-lang-python=\"`wildcard`\" pulumi-lang-yaml=\"`wildcard`\" pulumi-lang-java=\"`wildcard`\"\u003e`wildcard`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`country`\" pulumi-lang-dotnet=\"`Country`\" pulumi-lang-go=\"`country`\" pulumi-lang-python=\"`country`\" pulumi-lang-yaml=\"`country`\" pulumi-lang-java=\"`country`\"\u003e`country`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n","willReplaceOnChanges":true}},"requiredInputs":["entries","type"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafAccountList resources.\n","properties":{"appliesTos":{"type":"array","items":{"type":"string"},"description":"INTERNAL: Used to build scope for account-scoped lists. Not user-configurable.\n","secret":true},"description":{"type":"string","description":"The description of the list.\n"},"entries":{"type":"array","items":{"type":"string"},"description":"The values in the list.\n"},"name":{"type":"string","description":"The name of the list.\n","willReplaceOnChanges":true},"type":{"type":"string","description":"The type of list. Accepted values are \u003cspan pulumi-lang-nodejs=\"`string`\" pulumi-lang-dotnet=\"`String`\" pulumi-lang-go=\"`string`\" pulumi-lang-python=\"`string`\" pulumi-lang-yaml=\"`string`\" pulumi-lang-java=\"`string`\"\u003e`string`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`wildcard`\" pulumi-lang-dotnet=\"`Wildcard`\" pulumi-lang-go=\"`wildcard`\" pulumi-lang-python=\"`wildcard`\" pulumi-lang-yaml=\"`wildcard`\" pulumi-lang-java=\"`wildcard`\"\u003e`wildcard`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`country`\" pulumi-lang-dotnet=\"`Country`\" pulumi-lang-go=\"`country`\" pulumi-lang-python=\"`country`\" pulumi-lang-yaml=\"`country`\" pulumi-lang-java=\"`country`\"\u003e`country`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n","willReplaceOnChanges":true}},"type":"object"}},"fastly:index/ngwafAccountRule:NgwafAccountRule":{"description":"Provides a Fastly Next-Gen WAF Account Rule.  \nAccount-level rules apply across one or more workspaces and are useful for defining shared or global WAF logic.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.NgwafAccountRule(\"example\", {\n    appliesTos: [\"*\"],\n    type: \"request\",\n    description: \"example\",\n    enabled: true,\n    requestLogging: \"sampled\",\n    groupOperator: \"all\",\n    actions: [{\n        type: \"block\",\n    }],\n    conditions: [{\n        field: \"ip\",\n        operator: \"equals\",\n        value: \"1.2.3.4\",\n    }],\n    groupConditions: [{\n        groupOperator: \"all\",\n        conditions: [{\n            field: \"method\",\n            operator: \"equals\",\n            value: \"POST\",\n        }],\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.NgwafAccountRule(\"example\",\n    applies_tos=[\"*\"],\n    type=\"request\",\n    description=\"example\",\n    enabled=True,\n    request_logging=\"sampled\",\n    group_operator=\"all\",\n    actions=[{\n        \"type\": \"block\",\n    }],\n    conditions=[{\n        \"field\": \"ip\",\n        \"operator\": \"equals\",\n        \"value\": \"1.2.3.4\",\n    }],\n    group_conditions=[{\n        \"group_operator\": \"all\",\n        \"conditions\": [{\n            \"field\": \"method\",\n            \"operator\": \"equals\",\n            \"value\": \"POST\",\n        }],\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.NgwafAccountRule(\"example\", new()\n    {\n        AppliesTos = new[]\n        {\n            \"*\",\n        },\n        Type = \"request\",\n        Description = \"example\",\n        Enabled = true,\n        RequestLogging = \"sampled\",\n        GroupOperator = \"all\",\n        Actions = new[]\n        {\n            new Fastly.Inputs.NgwafAccountRuleActionArgs\n            {\n                Type = \"block\",\n            },\n        },\n        Conditions = new[]\n        {\n            new Fastly.Inputs.NgwafAccountRuleConditionArgs\n            {\n                Field = \"ip\",\n                Operator = \"equals\",\n                Value = \"1.2.3.4\",\n            },\n        },\n        GroupConditions = new[]\n        {\n            new Fastly.Inputs.NgwafAccountRuleGroupConditionArgs\n            {\n                GroupOperator = \"all\",\n                Conditions = new[]\n                {\n                    new Fastly.Inputs.NgwafAccountRuleGroupConditionConditionArgs\n                    {\n                        Field = \"method\",\n                        Operator = \"equals\",\n                        Value = \"POST\",\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafAccountRule(ctx, \"example\", \u0026fastly.NgwafAccountRuleArgs{\n\t\t\tAppliesTos: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"*\"),\n\t\t\t},\n\t\t\tType:           pulumi.String(\"request\"),\n\t\t\tDescription:    pulumi.String(\"example\"),\n\t\t\tEnabled:        pulumi.Bool(true),\n\t\t\tRequestLogging: pulumi.String(\"sampled\"),\n\t\t\tGroupOperator:  pulumi.String(\"all\"),\n\t\t\tActions: fastly.NgwafAccountRuleActionArray{\n\t\t\t\t\u0026fastly.NgwafAccountRuleActionArgs{\n\t\t\t\t\tType: pulumi.String(\"block\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tConditions: fastly.NgwafAccountRuleConditionArray{\n\t\t\t\t\u0026fastly.NgwafAccountRuleConditionArgs{\n\t\t\t\t\tField:    pulumi.String(\"ip\"),\n\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\tValue:    pulumi.String(\"1.2.3.4\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGroupConditions: fastly.NgwafAccountRuleGroupConditionArray{\n\t\t\t\t\u0026fastly.NgwafAccountRuleGroupConditionArgs{\n\t\t\t\t\tGroupOperator: pulumi.String(\"all\"),\n\t\t\t\t\tConditions: fastly.NgwafAccountRuleGroupConditionConditionArray{\n\t\t\t\t\t\t\u0026fastly.NgwafAccountRuleGroupConditionConditionArgs{\n\t\t\t\t\t\t\tField:    pulumi.String(\"method\"),\n\t\t\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\t\t\tValue:    pulumi.String(\"POST\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafAccountRule;\nimport com.pulumi.fastly.NgwafAccountRuleArgs;\nimport com.pulumi.fastly.inputs.NgwafAccountRuleActionArgs;\nimport com.pulumi.fastly.inputs.NgwafAccountRuleConditionArgs;\nimport com.pulumi.fastly.inputs.NgwafAccountRuleGroupConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new NgwafAccountRule(\"example\", NgwafAccountRuleArgs.builder()\n            .appliesTos(\"*\")\n            .type(\"request\")\n            .description(\"example\")\n            .enabled(true)\n            .requestLogging(\"sampled\")\n            .groupOperator(\"all\")\n            .actions(NgwafAccountRuleActionArgs.builder()\n                .type(\"block\")\n                .build())\n            .conditions(NgwafAccountRuleConditionArgs.builder()\n                .field(\"ip\")\n                .operator(\"equals\")\n                .value(\"1.2.3.4\")\n                .build())\n            .groupConditions(NgwafAccountRuleGroupConditionArgs.builder()\n                .groupOperator(\"all\")\n                .conditions(NgwafAccountRuleGroupConditionConditionArgs.builder()\n                    .field(\"method\")\n                    .operator(\"equals\")\n                    .value(\"POST\")\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:NgwafAccountRule\n    properties:\n      appliesTos:\n        - '*'\n      type: request\n      description: example\n      enabled: true\n      requestLogging: sampled\n      groupOperator: all\n      actions:\n        - type: block\n      conditions:\n        - field: ip\n          operator: equals\n          value: 1.2.3.4\n      groupConditions:\n        - groupOperator: all\n          conditions:\n            - field: method\n              operator: equals\n              value: POST\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF account rules can be imported using just the rule ID, e.g.:\n\n```sh\n$ pulumi import fastly:index/ngwafAccountRule:NgwafAccountRule demo \u003cruleID\u003e\n```\n\n","properties":{"actions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleAction:NgwafAccountRuleAction"},"description":"List of actions to perform when the rule matches.\n"},"appliesTos":{"type":"array","items":{"type":"string"},"description":"The list of workspace IDs this signal applies to, or the wildcard `*` if it applies to all workspaces.\n"},"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleCondition:NgwafAccountRuleCondition"},"description":"Flat list of individual conditions. Each must include \u003cspan pulumi-lang-nodejs=\"`field`\" pulumi-lang-dotnet=\"`Field`\" pulumi-lang-go=\"`field`\" pulumi-lang-python=\"`field`\" pulumi-lang-yaml=\"`field`\" pulumi-lang-java=\"`field`\"\u003e`field`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`operator`\" pulumi-lang-dotnet=\"`Operator`\" pulumi-lang-go=\"`operator`\" pulumi-lang-python=\"`operator`\" pulumi-lang-yaml=\"`operator`\" pulumi-lang-java=\"`operator`\"\u003e`operator`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`value`\" pulumi-lang-dotnet=\"`Value`\" pulumi-lang-go=\"`value`\" pulumi-lang-python=\"`value`\" pulumi-lang-yaml=\"`value`\" pulumi-lang-java=\"`value`\"\u003e`value`\u003c/span\u003e.\n"},"description":{"type":"string","description":"The description of the rule.\n"},"enabled":{"type":"boolean","description":"Whether the rule is currently enabled.\n"},"groupConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleGroupCondition:NgwafAccountRuleGroupCondition"},"description":"List of grouped conditions with nested logic. Each group must define a \u003cspan pulumi-lang-nodejs=\"`groupOperator`\" pulumi-lang-dotnet=\"`GroupOperator`\" pulumi-lang-go=\"`groupOperator`\" pulumi-lang-python=\"`group_operator`\" pulumi-lang-yaml=\"`groupOperator`\" pulumi-lang-java=\"`groupOperator`\"\u003e`group_operator`\u003c/span\u003e and at least one condition or multival*condition.\n"},"groupOperator":{"type":"string","description":"Logical operator to apply to group conditions. Accepted values are \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e.\n"},"multivalConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleMultivalCondition:NgwafAccountRuleMultivalCondition"},"description":"List of multival conditions with nested logic. Each multival list must define a `field, operator,\u003cspan pulumi-lang-nodejs=\" groupOperator`\" pulumi-lang-dotnet=\" GroupOperator`\" pulumi-lang-go=\" groupOperator`\" pulumi-lang-python=\" group_operator`\" pulumi-lang-yaml=\" groupOperator`\" pulumi-lang-java=\" groupOperator`\"\u003e group_operator`\u003c/span\u003e and at least one condition.\n"},"requestLogging":{"type":"string","description":"Logging behavior for matching requests. Accepted values are \u003cspan pulumi-lang-nodejs=\"`sampled`\" pulumi-lang-dotnet=\"`Sampled`\" pulumi-lang-go=\"`sampled`\" pulumi-lang-python=\"`sampled`\" pulumi-lang-yaml=\"`sampled`\" pulumi-lang-java=\"`sampled`\"\u003e`sampled`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"type":{"type":"string","description":"The type of the rule. Accepted values are \u003cspan pulumi-lang-nodejs=\"`request`\" pulumi-lang-dotnet=\"`Request`\" pulumi-lang-go=\"`request`\" pulumi-lang-python=\"`request`\" pulumi-lang-yaml=\"`request`\" pulumi-lang-java=\"`request`\"\u003e`request`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n"}},"required":["actions","appliesTos","description","enabled","type"],"inputProperties":{"actions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleAction:NgwafAccountRuleAction"},"description":"List of actions to perform when the rule matches.\n"},"appliesTos":{"type":"array","items":{"type":"string"},"description":"The list of workspace IDs this signal applies to, or the wildcard `*` if it applies to all workspaces.\n"},"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleCondition:NgwafAccountRuleCondition"},"description":"Flat list of individual conditions. Each must include \u003cspan pulumi-lang-nodejs=\"`field`\" pulumi-lang-dotnet=\"`Field`\" pulumi-lang-go=\"`field`\" pulumi-lang-python=\"`field`\" pulumi-lang-yaml=\"`field`\" pulumi-lang-java=\"`field`\"\u003e`field`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`operator`\" pulumi-lang-dotnet=\"`Operator`\" pulumi-lang-go=\"`operator`\" pulumi-lang-python=\"`operator`\" pulumi-lang-yaml=\"`operator`\" pulumi-lang-java=\"`operator`\"\u003e`operator`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`value`\" pulumi-lang-dotnet=\"`Value`\" pulumi-lang-go=\"`value`\" pulumi-lang-python=\"`value`\" pulumi-lang-yaml=\"`value`\" pulumi-lang-java=\"`value`\"\u003e`value`\u003c/span\u003e.\n"},"description":{"type":"string","description":"The description of the rule.\n"},"enabled":{"type":"boolean","description":"Whether the rule is currently enabled.\n"},"groupConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleGroupCondition:NgwafAccountRuleGroupCondition"},"description":"List of grouped conditions with nested logic. Each group must define a \u003cspan pulumi-lang-nodejs=\"`groupOperator`\" pulumi-lang-dotnet=\"`GroupOperator`\" pulumi-lang-go=\"`groupOperator`\" pulumi-lang-python=\"`group_operator`\" pulumi-lang-yaml=\"`groupOperator`\" pulumi-lang-java=\"`groupOperator`\"\u003e`group_operator`\u003c/span\u003e and at least one condition or multival*condition.\n"},"groupOperator":{"type":"string","description":"Logical operator to apply to group conditions. Accepted values are \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e.\n"},"multivalConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleMultivalCondition:NgwafAccountRuleMultivalCondition"},"description":"List of multival conditions with nested logic. Each multival list must define a `field, operator,\u003cspan pulumi-lang-nodejs=\" groupOperator`\" pulumi-lang-dotnet=\" GroupOperator`\" pulumi-lang-go=\" groupOperator`\" pulumi-lang-python=\" group_operator`\" pulumi-lang-yaml=\" groupOperator`\" pulumi-lang-java=\" groupOperator`\"\u003e group_operator`\u003c/span\u003e and at least one condition.\n"},"requestLogging":{"type":"string","description":"Logging behavior for matching requests. Accepted values are \u003cspan pulumi-lang-nodejs=\"`sampled`\" pulumi-lang-dotnet=\"`Sampled`\" pulumi-lang-go=\"`sampled`\" pulumi-lang-python=\"`sampled`\" pulumi-lang-yaml=\"`sampled`\" pulumi-lang-java=\"`sampled`\"\u003e`sampled`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"type":{"type":"string","description":"The type of the rule. Accepted values are \u003cspan pulumi-lang-nodejs=\"`request`\" pulumi-lang-dotnet=\"`Request`\" pulumi-lang-go=\"`request`\" pulumi-lang-python=\"`request`\" pulumi-lang-yaml=\"`request`\" pulumi-lang-java=\"`request`\"\u003e`request`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n","willReplaceOnChanges":true}},"requiredInputs":["actions","appliesTos","description","enabled","type"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafAccountRule resources.\n","properties":{"actions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleAction:NgwafAccountRuleAction"},"description":"List of actions to perform when the rule matches.\n"},"appliesTos":{"type":"array","items":{"type":"string"},"description":"The list of workspace IDs this signal applies to, or the wildcard `*` if it applies to all workspaces.\n"},"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleCondition:NgwafAccountRuleCondition"},"description":"Flat list of individual conditions. Each must include \u003cspan pulumi-lang-nodejs=\"`field`\" pulumi-lang-dotnet=\"`Field`\" pulumi-lang-go=\"`field`\" pulumi-lang-python=\"`field`\" pulumi-lang-yaml=\"`field`\" pulumi-lang-java=\"`field`\"\u003e`field`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`operator`\" pulumi-lang-dotnet=\"`Operator`\" pulumi-lang-go=\"`operator`\" pulumi-lang-python=\"`operator`\" pulumi-lang-yaml=\"`operator`\" pulumi-lang-java=\"`operator`\"\u003e`operator`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`value`\" pulumi-lang-dotnet=\"`Value`\" pulumi-lang-go=\"`value`\" pulumi-lang-python=\"`value`\" pulumi-lang-yaml=\"`value`\" pulumi-lang-java=\"`value`\"\u003e`value`\u003c/span\u003e.\n"},"description":{"type":"string","description":"The description of the rule.\n"},"enabled":{"type":"boolean","description":"Whether the rule is currently enabled.\n"},"groupConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleGroupCondition:NgwafAccountRuleGroupCondition"},"description":"List of grouped conditions with nested logic. Each group must define a \u003cspan pulumi-lang-nodejs=\"`groupOperator`\" pulumi-lang-dotnet=\"`GroupOperator`\" pulumi-lang-go=\"`groupOperator`\" pulumi-lang-python=\"`group_operator`\" pulumi-lang-yaml=\"`groupOperator`\" pulumi-lang-java=\"`groupOperator`\"\u003e`group_operator`\u003c/span\u003e and at least one condition or multival*condition.\n"},"groupOperator":{"type":"string","description":"Logical operator to apply to group conditions. Accepted values are \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e.\n"},"multivalConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafAccountRuleMultivalCondition:NgwafAccountRuleMultivalCondition"},"description":"List of multival conditions with nested logic. Each multival list must define a `field, operator,\u003cspan pulumi-lang-nodejs=\" groupOperator`\" pulumi-lang-dotnet=\" GroupOperator`\" pulumi-lang-go=\" groupOperator`\" pulumi-lang-python=\" group_operator`\" pulumi-lang-yaml=\" groupOperator`\" pulumi-lang-java=\" groupOperator`\"\u003e group_operator`\u003c/span\u003e and at least one condition.\n"},"requestLogging":{"type":"string","description":"Logging behavior for matching requests. Accepted values are \u003cspan pulumi-lang-nodejs=\"`sampled`\" pulumi-lang-dotnet=\"`Sampled`\" pulumi-lang-go=\"`sampled`\" pulumi-lang-python=\"`sampled`\" pulumi-lang-yaml=\"`sampled`\" pulumi-lang-java=\"`sampled`\"\u003e`sampled`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"type":{"type":"string","description":"The type of the rule. Accepted values are \u003cspan pulumi-lang-nodejs=\"`request`\" pulumi-lang-dotnet=\"`Request`\" pulumi-lang-go=\"`request`\" pulumi-lang-python=\"`request`\" pulumi-lang-yaml=\"`request`\" pulumi-lang-java=\"`request`\"\u003e`request`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n","willReplaceOnChanges":true}},"type":"object"}},"fastly:index/ngwafAccountSignal:NgwafAccountSignal":{"description":"Provides a Fastly Next-Gen WAF Account Signal.  \nAccount-level signals apply across one or more workspaces and are useful for defining shared or global WAF logic.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.NgwafAccountSignal(\"example\", {\n    appliesTos: [\"*\"],\n    description: \"example\",\n    name: \"Test Name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.NgwafAccountSignal(\"example\",\n    applies_tos=[\"*\"],\n    description=\"example\",\n    name=\"Test Name\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.NgwafAccountSignal(\"example\", new()\n    {\n        AppliesTos = new[]\n        {\n            \"*\",\n        },\n        Description = \"example\",\n        Name = \"Test Name\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafAccountSignal(ctx, \"example\", \u0026fastly.NgwafAccountSignalArgs{\n\t\t\tAppliesTos: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"*\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"example\"),\n\t\t\tName:        pulumi.String(\"Test Name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafAccountSignal;\nimport com.pulumi.fastly.NgwafAccountSignalArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new NgwafAccountSignal(\"example\", NgwafAccountSignalArgs.builder()\n            .appliesTos(\"*\")\n            .description(\"example\")\n            .name(\"Test Name\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:NgwafAccountSignal\n    properties:\n      appliesTos:\n        - '*'\n      description: example\n      name: Test Name\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF account signals can be imported using just the signal ID, e.g.:\n\n```sh\n$ pulumi import fastly:index/ngwafAccountSignal:NgwafAccountSignal demo \u003csignalID\u003e\n```\n\n","properties":{"appliesTos":{"type":"array","items":{"type":"string"},"description":"The list of workspace IDs this signal applies to, or the wildcard `*` if it applies to all workspaces.\n"},"description":{"type":"string","description":"The description of the signal.\n"},"name":{"type":"string","description":"The name of the signal. Special characters and periods are not accepted.\n"},"referenceId":{"type":"string","description":"The generated reference ID of the signal.\n"}},"required":["appliesTos","name","referenceId"],"inputProperties":{"appliesTos":{"type":"array","items":{"type":"string"},"description":"The list of workspace IDs this signal applies to, or the wildcard `*` if it applies to all workspaces.\n"},"description":{"type":"string","description":"The description of the signal.\n"},"name":{"type":"string","description":"The name of the signal. Special characters and periods are not accepted.\n","willReplaceOnChanges":true}},"requiredInputs":["appliesTos"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafAccountSignal resources.\n","properties":{"appliesTos":{"type":"array","items":{"type":"string"},"description":"The list of workspace IDs this signal applies to, or the wildcard `*` if it applies to all workspaces.\n"},"description":{"type":"string","description":"The description of the signal.\n"},"name":{"type":"string","description":"The name of the signal. Special characters and periods are not accepted.\n","willReplaceOnChanges":true},"referenceId":{"type":"string","description":"The generated reference ID of the signal.\n"}},"type":"object"}},"fastly:index/ngwafAlertDatadogIntegration:NgwafAlertDatadogIntegration":{"description":"Provides Fastly Next-Gen WAF Alert Datadog integrations, which provide a connection to Datadog.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demoDatadogAlert = new fastly.NgwafAlertDatadogIntegration(\"demo_datadog_alert\", {\n    description: \"Some Description\",\n    key: \"123456789\",\n    site: \"us1\",\n    workspaceId: demo.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo_datadog_alert = fastly.NgwafAlertDatadogIntegration(\"demo_datadog_alert\",\n    description=\"Some Description\",\n    key=\"123456789\",\n    site=\"us1\",\n    workspace_id=demo[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demoDatadogAlert = new Fastly.NgwafAlertDatadogIntegration(\"demo_datadog_alert\", new()\n    {\n        Description = \"Some Description\",\n        Key = \"123456789\",\n        Site = \"us1\",\n        WorkspaceId = demo.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafAlertDatadogIntegration(ctx, \"demo_datadog_alert\", \u0026fastly.NgwafAlertDatadogIntegrationArgs{\n\t\t\tDescription: pulumi.String(\"Some Description\"),\n\t\t\tKey:         pulumi.String(\"123456789\"),\n\t\t\tSite:        pulumi.String(\"us1\"),\n\t\t\tWorkspaceId: pulumi.Any(demo.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafAlertDatadogIntegration;\nimport com.pulumi.fastly.NgwafAlertDatadogIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demoDatadogAlert = new NgwafAlertDatadogIntegration(\"demoDatadogAlert\", NgwafAlertDatadogIntegrationArgs.builder()\n            .description(\"Some Description\")\n            .key(\"123456789\")\n            .site(\"us1\")\n            .workspaceId(demo.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demoDatadogAlert:\n    type: fastly:NgwafAlertDatadogIntegration\n    name: demo_datadog_alert\n    properties:\n      description: Some Description\n      key: '123456789'\n      site: us1\n      workspaceId: ${demo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF Alert Datadog integrations can be imported using their ID and the ID of the workspace they belong to.\n\n```sh\n$ pulumi import fastly:index/ngwafAlertDatadogIntegration:NgwafAlertDatadogIntegration example \u003cworkspace_id\u003e/\u003calert_id\u003e\n```\n\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"key":{"type":"string","description":"The Datadog key.\n","secret":true},"site":{"type":"string","description":"The Datadog site.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["key","site","workspaceId"],"inputProperties":{"description":{"type":"string","description":"The description of the alert.\n"},"key":{"type":"string","description":"The Datadog key.\n","secret":true},"site":{"type":"string","description":"The Datadog site.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["key","site","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafAlertDatadogIntegration resources.\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"key":{"type":"string","description":"The Datadog key.\n","secret":true},"site":{"type":"string","description":"The Datadog site.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafAlertJiraIntegration:NgwafAlertJiraIntegration":{"description":"Provides Fastly Next-Gen WAF Alert Jira integrations, which provide a connection to Jira.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demoJiraAlert = new fastly.NgwafAlertJiraIntegration(\"demo_jira_alert\", {\n    description: \"A description\",\n    host: \"https://mycompany.atlassian.net\",\n    issueType: \"task\",\n    key: \"a1b2c3d4e5f6789012345678901234567\",\n    project: \"test\",\n    username: \"user\",\n    workspaceId: demo.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo_jira_alert = fastly.NgwafAlertJiraIntegration(\"demo_jira_alert\",\n    description=\"A description\",\n    host=\"https://mycompany.atlassian.net\",\n    issue_type=\"task\",\n    key=\"a1b2c3d4e5f6789012345678901234567\",\n    project=\"test\",\n    username=\"user\",\n    workspace_id=demo[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demoJiraAlert = new Fastly.NgwafAlertJiraIntegration(\"demo_jira_alert\", new()\n    {\n        Description = \"A description\",\n        Host = \"https://mycompany.atlassian.net\",\n        IssueType = \"task\",\n        Key = \"a1b2c3d4e5f6789012345678901234567\",\n        Project = \"test\",\n        Username = \"user\",\n        WorkspaceId = demo.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafAlertJiraIntegration(ctx, \"demo_jira_alert\", \u0026fastly.NgwafAlertJiraIntegrationArgs{\n\t\t\tDescription: pulumi.String(\"A description\"),\n\t\t\tHost:        pulumi.String(\"https://mycompany.atlassian.net\"),\n\t\t\tIssueType:   pulumi.String(\"task\"),\n\t\t\tKey:         pulumi.String(\"a1b2c3d4e5f6789012345678901234567\"),\n\t\t\tProject:     pulumi.String(\"test\"),\n\t\t\tUsername:    pulumi.String(\"user\"),\n\t\t\tWorkspaceId: pulumi.Any(demo.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafAlertJiraIntegration;\nimport com.pulumi.fastly.NgwafAlertJiraIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demoJiraAlert = new NgwafAlertJiraIntegration(\"demoJiraAlert\", NgwafAlertJiraIntegrationArgs.builder()\n            .description(\"A description\")\n            .host(\"https://mycompany.atlassian.net\")\n            .issueType(\"task\")\n            .key(\"a1b2c3d4e5f6789012345678901234567\")\n            .project(\"test\")\n            .username(\"user\")\n            .workspaceId(demo.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demoJiraAlert:\n    type: fastly:NgwafAlertJiraIntegration\n    name: demo_jira_alert\n    properties:\n      description: A description\n      host: https://mycompany.atlassian.net\n      issueType: task\n      key: a1b2c3d4e5f6789012345678901234567\n      project: test\n      username: user\n      workspaceId: ${demo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF Alert Jira integrations can be imported using their ID and the ID of the workspace they belong to.\n\n```sh\n$ pulumi import fastly:index/ngwafAlertJiraIntegration:NgwafAlertJiraIntegration example \u003cworkspace_id\u003e/\u003calert_id\u003e\n```\n\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"host":{"type":"string","description":"The name of the Jira instance.\n"},"issueType":{"type":"string","description":"The Jira issue type associated with the ticket.\n"},"key":{"type":"string","description":"The Jira key.\n","secret":true},"project":{"type":"string","description":"The Jira project where the issue will be created.\n"},"username":{"type":"string","description":"The Jira username of the user who created the ticket.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["host","key","project","username","workspaceId"],"inputProperties":{"description":{"type":"string","description":"The description of the alert.\n"},"host":{"type":"string","description":"The name of the Jira instance.\n"},"issueType":{"type":"string","description":"The Jira issue type associated with the ticket.\n"},"key":{"type":"string","description":"The Jira key.\n","secret":true},"project":{"type":"string","description":"The Jira project where the issue will be created.\n"},"username":{"type":"string","description":"The Jira username of the user who created the ticket.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["host","key","project","username","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafAlertJiraIntegration resources.\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"host":{"type":"string","description":"The name of the Jira instance.\n"},"issueType":{"type":"string","description":"The Jira issue type associated with the ticket.\n"},"key":{"type":"string","description":"The Jira key.\n","secret":true},"project":{"type":"string","description":"The Jira project where the issue will be created.\n"},"username":{"type":"string","description":"The Jira username of the user who created the ticket.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafAlertMailingListIntegration:NgwafAlertMailingListIntegration":{"description":"Provides Fastly Next-Gen WAF Alert Mailing List integrations, which provide a connection to Mailing List.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demoJiraAlert = new fastly.NgwafAlertJiraIntegration(\"demo_jira_alert\", {\n    description: \"A description\",\n    host: \"https://mycompany.atlassian.net\",\n    issueType: \"task\",\n    key: \"a1b2c3d4e5f6789012345678901234567\",\n    project: \"test\",\n    username: \"user\",\n    workspaceId: demo.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo_jira_alert = fastly.NgwafAlertJiraIntegration(\"demo_jira_alert\",\n    description=\"A description\",\n    host=\"https://mycompany.atlassian.net\",\n    issue_type=\"task\",\n    key=\"a1b2c3d4e5f6789012345678901234567\",\n    project=\"test\",\n    username=\"user\",\n    workspace_id=demo[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demoJiraAlert = new Fastly.NgwafAlertJiraIntegration(\"demo_jira_alert\", new()\n    {\n        Description = \"A description\",\n        Host = \"https://mycompany.atlassian.net\",\n        IssueType = \"task\",\n        Key = \"a1b2c3d4e5f6789012345678901234567\",\n        Project = \"test\",\n        Username = \"user\",\n        WorkspaceId = demo.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafAlertJiraIntegration(ctx, \"demo_jira_alert\", \u0026fastly.NgwafAlertJiraIntegrationArgs{\n\t\t\tDescription: pulumi.String(\"A description\"),\n\t\t\tHost:        pulumi.String(\"https://mycompany.atlassian.net\"),\n\t\t\tIssueType:   pulumi.String(\"task\"),\n\t\t\tKey:         pulumi.String(\"a1b2c3d4e5f6789012345678901234567\"),\n\t\t\tProject:     pulumi.String(\"test\"),\n\t\t\tUsername:    pulumi.String(\"user\"),\n\t\t\tWorkspaceId: pulumi.Any(demo.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafAlertJiraIntegration;\nimport com.pulumi.fastly.NgwafAlertJiraIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demoJiraAlert = new NgwafAlertJiraIntegration(\"demoJiraAlert\", NgwafAlertJiraIntegrationArgs.builder()\n            .description(\"A description\")\n            .host(\"https://mycompany.atlassian.net\")\n            .issueType(\"task\")\n            .key(\"a1b2c3d4e5f6789012345678901234567\")\n            .project(\"test\")\n            .username(\"user\")\n            .workspaceId(demo.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demoJiraAlert:\n    type: fastly:NgwafAlertJiraIntegration\n    name: demo_jira_alert\n    properties:\n      description: A description\n      host: https://mycompany.atlassian.net\n      issueType: task\n      key: a1b2c3d4e5f6789012345678901234567\n      project: test\n      username: user\n      workspaceId: ${demo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF Alert Mailing List integrations can be imported using their ID and the ID of the workspace they belong to.\n\n```sh\n$ pulumi import fastly:index/ngwafAlertMailingListIntegration:NgwafAlertMailingListIntegration example \u003cworkspace_id\u003e/\u003calert_id\u003e\n```\n\n","properties":{"address":{"type":"string","description":"Email address that the alert will use.\n"},"description":{"type":"string","description":"The description of the alert.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["address","workspaceId"],"inputProperties":{"address":{"type":"string","description":"Email address that the alert will use.\n"},"description":{"type":"string","description":"The description of the alert.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["address","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafAlertMailingListIntegration resources.\n","properties":{"address":{"type":"string","description":"Email address that the alert will use.\n"},"description":{"type":"string","description":"The description of the alert.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafAlertMicrosoftTeamsIntegration:NgwafAlertMicrosoftTeamsIntegration":{"description":"Provides Fastly Next-Gen WAF Alert Microsoft Teams integrations, which provide a connection to Microsoft Teams.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demoMicrosoftTeamsAlert = new fastly.NgwafAlertMicrosoftTeamsIntegration(\"demo_microsoft_teams_alert\", {\n    description: \"Some Description\",\n    webhook: \"https://example.com/microsoft-teams/my-service\",\n    workspaceId: demo.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo_microsoft_teams_alert = fastly.NgwafAlertMicrosoftTeamsIntegration(\"demo_microsoft_teams_alert\",\n    description=\"Some Description\",\n    webhook=\"https://example.com/microsoft-teams/my-service\",\n    workspace_id=demo[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demoMicrosoftTeamsAlert = new Fastly.NgwafAlertMicrosoftTeamsIntegration(\"demo_microsoft_teams_alert\", new()\n    {\n        Description = \"Some Description\",\n        Webhook = \"https://example.com/microsoft-teams/my-service\",\n        WorkspaceId = demo.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafAlertMicrosoftTeamsIntegration(ctx, \"demo_microsoft_teams_alert\", \u0026fastly.NgwafAlertMicrosoftTeamsIntegrationArgs{\n\t\t\tDescription: pulumi.String(\"Some Description\"),\n\t\t\tWebhook:     pulumi.String(\"https://example.com/microsoft-teams/my-service\"),\n\t\t\tWorkspaceId: pulumi.Any(demo.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafAlertMicrosoftTeamsIntegration;\nimport com.pulumi.fastly.NgwafAlertMicrosoftTeamsIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demoMicrosoftTeamsAlert = new NgwafAlertMicrosoftTeamsIntegration(\"demoMicrosoftTeamsAlert\", NgwafAlertMicrosoftTeamsIntegrationArgs.builder()\n            .description(\"Some Description\")\n            .webhook(\"https://example.com/microsoft-teams/my-service\")\n            .workspaceId(demo.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demoMicrosoftTeamsAlert:\n    type: fastly:NgwafAlertMicrosoftTeamsIntegration\n    name: demo_microsoft_teams_alert\n    properties:\n      description: Some Description\n      webhook: https://example.com/microsoft-teams/my-service\n      workspaceId: ${demo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF Alert Microsoft Teams integrations can be imported using their ID and the ID of the workspace they belong to.\n\n```sh\n$ pulumi import fastly:index/ngwafAlertMicrosoftTeamsIntegration:NgwafAlertMicrosoftTeamsIntegration example \u003cworkspace_id\u003e/\u003calert_id\u003e\n```\n\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"webhook":{"type":"string","description":"The Microsoft Teams webhook URL.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["webhook","workspaceId"],"inputProperties":{"description":{"type":"string","description":"The description of the alert.\n"},"webhook":{"type":"string","description":"The Microsoft Teams webhook URL.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["webhook","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafAlertMicrosoftTeamsIntegration resources.\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"webhook":{"type":"string","description":"The Microsoft Teams webhook URL.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafAlertOpsgenieIntegration:NgwafAlertOpsgenieIntegration":{"description":"Provides Fastly Next-Gen WAF Alert Opsgenie integrations, which provide a connection to Opsgenie.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demoOpsgenieAlert = new fastly.NgwafAlertOpsgenieIntegration(\"demo_opsgenie_alert\", {\n    description: \"A description\",\n    key: \"123456789\",\n    workspaceId: demo.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo_opsgenie_alert = fastly.NgwafAlertOpsgenieIntegration(\"demo_opsgenie_alert\",\n    description=\"A description\",\n    key=\"123456789\",\n    workspace_id=demo[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demoOpsgenieAlert = new Fastly.NgwafAlertOpsgenieIntegration(\"demo_opsgenie_alert\", new()\n    {\n        Description = \"A description\",\n        Key = \"123456789\",\n        WorkspaceId = demo.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafAlertOpsgenieIntegration(ctx, \"demo_opsgenie_alert\", \u0026fastly.NgwafAlertOpsgenieIntegrationArgs{\n\t\t\tDescription: pulumi.String(\"A description\"),\n\t\t\tKey:         pulumi.String(\"123456789\"),\n\t\t\tWorkspaceId: pulumi.Any(demo.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafAlertOpsgenieIntegration;\nimport com.pulumi.fastly.NgwafAlertOpsgenieIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demoOpsgenieAlert = new NgwafAlertOpsgenieIntegration(\"demoOpsgenieAlert\", NgwafAlertOpsgenieIntegrationArgs.builder()\n            .description(\"A description\")\n            .key(\"123456789\")\n            .workspaceId(demo.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demoOpsgenieAlert:\n    type: fastly:NgwafAlertOpsgenieIntegration\n    name: demo_opsgenie_alert\n    properties:\n      description: A description\n      key: '123456789'\n      workspaceId: ${demo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF Alert Opsgenie integrations can be imported using their ID and the ID of the workspace they belong to.\n\n```sh\n$ pulumi import fastly:index/ngwafAlertOpsgenieIntegration:NgwafAlertOpsgenieIntegration example \u003cworkspace_id\u003e/\u003calert_id\u003e\n```\n\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"key":{"type":"string","description":"The Opsgenie key.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["key","workspaceId"],"inputProperties":{"description":{"type":"string","description":"The description of the alert.\n"},"key":{"type":"string","description":"The Opsgenie key.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["key","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafAlertOpsgenieIntegration resources.\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"key":{"type":"string","description":"The Opsgenie key.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafAlertPagerdutyIntegration:NgwafAlertPagerdutyIntegration":{"description":"Provides Fastly Next-Gen WAF Alert PagerDuty integrations, which provide a connection to PagerDuty.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demoPagerdutyAlert = new fastly.NgwafAlertPagerdutyIntegration(\"demo_pagerduty_alert\", {\n    description: \"Some Description\",\n    key: \"1234567890abcdef1234567890abcdef\",\n    workspaceId: demo.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo_pagerduty_alert = fastly.NgwafAlertPagerdutyIntegration(\"demo_pagerduty_alert\",\n    description=\"Some Description\",\n    key=\"1234567890abcdef1234567890abcdef\",\n    workspace_id=demo[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demoPagerdutyAlert = new Fastly.NgwafAlertPagerdutyIntegration(\"demo_pagerduty_alert\", new()\n    {\n        Description = \"Some Description\",\n        Key = \"1234567890abcdef1234567890abcdef\",\n        WorkspaceId = demo.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafAlertPagerdutyIntegration(ctx, \"demo_pagerduty_alert\", \u0026fastly.NgwafAlertPagerdutyIntegrationArgs{\n\t\t\tDescription: pulumi.String(\"Some Description\"),\n\t\t\tKey:         pulumi.String(\"1234567890abcdef1234567890abcdef\"),\n\t\t\tWorkspaceId: pulumi.Any(demo.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafAlertPagerdutyIntegration;\nimport com.pulumi.fastly.NgwafAlertPagerdutyIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demoPagerdutyAlert = new NgwafAlertPagerdutyIntegration(\"demoPagerdutyAlert\", NgwafAlertPagerdutyIntegrationArgs.builder()\n            .description(\"Some Description\")\n            .key(\"1234567890abcdef1234567890abcdef\")\n            .workspaceId(demo.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demoPagerdutyAlert:\n    type: fastly:NgwafAlertPagerdutyIntegration\n    name: demo_pagerduty_alert\n    properties:\n      description: Some Description\n      key: 1234567890abcdef1234567890abcdef\n      workspaceId: ${demo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF Alert PagerDuty integrations can be imported using their ID and the ID of the workspace they belong to.\n\n```sh\n$ pulumi import fastly:index/ngwafAlertPagerdutyIntegration:NgwafAlertPagerdutyIntegration example \u003cworkspace_id\u003e/\u003calert_id\u003e\n```\n\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"key":{"type":"string","description":"The PagerDuty integration key.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["key","workspaceId"],"inputProperties":{"description":{"type":"string","description":"The description of the alert.\n"},"key":{"type":"string","description":"The PagerDuty integration key.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["key","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafAlertPagerdutyIntegration resources.\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"key":{"type":"string","description":"The PagerDuty integration key.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafAlertSlackIntegration:NgwafAlertSlackIntegration":{"description":"Provides Fastly Next-Gen WAF Alert Slack integrations, which provide a connection to Slack.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demoSlackAlert = new fastly.NgwafAlertSlackIntegration(\"demo_slack_alert\", {\n    description: \"Some Description\",\n    webhook: \"https://example.com/webhooks/my-service\",\n    workspaceId: demo.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo_slack_alert = fastly.NgwafAlertSlackIntegration(\"demo_slack_alert\",\n    description=\"Some Description\",\n    webhook=\"https://example.com/webhooks/my-service\",\n    workspace_id=demo[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demoSlackAlert = new Fastly.NgwafAlertSlackIntegration(\"demo_slack_alert\", new()\n    {\n        Description = \"Some Description\",\n        Webhook = \"https://example.com/webhooks/my-service\",\n        WorkspaceId = demo.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafAlertSlackIntegration(ctx, \"demo_slack_alert\", \u0026fastly.NgwafAlertSlackIntegrationArgs{\n\t\t\tDescription: pulumi.String(\"Some Description\"),\n\t\t\tWebhook:     pulumi.String(\"https://example.com/webhooks/my-service\"),\n\t\t\tWorkspaceId: pulumi.Any(demo.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafAlertSlackIntegration;\nimport com.pulumi.fastly.NgwafAlertSlackIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demoSlackAlert = new NgwafAlertSlackIntegration(\"demoSlackAlert\", NgwafAlertSlackIntegrationArgs.builder()\n            .description(\"Some Description\")\n            .webhook(\"https://example.com/webhooks/my-service\")\n            .workspaceId(demo.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demoSlackAlert:\n    type: fastly:NgwafAlertSlackIntegration\n    name: demo_slack_alert\n    properties:\n      description: Some Description\n      webhook: https://example.com/webhooks/my-service\n      workspaceId: ${demo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF Alert Webhook integrations can be imported using their ID and the ID of the workspace they belong to.\n\n```sh\n$ pulumi import fastly:index/ngwafAlertSlackIntegration:NgwafAlertSlackIntegration example \u003cworkspace_id\u003e/\u003calert_id\u003e\n```\n\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"webhook":{"type":"string","description":"The Slack webhook URL.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["webhook","workspaceId"],"inputProperties":{"description":{"type":"string","description":"The description of the alert.\n"},"webhook":{"type":"string","description":"The Slack webhook URL.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["webhook","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafAlertSlackIntegration resources.\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"webhook":{"type":"string","description":"The Slack webhook URL.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafAlertWebhookIntegration:NgwafAlertWebhookIntegration":{"description":"Provides Fastly Next-Gen WAF Alert Webhook integrations, which provide a connection to Webhooks.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demoWebhookAlert = new fastly.NgwafAlertWebhookIntegration(\"demo_webhook_alert\", {\n    description: \"Some Description\",\n    webhook: \"https://example.com/webhooks/my-service\",\n    workspaceId: demo.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo_webhook_alert = fastly.NgwafAlertWebhookIntegration(\"demo_webhook_alert\",\n    description=\"Some Description\",\n    webhook=\"https://example.com/webhooks/my-service\",\n    workspace_id=demo[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demoWebhookAlert = new Fastly.NgwafAlertWebhookIntegration(\"demo_webhook_alert\", new()\n    {\n        Description = \"Some Description\",\n        Webhook = \"https://example.com/webhooks/my-service\",\n        WorkspaceId = demo.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafAlertWebhookIntegration(ctx, \"demo_webhook_alert\", \u0026fastly.NgwafAlertWebhookIntegrationArgs{\n\t\t\tDescription: pulumi.String(\"Some Description\"),\n\t\t\tWebhook:     pulumi.String(\"https://example.com/webhooks/my-service\"),\n\t\t\tWorkspaceId: pulumi.Any(demo.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafAlertWebhookIntegration;\nimport com.pulumi.fastly.NgwafAlertWebhookIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demoWebhookAlert = new NgwafAlertWebhookIntegration(\"demoWebhookAlert\", NgwafAlertWebhookIntegrationArgs.builder()\n            .description(\"Some Description\")\n            .webhook(\"https://example.com/webhooks/my-service\")\n            .workspaceId(demo.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demoWebhookAlert:\n    type: fastly:NgwafAlertWebhookIntegration\n    name: demo_webhook_alert\n    properties:\n      description: Some Description\n      webhook: https://example.com/webhooks/my-service\n      workspaceId: ${demo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF Alert Webhook integrations can be imported using their ID and the ID of the workspace they belong to.\n\n```sh\n$ pulumi import fastly:index/ngwafAlertWebhookIntegration:NgwafAlertWebhookIntegration example \u003cworkspace_id\u003e/\u003calert_id\u003e\n```\n\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"webhook":{"type":"string","description":"The webhook URL.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["webhook","workspaceId"],"inputProperties":{"description":{"type":"string","description":"The description of the alert.\n"},"webhook":{"type":"string","description":"The webhook URL.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["webhook","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafAlertWebhookIntegration resources.\n","properties":{"description":{"type":"string","description":"The description of the alert.\n"},"webhook":{"type":"string","description":"The webhook URL.\n","secret":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafRedaction:NgwafRedaction":{"description":"Provides a Fastly Next-Gen WAF Redaction, which can automatically redact known patterns of sensitive information.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demoRedaction = new fastly.NgwafRedaction(\"demo_redaction\", {\n    field: \"some field\",\n    type: \"request_header\",\n    workspaceId: demo.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo_redaction = fastly.NgwafRedaction(\"demo_redaction\",\n    field=\"some field\",\n    type=\"request_header\",\n    workspace_id=demo[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demoRedaction = new Fastly.NgwafRedaction(\"demo_redaction\", new()\n    {\n        Field = \"some field\",\n        Type = \"request_header\",\n        WorkspaceId = demo.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafRedaction(ctx, \"demo_redaction\", \u0026fastly.NgwafRedactionArgs{\n\t\t\tField:       pulumi.String(\"some field\"),\n\t\t\tType:        pulumi.String(\"request_header\"),\n\t\t\tWorkspaceId: pulumi.Any(demo.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafRedaction;\nimport com.pulumi.fastly.NgwafRedactionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demoRedaction = new NgwafRedaction(\"demoRedaction\", NgwafRedactionArgs.builder()\n            .field(\"some field\")\n            .type(\"request_header\")\n            .workspaceId(demo.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demoRedaction:\n    type: fastly:NgwafRedaction\n    name: demo_redaction\n    properties:\n      field: some field\n      type: request_header\n      workspaceId: ${demo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF Redactions can be imported using their ID and the ID of the workspace they belong to.\n\n```sh\n$ pulumi import fastly:index/ngwafRedaction:NgwafRedaction example \u003cworkspace_id\u003e/\u003credaction_id\u003e\n```\n\n","properties":{"field":{"type":"string","description":"The name of the field that should be redacted.\n"},"type":{"type":"string","description":"The type of field that is being redacted. Accepted values are \u003cspan pulumi-lang-nodejs=\"`requestParameter`\" pulumi-lang-dotnet=\"`RequestParameter`\" pulumi-lang-go=\"`requestParameter`\" pulumi-lang-python=\"`request_parameter`\" pulumi-lang-yaml=\"`requestParameter`\" pulumi-lang-java=\"`requestParameter`\"\u003e`request_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestHeader`\" pulumi-lang-dotnet=\"`RequestHeader`\" pulumi-lang-go=\"`requestHeader`\" pulumi-lang-python=\"`request_header`\" pulumi-lang-yaml=\"`requestHeader`\" pulumi-lang-java=\"`requestHeader`\"\u003e`request_header`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`responseHeader`\" pulumi-lang-dotnet=\"`ResponseHeader`\" pulumi-lang-go=\"`responseHeader`\" pulumi-lang-python=\"`response_header`\" pulumi-lang-yaml=\"`responseHeader`\" pulumi-lang-java=\"`responseHeader`\"\u003e`response_header`\u003c/span\u003e.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["field","type","workspaceId"],"inputProperties":{"field":{"type":"string","description":"The name of the field that should be redacted.\n"},"type":{"type":"string","description":"The type of field that is being redacted. Accepted values are \u003cspan pulumi-lang-nodejs=\"`requestParameter`\" pulumi-lang-dotnet=\"`RequestParameter`\" pulumi-lang-go=\"`requestParameter`\" pulumi-lang-python=\"`request_parameter`\" pulumi-lang-yaml=\"`requestParameter`\" pulumi-lang-java=\"`requestParameter`\"\u003e`request_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestHeader`\" pulumi-lang-dotnet=\"`RequestHeader`\" pulumi-lang-go=\"`requestHeader`\" pulumi-lang-python=\"`request_header`\" pulumi-lang-yaml=\"`requestHeader`\" pulumi-lang-java=\"`requestHeader`\"\u003e`request_header`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`responseHeader`\" pulumi-lang-dotnet=\"`ResponseHeader`\" pulumi-lang-go=\"`responseHeader`\" pulumi-lang-python=\"`response_header`\" pulumi-lang-yaml=\"`responseHeader`\" pulumi-lang-java=\"`responseHeader`\"\u003e`response_header`\u003c/span\u003e.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["field","type","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafRedaction resources.\n","properties":{"field":{"type":"string","description":"The name of the field that should be redacted.\n"},"type":{"type":"string","description":"The type of field that is being redacted. Accepted values are \u003cspan pulumi-lang-nodejs=\"`requestParameter`\" pulumi-lang-dotnet=\"`RequestParameter`\" pulumi-lang-go=\"`requestParameter`\" pulumi-lang-python=\"`request_parameter`\" pulumi-lang-yaml=\"`requestParameter`\" pulumi-lang-java=\"`requestParameter`\"\u003e`request_parameter`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`requestHeader`\" pulumi-lang-dotnet=\"`RequestHeader`\" pulumi-lang-go=\"`requestHeader`\" pulumi-lang-python=\"`request_header`\" pulumi-lang-yaml=\"`requestHeader`\" pulumi-lang-java=\"`requestHeader`\"\u003e`request_header`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`responseHeader`\" pulumi-lang-dotnet=\"`ResponseHeader`\" pulumi-lang-go=\"`responseHeader`\" pulumi-lang-python=\"`response_header`\" pulumi-lang-yaml=\"`responseHeader`\" pulumi-lang-java=\"`responseHeader`\"\u003e`response_header`\u003c/span\u003e.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafThresholds:NgwafThresholds":{"description":"Provides a Fastly Next-Gen WAF Threshold.  Operations related to managing workspace thresholds.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.NgwafThresholds(\"demo\", {\n    action: \"block\",\n    dontNotify: false,\n    duration: 86400,\n    enabled: true,\n    interval: 3600,\n    limit: 10,\n    name: \"%s\",\n    signal: \"SQLI\",\n    workspaceId: example.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.NgwafThresholds(\"demo\",\n    action=\"block\",\n    dont_notify=False,\n    duration=86400,\n    enabled=True,\n    interval=3600,\n    limit=10,\n    name=\"%s\",\n    signal=\"SQLI\",\n    workspace_id=example[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demo = new Fastly.NgwafThresholds(\"demo\", new()\n    {\n        Action = \"block\",\n        DontNotify = false,\n        Duration = 86400,\n        Enabled = true,\n        Interval = 3600,\n        Limit = 10,\n        Name = \"%s\",\n        Signal = \"SQLI\",\n        WorkspaceId = example.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafThresholds(ctx, \"demo\", \u0026fastly.NgwafThresholdsArgs{\n\t\t\tAction:      pulumi.String(\"block\"),\n\t\t\tDontNotify:  pulumi.Bool(false),\n\t\t\tDuration:    pulumi.Int(86400),\n\t\t\tEnabled:     pulumi.Bool(true),\n\t\t\tInterval:    pulumi.Int(3600),\n\t\t\tLimit:       pulumi.Int(10),\n\t\t\tName:        pulumi.String(\"%s\"),\n\t\t\tSignal:      pulumi.String(\"SQLI\"),\n\t\t\tWorkspaceId: pulumi.Any(example.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafThresholds;\nimport com.pulumi.fastly.NgwafThresholdsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demo = new NgwafThresholds(\"demo\", NgwafThresholdsArgs.builder()\n            .action(\"block\")\n            .dontNotify(false)\n            .duration(86400)\n            .enabled(true)\n            .interval(3600)\n            .limit(10)\n            .name(\"%s\")\n            .signal(\"SQLI\")\n            .workspaceId(example.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demo:\n    type: fastly:NgwafThresholds\n    properties:\n      action: block\n      dontNotify: false\n      duration: 86400\n      enabled: true\n      interval: 3600\n      limit: 10\n      name: '%s'\n      signal: SQLI\n      workspaceId: ${example.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF Thresholds can be imported using their workspace and Threshold ID, e.g.\n\n```sh\n$ pulumi import fastly:index/ngwafThresholds:NgwafThresholds example \u003cworkspace_id\u003e/\u003cthreshold_id\u003e\n```\n\n","properties":{"action":{"type":"string","description":"Action to take when threshold is exceeded.\n"},"dontNotify":{"type":"boolean","description":"Whether to silence notifications when action is taken.\n"},"duration":{"type":"integer","description":"Duration the action is in place, in seconds. Minimum 1 and maximum 31,556,900.\n"},"enabled":{"type":"boolean","description":"Whether this threshold is active.\n"},"interval":{"type":"integer","description":"Threshold interval in seconds. Accepted values are \u003cspan pulumi-lang-nodejs=\"`60`\" pulumi-lang-dotnet=\"`60`\" pulumi-lang-go=\"`60`\" pulumi-lang-python=\"`60`\" pulumi-lang-yaml=\"`60`\" pulumi-lang-java=\"`60`\"\u003e`60`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e.\n"},"limit":{"type":"integer","description":"Threshold limit. Minimum 1 and maximum 10,000.\n"},"name":{"type":"string","description":"The name of the threshold.\n"},"signal":{"type":"string","description":"The name of the signal this threshold is acting on.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["action","dontNotify","enabled","interval","limit","name","signal","workspaceId"],"inputProperties":{"action":{"type":"string","description":"Action to take when threshold is exceeded.\n"},"dontNotify":{"type":"boolean","description":"Whether to silence notifications when action is taken.\n"},"duration":{"type":"integer","description":"Duration the action is in place, in seconds. Minimum 1 and maximum 31,556,900.\n"},"enabled":{"type":"boolean","description":"Whether this threshold is active.\n"},"interval":{"type":"integer","description":"Threshold interval in seconds. Accepted values are \u003cspan pulumi-lang-nodejs=\"`60`\" pulumi-lang-dotnet=\"`60`\" pulumi-lang-go=\"`60`\" pulumi-lang-python=\"`60`\" pulumi-lang-yaml=\"`60`\" pulumi-lang-java=\"`60`\"\u003e`60`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e.\n"},"limit":{"type":"integer","description":"Threshold limit. Minimum 1 and maximum 10,000.\n"},"name":{"type":"string","description":"The name of the threshold.\n"},"signal":{"type":"string","description":"The name of the signal this threshold is acting on.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["action","dontNotify","enabled","interval","limit","signal","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafThresholds resources.\n","properties":{"action":{"type":"string","description":"Action to take when threshold is exceeded.\n"},"dontNotify":{"type":"boolean","description":"Whether to silence notifications when action is taken.\n"},"duration":{"type":"integer","description":"Duration the action is in place, in seconds. Minimum 1 and maximum 31,556,900.\n"},"enabled":{"type":"boolean","description":"Whether this threshold is active.\n"},"interval":{"type":"integer","description":"Threshold interval in seconds. Accepted values are \u003cspan pulumi-lang-nodejs=\"`60`\" pulumi-lang-dotnet=\"`60`\" pulumi-lang-go=\"`60`\" pulumi-lang-python=\"`60`\" pulumi-lang-yaml=\"`60`\" pulumi-lang-java=\"`60`\"\u003e`60`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e.\n"},"limit":{"type":"integer","description":"Threshold limit. Minimum 1 and maximum 10,000.\n"},"name":{"type":"string","description":"The name of the threshold.\n"},"signal":{"type":"string","description":"The name of the signal this threshold is acting on.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafVirtualPatches:NgwafVirtualPatches":{"description":"Provides a Fastly Next-Gen WAF Virtual Patch.  Virtual patching \nrules block or log requests matching specific vulnerabilities.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.NgwafVirtualPatches(\"demo\", {\n    action: \"block\",\n    enabled: true,\n    virtualPatchId: \"CVE-2017-5638\",\n    workspaceId: demoFastlyNgwafWorkspace.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.NgwafVirtualPatches(\"demo\",\n    action=\"block\",\n    enabled=True,\n    virtual_patch_id=\"CVE-2017-5638\",\n    workspace_id=demo_fastly_ngwaf_workspace[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demo = new Fastly.NgwafVirtualPatches(\"demo\", new()\n    {\n        Action = \"block\",\n        Enabled = true,\n        VirtualPatchId = \"CVE-2017-5638\",\n        WorkspaceId = demoFastlyNgwafWorkspace.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafVirtualPatches(ctx, \"demo\", \u0026fastly.NgwafVirtualPatchesArgs{\n\t\t\tAction:         pulumi.String(\"block\"),\n\t\t\tEnabled:        pulumi.Bool(true),\n\t\t\tVirtualPatchId: pulumi.String(\"CVE-2017-5638\"),\n\t\t\tWorkspaceId:    pulumi.Any(demoFastlyNgwafWorkspace.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafVirtualPatches;\nimport com.pulumi.fastly.NgwafVirtualPatchesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demo = new NgwafVirtualPatches(\"demo\", NgwafVirtualPatchesArgs.builder()\n            .action(\"block\")\n            .enabled(true)\n            .virtualPatchId(\"CVE-2017-5638\")\n            .workspaceId(demoFastlyNgwafWorkspace.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demo:\n    type: fastly:NgwafVirtualPatches\n    properties:\n      action: block\n      enabled: true\n      virtualPatchId: CVE-2017-5638\n      workspaceId: ${demoFastlyNgwafWorkspace.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF Virtual Patches can be imported using their workspace and Virtual Patch ID, e.g.\n\n```sh\n$ pulumi import fastly:index/ngwafVirtualPatches:NgwafVirtualPatches demo \u003cworkspace_id\u003e/\u003cvirtual_patch_id\u003e\n```\n\n","properties":{"action":{"type":"string","description":"Action to take when a signal for virtual patch is detected. Accepted values are \u003cspan pulumi-lang-nodejs=\"`log`\" pulumi-lang-dotnet=\"`Log`\" pulumi-lang-go=\"`log`\" pulumi-lang-python=\"`log`\" pulumi-lang-yaml=\"`log`\" pulumi-lang-java=\"`log`\"\u003e`log`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e.\n"},"enabled":{"type":"boolean","description":"Control for enabling and disabling a virtual patch.\n"},"virtualPatchId":{"type":"string","description":"The ID of the virtual patch.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["action","enabled","virtualPatchId","workspaceId"],"inputProperties":{"action":{"type":"string","description":"Action to take when a signal for virtual patch is detected. Accepted values are \u003cspan pulumi-lang-nodejs=\"`log`\" pulumi-lang-dotnet=\"`Log`\" pulumi-lang-go=\"`log`\" pulumi-lang-python=\"`log`\" pulumi-lang-yaml=\"`log`\" pulumi-lang-java=\"`log`\"\u003e`log`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e.\n"},"enabled":{"type":"boolean","description":"Control for enabling and disabling a virtual patch.\n"},"virtualPatchId":{"type":"string","description":"The ID of the virtual patch.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["action","enabled","virtualPatchId","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafVirtualPatches resources.\n","properties":{"action":{"type":"string","description":"Action to take when a signal for virtual patch is detected. Accepted values are \u003cspan pulumi-lang-nodejs=\"`log`\" pulumi-lang-dotnet=\"`Log`\" pulumi-lang-go=\"`log`\" pulumi-lang-python=\"`log`\" pulumi-lang-yaml=\"`log`\" pulumi-lang-java=\"`log`\"\u003e`log`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e.\n"},"enabled":{"type":"boolean","description":"Control for enabling and disabling a virtual patch.\n"},"virtualPatchId":{"type":"string","description":"The ID of the virtual patch.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafWorkspace:NgwafWorkspace":{"description":"Provides a Fastly Next-Gen WAF Workspace, representing a container for\nrules, signals, and various other resources that are offered by the\nNext-Gen WAF product.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.NgwafWorkspace(\"demo\", {\n    name: \"Demo\",\n    description: \"Testing\",\n    mode: \"block\",\n    attackSignalThresholds: {\n        oneMinute: 100,\n        tenMinutes: 500,\n        oneHour: 1000,\n        immediate: true,\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.NgwafWorkspace(\"demo\",\n    name=\"Demo\",\n    description=\"Testing\",\n    mode=\"block\",\n    attack_signal_thresholds={\n        \"one_minute\": 100,\n        \"ten_minutes\": 500,\n        \"one_hour\": 1000,\n        \"immediate\": True,\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demo = new Fastly.NgwafWorkspace(\"demo\", new()\n    {\n        Name = \"Demo\",\n        Description = \"Testing\",\n        Mode = \"block\",\n        AttackSignalThresholds = new Fastly.Inputs.NgwafWorkspaceAttackSignalThresholdsArgs\n        {\n            OneMinute = 100,\n            TenMinutes = 500,\n            OneHour = 1000,\n            Immediate = true,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewNgwafWorkspace(ctx, \"demo\", \u0026fastly.NgwafWorkspaceArgs{\n\t\t\tName:        pulumi.String(\"Demo\"),\n\t\t\tDescription: pulumi.String(\"Testing\"),\n\t\t\tMode:        pulumi.String(\"block\"),\n\t\t\tAttackSignalThresholds: \u0026fastly.NgwafWorkspaceAttackSignalThresholdsArgs{\n\t\t\t\tOneMinute:  pulumi.Int(100),\n\t\t\t\tTenMinutes: pulumi.Int(500),\n\t\t\t\tOneHour:    pulumi.Int(1000),\n\t\t\t\tImmediate:  pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafWorkspace;\nimport com.pulumi.fastly.NgwafWorkspaceArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceAttackSignalThresholdsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demo = new NgwafWorkspace(\"demo\", NgwafWorkspaceArgs.builder()\n            .name(\"Demo\")\n            .description(\"Testing\")\n            .mode(\"block\")\n            .attackSignalThresholds(NgwafWorkspaceAttackSignalThresholdsArgs.builder()\n                .oneMinute(100)\n                .tenMinutes(500)\n                .oneHour(1000)\n                .immediate(true)\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demo:\n    type: fastly:NgwafWorkspace\n    properties:\n      name: Demo\n      description: Testing\n      mode: block\n      attackSignalThresholds:\n        oneMinute: 100\n        tenMinutes: 500\n        oneHour: 1000\n        immediate: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF Workspaces can be imported using their workspace ID, e.g.\n\n```sh\n$ pulumi import fastly:index/ngwafWorkspace:NgwafWorkspace demo xxxxxxxxxxxxxxxxxxxx\n```\n\n","properties":{"attackSignalThresholds":{"$ref":"#/types/fastly:index/NgwafWorkspaceAttackSignalThresholds:NgwafWorkspaceAttackSignalThresholds","description":"Attack threshold parameters for system site alerts. Each threshold value is the number of attack signals per IP address that must be detected during the interval before the related IP address is flagged. If no values are set then the default value for each field will be applied\n"},"clientIpHeaders":{"type":"array","items":{"type":"string"},"description":"Specifies the request headers containing the client IP address. Maximum of 10 header names.\n"},"defaultBlockingResponseCode":{"type":"integer","description":"The status code returned when a request is blocked. This configuration is applied at the workspace but can be overwritten in rules. Accepted values are [\u003cspan pulumi-lang-nodejs=\"`301`\" pulumi-lang-dotnet=\"`301`\" pulumi-lang-go=\"`301`\" pulumi-lang-python=\"`301`\" pulumi-lang-yaml=\"`301`\" pulumi-lang-java=\"`301`\"\u003e`301`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`302`\" pulumi-lang-dotnet=\"`302`\" pulumi-lang-go=\"`302`\" pulumi-lang-python=\"`302`\" pulumi-lang-yaml=\"`302`\" pulumi-lang-java=\"`302`\"\u003e`302`\u003c/span\u003e, `400..599`]. Default value \u003cspan pulumi-lang-nodejs=\"`406`\" pulumi-lang-dotnet=\"`406`\" pulumi-lang-go=\"`406`\" pulumi-lang-python=\"`406`\" pulumi-lang-yaml=\"`406`\" pulumi-lang-java=\"`406`\"\u003e`406`\u003c/span\u003e.\n"},"defaultRedirectUrl":{"type":"string","description":"The redirect URL used if default*blocking*response_code is \u003cspan pulumi-lang-nodejs=\"`301`\" pulumi-lang-dotnet=\"`301`\" pulumi-lang-go=\"`301`\" pulumi-lang-python=\"`301`\" pulumi-lang-yaml=\"`301`\" pulumi-lang-java=\"`301`\"\u003e`301`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`302`\" pulumi-lang-dotnet=\"`302`\" pulumi-lang-go=\"`302`\" pulumi-lang-python=\"`302`\" pulumi-lang-yaml=\"`302`\" pulumi-lang-java=\"`302`\"\u003e`302`\u003c/span\u003e.\n"},"description":{"type":"string","description":"The description of the workspace\n"},"ipAnonymization":{"type":"string","description":"Agents will anonymize IP addresses according to the option selected. Accepted value is \u003cspan pulumi-lang-nodejs=\"`hashed`\" pulumi-lang-dotnet=\"`Hashed`\" pulumi-lang-go=\"`hashed`\" pulumi-lang-python=\"`hashed`\" pulumi-lang-yaml=\"`hashed`\" pulumi-lang-java=\"`hashed`\"\u003e`hashed`\u003c/span\u003e.\n"},"mode":{"type":"string","description":"The operation mode of the workspace. Accepted values are \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`log`\" pulumi-lang-dotnet=\"`Log`\" pulumi-lang-go=\"`log`\" pulumi-lang-python=\"`log`\" pulumi-lang-yaml=\"`log`\" pulumi-lang-java=\"`log`\"\u003e`log`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The display name of the workspace.\n"}},"required":["attackSignalThresholds","description","mode","name"],"inputProperties":{"attackSignalThresholds":{"$ref":"#/types/fastly:index/NgwafWorkspaceAttackSignalThresholds:NgwafWorkspaceAttackSignalThresholds","description":"Attack threshold parameters for system site alerts. Each threshold value is the number of attack signals per IP address that must be detected during the interval before the related IP address is flagged. If no values are set then the default value for each field will be applied\n"},"clientIpHeaders":{"type":"array","items":{"type":"string"},"description":"Specifies the request headers containing the client IP address. Maximum of 10 header names.\n"},"defaultBlockingResponseCode":{"type":"integer","description":"The status code returned when a request is blocked. This configuration is applied at the workspace but can be overwritten in rules. Accepted values are [\u003cspan pulumi-lang-nodejs=\"`301`\" pulumi-lang-dotnet=\"`301`\" pulumi-lang-go=\"`301`\" pulumi-lang-python=\"`301`\" pulumi-lang-yaml=\"`301`\" pulumi-lang-java=\"`301`\"\u003e`301`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`302`\" pulumi-lang-dotnet=\"`302`\" pulumi-lang-go=\"`302`\" pulumi-lang-python=\"`302`\" pulumi-lang-yaml=\"`302`\" pulumi-lang-java=\"`302`\"\u003e`302`\u003c/span\u003e, `400..599`]. Default value \u003cspan pulumi-lang-nodejs=\"`406`\" pulumi-lang-dotnet=\"`406`\" pulumi-lang-go=\"`406`\" pulumi-lang-python=\"`406`\" pulumi-lang-yaml=\"`406`\" pulumi-lang-java=\"`406`\"\u003e`406`\u003c/span\u003e.\n"},"defaultRedirectUrl":{"type":"string","description":"The redirect URL used if default*blocking*response_code is \u003cspan pulumi-lang-nodejs=\"`301`\" pulumi-lang-dotnet=\"`301`\" pulumi-lang-go=\"`301`\" pulumi-lang-python=\"`301`\" pulumi-lang-yaml=\"`301`\" pulumi-lang-java=\"`301`\"\u003e`301`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`302`\" pulumi-lang-dotnet=\"`302`\" pulumi-lang-go=\"`302`\" pulumi-lang-python=\"`302`\" pulumi-lang-yaml=\"`302`\" pulumi-lang-java=\"`302`\"\u003e`302`\u003c/span\u003e.\n"},"description":{"type":"string","description":"The description of the workspace\n"},"ipAnonymization":{"type":"string","description":"Agents will anonymize IP addresses according to the option selected. Accepted value is \u003cspan pulumi-lang-nodejs=\"`hashed`\" pulumi-lang-dotnet=\"`Hashed`\" pulumi-lang-go=\"`hashed`\" pulumi-lang-python=\"`hashed`\" pulumi-lang-yaml=\"`hashed`\" pulumi-lang-java=\"`hashed`\"\u003e`hashed`\u003c/span\u003e.\n"},"mode":{"type":"string","description":"The operation mode of the workspace. Accepted values are \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`log`\" pulumi-lang-dotnet=\"`Log`\" pulumi-lang-go=\"`log`\" pulumi-lang-python=\"`log`\" pulumi-lang-yaml=\"`log`\" pulumi-lang-java=\"`log`\"\u003e`log`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The display name of the workspace.\n"}},"requiredInputs":["attackSignalThresholds","description","mode"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafWorkspace resources.\n","properties":{"attackSignalThresholds":{"$ref":"#/types/fastly:index/NgwafWorkspaceAttackSignalThresholds:NgwafWorkspaceAttackSignalThresholds","description":"Attack threshold parameters for system site alerts. Each threshold value is the number of attack signals per IP address that must be detected during the interval before the related IP address is flagged. If no values are set then the default value for each field will be applied\n"},"clientIpHeaders":{"type":"array","items":{"type":"string"},"description":"Specifies the request headers containing the client IP address. Maximum of 10 header names.\n"},"defaultBlockingResponseCode":{"type":"integer","description":"The status code returned when a request is blocked. This configuration is applied at the workspace but can be overwritten in rules. Accepted values are [\u003cspan pulumi-lang-nodejs=\"`301`\" pulumi-lang-dotnet=\"`301`\" pulumi-lang-go=\"`301`\" pulumi-lang-python=\"`301`\" pulumi-lang-yaml=\"`301`\" pulumi-lang-java=\"`301`\"\u003e`301`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`302`\" pulumi-lang-dotnet=\"`302`\" pulumi-lang-go=\"`302`\" pulumi-lang-python=\"`302`\" pulumi-lang-yaml=\"`302`\" pulumi-lang-java=\"`302`\"\u003e`302`\u003c/span\u003e, `400..599`]. Default value \u003cspan pulumi-lang-nodejs=\"`406`\" pulumi-lang-dotnet=\"`406`\" pulumi-lang-go=\"`406`\" pulumi-lang-python=\"`406`\" pulumi-lang-yaml=\"`406`\" pulumi-lang-java=\"`406`\"\u003e`406`\u003c/span\u003e.\n"},"defaultRedirectUrl":{"type":"string","description":"The redirect URL used if default*blocking*response_code is \u003cspan pulumi-lang-nodejs=\"`301`\" pulumi-lang-dotnet=\"`301`\" pulumi-lang-go=\"`301`\" pulumi-lang-python=\"`301`\" pulumi-lang-yaml=\"`301`\" pulumi-lang-java=\"`301`\"\u003e`301`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`302`\" pulumi-lang-dotnet=\"`302`\" pulumi-lang-go=\"`302`\" pulumi-lang-python=\"`302`\" pulumi-lang-yaml=\"`302`\" pulumi-lang-java=\"`302`\"\u003e`302`\u003c/span\u003e.\n"},"description":{"type":"string","description":"The description of the workspace\n"},"ipAnonymization":{"type":"string","description":"Agents will anonymize IP addresses according to the option selected. Accepted value is \u003cspan pulumi-lang-nodejs=\"`hashed`\" pulumi-lang-dotnet=\"`Hashed`\" pulumi-lang-go=\"`hashed`\" pulumi-lang-python=\"`hashed`\" pulumi-lang-yaml=\"`hashed`\" pulumi-lang-java=\"`hashed`\"\u003e`hashed`\u003c/span\u003e.\n"},"mode":{"type":"string","description":"The operation mode of the workspace. Accepted values are \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`log`\" pulumi-lang-dotnet=\"`Log`\" pulumi-lang-go=\"`log`\" pulumi-lang-python=\"`log`\" pulumi-lang-yaml=\"`log`\" pulumi-lang-java=\"`log`\"\u003e`log`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The display name of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafWorkspaceList:NgwafWorkspaceList":{"description":"Provides a Fastly Next-Gen WAF **List** resource scoped to a specific **workspace**.\n\nWorkspace-scoped lists are local to a workspace and typically used within workspace-specific rules.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.NgwafWorkspace(\"example\", {\n    name: \"example\",\n    description: \"Workspace with custom list\",\n    mode: \"block\",\n    ipAnonymization: \"hashed\",\n    clientIpHeaders: [\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    defaultBlockingResponseCode: 403,\n    attackSignalThresholds: {\n        oneMinute: 100,\n        tenMinutes: 500,\n        oneHour: 1000,\n        immediate: true,\n    },\n});\nconst exampleNgwafWorkspaceList = new fastly.NgwafWorkspaceList(\"example\", {\n    workspaceId: example.id,\n    name: \"local-allowlist\",\n    description: \"IP allowlist for this workspace\",\n    type: \"ip\",\n    entries: [\n        \"192.168.0.1\",\n        \"10.0.0.1\",\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.NgwafWorkspace(\"example\",\n    name=\"example\",\n    description=\"Workspace with custom list\",\n    mode=\"block\",\n    ip_anonymization=\"hashed\",\n    client_ip_headers=[\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    default_blocking_response_code=403,\n    attack_signal_thresholds={\n        \"one_minute\": 100,\n        \"ten_minutes\": 500,\n        \"one_hour\": 1000,\n        \"immediate\": True,\n    })\nexample_ngwaf_workspace_list = fastly.NgwafWorkspaceList(\"example\",\n    workspace_id=example.id,\n    name=\"local-allowlist\",\n    description=\"IP allowlist for this workspace\",\n    type=\"ip\",\n    entries=[\n        \"192.168.0.1\",\n        \"10.0.0.1\",\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.NgwafWorkspace(\"example\", new()\n    {\n        Name = \"example\",\n        Description = \"Workspace with custom list\",\n        Mode = \"block\",\n        IpAnonymization = \"hashed\",\n        ClientIpHeaders = new[]\n        {\n            \"X-Forwarded-For\",\n            \"X-Real-IP\",\n        },\n        DefaultBlockingResponseCode = 403,\n        AttackSignalThresholds = new Fastly.Inputs.NgwafWorkspaceAttackSignalThresholdsArgs\n        {\n            OneMinute = 100,\n            TenMinutes = 500,\n            OneHour = 1000,\n            Immediate = true,\n        },\n    });\n\n    var exampleNgwafWorkspaceList = new Fastly.NgwafWorkspaceList(\"example\", new()\n    {\n        WorkspaceId = example.Id,\n        Name = \"local-allowlist\",\n        Description = \"IP allowlist for this workspace\",\n        Type = \"ip\",\n        Entries = new[]\n        {\n            \"192.168.0.1\",\n            \"10.0.0.1\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.NewNgwafWorkspace(ctx, \"example\", \u0026fastly.NgwafWorkspaceArgs{\n\t\t\tName:            pulumi.String(\"example\"),\n\t\t\tDescription:     pulumi.String(\"Workspace with custom list\"),\n\t\t\tMode:            pulumi.String(\"block\"),\n\t\t\tIpAnonymization: pulumi.String(\"hashed\"),\n\t\t\tClientIpHeaders: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"X-Forwarded-For\"),\n\t\t\t\tpulumi.String(\"X-Real-IP\"),\n\t\t\t},\n\t\t\tDefaultBlockingResponseCode: pulumi.Int(403),\n\t\t\tAttackSignalThresholds: \u0026fastly.NgwafWorkspaceAttackSignalThresholdsArgs{\n\t\t\t\tOneMinute:  pulumi.Int(100),\n\t\t\t\tTenMinutes: pulumi.Int(500),\n\t\t\t\tOneHour:    pulumi.Int(1000),\n\t\t\t\tImmediate:  pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewNgwafWorkspaceList(ctx, \"example\", \u0026fastly.NgwafWorkspaceListArgs{\n\t\t\tWorkspaceId: example.ID(),\n\t\t\tName:        pulumi.String(\"local-allowlist\"),\n\t\t\tDescription: pulumi.String(\"IP allowlist for this workspace\"),\n\t\t\tType:        pulumi.String(\"ip\"),\n\t\t\tEntries: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"192.168.0.1\"),\n\t\t\t\tpulumi.String(\"10.0.0.1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafWorkspace;\nimport com.pulumi.fastly.NgwafWorkspaceArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceAttackSignalThresholdsArgs;\nimport com.pulumi.fastly.NgwafWorkspaceList;\nimport com.pulumi.fastly.NgwafWorkspaceListArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new NgwafWorkspace(\"example\", NgwafWorkspaceArgs.builder()\n            .name(\"example\")\n            .description(\"Workspace with custom list\")\n            .mode(\"block\")\n            .ipAnonymization(\"hashed\")\n            .clientIpHeaders(            \n                \"X-Forwarded-For\",\n                \"X-Real-IP\")\n            .defaultBlockingResponseCode(403)\n            .attackSignalThresholds(NgwafWorkspaceAttackSignalThresholdsArgs.builder()\n                .oneMinute(100)\n                .tenMinutes(500)\n                .oneHour(1000)\n                .immediate(true)\n                .build())\n            .build());\n\n        var exampleNgwafWorkspaceList = new NgwafWorkspaceList(\"exampleNgwafWorkspaceList\", NgwafWorkspaceListArgs.builder()\n            .workspaceId(example.id())\n            .name(\"local-allowlist\")\n            .description(\"IP allowlist for this workspace\")\n            .type(\"ip\")\n            .entries(            \n                \"192.168.0.1\",\n                \"10.0.0.1\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:NgwafWorkspace\n    properties:\n      name: example\n      description: Workspace with custom list\n      mode: block\n      ipAnonymization: hashed\n      clientIpHeaders:\n        - X-Forwarded-For\n        - X-Real-IP\n      defaultBlockingResponseCode: 403\n      attackSignalThresholds:\n        oneMinute: 100\n        tenMinutes: 500\n        oneHour: 1000\n        immediate: true\n  exampleNgwafWorkspaceList:\n    type: fastly:NgwafWorkspaceList\n    name: example\n    properties:\n      workspaceId: ${example.id}\n      name: local-allowlist\n      description: IP allowlist for this workspace\n      type: ip\n      entries:\n        - 192.168.0.1\n        - 10.0.0.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF workspace-scoped lists can be imported using the format `\u003cworkspaceID\u003e/\u003clistID\u003e`, e.g.:\n\n```sh\n$ pulumi import fastly:index/ngwafWorkspaceList:NgwafWorkspaceList demo \u003cworkspaceID\u003e/\u003clistID\u003e\n```\n\n","properties":{"description":{"type":"string","description":"The description of the list.\n"},"entries":{"type":"array","items":{"type":"string"},"description":"The values in the list.\n"},"name":{"type":"string","description":"The name of the list.\n"},"type":{"type":"string","description":"The type of list. Accepted values are \u003cspan pulumi-lang-nodejs=\"`string`\" pulumi-lang-dotnet=\"`String`\" pulumi-lang-go=\"`string`\" pulumi-lang-python=\"`string`\" pulumi-lang-yaml=\"`string`\" pulumi-lang-java=\"`string`\"\u003e`string`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`wildcard`\" pulumi-lang-dotnet=\"`Wildcard`\" pulumi-lang-go=\"`wildcard`\" pulumi-lang-python=\"`wildcard`\" pulumi-lang-yaml=\"`wildcard`\" pulumi-lang-java=\"`wildcard`\"\u003e`wildcard`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`country`\" pulumi-lang-dotnet=\"`Country`\" pulumi-lang-go=\"`country`\" pulumi-lang-python=\"`country`\" pulumi-lang-yaml=\"`country`\" pulumi-lang-java=\"`country`\"\u003e`country`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n"},"workspaceId":{"type":"string"}},"required":["entries","name","type","workspaceId"],"inputProperties":{"description":{"type":"string","description":"The description of the list.\n"},"entries":{"type":"array","items":{"type":"string"},"description":"The values in the list.\n"},"name":{"type":"string","description":"The name of the list.\n","willReplaceOnChanges":true},"type":{"type":"string","description":"The type of list. Accepted values are \u003cspan pulumi-lang-nodejs=\"`string`\" pulumi-lang-dotnet=\"`String`\" pulumi-lang-go=\"`string`\" pulumi-lang-python=\"`string`\" pulumi-lang-yaml=\"`string`\" pulumi-lang-java=\"`string`\"\u003e`string`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`wildcard`\" pulumi-lang-dotnet=\"`Wildcard`\" pulumi-lang-go=\"`wildcard`\" pulumi-lang-python=\"`wildcard`\" pulumi-lang-yaml=\"`wildcard`\" pulumi-lang-java=\"`wildcard`\"\u003e`wildcard`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`country`\" pulumi-lang-dotnet=\"`Country`\" pulumi-lang-go=\"`country`\" pulumi-lang-python=\"`country`\" pulumi-lang-yaml=\"`country`\" pulumi-lang-java=\"`country`\"\u003e`country`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n","willReplaceOnChanges":true},"workspaceId":{"type":"string"}},"requiredInputs":["entries","type","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafWorkspaceList resources.\n","properties":{"description":{"type":"string","description":"The description of the list.\n"},"entries":{"type":"array","items":{"type":"string"},"description":"The values in the list.\n"},"name":{"type":"string","description":"The name of the list.\n","willReplaceOnChanges":true},"type":{"type":"string","description":"The type of list. Accepted values are \u003cspan pulumi-lang-nodejs=\"`string`\" pulumi-lang-dotnet=\"`String`\" pulumi-lang-go=\"`string`\" pulumi-lang-python=\"`string`\" pulumi-lang-yaml=\"`string`\" pulumi-lang-java=\"`string`\"\u003e`string`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`wildcard`\" pulumi-lang-dotnet=\"`Wildcard`\" pulumi-lang-go=\"`wildcard`\" pulumi-lang-python=\"`wildcard`\" pulumi-lang-yaml=\"`wildcard`\" pulumi-lang-java=\"`wildcard`\"\u003e`wildcard`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`country`\" pulumi-lang-dotnet=\"`Country`\" pulumi-lang-go=\"`country`\" pulumi-lang-python=\"`country`\" pulumi-lang-yaml=\"`country`\" pulumi-lang-java=\"`country`\"\u003e`country`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e.\n","willReplaceOnChanges":true},"workspaceId":{"type":"string"}},"type":"object"}},"fastly:index/ngwafWorkspaceRule:NgwafWorkspaceRule":{"description":"Provides a Fastly Next-Gen WAF Workspace Rule, scoped to a specific NGWAF workspace.  \nThese rules define conditions and actions that trigger WAF enforcement at the workspace level.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.NgwafWorkspace(\"example\", {\n    name: \"example\",\n    description: \"Test NGWAF Workspace\",\n    mode: \"block\",\n    ipAnonymization: \"hashed\",\n    clientIpHeaders: [\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    defaultBlockingResponseCode: 429,\n    attackSignalThresholds: {},\n});\nconst exampleNgwafWorkspaceRule = new fastly.NgwafWorkspaceRule(\"example\", {\n    workspaceId: example.id,\n    type: \"request\",\n    description: \"Block requests from specific IP to login path\",\n    enabled: true,\n    requestLogging: \"sampled\",\n    groupOperator: \"all\",\n    actions: [{\n        type: \"block\",\n    }],\n    conditions: [\n        {\n            field: \"ip\",\n            operator: \"equals\",\n            value: \"192.0.2.1\",\n        },\n        {\n            field: \"path\",\n            operator: \"equals\",\n            value: \"/login\",\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.NgwafWorkspace(\"example\",\n    name=\"example\",\n    description=\"Test NGWAF Workspace\",\n    mode=\"block\",\n    ip_anonymization=\"hashed\",\n    client_ip_headers=[\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    default_blocking_response_code=429,\n    attack_signal_thresholds={})\nexample_ngwaf_workspace_rule = fastly.NgwafWorkspaceRule(\"example\",\n    workspace_id=example.id,\n    type=\"request\",\n    description=\"Block requests from specific IP to login path\",\n    enabled=True,\n    request_logging=\"sampled\",\n    group_operator=\"all\",\n    actions=[{\n        \"type\": \"block\",\n    }],\n    conditions=[\n        {\n            \"field\": \"ip\",\n            \"operator\": \"equals\",\n            \"value\": \"192.0.2.1\",\n        },\n        {\n            \"field\": \"path\",\n            \"operator\": \"equals\",\n            \"value\": \"/login\",\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.NgwafWorkspace(\"example\", new()\n    {\n        Name = \"example\",\n        Description = \"Test NGWAF Workspace\",\n        Mode = \"block\",\n        IpAnonymization = \"hashed\",\n        ClientIpHeaders = new[]\n        {\n            \"X-Forwarded-For\",\n            \"X-Real-IP\",\n        },\n        DefaultBlockingResponseCode = 429,\n        AttackSignalThresholds = null,\n    });\n\n    var exampleNgwafWorkspaceRule = new Fastly.NgwafWorkspaceRule(\"example\", new()\n    {\n        WorkspaceId = example.Id,\n        Type = \"request\",\n        Description = \"Block requests from specific IP to login path\",\n        Enabled = true,\n        RequestLogging = \"sampled\",\n        GroupOperator = \"all\",\n        Actions = new[]\n        {\n            new Fastly.Inputs.NgwafWorkspaceRuleActionArgs\n            {\n                Type = \"block\",\n            },\n        },\n        Conditions = new[]\n        {\n            new Fastly.Inputs.NgwafWorkspaceRuleConditionArgs\n            {\n                Field = \"ip\",\n                Operator = \"equals\",\n                Value = \"192.0.2.1\",\n            },\n            new Fastly.Inputs.NgwafWorkspaceRuleConditionArgs\n            {\n                Field = \"path\",\n                Operator = \"equals\",\n                Value = \"/login\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.NewNgwafWorkspace(ctx, \"example\", \u0026fastly.NgwafWorkspaceArgs{\n\t\t\tName:            pulumi.String(\"example\"),\n\t\t\tDescription:     pulumi.String(\"Test NGWAF Workspace\"),\n\t\t\tMode:            pulumi.String(\"block\"),\n\t\t\tIpAnonymization: pulumi.String(\"hashed\"),\n\t\t\tClientIpHeaders: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"X-Forwarded-For\"),\n\t\t\t\tpulumi.String(\"X-Real-IP\"),\n\t\t\t},\n\t\t\tDefaultBlockingResponseCode: pulumi.Int(429),\n\t\t\tAttackSignalThresholds:      \u0026fastly.NgwafWorkspaceAttackSignalThresholdsArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewNgwafWorkspaceRule(ctx, \"example\", \u0026fastly.NgwafWorkspaceRuleArgs{\n\t\t\tWorkspaceId:    example.ID(),\n\t\t\tType:           pulumi.String(\"request\"),\n\t\t\tDescription:    pulumi.String(\"Block requests from specific IP to login path\"),\n\t\t\tEnabled:        pulumi.Bool(true),\n\t\t\tRequestLogging: pulumi.String(\"sampled\"),\n\t\t\tGroupOperator:  pulumi.String(\"all\"),\n\t\t\tActions: fastly.NgwafWorkspaceRuleActionArray{\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleActionArgs{\n\t\t\t\t\tType: pulumi.String(\"block\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tConditions: fastly.NgwafWorkspaceRuleConditionArray{\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleConditionArgs{\n\t\t\t\t\tField:    pulumi.String(\"ip\"),\n\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\tValue:    pulumi.String(\"192.0.2.1\"),\n\t\t\t\t},\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleConditionArgs{\n\t\t\t\t\tField:    pulumi.String(\"path\"),\n\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\tValue:    pulumi.String(\"/login\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafWorkspace;\nimport com.pulumi.fastly.NgwafWorkspaceArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceAttackSignalThresholdsArgs;\nimport com.pulumi.fastly.NgwafWorkspaceRule;\nimport com.pulumi.fastly.NgwafWorkspaceRuleArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleActionArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new NgwafWorkspace(\"example\", NgwafWorkspaceArgs.builder()\n            .name(\"example\")\n            .description(\"Test NGWAF Workspace\")\n            .mode(\"block\")\n            .ipAnonymization(\"hashed\")\n            .clientIpHeaders(            \n                \"X-Forwarded-For\",\n                \"X-Real-IP\")\n            .defaultBlockingResponseCode(429)\n            .attackSignalThresholds(NgwafWorkspaceAttackSignalThresholdsArgs.builder()\n                .build())\n            .build());\n\n        var exampleNgwafWorkspaceRule = new NgwafWorkspaceRule(\"exampleNgwafWorkspaceRule\", NgwafWorkspaceRuleArgs.builder()\n            .workspaceId(example.id())\n            .type(\"request\")\n            .description(\"Block requests from specific IP to login path\")\n            .enabled(true)\n            .requestLogging(\"sampled\")\n            .groupOperator(\"all\")\n            .actions(NgwafWorkspaceRuleActionArgs.builder()\n                .type(\"block\")\n                .build())\n            .conditions(            \n                NgwafWorkspaceRuleConditionArgs.builder()\n                    .field(\"ip\")\n                    .operator(\"equals\")\n                    .value(\"192.0.2.1\")\n                    .build(),\n                NgwafWorkspaceRuleConditionArgs.builder()\n                    .field(\"path\")\n                    .operator(\"equals\")\n                    .value(\"/login\")\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:NgwafWorkspace\n    properties:\n      name: example\n      description: Test NGWAF Workspace\n      mode: block\n      ipAnonymization: hashed\n      clientIpHeaders:\n        - X-Forwarded-For\n        - X-Real-IP\n      defaultBlockingResponseCode: 429\n      attackSignalThresholds: {}\n  exampleNgwafWorkspaceRule:\n    type: fastly:NgwafWorkspaceRule\n    name: example\n    properties:\n      workspaceId: ${example.id}\n      type: request\n      description: Block requests from specific IP to login path\n      enabled: true\n      requestLogging: sampled\n      groupOperator: all\n      actions:\n        - type: block\n      conditions:\n        - field: ip\n          operator: equals\n          value: 192.0.2.1\n        - field: path\n          operator: equals\n          value: /login\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nUsing templated signals:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.NgwafWorkspace(\"example\", {\n    name: \"example\",\n    description: \"Test NGWAF Workspace\",\n    mode: \"block\",\n    ipAnonymization: \"hashed\",\n    clientIpHeaders: [\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    defaultBlockingResponseCode: 429,\n    attackSignalThresholds: {},\n});\nconst exampleNgwafWorkspaceRule = new fastly.NgwafWorkspaceRule(\"example\", {\n    workspaceId: example.id,\n    type: \"request\",\n    description: \"\",\n    enabled: true,\n    groupOperator: \"all\",\n    conditions: [\n        {\n            field: \"method\",\n            operator: \"equals\",\n            value: \"POST\",\n        },\n        {\n            field: \"path\",\n            operator: \"equals\",\n            value: \"/login\",\n        },\n    ],\n    actions: [{\n        type: \"templated_signal\",\n        signal: \"LOGINATTEMPT\",\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.NgwafWorkspace(\"example\",\n    name=\"example\",\n    description=\"Test NGWAF Workspace\",\n    mode=\"block\",\n    ip_anonymization=\"hashed\",\n    client_ip_headers=[\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    default_blocking_response_code=429,\n    attack_signal_thresholds={})\nexample_ngwaf_workspace_rule = fastly.NgwafWorkspaceRule(\"example\",\n    workspace_id=example.id,\n    type=\"request\",\n    description=\"\",\n    enabled=True,\n    group_operator=\"all\",\n    conditions=[\n        {\n            \"field\": \"method\",\n            \"operator\": \"equals\",\n            \"value\": \"POST\",\n        },\n        {\n            \"field\": \"path\",\n            \"operator\": \"equals\",\n            \"value\": \"/login\",\n        },\n    ],\n    actions=[{\n        \"type\": \"templated_signal\",\n        \"signal\": \"LOGINATTEMPT\",\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.NgwafWorkspace(\"example\", new()\n    {\n        Name = \"example\",\n        Description = \"Test NGWAF Workspace\",\n        Mode = \"block\",\n        IpAnonymization = \"hashed\",\n        ClientIpHeaders = new[]\n        {\n            \"X-Forwarded-For\",\n            \"X-Real-IP\",\n        },\n        DefaultBlockingResponseCode = 429,\n        AttackSignalThresholds = null,\n    });\n\n    var exampleNgwafWorkspaceRule = new Fastly.NgwafWorkspaceRule(\"example\", new()\n    {\n        WorkspaceId = example.Id,\n        Type = \"request\",\n        Description = \"\",\n        Enabled = true,\n        GroupOperator = \"all\",\n        Conditions = new[]\n        {\n            new Fastly.Inputs.NgwafWorkspaceRuleConditionArgs\n            {\n                Field = \"method\",\n                Operator = \"equals\",\n                Value = \"POST\",\n            },\n            new Fastly.Inputs.NgwafWorkspaceRuleConditionArgs\n            {\n                Field = \"path\",\n                Operator = \"equals\",\n                Value = \"/login\",\n            },\n        },\n        Actions = new[]\n        {\n            new Fastly.Inputs.NgwafWorkspaceRuleActionArgs\n            {\n                Type = \"templated_signal\",\n                Signal = \"LOGINATTEMPT\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.NewNgwafWorkspace(ctx, \"example\", \u0026fastly.NgwafWorkspaceArgs{\n\t\t\tName:            pulumi.String(\"example\"),\n\t\t\tDescription:     pulumi.String(\"Test NGWAF Workspace\"),\n\t\t\tMode:            pulumi.String(\"block\"),\n\t\t\tIpAnonymization: pulumi.String(\"hashed\"),\n\t\t\tClientIpHeaders: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"X-Forwarded-For\"),\n\t\t\t\tpulumi.String(\"X-Real-IP\"),\n\t\t\t},\n\t\t\tDefaultBlockingResponseCode: pulumi.Int(429),\n\t\t\tAttackSignalThresholds:      \u0026fastly.NgwafWorkspaceAttackSignalThresholdsArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewNgwafWorkspaceRule(ctx, \"example\", \u0026fastly.NgwafWorkspaceRuleArgs{\n\t\t\tWorkspaceId:   example.ID(),\n\t\t\tType:          pulumi.String(\"request\"),\n\t\t\tDescription:   pulumi.String(\"\"),\n\t\t\tEnabled:       pulumi.Bool(true),\n\t\t\tGroupOperator: pulumi.String(\"all\"),\n\t\t\tConditions: fastly.NgwafWorkspaceRuleConditionArray{\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleConditionArgs{\n\t\t\t\t\tField:    pulumi.String(\"method\"),\n\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\tValue:    pulumi.String(\"POST\"),\n\t\t\t\t},\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleConditionArgs{\n\t\t\t\t\tField:    pulumi.String(\"path\"),\n\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\tValue:    pulumi.String(\"/login\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tActions: fastly.NgwafWorkspaceRuleActionArray{\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleActionArgs{\n\t\t\t\t\tType:   pulumi.String(\"templated_signal\"),\n\t\t\t\t\tSignal: pulumi.String(\"LOGINATTEMPT\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafWorkspace;\nimport com.pulumi.fastly.NgwafWorkspaceArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceAttackSignalThresholdsArgs;\nimport com.pulumi.fastly.NgwafWorkspaceRule;\nimport com.pulumi.fastly.NgwafWorkspaceRuleArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleConditionArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleActionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new NgwafWorkspace(\"example\", NgwafWorkspaceArgs.builder()\n            .name(\"example\")\n            .description(\"Test NGWAF Workspace\")\n            .mode(\"block\")\n            .ipAnonymization(\"hashed\")\n            .clientIpHeaders(            \n                \"X-Forwarded-For\",\n                \"X-Real-IP\")\n            .defaultBlockingResponseCode(429)\n            .attackSignalThresholds(NgwafWorkspaceAttackSignalThresholdsArgs.builder()\n                .build())\n            .build());\n\n        var exampleNgwafWorkspaceRule = new NgwafWorkspaceRule(\"exampleNgwafWorkspaceRule\", NgwafWorkspaceRuleArgs.builder()\n            .workspaceId(example.id())\n            .type(\"request\")\n            .description(\"\")\n            .enabled(true)\n            .groupOperator(\"all\")\n            .conditions(            \n                NgwafWorkspaceRuleConditionArgs.builder()\n                    .field(\"method\")\n                    .operator(\"equals\")\n                    .value(\"POST\")\n                    .build(),\n                NgwafWorkspaceRuleConditionArgs.builder()\n                    .field(\"path\")\n                    .operator(\"equals\")\n                    .value(\"/login\")\n                    .build())\n            .actions(NgwafWorkspaceRuleActionArgs.builder()\n                .type(\"templated_signal\")\n                .signal(\"LOGINATTEMPT\")\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:NgwafWorkspace\n    properties:\n      name: example\n      description: Test NGWAF Workspace\n      mode: block\n      ipAnonymization: hashed\n      clientIpHeaders:\n        - X-Forwarded-For\n        - X-Real-IP\n      defaultBlockingResponseCode: 429\n      attackSignalThresholds: {}\n  exampleNgwafWorkspaceRule:\n    type: fastly:NgwafWorkspaceRule\n    name: example\n    properties:\n      workspaceId: ${example.id}\n      type: request\n      description: \"\"\n      enabled: true\n      groupOperator: all\n      conditions:\n        - field: method\n          operator: equals\n          value: POST\n        - field: path\n          operator: equals\n          value: /login\n      actions:\n        - type: templated_signal\n          signal: LOGINATTEMPT\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nUsing group conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.NgwafWorkspace(\"example\", {\n    name: \"example\",\n    description: \"Test NGWAF Workspace\",\n    mode: \"block\",\n    ipAnonymization: \"hashed\",\n    clientIpHeaders: [\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    defaultBlockingResponseCode: 429,\n    attackSignalThresholds: {},\n});\nconst exampleNgwafWorkspaceRule = new fastly.NgwafWorkspaceRule(\"example\", {\n    workspaceId: example.id,\n    type: \"request\",\n    description: \"Block requests with grouped conditions\",\n    enabled: true,\n    requestLogging: \"sampled\",\n    groupOperator: \"all\",\n    actions: [{\n        type: \"block\",\n    }],\n    groupConditions: [\n        {\n            groupOperator: \"any\",\n            conditions: [\n                {\n                    field: \"protocol_version\",\n                    operator: \"equals\",\n                    value: \"HTTP/1.0\",\n                },\n                {\n                    field: \"method\",\n                    operator: \"equals\",\n                    value: \"HEAD\",\n                },\n                {\n                    field: \"domain\",\n                    operator: \"equals\",\n                    value: \"example.com\",\n                },\n            ],\n        },\n        {\n            groupOperator: \"all\",\n            conditions: [\n                {\n                    field: \"country\",\n                    operator: \"equals\",\n                    value: \"AD\",\n                },\n                {\n                    field: \"method\",\n                    operator: \"equals\",\n                    value: \"POST\",\n                },\n            ],\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.NgwafWorkspace(\"example\",\n    name=\"example\",\n    description=\"Test NGWAF Workspace\",\n    mode=\"block\",\n    ip_anonymization=\"hashed\",\n    client_ip_headers=[\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    default_blocking_response_code=429,\n    attack_signal_thresholds={})\nexample_ngwaf_workspace_rule = fastly.NgwafWorkspaceRule(\"example\",\n    workspace_id=example.id,\n    type=\"request\",\n    description=\"Block requests with grouped conditions\",\n    enabled=True,\n    request_logging=\"sampled\",\n    group_operator=\"all\",\n    actions=[{\n        \"type\": \"block\",\n    }],\n    group_conditions=[\n        {\n            \"group_operator\": \"any\",\n            \"conditions\": [\n                {\n                    \"field\": \"protocol_version\",\n                    \"operator\": \"equals\",\n                    \"value\": \"HTTP/1.0\",\n                },\n                {\n                    \"field\": \"method\",\n                    \"operator\": \"equals\",\n                    \"value\": \"HEAD\",\n                },\n                {\n                    \"field\": \"domain\",\n                    \"operator\": \"equals\",\n                    \"value\": \"example.com\",\n                },\n            ],\n        },\n        {\n            \"group_operator\": \"all\",\n            \"conditions\": [\n                {\n                    \"field\": \"country\",\n                    \"operator\": \"equals\",\n                    \"value\": \"AD\",\n                },\n                {\n                    \"field\": \"method\",\n                    \"operator\": \"equals\",\n                    \"value\": \"POST\",\n                },\n            ],\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.NgwafWorkspace(\"example\", new()\n    {\n        Name = \"example\",\n        Description = \"Test NGWAF Workspace\",\n        Mode = \"block\",\n        IpAnonymization = \"hashed\",\n        ClientIpHeaders = new[]\n        {\n            \"X-Forwarded-For\",\n            \"X-Real-IP\",\n        },\n        DefaultBlockingResponseCode = 429,\n        AttackSignalThresholds = null,\n    });\n\n    var exampleNgwafWorkspaceRule = new Fastly.NgwafWorkspaceRule(\"example\", new()\n    {\n        WorkspaceId = example.Id,\n        Type = \"request\",\n        Description = \"Block requests with grouped conditions\",\n        Enabled = true,\n        RequestLogging = \"sampled\",\n        GroupOperator = \"all\",\n        Actions = new[]\n        {\n            new Fastly.Inputs.NgwafWorkspaceRuleActionArgs\n            {\n                Type = \"block\",\n            },\n        },\n        GroupConditions = new[]\n        {\n            new Fastly.Inputs.NgwafWorkspaceRuleGroupConditionArgs\n            {\n                GroupOperator = \"any\",\n                Conditions = new[]\n                {\n                    new Fastly.Inputs.NgwafWorkspaceRuleGroupConditionConditionArgs\n                    {\n                        Field = \"protocol_version\",\n                        Operator = \"equals\",\n                        Value = \"HTTP/1.0\",\n                    },\n                    new Fastly.Inputs.NgwafWorkspaceRuleGroupConditionConditionArgs\n                    {\n                        Field = \"method\",\n                        Operator = \"equals\",\n                        Value = \"HEAD\",\n                    },\n                    new Fastly.Inputs.NgwafWorkspaceRuleGroupConditionConditionArgs\n                    {\n                        Field = \"domain\",\n                        Operator = \"equals\",\n                        Value = \"example.com\",\n                    },\n                },\n            },\n            new Fastly.Inputs.NgwafWorkspaceRuleGroupConditionArgs\n            {\n                GroupOperator = \"all\",\n                Conditions = new[]\n                {\n                    new Fastly.Inputs.NgwafWorkspaceRuleGroupConditionConditionArgs\n                    {\n                        Field = \"country\",\n                        Operator = \"equals\",\n                        Value = \"AD\",\n                    },\n                    new Fastly.Inputs.NgwafWorkspaceRuleGroupConditionConditionArgs\n                    {\n                        Field = \"method\",\n                        Operator = \"equals\",\n                        Value = \"POST\",\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.NewNgwafWorkspace(ctx, \"example\", \u0026fastly.NgwafWorkspaceArgs{\n\t\t\tName:            pulumi.String(\"example\"),\n\t\t\tDescription:     pulumi.String(\"Test NGWAF Workspace\"),\n\t\t\tMode:            pulumi.String(\"block\"),\n\t\t\tIpAnonymization: pulumi.String(\"hashed\"),\n\t\t\tClientIpHeaders: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"X-Forwarded-For\"),\n\t\t\t\tpulumi.String(\"X-Real-IP\"),\n\t\t\t},\n\t\t\tDefaultBlockingResponseCode: pulumi.Int(429),\n\t\t\tAttackSignalThresholds:      \u0026fastly.NgwafWorkspaceAttackSignalThresholdsArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewNgwafWorkspaceRule(ctx, \"example\", \u0026fastly.NgwafWorkspaceRuleArgs{\n\t\t\tWorkspaceId:    example.ID(),\n\t\t\tType:           pulumi.String(\"request\"),\n\t\t\tDescription:    pulumi.String(\"Block requests with grouped conditions\"),\n\t\t\tEnabled:        pulumi.Bool(true),\n\t\t\tRequestLogging: pulumi.String(\"sampled\"),\n\t\t\tGroupOperator:  pulumi.String(\"all\"),\n\t\t\tActions: fastly.NgwafWorkspaceRuleActionArray{\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleActionArgs{\n\t\t\t\t\tType: pulumi.String(\"block\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGroupConditions: fastly.NgwafWorkspaceRuleGroupConditionArray{\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleGroupConditionArgs{\n\t\t\t\t\tGroupOperator: pulumi.String(\"any\"),\n\t\t\t\t\tConditions: fastly.NgwafWorkspaceRuleGroupConditionConditionArray{\n\t\t\t\t\t\t\u0026fastly.NgwafWorkspaceRuleGroupConditionConditionArgs{\n\t\t\t\t\t\t\tField:    pulumi.String(\"protocol_version\"),\n\t\t\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\t\t\tValue:    pulumi.String(\"HTTP/1.0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026fastly.NgwafWorkspaceRuleGroupConditionConditionArgs{\n\t\t\t\t\t\t\tField:    pulumi.String(\"method\"),\n\t\t\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\t\t\tValue:    pulumi.String(\"HEAD\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026fastly.NgwafWorkspaceRuleGroupConditionConditionArgs{\n\t\t\t\t\t\t\tField:    pulumi.String(\"domain\"),\n\t\t\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\t\t\tValue:    pulumi.String(\"example.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleGroupConditionArgs{\n\t\t\t\t\tGroupOperator: pulumi.String(\"all\"),\n\t\t\t\t\tConditions: fastly.NgwafWorkspaceRuleGroupConditionConditionArray{\n\t\t\t\t\t\t\u0026fastly.NgwafWorkspaceRuleGroupConditionConditionArgs{\n\t\t\t\t\t\t\tField:    pulumi.String(\"country\"),\n\t\t\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\t\t\tValue:    pulumi.String(\"AD\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026fastly.NgwafWorkspaceRuleGroupConditionConditionArgs{\n\t\t\t\t\t\t\tField:    pulumi.String(\"method\"),\n\t\t\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\t\t\tValue:    pulumi.String(\"POST\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafWorkspace;\nimport com.pulumi.fastly.NgwafWorkspaceArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceAttackSignalThresholdsArgs;\nimport com.pulumi.fastly.NgwafWorkspaceRule;\nimport com.pulumi.fastly.NgwafWorkspaceRuleArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleActionArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleGroupConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new NgwafWorkspace(\"example\", NgwafWorkspaceArgs.builder()\n            .name(\"example\")\n            .description(\"Test NGWAF Workspace\")\n            .mode(\"block\")\n            .ipAnonymization(\"hashed\")\n            .clientIpHeaders(            \n                \"X-Forwarded-For\",\n                \"X-Real-IP\")\n            .defaultBlockingResponseCode(429)\n            .attackSignalThresholds(NgwafWorkspaceAttackSignalThresholdsArgs.builder()\n                .build())\n            .build());\n\n        var exampleNgwafWorkspaceRule = new NgwafWorkspaceRule(\"exampleNgwafWorkspaceRule\", NgwafWorkspaceRuleArgs.builder()\n            .workspaceId(example.id())\n            .type(\"request\")\n            .description(\"Block requests with grouped conditions\")\n            .enabled(true)\n            .requestLogging(\"sampled\")\n            .groupOperator(\"all\")\n            .actions(NgwafWorkspaceRuleActionArgs.builder()\n                .type(\"block\")\n                .build())\n            .groupConditions(            \n                NgwafWorkspaceRuleGroupConditionArgs.builder()\n                    .groupOperator(\"any\")\n                    .conditions(                    \n                        NgwafWorkspaceRuleGroupConditionConditionArgs.builder()\n                            .field(\"protocol_version\")\n                            .operator(\"equals\")\n                            .value(\"HTTP/1.0\")\n                            .build(),\n                        NgwafWorkspaceRuleGroupConditionConditionArgs.builder()\n                            .field(\"method\")\n                            .operator(\"equals\")\n                            .value(\"HEAD\")\n                            .build(),\n                        NgwafWorkspaceRuleGroupConditionConditionArgs.builder()\n                            .field(\"domain\")\n                            .operator(\"equals\")\n                            .value(\"example.com\")\n                            .build())\n                    .build(),\n                NgwafWorkspaceRuleGroupConditionArgs.builder()\n                    .groupOperator(\"all\")\n                    .conditions(                    \n                        NgwafWorkspaceRuleGroupConditionConditionArgs.builder()\n                            .field(\"country\")\n                            .operator(\"equals\")\n                            .value(\"AD\")\n                            .build(),\n                        NgwafWorkspaceRuleGroupConditionConditionArgs.builder()\n                            .field(\"method\")\n                            .operator(\"equals\")\n                            .value(\"POST\")\n                            .build())\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:NgwafWorkspace\n    properties:\n      name: example\n      description: Test NGWAF Workspace\n      mode: block\n      ipAnonymization: hashed\n      clientIpHeaders:\n        - X-Forwarded-For\n        - X-Real-IP\n      defaultBlockingResponseCode: 429\n      attackSignalThresholds: {}\n  exampleNgwafWorkspaceRule:\n    type: fastly:NgwafWorkspaceRule\n    name: example\n    properties:\n      workspaceId: ${example.id}\n      type: request\n      description: Block requests with grouped conditions\n      enabled: true\n      requestLogging: sampled\n      groupOperator: all\n      actions:\n        - type: block\n      groupConditions:\n        - groupOperator: any\n          conditions:\n            - field: protocol_version\n              operator: equals\n              value: HTTP/1.0\n            - field: method\n              operator: equals\n              value: HEAD\n            - field: domain\n              operator: equals\n              value: example.com\n        - groupOperator: all\n          conditions:\n            - field: country\n              operator: equals\n              value: AD\n            - field: method\n              operator: equals\n              value: POST\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nUsing multival conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.NgwafWorkspace(\"example\", {\n    name: \"example\",\n    description: \"Test NGWAF Workspace\",\n    mode: \"block\",\n    ipAnonymization: \"hashed\",\n    clientIpHeaders: [\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    defaultBlockingResponseCode: 429,\n    attackSignalThresholds: {},\n});\nconst exampleNgwafWorkspaceRule = new fastly.NgwafWorkspaceRule(\"example\", {\n    workspaceId: example.id,\n    type: \"request\",\n    description: \"Block requests with specific header patterns\",\n    enabled: true,\n    requestLogging: \"sampled\",\n    groupOperator: \"all\",\n    actions: [{\n        type: \"block\",\n    }],\n    multivalConditions: [{\n        field: \"request_header\",\n        operator: \"exists\",\n        groupOperator: \"any\",\n        conditions: [\n            {\n                field: \"name\",\n                operator: \"does_not_equal\",\n                value: \"Header-Sample\",\n            },\n            {\n                field: \"name\",\n                operator: \"contains\",\n                value: \"X-API-Key\",\n            },\n            {\n                field: \"value_string\",\n                operator: \"equals\",\n                value: \"application/json\",\n            },\n        ],\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.NgwafWorkspace(\"example\",\n    name=\"example\",\n    description=\"Test NGWAF Workspace\",\n    mode=\"block\",\n    ip_anonymization=\"hashed\",\n    client_ip_headers=[\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    default_blocking_response_code=429,\n    attack_signal_thresholds={})\nexample_ngwaf_workspace_rule = fastly.NgwafWorkspaceRule(\"example\",\n    workspace_id=example.id,\n    type=\"request\",\n    description=\"Block requests with specific header patterns\",\n    enabled=True,\n    request_logging=\"sampled\",\n    group_operator=\"all\",\n    actions=[{\n        \"type\": \"block\",\n    }],\n    multival_conditions=[{\n        \"field\": \"request_header\",\n        \"operator\": \"exists\",\n        \"group_operator\": \"any\",\n        \"conditions\": [\n            {\n                \"field\": \"name\",\n                \"operator\": \"does_not_equal\",\n                \"value\": \"Header-Sample\",\n            },\n            {\n                \"field\": \"name\",\n                \"operator\": \"contains\",\n                \"value\": \"X-API-Key\",\n            },\n            {\n                \"field\": \"value_string\",\n                \"operator\": \"equals\",\n                \"value\": \"application/json\",\n            },\n        ],\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.NgwafWorkspace(\"example\", new()\n    {\n        Name = \"example\",\n        Description = \"Test NGWAF Workspace\",\n        Mode = \"block\",\n        IpAnonymization = \"hashed\",\n        ClientIpHeaders = new[]\n        {\n            \"X-Forwarded-For\",\n            \"X-Real-IP\",\n        },\n        DefaultBlockingResponseCode = 429,\n        AttackSignalThresholds = null,\n    });\n\n    var exampleNgwafWorkspaceRule = new Fastly.NgwafWorkspaceRule(\"example\", new()\n    {\n        WorkspaceId = example.Id,\n        Type = \"request\",\n        Description = \"Block requests with specific header patterns\",\n        Enabled = true,\n        RequestLogging = \"sampled\",\n        GroupOperator = \"all\",\n        Actions = new[]\n        {\n            new Fastly.Inputs.NgwafWorkspaceRuleActionArgs\n            {\n                Type = \"block\",\n            },\n        },\n        MultivalConditions = new[]\n        {\n            new Fastly.Inputs.NgwafWorkspaceRuleMultivalConditionArgs\n            {\n                Field = \"request_header\",\n                Operator = \"exists\",\n                GroupOperator = \"any\",\n                Conditions = new[]\n                {\n                    new Fastly.Inputs.NgwafWorkspaceRuleMultivalConditionConditionArgs\n                    {\n                        Field = \"name\",\n                        Operator = \"does_not_equal\",\n                        Value = \"Header-Sample\",\n                    },\n                    new Fastly.Inputs.NgwafWorkspaceRuleMultivalConditionConditionArgs\n                    {\n                        Field = \"name\",\n                        Operator = \"contains\",\n                        Value = \"X-API-Key\",\n                    },\n                    new Fastly.Inputs.NgwafWorkspaceRuleMultivalConditionConditionArgs\n                    {\n                        Field = \"value_string\",\n                        Operator = \"equals\",\n                        Value = \"application/json\",\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.NewNgwafWorkspace(ctx, \"example\", \u0026fastly.NgwafWorkspaceArgs{\n\t\t\tName:            pulumi.String(\"example\"),\n\t\t\tDescription:     pulumi.String(\"Test NGWAF Workspace\"),\n\t\t\tMode:            pulumi.String(\"block\"),\n\t\t\tIpAnonymization: pulumi.String(\"hashed\"),\n\t\t\tClientIpHeaders: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"X-Forwarded-For\"),\n\t\t\t\tpulumi.String(\"X-Real-IP\"),\n\t\t\t},\n\t\t\tDefaultBlockingResponseCode: pulumi.Int(429),\n\t\t\tAttackSignalThresholds:      \u0026fastly.NgwafWorkspaceAttackSignalThresholdsArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewNgwafWorkspaceRule(ctx, \"example\", \u0026fastly.NgwafWorkspaceRuleArgs{\n\t\t\tWorkspaceId:    example.ID(),\n\t\t\tType:           pulumi.String(\"request\"),\n\t\t\tDescription:    pulumi.String(\"Block requests with specific header patterns\"),\n\t\t\tEnabled:        pulumi.Bool(true),\n\t\t\tRequestLogging: pulumi.String(\"sampled\"),\n\t\t\tGroupOperator:  pulumi.String(\"all\"),\n\t\t\tActions: fastly.NgwafWorkspaceRuleActionArray{\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleActionArgs{\n\t\t\t\t\tType: pulumi.String(\"block\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMultivalConditions: fastly.NgwafWorkspaceRuleMultivalConditionArray{\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleMultivalConditionArgs{\n\t\t\t\t\tField:         pulumi.String(\"request_header\"),\n\t\t\t\t\tOperator:      pulumi.String(\"exists\"),\n\t\t\t\t\tGroupOperator: pulumi.String(\"any\"),\n\t\t\t\t\tConditions: fastly.NgwafWorkspaceRuleMultivalConditionConditionArray{\n\t\t\t\t\t\t\u0026fastly.NgwafWorkspaceRuleMultivalConditionConditionArgs{\n\t\t\t\t\t\t\tField:    pulumi.String(\"name\"),\n\t\t\t\t\t\t\tOperator: pulumi.String(\"does_not_equal\"),\n\t\t\t\t\t\t\tValue:    pulumi.String(\"Header-Sample\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026fastly.NgwafWorkspaceRuleMultivalConditionConditionArgs{\n\t\t\t\t\t\t\tField:    pulumi.String(\"name\"),\n\t\t\t\t\t\t\tOperator: pulumi.String(\"contains\"),\n\t\t\t\t\t\t\tValue:    pulumi.String(\"X-API-Key\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026fastly.NgwafWorkspaceRuleMultivalConditionConditionArgs{\n\t\t\t\t\t\t\tField:    pulumi.String(\"value_string\"),\n\t\t\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\t\t\tValue:    pulumi.String(\"application/json\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafWorkspace;\nimport com.pulumi.fastly.NgwafWorkspaceArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceAttackSignalThresholdsArgs;\nimport com.pulumi.fastly.NgwafWorkspaceRule;\nimport com.pulumi.fastly.NgwafWorkspaceRuleArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleActionArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleMultivalConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new NgwafWorkspace(\"example\", NgwafWorkspaceArgs.builder()\n            .name(\"example\")\n            .description(\"Test NGWAF Workspace\")\n            .mode(\"block\")\n            .ipAnonymization(\"hashed\")\n            .clientIpHeaders(            \n                \"X-Forwarded-For\",\n                \"X-Real-IP\")\n            .defaultBlockingResponseCode(429)\n            .attackSignalThresholds(NgwafWorkspaceAttackSignalThresholdsArgs.builder()\n                .build())\n            .build());\n\n        var exampleNgwafWorkspaceRule = new NgwafWorkspaceRule(\"exampleNgwafWorkspaceRule\", NgwafWorkspaceRuleArgs.builder()\n            .workspaceId(example.id())\n            .type(\"request\")\n            .description(\"Block requests with specific header patterns\")\n            .enabled(true)\n            .requestLogging(\"sampled\")\n            .groupOperator(\"all\")\n            .actions(NgwafWorkspaceRuleActionArgs.builder()\n                .type(\"block\")\n                .build())\n            .multivalConditions(NgwafWorkspaceRuleMultivalConditionArgs.builder()\n                .field(\"request_header\")\n                .operator(\"exists\")\n                .groupOperator(\"any\")\n                .conditions(                \n                    NgwafWorkspaceRuleMultivalConditionConditionArgs.builder()\n                        .field(\"name\")\n                        .operator(\"does_not_equal\")\n                        .value(\"Header-Sample\")\n                        .build(),\n                    NgwafWorkspaceRuleMultivalConditionConditionArgs.builder()\n                        .field(\"name\")\n                        .operator(\"contains\")\n                        .value(\"X-API-Key\")\n                        .build(),\n                    NgwafWorkspaceRuleMultivalConditionConditionArgs.builder()\n                        .field(\"value_string\")\n                        .operator(\"equals\")\n                        .value(\"application/json\")\n                        .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:NgwafWorkspace\n    properties:\n      name: example\n      description: Test NGWAF Workspace\n      mode: block\n      ipAnonymization: hashed\n      clientIpHeaders:\n        - X-Forwarded-For\n        - X-Real-IP\n      defaultBlockingResponseCode: 429\n      attackSignalThresholds: {}\n  exampleNgwafWorkspaceRule:\n    type: fastly:NgwafWorkspaceRule\n    name: example\n    properties:\n      workspaceId: ${example.id}\n      type: request\n      description: Block requests with specific header patterns\n      enabled: true\n      requestLogging: sampled\n      groupOperator: all\n      actions:\n        - type: block\n      multivalConditions:\n        - field: request_header\n          operator: exists\n          groupOperator: any\n          conditions:\n            - field: name\n              operator: does_not_equal\n              value: Header-Sample\n            - field: name\n              operator: contains\n              value: X-API-Key\n            - field: value_string\n              operator: equals\n              value: application/json\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nUsing rate limits:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.NgwafWorkspace(\"example\", {\n    name: \"example\",\n    description: \"Test NGWAF Workspace\",\n    mode: \"block\",\n    ipAnonymization: \"hashed\",\n    clientIpHeaders: [\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    defaultBlockingResponseCode: 429,\n    attackSignalThresholds: {},\n});\nconst demoSignal = new fastly.NgwafWorkspaceSignal(\"demo_signal\", {\n    workspaceId: example.id,\n    name: \"demo\",\n    description: \"A description of my signal.\",\n});\nconst ipLimit = new fastly.NgwafWorkspaceRule(\"ip_limit\", {\n    workspaceId: example.id,\n    type: \"rate_limit\",\n    description: \"Rate limit demo rule-updated\",\n    enabled: true,\n    conditions: [{\n        field: \"ip\",\n        operator: \"equals\",\n        value: \"1.2.3.4\",\n    }],\n    rateLimit: {\n        signal: \"site.demo\",\n        threshold: 100,\n        interval: 60,\n        duration: 300,\n        clientIdentifiers: [{\n            type: \"ip\",\n        }],\n    },\n    actions: [{\n        signal: \"SUSPECTED-BOT\",\n        type: \"block_signal\",\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.NgwafWorkspace(\"example\",\n    name=\"example\",\n    description=\"Test NGWAF Workspace\",\n    mode=\"block\",\n    ip_anonymization=\"hashed\",\n    client_ip_headers=[\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    default_blocking_response_code=429,\n    attack_signal_thresholds={})\ndemo_signal = fastly.NgwafWorkspaceSignal(\"demo_signal\",\n    workspace_id=example.id,\n    name=\"demo\",\n    description=\"A description of my signal.\")\nip_limit = fastly.NgwafWorkspaceRule(\"ip_limit\",\n    workspace_id=example.id,\n    type=\"rate_limit\",\n    description=\"Rate limit demo rule-updated\",\n    enabled=True,\n    conditions=[{\n        \"field\": \"ip\",\n        \"operator\": \"equals\",\n        \"value\": \"1.2.3.4\",\n    }],\n    rate_limit={\n        \"signal\": \"site.demo\",\n        \"threshold\": 100,\n        \"interval\": 60,\n        \"duration\": 300,\n        \"client_identifiers\": [{\n            \"type\": \"ip\",\n        }],\n    },\n    actions=[{\n        \"signal\": \"SUSPECTED-BOT\",\n        \"type\": \"block_signal\",\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.NgwafWorkspace(\"example\", new()\n    {\n        Name = \"example\",\n        Description = \"Test NGWAF Workspace\",\n        Mode = \"block\",\n        IpAnonymization = \"hashed\",\n        ClientIpHeaders = new[]\n        {\n            \"X-Forwarded-For\",\n            \"X-Real-IP\",\n        },\n        DefaultBlockingResponseCode = 429,\n        AttackSignalThresholds = null,\n    });\n\n    var demoSignal = new Fastly.NgwafWorkspaceSignal(\"demo_signal\", new()\n    {\n        WorkspaceId = example.Id,\n        Name = \"demo\",\n        Description = \"A description of my signal.\",\n    });\n\n    var ipLimit = new Fastly.NgwafWorkspaceRule(\"ip_limit\", new()\n    {\n        WorkspaceId = example.Id,\n        Type = \"rate_limit\",\n        Description = \"Rate limit demo rule-updated\",\n        Enabled = true,\n        Conditions = new[]\n        {\n            new Fastly.Inputs.NgwafWorkspaceRuleConditionArgs\n            {\n                Field = \"ip\",\n                Operator = \"equals\",\n                Value = \"1.2.3.4\",\n            },\n        },\n        RateLimit = new Fastly.Inputs.NgwafWorkspaceRuleRateLimitArgs\n        {\n            Signal = \"site.demo\",\n            Threshold = 100,\n            Interval = 60,\n            Duration = 300,\n            ClientIdentifiers = new[]\n            {\n                new Fastly.Inputs.NgwafWorkspaceRuleRateLimitClientIdentifierArgs\n                {\n                    Type = \"ip\",\n                },\n            },\n        },\n        Actions = new[]\n        {\n            new Fastly.Inputs.NgwafWorkspaceRuleActionArgs\n            {\n                Signal = \"SUSPECTED-BOT\",\n                Type = \"block_signal\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.NewNgwafWorkspace(ctx, \"example\", \u0026fastly.NgwafWorkspaceArgs{\n\t\t\tName:            pulumi.String(\"example\"),\n\t\t\tDescription:     pulumi.String(\"Test NGWAF Workspace\"),\n\t\t\tMode:            pulumi.String(\"block\"),\n\t\t\tIpAnonymization: pulumi.String(\"hashed\"),\n\t\t\tClientIpHeaders: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"X-Forwarded-For\"),\n\t\t\t\tpulumi.String(\"X-Real-IP\"),\n\t\t\t},\n\t\t\tDefaultBlockingResponseCode: pulumi.Int(429),\n\t\t\tAttackSignalThresholds:      \u0026fastly.NgwafWorkspaceAttackSignalThresholdsArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewNgwafWorkspaceSignal(ctx, \"demo_signal\", \u0026fastly.NgwafWorkspaceSignalArgs{\n\t\t\tWorkspaceId: example.ID(),\n\t\t\tName:        pulumi.String(\"demo\"),\n\t\t\tDescription: pulumi.String(\"A description of my signal.\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewNgwafWorkspaceRule(ctx, \"ip_limit\", \u0026fastly.NgwafWorkspaceRuleArgs{\n\t\t\tWorkspaceId: example.ID(),\n\t\t\tType:        pulumi.String(\"rate_limit\"),\n\t\t\tDescription: pulumi.String(\"Rate limit demo rule-updated\"),\n\t\t\tEnabled:     pulumi.Bool(true),\n\t\t\tConditions: fastly.NgwafWorkspaceRuleConditionArray{\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleConditionArgs{\n\t\t\t\t\tField:    pulumi.String(\"ip\"),\n\t\t\t\t\tOperator: pulumi.String(\"equals\"),\n\t\t\t\t\tValue:    pulumi.String(\"1.2.3.4\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRateLimit: \u0026fastly.NgwafWorkspaceRuleRateLimitArgs{\n\t\t\t\tSignal:    pulumi.String(\"site.demo\"),\n\t\t\t\tThreshold: pulumi.Int(100),\n\t\t\t\tInterval:  pulumi.Int(60),\n\t\t\t\tDuration:  pulumi.Int(300),\n\t\t\t\tClientIdentifiers: fastly.NgwafWorkspaceRuleRateLimitClientIdentifierArray{\n\t\t\t\t\t\u0026fastly.NgwafWorkspaceRuleRateLimitClientIdentifierArgs{\n\t\t\t\t\t\tType: pulumi.String(\"ip\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tActions: fastly.NgwafWorkspaceRuleActionArray{\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleActionArgs{\n\t\t\t\t\tSignal: pulumi.String(\"SUSPECTED-BOT\"),\n\t\t\t\t\tType:   pulumi.String(\"block_signal\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafWorkspace;\nimport com.pulumi.fastly.NgwafWorkspaceArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceAttackSignalThresholdsArgs;\nimport com.pulumi.fastly.NgwafWorkspaceSignal;\nimport com.pulumi.fastly.NgwafWorkspaceSignalArgs;\nimport com.pulumi.fastly.NgwafWorkspaceRule;\nimport com.pulumi.fastly.NgwafWorkspaceRuleArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleConditionArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleRateLimitArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleActionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new NgwafWorkspace(\"example\", NgwafWorkspaceArgs.builder()\n            .name(\"example\")\n            .description(\"Test NGWAF Workspace\")\n            .mode(\"block\")\n            .ipAnonymization(\"hashed\")\n            .clientIpHeaders(            \n                \"X-Forwarded-For\",\n                \"X-Real-IP\")\n            .defaultBlockingResponseCode(429)\n            .attackSignalThresholds(NgwafWorkspaceAttackSignalThresholdsArgs.builder()\n                .build())\n            .build());\n\n        var demoSignal = new NgwafWorkspaceSignal(\"demoSignal\", NgwafWorkspaceSignalArgs.builder()\n            .workspaceId(example.id())\n            .name(\"demo\")\n            .description(\"A description of my signal.\")\n            .build());\n\n        var ipLimit = new NgwafWorkspaceRule(\"ipLimit\", NgwafWorkspaceRuleArgs.builder()\n            .workspaceId(example.id())\n            .type(\"rate_limit\")\n            .description(\"Rate limit demo rule-updated\")\n            .enabled(true)\n            .conditions(NgwafWorkspaceRuleConditionArgs.builder()\n                .field(\"ip\")\n                .operator(\"equals\")\n                .value(\"1.2.3.4\")\n                .build())\n            .rateLimit(NgwafWorkspaceRuleRateLimitArgs.builder()\n                .signal(\"site.demo\")\n                .threshold(100)\n                .interval(60)\n                .duration(300)\n                .clientIdentifiers(NgwafWorkspaceRuleRateLimitClientIdentifierArgs.builder()\n                    .type(\"ip\")\n                    .build())\n                .build())\n            .actions(NgwafWorkspaceRuleActionArgs.builder()\n                .signal(\"SUSPECTED-BOT\")\n                .type(\"block_signal\")\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:NgwafWorkspace\n    properties:\n      name: example\n      description: Test NGWAF Workspace\n      mode: block\n      ipAnonymization: hashed\n      clientIpHeaders:\n        - X-Forwarded-For\n        - X-Real-IP\n      defaultBlockingResponseCode: 429\n      attackSignalThresholds: {}\n  demoSignal:\n    type: fastly:NgwafWorkspaceSignal\n    name: demo_signal\n    properties:\n      workspaceId: ${example.id}\n      name: demo\n      description: A description of my signal.\n  ipLimit:\n    type: fastly:NgwafWorkspaceRule\n    name: ip_limit\n    properties:\n      workspaceId: ${example.id}\n      type: rate_limit\n      description: Rate limit demo rule-updated\n      enabled: true\n      conditions:\n        - field: ip\n          operator: equals\n          value: 1.2.3.4\n      rateLimit:\n        signal: site.demo\n        threshold: 100\n        interval: 60\n        duration: 300\n        clientIdentifiers:\n          - type: ip\n      actions:\n        - signal: SUSPECTED-BOT\n          type: block_signal\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nUsing signal exclusions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.NgwafWorkspace(\"example\", {\n    name: \"example\",\n    description: \"Test NGWAF Workspace\",\n    mode: \"block\",\n    ipAnonymization: \"hashed\",\n    clientIpHeaders: [\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    defaultBlockingResponseCode: 429,\n    attackSignalThresholds: {},\n});\nconst excludeXssSignal = new fastly.NgwafWorkspaceRule(\"exclude_xss_signal\", {\n    workspaceId: example.id,\n    type: \"signal\",\n    description: \"Exclude XSS signal to address a false positive\",\n    enabled: true,\n    groupOperator: \"all\",\n    conditions: [{\n        field: \"path\",\n        operator: \"like\",\n        value: \"/contact-form\",\n    }],\n    actions: [{\n        type: \"exclude_signal\",\n        signal: \"XSS\",\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.NgwafWorkspace(\"example\",\n    name=\"example\",\n    description=\"Test NGWAF Workspace\",\n    mode=\"block\",\n    ip_anonymization=\"hashed\",\n    client_ip_headers=[\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    default_blocking_response_code=429,\n    attack_signal_thresholds={})\nexclude_xss_signal = fastly.NgwafWorkspaceRule(\"exclude_xss_signal\",\n    workspace_id=example.id,\n    type=\"signal\",\n    description=\"Exclude XSS signal to address a false positive\",\n    enabled=True,\n    group_operator=\"all\",\n    conditions=[{\n        \"field\": \"path\",\n        \"operator\": \"like\",\n        \"value\": \"/contact-form\",\n    }],\n    actions=[{\n        \"type\": \"exclude_signal\",\n        \"signal\": \"XSS\",\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.NgwafWorkspace(\"example\", new()\n    {\n        Name = \"example\",\n        Description = \"Test NGWAF Workspace\",\n        Mode = \"block\",\n        IpAnonymization = \"hashed\",\n        ClientIpHeaders = new[]\n        {\n            \"X-Forwarded-For\",\n            \"X-Real-IP\",\n        },\n        DefaultBlockingResponseCode = 429,\n        AttackSignalThresholds = null,\n    });\n\n    var excludeXssSignal = new Fastly.NgwafWorkspaceRule(\"exclude_xss_signal\", new()\n    {\n        WorkspaceId = example.Id,\n        Type = \"signal\",\n        Description = \"Exclude XSS signal to address a false positive\",\n        Enabled = true,\n        GroupOperator = \"all\",\n        Conditions = new[]\n        {\n            new Fastly.Inputs.NgwafWorkspaceRuleConditionArgs\n            {\n                Field = \"path\",\n                Operator = \"like\",\n                Value = \"/contact-form\",\n            },\n        },\n        Actions = new[]\n        {\n            new Fastly.Inputs.NgwafWorkspaceRuleActionArgs\n            {\n                Type = \"exclude_signal\",\n                Signal = \"XSS\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.NewNgwafWorkspace(ctx, \"example\", \u0026fastly.NgwafWorkspaceArgs{\n\t\t\tName:            pulumi.String(\"example\"),\n\t\t\tDescription:     pulumi.String(\"Test NGWAF Workspace\"),\n\t\t\tMode:            pulumi.String(\"block\"),\n\t\t\tIpAnonymization: pulumi.String(\"hashed\"),\n\t\t\tClientIpHeaders: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"X-Forwarded-For\"),\n\t\t\t\tpulumi.String(\"X-Real-IP\"),\n\t\t\t},\n\t\t\tDefaultBlockingResponseCode: pulumi.Int(429),\n\t\t\tAttackSignalThresholds:      \u0026fastly.NgwafWorkspaceAttackSignalThresholdsArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewNgwafWorkspaceRule(ctx, \"exclude_xss_signal\", \u0026fastly.NgwafWorkspaceRuleArgs{\n\t\t\tWorkspaceId:   example.ID(),\n\t\t\tType:          pulumi.String(\"signal\"),\n\t\t\tDescription:   pulumi.String(\"Exclude XSS signal to address a false positive\"),\n\t\t\tEnabled:       pulumi.Bool(true),\n\t\t\tGroupOperator: pulumi.String(\"all\"),\n\t\t\tConditions: fastly.NgwafWorkspaceRuleConditionArray{\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleConditionArgs{\n\t\t\t\t\tField:    pulumi.String(\"path\"),\n\t\t\t\t\tOperator: pulumi.String(\"like\"),\n\t\t\t\t\tValue:    pulumi.String(\"/contact-form\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tActions: fastly.NgwafWorkspaceRuleActionArray{\n\t\t\t\t\u0026fastly.NgwafWorkspaceRuleActionArgs{\n\t\t\t\t\tType:   pulumi.String(\"exclude_signal\"),\n\t\t\t\t\tSignal: pulumi.String(\"XSS\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafWorkspace;\nimport com.pulumi.fastly.NgwafWorkspaceArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceAttackSignalThresholdsArgs;\nimport com.pulumi.fastly.NgwafWorkspaceRule;\nimport com.pulumi.fastly.NgwafWorkspaceRuleArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleConditionArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceRuleActionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new NgwafWorkspace(\"example\", NgwafWorkspaceArgs.builder()\n            .name(\"example\")\n            .description(\"Test NGWAF Workspace\")\n            .mode(\"block\")\n            .ipAnonymization(\"hashed\")\n            .clientIpHeaders(            \n                \"X-Forwarded-For\",\n                \"X-Real-IP\")\n            .defaultBlockingResponseCode(429)\n            .attackSignalThresholds(NgwafWorkspaceAttackSignalThresholdsArgs.builder()\n                .build())\n            .build());\n\n        var excludeXssSignal = new NgwafWorkspaceRule(\"excludeXssSignal\", NgwafWorkspaceRuleArgs.builder()\n            .workspaceId(example.id())\n            .type(\"signal\")\n            .description(\"Exclude XSS signal to address a false positive\")\n            .enabled(true)\n            .groupOperator(\"all\")\n            .conditions(NgwafWorkspaceRuleConditionArgs.builder()\n                .field(\"path\")\n                .operator(\"like\")\n                .value(\"/contact-form\")\n                .build())\n            .actions(NgwafWorkspaceRuleActionArgs.builder()\n                .type(\"exclude_signal\")\n                .signal(\"XSS\")\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:NgwafWorkspace\n    properties:\n      name: example\n      description: Test NGWAF Workspace\n      mode: block\n      ipAnonymization: hashed\n      clientIpHeaders:\n        - X-Forwarded-For\n        - X-Real-IP\n      defaultBlockingResponseCode: 429\n      attackSignalThresholds: {}\n  excludeXssSignal:\n    type: fastly:NgwafWorkspaceRule\n    name: exclude_xss_signal\n    properties:\n      workspaceId: ${example.id}\n      type: signal\n      description: Exclude XSS signal to address a false positive\n      enabled: true\n      groupOperator: all\n      conditions:\n        - field: path\n          operator: like\n          value: /contact-form\n      actions:\n        - type: exclude_signal\n          signal: XSS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF workspace rules can be imported using the format `\u003cworkspaceID\u003e/\u003cruleID\u003e`, e.g.:\n\n```sh\n$ pulumi import fastly:index/ngwafWorkspaceRule:NgwafWorkspaceRule demo \u003cworkspaceID\u003e/\u003cruleID\u003e\n```\n\n","properties":{"actions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleAction:NgwafWorkspaceRuleAction"},"description":"List of actions to perform when the rule matches.\n"},"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleCondition:NgwafWorkspaceRuleCondition"},"description":"Flat list of individual conditions. Each must include \u003cspan pulumi-lang-nodejs=\"`field`\" pulumi-lang-dotnet=\"`Field`\" pulumi-lang-go=\"`field`\" pulumi-lang-python=\"`field`\" pulumi-lang-yaml=\"`field`\" pulumi-lang-java=\"`field`\"\u003e`field`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`operator`\" pulumi-lang-dotnet=\"`Operator`\" pulumi-lang-go=\"`operator`\" pulumi-lang-python=\"`operator`\" pulumi-lang-yaml=\"`operator`\" pulumi-lang-java=\"`operator`\"\u003e`operator`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`value`\" pulumi-lang-dotnet=\"`Value`\" pulumi-lang-go=\"`value`\" pulumi-lang-python=\"`value`\" pulumi-lang-yaml=\"`value`\" pulumi-lang-java=\"`value`\"\u003e`value`\u003c/span\u003e.\n"},"description":{"type":"string","description":"The description of the rule.\n"},"enabled":{"type":"boolean","description":"Whether the rule is currently enabled.\n"},"groupConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleGroupCondition:NgwafWorkspaceRuleGroupCondition"},"description":"List of grouped conditions with nested logic. Each group must define a \u003cspan pulumi-lang-nodejs=\"`groupOperator`\" pulumi-lang-dotnet=\"`GroupOperator`\" pulumi-lang-go=\"`groupOperator`\" pulumi-lang-python=\"`group_operator`\" pulumi-lang-yaml=\"`groupOperator`\" pulumi-lang-java=\"`groupOperator`\"\u003e`group_operator`\u003c/span\u003e and at least one condition or multival*condition.\n"},"groupOperator":{"type":"string","description":"Logical operator to apply to group conditions. Accepted values are \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e.\n"},"multivalConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleMultivalCondition:NgwafWorkspaceRuleMultivalCondition"},"description":"List of multival conditions with nested logic. Each multival list must define a `field, operator,\u003cspan pulumi-lang-nodejs=\" groupOperator`\" pulumi-lang-dotnet=\" GroupOperator`\" pulumi-lang-go=\" groupOperator`\" pulumi-lang-python=\" group_operator`\" pulumi-lang-yaml=\" groupOperator`\" pulumi-lang-java=\" groupOperator`\"\u003e group_operator`\u003c/span\u003e and at least one condition.\n"},"rateLimit":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleRateLimit:NgwafWorkspaceRuleRateLimit","description":"Block specifically for rate*limit rules.\n"},"requestLogging":{"type":"string","description":"Logging behavior for matching requests. Accepted values are \u003cspan pulumi-lang-nodejs=\"`sampled`\" pulumi-lang-dotnet=\"`Sampled`\" pulumi-lang-go=\"`sampled`\" pulumi-lang-python=\"`sampled`\" pulumi-lang-yaml=\"`sampled`\" pulumi-lang-java=\"`sampled`\"\u003e`sampled`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"type":{"type":"string","description":"The type of the rule. Accepted values are \u003cspan pulumi-lang-nodejs=\"`request`\" pulumi-lang-dotnet=\"`Request`\" pulumi-lang-go=\"`request`\" pulumi-lang-python=\"`request`\" pulumi-lang-yaml=\"`request`\" pulumi-lang-java=\"`request`\"\u003e`request`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`rateLimit`\" pulumi-lang-dotnet=\"`RateLimit`\" pulumi-lang-go=\"`rateLimit`\" pulumi-lang-python=\"`rate_limit`\" pulumi-lang-yaml=\"`rateLimit`\" pulumi-lang-java=\"`rateLimit`\"\u003e`rate_limit`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`templatedSignal`\" pulumi-lang-dotnet=\"`TemplatedSignal`\" pulumi-lang-go=\"`templatedSignal`\" pulumi-lang-python=\"`templated_signal`\" pulumi-lang-yaml=\"`templatedSignal`\" pulumi-lang-java=\"`templatedSignal`\"\u003e`templated_signal`\u003c/span\u003e.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["actions","description","enabled","type","workspaceId"],"inputProperties":{"actions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleAction:NgwafWorkspaceRuleAction"},"description":"List of actions to perform when the rule matches.\n"},"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleCondition:NgwafWorkspaceRuleCondition"},"description":"Flat list of individual conditions. Each must include \u003cspan pulumi-lang-nodejs=\"`field`\" pulumi-lang-dotnet=\"`Field`\" pulumi-lang-go=\"`field`\" pulumi-lang-python=\"`field`\" pulumi-lang-yaml=\"`field`\" pulumi-lang-java=\"`field`\"\u003e`field`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`operator`\" pulumi-lang-dotnet=\"`Operator`\" pulumi-lang-go=\"`operator`\" pulumi-lang-python=\"`operator`\" pulumi-lang-yaml=\"`operator`\" pulumi-lang-java=\"`operator`\"\u003e`operator`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`value`\" pulumi-lang-dotnet=\"`Value`\" pulumi-lang-go=\"`value`\" pulumi-lang-python=\"`value`\" pulumi-lang-yaml=\"`value`\" pulumi-lang-java=\"`value`\"\u003e`value`\u003c/span\u003e.\n"},"description":{"type":"string","description":"The description of the rule.\n"},"enabled":{"type":"boolean","description":"Whether the rule is currently enabled.\n"},"groupConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleGroupCondition:NgwafWorkspaceRuleGroupCondition"},"description":"List of grouped conditions with nested logic. Each group must define a \u003cspan pulumi-lang-nodejs=\"`groupOperator`\" pulumi-lang-dotnet=\"`GroupOperator`\" pulumi-lang-go=\"`groupOperator`\" pulumi-lang-python=\"`group_operator`\" pulumi-lang-yaml=\"`groupOperator`\" pulumi-lang-java=\"`groupOperator`\"\u003e`group_operator`\u003c/span\u003e and at least one condition or multival*condition.\n"},"groupOperator":{"type":"string","description":"Logical operator to apply to group conditions. Accepted values are \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e.\n"},"multivalConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleMultivalCondition:NgwafWorkspaceRuleMultivalCondition"},"description":"List of multival conditions with nested logic. Each multival list must define a `field, operator,\u003cspan pulumi-lang-nodejs=\" groupOperator`\" pulumi-lang-dotnet=\" GroupOperator`\" pulumi-lang-go=\" groupOperator`\" pulumi-lang-python=\" group_operator`\" pulumi-lang-yaml=\" groupOperator`\" pulumi-lang-java=\" groupOperator`\"\u003e group_operator`\u003c/span\u003e and at least one condition.\n"},"rateLimit":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleRateLimit:NgwafWorkspaceRuleRateLimit","description":"Block specifically for rate*limit rules.\n"},"requestLogging":{"type":"string","description":"Logging behavior for matching requests. Accepted values are \u003cspan pulumi-lang-nodejs=\"`sampled`\" pulumi-lang-dotnet=\"`Sampled`\" pulumi-lang-go=\"`sampled`\" pulumi-lang-python=\"`sampled`\" pulumi-lang-yaml=\"`sampled`\" pulumi-lang-java=\"`sampled`\"\u003e`sampled`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"type":{"type":"string","description":"The type of the rule. Accepted values are \u003cspan pulumi-lang-nodejs=\"`request`\" pulumi-lang-dotnet=\"`Request`\" pulumi-lang-go=\"`request`\" pulumi-lang-python=\"`request`\" pulumi-lang-yaml=\"`request`\" pulumi-lang-java=\"`request`\"\u003e`request`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`rateLimit`\" pulumi-lang-dotnet=\"`RateLimit`\" pulumi-lang-go=\"`rateLimit`\" pulumi-lang-python=\"`rate_limit`\" pulumi-lang-yaml=\"`rateLimit`\" pulumi-lang-java=\"`rateLimit`\"\u003e`rate_limit`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`templatedSignal`\" pulumi-lang-dotnet=\"`TemplatedSignal`\" pulumi-lang-go=\"`templatedSignal`\" pulumi-lang-python=\"`templated_signal`\" pulumi-lang-yaml=\"`templatedSignal`\" pulumi-lang-java=\"`templatedSignal`\"\u003e`templated_signal`\u003c/span\u003e.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["actions","description","enabled","type","workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafWorkspaceRule resources.\n","properties":{"actions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleAction:NgwafWorkspaceRuleAction"},"description":"List of actions to perform when the rule matches.\n"},"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleCondition:NgwafWorkspaceRuleCondition"},"description":"Flat list of individual conditions. Each must include \u003cspan pulumi-lang-nodejs=\"`field`\" pulumi-lang-dotnet=\"`Field`\" pulumi-lang-go=\"`field`\" pulumi-lang-python=\"`field`\" pulumi-lang-yaml=\"`field`\" pulumi-lang-java=\"`field`\"\u003e`field`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`operator`\" pulumi-lang-dotnet=\"`Operator`\" pulumi-lang-go=\"`operator`\" pulumi-lang-python=\"`operator`\" pulumi-lang-yaml=\"`operator`\" pulumi-lang-java=\"`operator`\"\u003e`operator`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`value`\" pulumi-lang-dotnet=\"`Value`\" pulumi-lang-go=\"`value`\" pulumi-lang-python=\"`value`\" pulumi-lang-yaml=\"`value`\" pulumi-lang-java=\"`value`\"\u003e`value`\u003c/span\u003e.\n"},"description":{"type":"string","description":"The description of the rule.\n"},"enabled":{"type":"boolean","description":"Whether the rule is currently enabled.\n"},"groupConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleGroupCondition:NgwafWorkspaceRuleGroupCondition"},"description":"List of grouped conditions with nested logic. Each group must define a \u003cspan pulumi-lang-nodejs=\"`groupOperator`\" pulumi-lang-dotnet=\"`GroupOperator`\" pulumi-lang-go=\"`groupOperator`\" pulumi-lang-python=\"`group_operator`\" pulumi-lang-yaml=\"`groupOperator`\" pulumi-lang-java=\"`groupOperator`\"\u003e`group_operator`\u003c/span\u003e and at least one condition or multival*condition.\n"},"groupOperator":{"type":"string","description":"Logical operator to apply to group conditions. Accepted values are \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e.\n"},"multivalConditions":{"type":"array","items":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleMultivalCondition:NgwafWorkspaceRuleMultivalCondition"},"description":"List of multival conditions with nested logic. Each multival list must define a `field, operator,\u003cspan pulumi-lang-nodejs=\" groupOperator`\" pulumi-lang-dotnet=\" GroupOperator`\" pulumi-lang-go=\" groupOperator`\" pulumi-lang-python=\" group_operator`\" pulumi-lang-yaml=\" groupOperator`\" pulumi-lang-java=\" groupOperator`\"\u003e group_operator`\u003c/span\u003e and at least one condition.\n"},"rateLimit":{"$ref":"#/types/fastly:index/NgwafWorkspaceRuleRateLimit:NgwafWorkspaceRuleRateLimit","description":"Block specifically for rate*limit rules.\n"},"requestLogging":{"type":"string","description":"Logging behavior for matching requests. Accepted values are \u003cspan pulumi-lang-nodejs=\"`sampled`\" pulumi-lang-dotnet=\"`Sampled`\" pulumi-lang-go=\"`sampled`\" pulumi-lang-python=\"`sampled`\" pulumi-lang-yaml=\"`sampled`\" pulumi-lang-java=\"`sampled`\"\u003e`sampled`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"type":{"type":"string","description":"The type of the rule. Accepted values are \u003cspan pulumi-lang-nodejs=\"`request`\" pulumi-lang-dotnet=\"`Request`\" pulumi-lang-go=\"`request`\" pulumi-lang-python=\"`request`\" pulumi-lang-yaml=\"`request`\" pulumi-lang-java=\"`request`\"\u003e`request`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`signal`\" pulumi-lang-dotnet=\"`Signal`\" pulumi-lang-go=\"`signal`\" pulumi-lang-python=\"`signal`\" pulumi-lang-yaml=\"`signal`\" pulumi-lang-java=\"`signal`\"\u003e`signal`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`rateLimit`\" pulumi-lang-dotnet=\"`RateLimit`\" pulumi-lang-go=\"`rateLimit`\" pulumi-lang-python=\"`rate_limit`\" pulumi-lang-yaml=\"`rateLimit`\" pulumi-lang-java=\"`rateLimit`\"\u003e`rate_limit`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`templatedSignal`\" pulumi-lang-dotnet=\"`TemplatedSignal`\" pulumi-lang-go=\"`templatedSignal`\" pulumi-lang-python=\"`templated_signal`\" pulumi-lang-yaml=\"`templatedSignal`\" pulumi-lang-java=\"`templatedSignal`\"\u003e`templated_signal`\u003c/span\u003e.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/ngwafWorkspaceSignal:NgwafWorkspaceSignal":{"description":"Provides a Fastly Next-Gen WAF Workspace Signal, scoped to a specific NGWAF workspace.  \nThese signals define conditions and actions that trigger WAF enforcement at the workspace level.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = new fastly.NgwafWorkspace(\"example\", {\n    name: \"example\",\n    description: \"Test NGWAF Workspace\",\n    mode: \"block\",\n    ipAnonymization: \"hashed\",\n    clientIpHeaders: [\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    defaultBlockingResponseCode: 429,\n    attackSignalThresholds: {},\n});\nconst exampleNgwafWorkspaceSignal = new fastly.NgwafWorkspaceSignal(\"example\", {\n    workspaceId: example.id,\n    description: \"example\",\n    name: \"Test Name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.NgwafWorkspace(\"example\",\n    name=\"example\",\n    description=\"Test NGWAF Workspace\",\n    mode=\"block\",\n    ip_anonymization=\"hashed\",\n    client_ip_headers=[\n        \"X-Forwarded-For\",\n        \"X-Real-IP\",\n    ],\n    default_blocking_response_code=429,\n    attack_signal_thresholds={})\nexample_ngwaf_workspace_signal = fastly.NgwafWorkspaceSignal(\"example\",\n    workspace_id=example.id,\n    description=\"example\",\n    name=\"Test Name\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Fastly.NgwafWorkspace(\"example\", new()\n    {\n        Name = \"example\",\n        Description = \"Test NGWAF Workspace\",\n        Mode = \"block\",\n        IpAnonymization = \"hashed\",\n        ClientIpHeaders = new[]\n        {\n            \"X-Forwarded-For\",\n            \"X-Real-IP\",\n        },\n        DefaultBlockingResponseCode = 429,\n        AttackSignalThresholds = null,\n    });\n\n    var exampleNgwafWorkspaceSignal = new Fastly.NgwafWorkspaceSignal(\"example\", new()\n    {\n        WorkspaceId = example.Id,\n        Description = \"example\",\n        Name = \"Test Name\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.NewNgwafWorkspace(ctx, \"example\", \u0026fastly.NgwafWorkspaceArgs{\n\t\t\tName:            pulumi.String(\"example\"),\n\t\t\tDescription:     pulumi.String(\"Test NGWAF Workspace\"),\n\t\t\tMode:            pulumi.String(\"block\"),\n\t\t\tIpAnonymization: pulumi.String(\"hashed\"),\n\t\t\tClientIpHeaders: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"X-Forwarded-For\"),\n\t\t\t\tpulumi.String(\"X-Real-IP\"),\n\t\t\t},\n\t\t\tDefaultBlockingResponseCode: pulumi.Int(429),\n\t\t\tAttackSignalThresholds:      \u0026fastly.NgwafWorkspaceAttackSignalThresholdsArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewNgwafWorkspaceSignal(ctx, \"example\", \u0026fastly.NgwafWorkspaceSignalArgs{\n\t\t\tWorkspaceId: example.ID(),\n\t\t\tDescription: pulumi.String(\"example\"),\n\t\t\tName:        pulumi.String(\"Test Name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.NgwafWorkspace;\nimport com.pulumi.fastly.NgwafWorkspaceArgs;\nimport com.pulumi.fastly.inputs.NgwafWorkspaceAttackSignalThresholdsArgs;\nimport com.pulumi.fastly.NgwafWorkspaceSignal;\nimport com.pulumi.fastly.NgwafWorkspaceSignalArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new NgwafWorkspace(\"example\", NgwafWorkspaceArgs.builder()\n            .name(\"example\")\n            .description(\"Test NGWAF Workspace\")\n            .mode(\"block\")\n            .ipAnonymization(\"hashed\")\n            .clientIpHeaders(            \n                \"X-Forwarded-For\",\n                \"X-Real-IP\")\n            .defaultBlockingResponseCode(429)\n            .attackSignalThresholds(NgwafWorkspaceAttackSignalThresholdsArgs.builder()\n                .build())\n            .build());\n\n        var exampleNgwafWorkspaceSignal = new NgwafWorkspaceSignal(\"exampleNgwafWorkspaceSignal\", NgwafWorkspaceSignalArgs.builder()\n            .workspaceId(example.id())\n            .description(\"example\")\n            .name(\"Test Name\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: fastly:NgwafWorkspace\n    properties:\n      name: example\n      description: Test NGWAF Workspace\n      mode: block\n      ipAnonymization: hashed\n      clientIpHeaders:\n        - X-Forwarded-For\n        - X-Real-IP\n      defaultBlockingResponseCode: 429\n      attackSignalThresholds: {}\n  exampleNgwafWorkspaceSignal:\n    type: fastly:NgwafWorkspaceSignal\n    name: example\n    properties:\n      workspaceId: ${example.id}\n      description: example\n      name: Test Name\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Next-Gen WAF workspace signals can be imported using the format `\u003cworkspaceID\u003e/\u003csignalID\u003e`, e.g.:\n\n```sh\n$ pulumi import fastly:index/ngwafWorkspaceSignal:NgwafWorkspaceSignal demo \u003cworkspaceID\u003e/\u003csignalID\u003e\n```\n\n","properties":{"description":{"type":"string","description":"The description of the signal.\n"},"name":{"type":"string","description":"The name of the signal. Special characters and periods are not accepted.\n"},"referenceId":{"type":"string","description":"The generated reference ID of the signal.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"required":["name","referenceId","workspaceId"],"inputProperties":{"description":{"type":"string","description":"The description of the signal.\n"},"name":{"type":"string","description":"The name of the signal. Special characters and periods are not accepted.\n","willReplaceOnChanges":true},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"requiredInputs":["workspaceId"],"stateInputs":{"description":"Input properties used for looking up and filtering NgwafWorkspaceSignal resources.\n","properties":{"description":{"type":"string","description":"The description of the signal.\n"},"name":{"type":"string","description":"The name of the signal. Special characters and periods are not accepted.\n","willReplaceOnChanges":true},"referenceId":{"type":"string","description":"The generated reference ID of the signal.\n"},"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object"}},"fastly:index/objectStorageAccessKeys:ObjectStorageAccessKeys":{"description":"Provides an Object Storage Access Key, which can be used to manage resources in various clouds.\n\nImplements the [Object Storage Access Key API functions](https://www.fastly.com/documentation/reference/api/services/resources/object-storage-access-keys/)\n\n\u003e **Note:** Access Keys cannot be updated, so when you change a value in any of the editable fields the key is destroyed and remade\n\nBasic usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ObjectStorageAccessKeys(\"demo\", {\n    buckets: [\n        \"bucket1\",\n        \"bucket2\",\n    ],\n    description: \"this is a bucket\",\n    permission: \"\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ObjectStorageAccessKeys(\"demo\",\n    buckets=[\n        \"bucket1\",\n        \"bucket2\",\n    ],\n    description=\"this is a bucket\",\n    permission=\"\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demo = new Fastly.ObjectStorageAccessKeys(\"demo\", new()\n    {\n        Buckets = new[]\n        {\n            \"bucket1\",\n            \"bucket2\",\n        },\n        Description = \"this is a bucket\",\n        Permission = \"\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewObjectStorageAccessKeys(ctx, \"demo\", \u0026fastly.ObjectStorageAccessKeysArgs{\n\t\t\tBuckets: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"bucket1\"),\n\t\t\t\tpulumi.String(\"bucket2\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"this is a bucket\"),\n\t\t\tPermission:  pulumi.String(\"\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ObjectStorageAccessKeys;\nimport com.pulumi.fastly.ObjectStorageAccessKeysArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demo = new ObjectStorageAccessKeys(\"demo\", ObjectStorageAccessKeysArgs.builder()\n            .buckets(            \n                \"bucket1\",\n                \"bucket2\")\n            .description(\"this is a bucket\")\n            .permission(\"\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demo:\n    type: fastly:ObjectStorageAccessKeys\n    properties:\n      buckets:\n        - bucket1\n        - bucket2\n      description: this is a bucket\n      permission: \"\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\u003e **Note:** Permissions can only be one of these values listed [here](https://quic.fastly.com/documentation/reference/api/services/resources/object-storage-access-keys/#permissions), any other values will return an error\n","properties":{"accessKeyId":{"type":"string","description":"ID for the object storage access token\n"},"buckets":{"type":"array","items":{"type":"string"},"description":"Optional list of buckets the access key will be associated with.  Example: `[\"bucket1\", \"bucket2\"]`\n"},"description":{"type":"string","description":"The description of the access key\n"},"permission":{"type":"string","description":"The permissions of the access key\n"},"secretKey":{"type":"string","description":"Secret key for the object storage access token\n","secret":true}},"required":["accessKeyId","description","permission","secretKey"],"inputProperties":{"buckets":{"type":"array","items":{"type":"string"},"description":"Optional list of buckets the access key will be associated with.  Example: `[\"bucket1\", \"bucket2\"]`\n","willReplaceOnChanges":true},"description":{"type":"string","description":"The description of the access key\n","willReplaceOnChanges":true},"permission":{"type":"string","description":"The permissions of the access key\n","willReplaceOnChanges":true}},"requiredInputs":["description","permission"],"stateInputs":{"description":"Input properties used for looking up and filtering ObjectStorageAccessKeys resources.\n","properties":{"accessKeyId":{"type":"string","description":"ID for the object storage access token\n"},"buckets":{"type":"array","items":{"type":"string"},"description":"Optional list of buckets the access key will be associated with.  Example: `[\"bucket1\", \"bucket2\"]`\n","willReplaceOnChanges":true},"description":{"type":"string","description":"The description of the access key\n","willReplaceOnChanges":true},"permission":{"type":"string","description":"The permissions of the access key\n","willReplaceOnChanges":true},"secretKey":{"type":"string","description":"Secret key for the object storage access token\n","secret":true}},"type":"object"}},"fastly:index/secretstore:Secretstore":{"description":"A secret store is a persistent, globally distributed store for secrets accessible to Compute services during request processing.\n\nIn order for a Secret Store (\u003cspan pulumi-lang-nodejs=\"`fastly.Secretstore`\" pulumi-lang-dotnet=\"`fastly.Secretstore`\" pulumi-lang-go=\"`Secretstore`\" pulumi-lang-python=\"`Secretstore`\" pulumi-lang-yaml=\"`fastly.Secretstore`\" pulumi-lang-java=\"`fastly.Secretstore`\"\u003e`fastly.Secretstore`\u003c/span\u003e) to be accessible to a [Compute](https://developer.fastly.com/learning/compute/) service you'll first need to define a Compute service (\u003cspan pulumi-lang-nodejs=\"`fastly.ServiceCompute`\" pulumi-lang-dotnet=\"`fastly.ServiceCompute`\" pulumi-lang-go=\"`ServiceCompute`\" pulumi-lang-python=\"`ServiceCompute`\" pulumi-lang-yaml=\"`fastly.ServiceCompute`\" pulumi-lang-java=\"`fastly.ServiceCompute`\"\u003e`fastly.ServiceCompute`\u003c/span\u003e) in your configuration, and then create a link to the Secret Store from within the service using the \u003cspan pulumi-lang-nodejs=\"`resourceLink`\" pulumi-lang-dotnet=\"`ResourceLink`\" pulumi-lang-go=\"`resourceLink`\" pulumi-lang-python=\"`resource_link`\" pulumi-lang-yaml=\"`resourceLink`\" pulumi-lang-java=\"`resourceLink`\"\u003e`resource_link`\u003c/span\u003e block (shown in the below examples).\n\n\u003e **Warning:** Unlike other stores (Config Store, KV Store etc) deleting a Secret Store will automatically delete all the secrets it contains. There is no need to manually delete the secrets first.\n\n\u003e **Note:** The Fastly Terraform provider does not provide a means to seed the Secret Store with secrets (this is because the values are persisted into the Terraform state file as plaintext). To populate the Secret Store with secrets please use the [Fastly API](https://developer.fastly.com/reference/api/services/resources/secret-store-secret/) directly or the [Fastly CLI](https://developer.fastly.com/reference/cli/secret-store-entry/).\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\n// IMPORTANT: Deleting a Secret Store requires first deleting its resource_link.\n// This requires a two-step `pulumi up` as we can't guarantee deletion order.\n// e.g. resource_link deletion within fastly_service_compute might not finish first.\nconst exampleSecretstore = new fastly.Secretstore(\"example\", {name: \"my_secret_store\"});\nconst example = fastly.getPackageHash({\n    filename: \"package.tar.gz\",\n});\nconst exampleServiceCompute = new fastly.ServiceCompute(\"example\", {\n    name: \"my_compute_service\",\n    domains: [{\n        name: \"demo.example.com\",\n    }],\n    \"package\": {\n        filename: \"package.tar.gz\",\n        sourceCodeHash: example.then(example =\u003e example.hash),\n    },\n    resourceLinks: [{\n        name: \"my_resource_link\",\n        resourceId: exampleSecretstore.id,\n    }],\n    forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\n# IMPORTANT: Deleting a Secret Store requires first deleting its resource_link.\n# This requires a two-step `pulumi up` as we can't guarantee deletion order.\n# e.g. resource_link deletion within fastly_service_compute might not finish first.\nexample_secretstore = fastly.Secretstore(\"example\", name=\"my_secret_store\")\nexample = fastly.get_package_hash(filename=\"package.tar.gz\")\nexample_service_compute = fastly.ServiceCompute(\"example\",\n    name=\"my_compute_service\",\n    domains=[{\n        \"name\": \"demo.example.com\",\n    }],\n    package={\n        \"filename\": \"package.tar.gz\",\n        \"source_code_hash\": example.hash,\n    },\n    resource_links=[{\n        \"name\": \"my_resource_link\",\n        \"resource_id\": example_secretstore.id,\n    }],\n    force_destroy=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // IMPORTANT: Deleting a Secret Store requires first deleting its resource_link.\n    // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n    // e.g. resource_link deletion within fastly_service_compute might not finish first.\n    var exampleSecretstore = new Fastly.Secretstore(\"example\", new()\n    {\n        Name = \"my_secret_store\",\n    });\n\n    var example = Fastly.GetPackageHash.Invoke(new()\n    {\n        Filename = \"package.tar.gz\",\n    });\n\n    var exampleServiceCompute = new Fastly.ServiceCompute(\"example\", new()\n    {\n        Name = \"my_compute_service\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceComputeDomainArgs\n            {\n                Name = \"demo.example.com\",\n            },\n        },\n        Package = new Fastly.Inputs.ServiceComputePackageArgs\n        {\n            Filename = \"package.tar.gz\",\n            SourceCodeHash = example.Apply(getPackageHashResult =\u003e getPackageHashResult.Hash),\n        },\n        ResourceLinks = new[]\n        {\n            new Fastly.Inputs.ServiceComputeResourceLinkArgs\n            {\n                Name = \"my_resource_link\",\n                ResourceId = exampleSecretstore.Id,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// IMPORTANT: Deleting a Secret Store requires first deleting its resource_link.\n\t\t// This requires a two-step `pulumi up` as we can't guarantee deletion order.\n\t\t// e.g. resource_link deletion within fastly_service_compute might not finish first.\n\t\texampleSecretstore, err := fastly.NewSecretstore(ctx, \"example\", \u0026fastly.SecretstoreArgs{\n\t\t\tName: pulumi.String(\"my_secret_store\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := fastly.GetPackageHash(ctx, \u0026fastly.GetPackageHashArgs{\n\t\t\tFilename: pulumi.StringRef(\"package.tar.gz\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceCompute(ctx, \"example\", \u0026fastly.ServiceComputeArgs{\n\t\t\tName: pulumi.String(\"my_compute_service\"),\n\t\t\tDomains: fastly.ServiceComputeDomainArray{\n\t\t\t\t\u0026fastly.ServiceComputeDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"demo.example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackage: \u0026fastly.ServiceComputePackageArgs{\n\t\t\t\tFilename:       pulumi.String(\"package.tar.gz\"),\n\t\t\t\tSourceCodeHash: pulumi.String(example.Hash),\n\t\t\t},\n\t\t\tResourceLinks: fastly.ServiceComputeResourceLinkArray{\n\t\t\t\t\u0026fastly.ServiceComputeResourceLinkArgs{\n\t\t\t\t\tName:       pulumi.String(\"my_resource_link\"),\n\t\t\t\t\tResourceId: exampleSecretstore.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.Secretstore;\nimport com.pulumi.fastly.SecretstoreArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetPackageHashArgs;\nimport com.pulumi.fastly.ServiceCompute;\nimport com.pulumi.fastly.ServiceComputeArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceComputePackageArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeResourceLinkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // IMPORTANT: Deleting a Secret Store requires first deleting its resource_link.\n        // This requires a two-step `pulumi up` as we can't guarantee deletion order.\n        // e.g. resource_link deletion within fastly_service_compute might not finish first.\n        var exampleSecretstore = new Secretstore(\"exampleSecretstore\", SecretstoreArgs.builder()\n            .name(\"my_secret_store\")\n            .build());\n\n        final var example = FastlyFunctions.getPackageHash(GetPackageHashArgs.builder()\n            .filename(\"package.tar.gz\")\n            .build());\n\n        var exampleServiceCompute = new ServiceCompute(\"exampleServiceCompute\", ServiceComputeArgs.builder()\n            .name(\"my_compute_service\")\n            .domains(ServiceComputeDomainArgs.builder()\n                .name(\"demo.example.com\")\n                .build())\n            .package_(ServiceComputePackageArgs.builder()\n                .filename(\"package.tar.gz\")\n                .sourceCodeHash(example.hash())\n                .build())\n            .resourceLinks(ServiceComputeResourceLinkArgs.builder()\n                .name(\"my_resource_link\")\n                .resourceId(exampleSecretstore.id())\n                .build())\n            .forceDestroy(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # IMPORTANT: Deleting a Secret Store requires first deleting its resource_link.\n  # This requires a two-step `pulumi up` as we can't guarantee deletion order.\n  # e.g. resource_link deletion within fastly_service_compute might not finish first.\n  exampleSecretstore:\n    type: fastly:Secretstore\n    name: example\n    properties:\n      name: my_secret_store\n  exampleServiceCompute:\n    type: fastly:ServiceCompute\n    name: example\n    properties:\n      name: my_compute_service\n      domains:\n        - name: demo.example.com\n      package:\n        filename: package.tar.gz\n        sourceCodeHash: ${example.hash}\n      resourceLinks:\n        - name: my_resource_link\n          resourceId: ${exampleSecretstore.id}\n      forceDestroy: true\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getPackageHash\n      arguments:\n        filename: package.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFastly Secret Stores can be imported using their Store ID, e.g.\n\n```sh\n$ pulumi import fastly:index/secretstore:Secretstore example xxxxxxxxxxxxxxxxxxxx\n```\n\n","properties":{"name":{"type":"string","description":"A human-readable name for the Secret Store. The value must contain only letters, numbers, dashes (-), underscores (*), or periods (.). It is important to note that changing this attribute will delete and recreate the Secret Store, and discard the current entries. You MUST first delete the associated resource*link block from your service before modifying this field.\n"}},"required":["name"],"inputProperties":{"name":{"type":"string","description":"A human-readable name for the Secret Store. The value must contain only letters, numbers, dashes (-), underscores (*), or periods (.). It is important to note that changing this attribute will delete and recreate the Secret Store, and discard the current entries. You MUST first delete the associated resource*link block from your service before modifying this field.\n","willReplaceOnChanges":true}},"stateInputs":{"description":"Input properties used for looking up and filtering Secretstore resources.\n","properties":{"name":{"type":"string","description":"A human-readable name for the Secret Store. The value must contain only letters, numbers, dashes (-), underscores (*), or periods (.). It is important to note that changing this attribute will delete and recreate the Secret Store, and discard the current entries. You MUST first delete the associated resource*link block from your service before modifying this field.\n","willReplaceOnChanges":true}},"type":"object"}},"fastly:index/serviceACLEntries:ServiceACLEntries":{"description":"Defines a set of Fastly ACL entries that can be used to populate a service ACL.  This resource will populate an ACL with the entries and will track their state.\n\n\u003e **Note:** By default the Terraform provider allows you to externally manage the entries via API or UI.\nIf you wish to apply your changes in the HCL, then you should explicitly set the \u003cspan pulumi-lang-nodejs=\"`manageEntries`\" pulumi-lang-dotnet=\"`ManageEntries`\" pulumi-lang-go=\"`manageEntries`\" pulumi-lang-python=\"`manage_entries`\" pulumi-lang-yaml=\"`manageEntries`\" pulumi-lang-java=\"`manageEntries`\"\u003e`manage_entries`\u003c/span\u003e attribute. An example of this configuration is provided below.\n\n## Example Usage\n\n### Terraform \u003e= 0.12.6)\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst config = new pulumi.Config();\nconst myaclName = config.get(\"myaclName\") || \"My ACL\";\nconst myservice = new fastly.ServiceVcl(\"myservice\", {\n    name: \"demofastly\",\n    domains: [{\n        name: \"demo.notexample.com\",\n        comment: \"demo\",\n    }],\n    backends: [{\n        address: \"http-me.fastly.dev\",\n        name: \"Glitch Test Site\",\n        port: 80,\n    }],\n    acls: [{\n        name: myaclName,\n    }],\n    forceDestroy: true,\n});\nconst entries: fastly.ServiceACLEntries[] = [];\nmyservice.acls.apply(acls =\u003e {\n    const entries: fastly.ServiceACLEntries[] = [];\npulumi.all(.filter(d =\u003e d.name == myaclName).reduce((__obj, d) =\u003e ({ ...__obj, [d.name]: d }))).apply(rangeBody =\u003e {\n        for (const range of Object.entries(rangeBody).map(([k, v]) =\u003e ({key: k, value: v}))) {\n            entries.push(new fastly.ServiceACLEntries(`entries-${range.key}`, {\n                serviceId: myservice.id,\n                aclId: range.value.aclId,\n                entries: [{\n                    ip: \"127.0.0.1\",\n                    subnet: \"24\",\n                    negated: false,\n                    comment: \"ACL Entry 1\",\n                }],\n            }));\n        }\n    });\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nconfig = pulumi.Config()\nmyacl_name = config.get(\"myaclName\")\nif myacl_name is None:\n    myacl_name = \"My ACL\"\nmyservice = fastly.ServiceVcl(\"myservice\",\n    name=\"demofastly\",\n    domains=[{\n        \"name\": \"demo.notexample.com\",\n        \"comment\": \"demo\",\n    }],\n    backends=[{\n        \"address\": \"http-me.fastly.dev\",\n        \"name\": \"Glitch Test Site\",\n        \"port\": 80,\n    }],\n    acls=[{\n        \"name\": myacl_name,\n    }],\n    force_destroy=True)\nentries = []\ndef create_entries(range_body):\n    for range in [{\"key\": k, \"value\": v} for [k, v] in enumerate(range_body)]:\n        entries.append(fastly.ServiceACLEntries(f\"entries-{range['key']}\",\n            service_id=myservice.id,\n            acl_id=range[\"value\"].acl_id,\n            entries=[{\n                \"ip\": \"127.0.0.1\",\n                \"subnet\": \"24\",\n                \"negated\": False,\n                \"comment\": \"ACL Entry 1\",\n            }]))\n\nmyservice.acls.apply(lambda resolved_outputs: create_entries({d.name: d for d in resolved_outputs['acls'] if d.name == myacl_name}))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Config();\n    var myaclName = config.Get(\"myaclName\") ?? \"My ACL\";\n    var myservice = new Fastly.ServiceVcl(\"myservice\", new()\n    {\n        Name = \"demofastly\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"demo.notexample.com\",\n                Comment = \"demo\",\n            },\n        },\n        Backends = new[]\n        {\n            new Fastly.Inputs.ServiceVclBackendArgs\n            {\n                Address = \"http-me.fastly.dev\",\n                Name = \"Glitch Test Site\",\n                Port = 80,\n            },\n        },\n        Acls = new[]\n        {\n            new Fastly.Inputs.ServiceVclAclArgs\n            {\n                Name = myaclName,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n    var entries = new List\u003cFastly.ServiceACLEntries\u003e();\n    foreach (var range in myservice.Acls.Apply(acls =\u003e ).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        entries.Add(new Fastly.ServiceACLEntries($\"entries-{range.Key}\", new()\n        {\n            ServiceId = myservice.Id,\n            AclId = range.Value.AclId,\n            Entries = new[]\n            {\n                new Fastly.Inputs.ServiceACLEntriesEntryArgs\n                {\n                    Ip = \"127.0.0.1\",\n                    Subnet = \"24\",\n                    Negated = false,\n                    Comment = \"ACL Entry 1\",\n                },\n            },\n        }));\n    }\n});\n```\n```yaml\nconfiguration:\n  myaclName:\n    type: string\n    default: My ACL\nresources:\n  myservice:\n    type: fastly:ServiceVcl\n    properties:\n      name: demofastly\n      domains:\n        - name: demo.notexample.com\n          comment: demo\n      backends:\n        - address: http-me.fastly.dev\n          name: Glitch Test Site\n          port: 80\n      acls:\n        - name: ${myaclName}\n      forceDestroy: true\n  entries:\n    type: fastly:ServiceACLEntries\n    properties:\n      serviceId: ${myservice.id}\n      aclId: ${range.value.aclId}\n      entries:\n        - ip: 127.0.0.1\n          subnet: '24'\n          negated: false\n          comment: ACL Entry 1\n    options: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nComplex object usage:\n\nThe following example demonstrates the use of dynamic nested blocks to create ACL entries.\n\n### Terraform \u003e= 0.12.0 \u0026\u0026 \u003c 0.12.6)\n\n\u003cspan pulumi-lang-nodejs=\"`forEach`\" pulumi-lang-dotnet=\"`ForEach`\" pulumi-lang-go=\"`forEach`\" pulumi-lang-python=\"`for_each`\" pulumi-lang-yaml=\"`forEach`\" pulumi-lang-java=\"`forEach`\"\u003e`for_each`\u003c/span\u003e attributes were not available in Terraform before 0.12.6, however, users can still use \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expressions to achieve\nsimilar behaviour as seen in the example below.\n\n\u003e **Warning:** Terraform might not properly calculate implicit dependencies on computed attributes when using \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expressions\n\nFor scenarios such as adding an ACL to a service and at the same time, creating the ACL entries (\u003cspan pulumi-lang-nodejs=\"`fastly.ServiceACLEntries`\" pulumi-lang-dotnet=\"`fastly.ServiceACLEntries`\" pulumi-lang-go=\"`ServiceACLEntries`\" pulumi-lang-python=\"`ServiceACLEntries`\" pulumi-lang-yaml=\"`fastly.ServiceACLEntries`\" pulumi-lang-java=\"`fastly.ServiceACLEntries`\"\u003e`fastly.ServiceACLEntries`\u003c/span\u003e)\nresource, Terraform will not calculate implicit dependencies correctly on \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expressions. This will result in index lookup\nproblems and the execution will fail.\n\nFor those scenarios, it's recommended to split the changes into two distinct steps:\n\n1. Add the \u003cspan pulumi-lang-nodejs=\"`acl`\" pulumi-lang-dotnet=\"`Acl`\" pulumi-lang-go=\"`acl`\" pulumi-lang-python=\"`acl`\" pulumi-lang-yaml=\"`acl`\" pulumi-lang-java=\"`acl`\"\u003e`acl`\u003c/span\u003e block to the \u003cspan pulumi-lang-nodejs=\"`fastly.ServiceVcl`\" pulumi-lang-dotnet=\"`fastly.ServiceVcl`\" pulumi-lang-go=\"`ServiceVcl`\" pulumi-lang-python=\"`ServiceVcl`\" pulumi-lang-yaml=\"`fastly.ServiceVcl`\" pulumi-lang-java=\"`fastly.ServiceVcl`\"\u003e`fastly.ServiceVcl`\u003c/span\u003e and apply the changes\n2. Add the \u003cspan pulumi-lang-nodejs=\"`fastly.ServiceACLEntries`\" pulumi-lang-dotnet=\"`fastly.ServiceACLEntries`\" pulumi-lang-go=\"`ServiceACLEntries`\" pulumi-lang-python=\"`ServiceACLEntries`\" pulumi-lang-yaml=\"`fastly.ServiceACLEntries`\" pulumi-lang-java=\"`fastly.ServiceACLEntries`\"\u003e`fastly.ServiceACLEntries`\u003c/span\u003e resource with the \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expressions to the HCL and apply the changes\n\nUsage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst config = new pulumi.Config();\nconst myaclName = config.get(\"myaclName\") || \"My ACL\";\nconst myservice = new fastly.ServiceVcl(\"myservice\", {\n    name: \"demofastly\",\n    domains: [{\n        name: \"demo.notexample.com\",\n        comment: \"demo\",\n    }],\n    acls: [{\n        name: myaclName,\n    }],\n});\nconst entries = new fastly.ServiceACLEntries(\"entries\", {\n    serviceId: myservice.id,\n    aclId: myservice.acls.apply(acls =\u003e .reduce((__obj, d) =\u003e ({ ...__obj, [d.name]: d.aclId }))[myaclName]),\n    entries: [{\n        ip: \"127.0.0.1\",\n        subnet: \"24\",\n        negated: false,\n        comment: \"ACL Entry 1\",\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nconfig = pulumi.Config()\nmyacl_name = config.get(\"myaclName\")\nif myacl_name is None:\n    myacl_name = \"My ACL\"\nmyservice = fastly.ServiceVcl(\"myservice\",\n    name=\"demofastly\",\n    domains=[{\n        \"name\": \"demo.notexample.com\",\n        \"comment\": \"demo\",\n    }],\n    acls=[{\n        \"name\": myacl_name,\n    }])\nentries = fastly.ServiceACLEntries(\"entries\",\n    service_id=myservice.id,\n    acl_id=myservice.acls.apply(lambda acls: {d.name: d.acl_id for d in acls}[myacl_name]),\n    entries=[{\n        \"ip\": \"127.0.0.1\",\n        \"subnet\": \"24\",\n        \"negated\": False,\n        \"comment\": \"ACL Entry 1\",\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Config();\n    var myaclName = config.Get(\"myaclName\") ?? \"My ACL\";\n    var myservice = new Fastly.ServiceVcl(\"myservice\", new()\n    {\n        Name = \"demofastly\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"demo.notexample.com\",\n                Comment = \"demo\",\n            },\n        },\n        Acls = new[]\n        {\n            new Fastly.Inputs.ServiceVclAclArgs\n            {\n                Name = myaclName,\n            },\n        },\n    });\n\n    var entries = new Fastly.ServiceACLEntries(\"entries\", new()\n    {\n        ServiceId = myservice.Id,\n        AclId = myservice.Acls.Apply(acls =\u003e .ToDictionary(item =\u003e {\n            var d = item.Value;\n            return d.Name;\n        }, item =\u003e {\n            var d = item.Value;\n            return d.AclId;\n        })[myaclName]),\n        Entries = new[]\n        {\n            new Fastly.Inputs.ServiceACLEntriesEntryArgs\n            {\n                Ip = \"127.0.0.1\",\n                Subnet = \"24\",\n                Negated = false,\n                Comment = \"ACL Entry 1\",\n            },\n        },\n    });\n\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Reapplying original entries with \u003cspan pulumi-lang-nodejs=\"`manageEntries`\" pulumi-lang-dotnet=\"`ManageEntries`\" pulumi-lang-go=\"`manageEntries`\" pulumi-lang-python=\"`manage_entries`\" pulumi-lang-yaml=\"`manageEntries`\" pulumi-lang-java=\"`manageEntries`\"\u003e`manage_entries`\u003c/span\u003e if the state of the entries drifts\n\nBy default the user is opted out from reapplying the original changes if the entries are managed externally.\nThe following example demonstrates how the \u003cspan pulumi-lang-nodejs=\"`manageEntries`\" pulumi-lang-dotnet=\"`ManageEntries`\" pulumi-lang-go=\"`manageEntries`\" pulumi-lang-python=\"`manage_entries`\" pulumi-lang-yaml=\"`manageEntries`\" pulumi-lang-java=\"`manageEntries`\"\u003e`manage_entries`\u003c/span\u003e field can be used to reapply the changes defined in the HCL if the state of the entries drifts.\nWhen the value is explicitly set to 'true', Terraform will keep the original changes and discard any other changes made under this resource outside of Terraform.\n\n\u003e **Warning:** You will lose externally managed entries if `manage_entries=true`.\n\n\u003e **Note:** The \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e built-in meta-argument takes precedence over \u003cspan pulumi-lang-nodejs=\"`manageEntries`\" pulumi-lang-dotnet=\"`ManageEntries`\" pulumi-lang-go=\"`manageEntries`\" pulumi-lang-python=\"`manage_entries`\" pulumi-lang-yaml=\"`manageEntries`\" pulumi-lang-java=\"`manageEntries`\"\u003e`manage_entries`\u003c/span\u003e regardless of its value.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\n//...\nconst entries: fastly.ServiceACLEntries[] = [];\nfor (const range of Object.entries(.filter(d =\u003e d.name == myaclName).reduce((__obj, d) =\u003e ({ ...__obj, [d.name]: d }))).map(([k, v]) =\u003e ({key: k, value: v}))) {\n    entries.push(new fastly.ServiceACLEntries(`entries-${range.key}`, {\n        serviceId: myservice.id,\n        aclId: range.value.aclId,\n        manageEntries: true,\n        entries: [{\n            ip: \"127.0.0.1\",\n            subnet: \"24\",\n            negated: false,\n            comment: \"ACL Entry 1\",\n        }],\n    }));\n}\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\n#...\nentries = []\nfor range in [{\"key\": k, \"value\": v} for [k, v] in enumerate({d.name: d for d in myservice.acl if d.name == myacl_name})]:\n    entries.append(fastly.ServiceACLEntries(f\"entries-{range['key']}\",\n        service_id=myservice[\"id\"],\n        acl_id=range[\"value\"][\"aclId\"],\n        manage_entries=True,\n        entries=[{\n            \"ip\": \"127.0.0.1\",\n            \"subnet\": \"24\",\n            \"negated\": False,\n            \"comment\": \"ACL Entry 1\",\n        }]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    //...\n    var entries = new List\u003cFastly.ServiceACLEntries\u003e();\n    foreach (var range in .ToDictionary(item =\u003e {\n        var d = item.Value;\n        return d.Name;\n    }, item =\u003e {\n        var d = item.Value;\n        return d;\n    }).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        entries.Add(new Fastly.ServiceACLEntries($\"entries-{range.Key}\", new()\n        {\n            ServiceId = myservice.Id,\n            AclId = range.Value.AclId,\n            ManageEntries = true,\n            Entries = new[]\n            {\n                new Fastly.Inputs.ServiceACLEntriesEntryArgs\n                {\n                    Ip = \"127.0.0.1\",\n                    Subnet = \"24\",\n                    Negated = false,\n                    Comment = \"ACL Entry 1\",\n                },\n            },\n        }));\n    }\n});\n```\n```yaml\nresources:\n  #...\n  entries:\n    type: fastly:ServiceACLEntries\n    properties:\n      serviceId: ${myservice.id}\n      aclId: ${range.value.aclId}\n      manageEntries: true\n      entries:\n        - ip: 127.0.0.1\n          subnet: '24'\n          negated: false\n          comment: ACL Entry 1\n    options: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nThis is an example of the import command being applied to the resource named `fastly_service_acl_entries.entries`\nThe resource ID is a combined value of the \u003cspan pulumi-lang-nodejs=\"`serviceId`\" pulumi-lang-dotnet=\"`ServiceId`\" pulumi-lang-go=\"`serviceId`\" pulumi-lang-python=\"`service_id`\" pulumi-lang-yaml=\"`serviceId`\" pulumi-lang-java=\"`serviceId`\"\u003e`service_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`aclId`\" pulumi-lang-dotnet=\"`AclId`\" pulumi-lang-go=\"`aclId`\" pulumi-lang-python=\"`acl_id`\" pulumi-lang-yaml=\"`aclId`\" pulumi-lang-java=\"`aclId`\"\u003e`acl_id`\u003c/span\u003e separated by a forward slash.\n\n```sh\n$ pulumi import fastly:index/serviceACLEntries:ServiceACLEntries entries xxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxx\n```\n\nIf Terraform is already managing remote acl entries against a resource being imported then the user will be asked to remove it from the existing Terraform state.\nThe following is an example of the Terraform state command to remove the resource named `fastly_service_acl_entries.entries` from the Terraform state file.\n\n```sh\n$ terraform state rm fastly_service_acl_entries.entries\n```\n\n","properties":{"aclId":{"type":"string","description":"The ID of the ACL that the items belong to\n"},"entries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceACLEntriesEntry:ServiceACLEntriesEntry"},"description":"ACL Entries\n"},"manageEntries":{"type":"boolean","description":"Whether to reapply changes if the state of the entries drifts, i.e. if entries are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the Service that the ACL belongs to\n"}},"required":["aclId","serviceId"],"inputProperties":{"aclId":{"type":"string","description":"The ID of the ACL that the items belong to\n","willReplaceOnChanges":true},"entries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceACLEntriesEntry:ServiceACLEntriesEntry"},"description":"ACL Entries\n"},"manageEntries":{"type":"boolean","description":"Whether to reapply changes if the state of the entries drifts, i.e. if entries are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the Service that the ACL belongs to\n","willReplaceOnChanges":true}},"requiredInputs":["aclId","serviceId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceACLEntries resources.\n","properties":{"aclId":{"type":"string","description":"The ID of the ACL that the items belong to\n","willReplaceOnChanges":true},"entries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceACLEntriesEntry:ServiceACLEntriesEntry"},"description":"ACL Entries\n"},"manageEntries":{"type":"boolean","description":"Whether to reapply changes if the state of the entries drifts, i.e. if entries are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the Service that the ACL belongs to\n","willReplaceOnChanges":true}},"type":"object"}},"fastly:index/serviceAuthorization:ServiceAuthorization":{"description":"Configures authorization with granular permissions to services. Users can be granted rights for services on different levels.\n\nThe Service Authorization resource requires a user id, service id and an optional permission.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n    name: \"demofastly\",\n    domains: [{\n        name: \"demo.notexample.com\",\n        comment: \"demo\",\n    }],\n});\nconst user = new fastly.User(\"user\", {\n    login: \"demo@example.com\",\n    name: \"Demo User\",\n});\nconst auth = new fastly.ServiceAuthorization(\"auth\", {\n    serviceId: demo.id,\n    userId: user.id,\n    permission: \"purge_all\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n    name=\"demofastly\",\n    domains=[{\n        \"name\": \"demo.notexample.com\",\n        \"comment\": \"demo\",\n    }])\nuser = fastly.User(\"user\",\n    login=\"demo@example.com\",\n    name=\"Demo User\")\nauth = fastly.ServiceAuthorization(\"auth\",\n    service_id=demo.id,\n    user_id=user.id,\n    permission=\"purge_all\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demo = new Fastly.ServiceVcl(\"demo\", new()\n    {\n        Name = \"demofastly\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"demo.notexample.com\",\n                Comment = \"demo\",\n            },\n        },\n    });\n\n    var user = new Fastly.User(\"user\", new()\n    {\n        Login = \"demo@example.com\",\n        Name = \"Demo User\",\n    });\n\n    var auth = new Fastly.ServiceAuthorization(\"auth\", new()\n    {\n        ServiceId = demo.Id,\n        UserId = user.Id,\n        Permission = \"purge_all\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemo, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tName: pulumi.String(\"demofastly\"),\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName:    pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := fastly.NewUser(ctx, \"user\", \u0026fastly.UserArgs{\n\t\t\tLogin: pulumi.String(\"demo@example.com\"),\n\t\t\tName:  pulumi.String(\"Demo User\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceAuthorization(ctx, \"auth\", \u0026fastly.ServiceAuthorizationArgs{\n\t\t\tServiceId:  demo.ID(),\n\t\t\tUserId:     user.ID(),\n\t\t\tPermission: pulumi.String(\"purge_all\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.User;\nimport com.pulumi.fastly.UserArgs;\nimport com.pulumi.fastly.ServiceAuthorization;\nimport com.pulumi.fastly.ServiceAuthorizationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder()\n            .name(\"demofastly\")\n            .domains(ServiceVclDomainArgs.builder()\n                .name(\"demo.notexample.com\")\n                .comment(\"demo\")\n                .build())\n            .build());\n\n        var user = new User(\"user\", UserArgs.builder()\n            .login(\"demo@example.com\")\n            .name(\"Demo User\")\n            .build());\n\n        var auth = new ServiceAuthorization(\"auth\", ServiceAuthorizationArgs.builder()\n            .serviceId(demo.id())\n            .userId(user.id())\n            .permission(\"purge_all\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demo:\n    type: fastly:ServiceVcl\n    properties:\n      name: demofastly\n      domains:\n        - name: demo.notexample.com\n          comment: demo\n  user:\n    type: fastly:User\n    properties:\n      login: demo@example.com\n      name: Demo User\n  auth:\n    type: fastly:ServiceAuthorization\n    properties:\n      serviceId: ${demo.id}\n      userId: ${user.id}\n      permission: purge_all\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nA Fastly Service Authorization can be imported using their user ID, e.g.\n\n```sh\n$ pulumi import fastly:index/serviceAuthorization:ServiceAuthorization demo xxxxxxxxxxxxxxxxxxxx\n```\n\n","properties":{"permission":{"type":"string","description":"The permissions to grant the user. Can be \u003cspan pulumi-lang-nodejs=\"`full`\" pulumi-lang-dotnet=\"`Full`\" pulumi-lang-go=\"`full`\" pulumi-lang-python=\"`full`\" pulumi-lang-yaml=\"`full`\" pulumi-lang-java=\"`full`\"\u003e`full`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`readOnly`\" pulumi-lang-dotnet=\"`ReadOnly`\" pulumi-lang-go=\"`readOnly`\" pulumi-lang-python=\"`read_only`\" pulumi-lang-yaml=\"`readOnly`\" pulumi-lang-java=\"`readOnly`\"\u003e`read_only`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`purgeSelect`\" pulumi-lang-dotnet=\"`PurgeSelect`\" pulumi-lang-go=\"`purgeSelect`\" pulumi-lang-python=\"`purge_select`\" pulumi-lang-yaml=\"`purgeSelect`\" pulumi-lang-java=\"`purgeSelect`\"\u003e`purge_select`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`purgeAll`\" pulumi-lang-dotnet=\"`PurgeAll`\" pulumi-lang-go=\"`purgeAll`\" pulumi-lang-python=\"`purge_all`\" pulumi-lang-yaml=\"`purgeAll`\" pulumi-lang-java=\"`purgeAll`\"\u003e`purge_all`\u003c/span\u003e.\n"},"serviceId":{"type":"string","description":"The ID of the service to grant permissions for.\n"},"userId":{"type":"string","description":"The ID of the user which will receive the granted permissions.\n"}},"required":["permission","serviceId","userId"],"inputProperties":{"permission":{"type":"string","description":"The permissions to grant the user. Can be \u003cspan pulumi-lang-nodejs=\"`full`\" pulumi-lang-dotnet=\"`Full`\" pulumi-lang-go=\"`full`\" pulumi-lang-python=\"`full`\" pulumi-lang-yaml=\"`full`\" pulumi-lang-java=\"`full`\"\u003e`full`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`readOnly`\" pulumi-lang-dotnet=\"`ReadOnly`\" pulumi-lang-go=\"`readOnly`\" pulumi-lang-python=\"`read_only`\" pulumi-lang-yaml=\"`readOnly`\" pulumi-lang-java=\"`readOnly`\"\u003e`read_only`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`purgeSelect`\" pulumi-lang-dotnet=\"`PurgeSelect`\" pulumi-lang-go=\"`purgeSelect`\" pulumi-lang-python=\"`purge_select`\" pulumi-lang-yaml=\"`purgeSelect`\" pulumi-lang-java=\"`purgeSelect`\"\u003e`purge_select`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`purgeAll`\" pulumi-lang-dotnet=\"`PurgeAll`\" pulumi-lang-go=\"`purgeAll`\" pulumi-lang-python=\"`purge_all`\" pulumi-lang-yaml=\"`purgeAll`\" pulumi-lang-java=\"`purgeAll`\"\u003e`purge_all`\u003c/span\u003e.\n"},"serviceId":{"type":"string","description":"The ID of the service to grant permissions for.\n","willReplaceOnChanges":true},"userId":{"type":"string","description":"The ID of the user which will receive the granted permissions.\n","willReplaceOnChanges":true}},"requiredInputs":["permission","serviceId","userId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceAuthorization resources.\n","properties":{"permission":{"type":"string","description":"The permissions to grant the user. Can be \u003cspan pulumi-lang-nodejs=\"`full`\" pulumi-lang-dotnet=\"`Full`\" pulumi-lang-go=\"`full`\" pulumi-lang-python=\"`full`\" pulumi-lang-yaml=\"`full`\" pulumi-lang-java=\"`full`\"\u003e`full`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`readOnly`\" pulumi-lang-dotnet=\"`ReadOnly`\" pulumi-lang-go=\"`readOnly`\" pulumi-lang-python=\"`read_only`\" pulumi-lang-yaml=\"`readOnly`\" pulumi-lang-java=\"`readOnly`\"\u003e`read_only`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`purgeSelect`\" pulumi-lang-dotnet=\"`PurgeSelect`\" pulumi-lang-go=\"`purgeSelect`\" pulumi-lang-python=\"`purge_select`\" pulumi-lang-yaml=\"`purgeSelect`\" pulumi-lang-java=\"`purgeSelect`\"\u003e`purge_select`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`purgeAll`\" pulumi-lang-dotnet=\"`PurgeAll`\" pulumi-lang-go=\"`purgeAll`\" pulumi-lang-python=\"`purge_all`\" pulumi-lang-yaml=\"`purgeAll`\" pulumi-lang-java=\"`purgeAll`\"\u003e`purge_all`\u003c/span\u003e.\n"},"serviceId":{"type":"string","description":"The ID of the service to grant permissions for.\n","willReplaceOnChanges":true},"userId":{"type":"string","description":"The ID of the user which will receive the granted permissions.\n","willReplaceOnChanges":true}},"type":"object"}},"fastly:index/serviceCompute:ServiceCompute":{"description":"Provides a Fastly Compute service. Compute is a computation platform capable of running custom binaries that you compile on your own systems and upload to Fastly. Security and portability is provided by compiling your code to [WebAssembly](https://webassembly.org/) using the `wasm32-wasi` target. A compute service encompasses Domains and Backends.\n\nThe Service resource requires a domain name that is correctly set up to direct traffic to the Fastly service. See Fastly's guide on [Adding CNAME Records](https://docs.fastly.com/en/guides/adding-cname-records) on their documentation site for guidance.\n\n\u003e **Note:** If you omit the \u003cspan pulumi-lang-nodejs=\"`package`\" pulumi-lang-dotnet=\"`Package`\" pulumi-lang-go=\"`package`\" pulumi-lang-python=\"`package`\" pulumi-lang-yaml=\"`package`\" pulumi-lang-java=\"`package`\"\u003e`package`\u003c/span\u003e block, you must set `activate = false` to avoid service validation errors.\n\n## Activation and Staging\n\nBy default, the \u003cspan pulumi-lang-nodejs=\"`activate`\" pulumi-lang-dotnet=\"`Activate`\" pulumi-lang-go=\"`activate`\" pulumi-lang-python=\"`activate`\" pulumi-lang-yaml=\"`activate`\" pulumi-lang-java=\"`activate`\"\u003e`activate`\u003c/span\u003e attribute is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, and the \u003cspan pulumi-lang-nodejs=\"`stage`\" pulumi-lang-dotnet=\"`Stage`\" pulumi-lang-go=\"`stage`\" pulumi-lang-python=\"`stage`\" pulumi-lang-yaml=\"`stage`\" pulumi-lang-java=\"`stage`\"\u003e`stage`\u003c/span\u003e\nattribute is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. This combination means that when `terraform\napply` is executed for a plan which will make changes to the service,\nthe last version created by the provider (the \u003cspan pulumi-lang-nodejs=\"`clonedVersion`\" pulumi-lang-dotnet=\"`ClonedVersion`\" pulumi-lang-go=\"`clonedVersion`\" pulumi-lang-python=\"`cloned_version`\" pulumi-lang-yaml=\"`clonedVersion`\" pulumi-lang-java=\"`clonedVersion`\"\u003e`cloned_version`\u003c/span\u003e) will\nbe cloned to make a draft version, the changes will be applied to that\ndraft version, and that draft version will be activated.\n\nIf desired, \u003cspan pulumi-lang-nodejs=\"`activate`\" pulumi-lang-dotnet=\"`Activate`\" pulumi-lang-go=\"`activate`\" pulumi-lang-python=\"`activate`\" pulumi-lang-yaml=\"`activate`\" pulumi-lang-java=\"`activate`\"\u003e`activate`\u003c/span\u003e can be set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, in which case the\nbehavior above will be modified such that cloning will only occur when\nthe \u003cspan pulumi-lang-nodejs=\"`clonedVersion`\" pulumi-lang-dotnet=\"`ClonedVersion`\" pulumi-lang-go=\"`clonedVersion`\" pulumi-lang-python=\"`cloned_version`\" pulumi-lang-yaml=\"`clonedVersion`\" pulumi-lang-java=\"`clonedVersion`\"\u003e`cloned_version`\u003c/span\u003e is locked, and the draft version will not be\nactivated.\n\nAdditionally, \u003cspan pulumi-lang-nodejs=\"`stage`\" pulumi-lang-dotnet=\"`Stage`\" pulumi-lang-go=\"`stage`\" pulumi-lang-python=\"`stage`\" pulumi-lang-yaml=\"`stage`\" pulumi-lang-java=\"`stage`\"\u003e`stage`\u003c/span\u003e can be set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, with \u003cspan pulumi-lang-nodejs=\"`activate`\" pulumi-lang-dotnet=\"`Activate`\" pulumi-lang-go=\"`activate`\" pulumi-lang-python=\"`activate`\" pulumi-lang-yaml=\"`activate`\" pulumi-lang-java=\"`activate`\"\u003e`activate`\u003c/span\u003e set to\n\u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. This extends the `activate = false` behavior to include\nstaging of applied changes, every time that changes are applied, even\nif the changes were applied to an existing draft version.\n\nFinally, \u003cspan pulumi-lang-nodejs=\"`activate`\" pulumi-lang-dotnet=\"`Activate`\" pulumi-lang-go=\"`activate`\" pulumi-lang-python=\"`activate`\" pulumi-lang-yaml=\"`activate`\" pulumi-lang-java=\"`activate`\"\u003e`activate`\u003c/span\u003e should not be set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e when \u003cspan pulumi-lang-nodejs=\"`stage`\" pulumi-lang-dotnet=\"`Stage`\" pulumi-lang-go=\"`stage`\" pulumi-lang-python=\"`stage`\" pulumi-lang-yaml=\"`stage`\" pulumi-lang-java=\"`stage`\"\u003e`stage`\u003c/span\u003e is also\nset to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. While this combination will not cause any harm to the\nservice, there is no logical reason to both stage and activate every\nset of applied changes.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getPackageHash({\n    filename: \"./path/to/package.tar.gz\",\n});\nconst exampleServiceCompute = new fastly.ServiceCompute(\"example\", {\n    name: \"demofastly\",\n    domains: [{\n        name: \"demo.notexample.com\",\n        comment: \"demo\",\n    }],\n    \"package\": {\n        filename: \"package.tar.gz\",\n        sourceCodeHash: example.then(example =\u003e example.hash),\n    },\n    forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_package_hash(filename=\"./path/to/package.tar.gz\")\nexample_service_compute = fastly.ServiceCompute(\"example\",\n    name=\"demofastly\",\n    domains=[{\n        \"name\": \"demo.notexample.com\",\n        \"comment\": \"demo\",\n    }],\n    package={\n        \"filename\": \"package.tar.gz\",\n        \"source_code_hash\": example.hash,\n    },\n    force_destroy=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetPackageHash.Invoke(new()\n    {\n        Filename = \"./path/to/package.tar.gz\",\n    });\n\n    var exampleServiceCompute = new Fastly.ServiceCompute(\"example\", new()\n    {\n        Name = \"demofastly\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceComputeDomainArgs\n            {\n                Name = \"demo.notexample.com\",\n                Comment = \"demo\",\n            },\n        },\n        Package = new Fastly.Inputs.ServiceComputePackageArgs\n        {\n            Filename = \"package.tar.gz\",\n            SourceCodeHash = example.Apply(getPackageHashResult =\u003e getPackageHashResult.Hash),\n        },\n        ForceDestroy = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.GetPackageHash(ctx, \u0026fastly.GetPackageHashArgs{\n\t\t\tFilename: pulumi.StringRef(\"./path/to/package.tar.gz\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceCompute(ctx, \"example\", \u0026fastly.ServiceComputeArgs{\n\t\t\tName: pulumi.String(\"demofastly\"),\n\t\t\tDomains: fastly.ServiceComputeDomainArray{\n\t\t\t\t\u0026fastly.ServiceComputeDomainArgs{\n\t\t\t\t\tName:    pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackage: \u0026fastly.ServiceComputePackageArgs{\n\t\t\t\tFilename:       pulumi.String(\"package.tar.gz\"),\n\t\t\t\tSourceCodeHash: pulumi.String(example.Hash),\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetPackageHashArgs;\nimport com.pulumi.fastly.ServiceCompute;\nimport com.pulumi.fastly.ServiceComputeArgs;\nimport com.pulumi.fastly.inputs.ServiceComputeDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceComputePackageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = FastlyFunctions.getPackageHash(GetPackageHashArgs.builder()\n            .filename(\"./path/to/package.tar.gz\")\n            .build());\n\n        var exampleServiceCompute = new ServiceCompute(\"exampleServiceCompute\", ServiceComputeArgs.builder()\n            .name(\"demofastly\")\n            .domains(ServiceComputeDomainArgs.builder()\n                .name(\"demo.notexample.com\")\n                .comment(\"demo\")\n                .build())\n            .package_(ServiceComputePackageArgs.builder()\n                .filename(\"package.tar.gz\")\n                .sourceCodeHash(example.hash())\n                .build())\n            .forceDestroy(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  exampleServiceCompute:\n    type: fastly:ServiceCompute\n    name: example\n    properties:\n      name: demofastly\n      domains:\n        - name: demo.notexample.com\n          comment: demo\n      package:\n        filename: package.tar.gz\n        sourceCodeHash: ${example.hash}\n      forceDestroy: true\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getPackageHash\n      arguments:\n        filename: ./path/to/package.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\u003c!-- remove this curated references once https://github.com/hashicorp/terraform-plugin-docs/issues/28 is resolved --\u003e\n### package block\n\nThe \u003cspan pulumi-lang-nodejs=\"`package`\" pulumi-lang-dotnet=\"`Package`\" pulumi-lang-go=\"`package`\" pulumi-lang-python=\"`package`\" pulumi-lang-yaml=\"`package`\" pulumi-lang-java=\"`package`\"\u003e`package`\u003c/span\u003e block supports uploading or modifying Wasm packages for use in a Fastly Compute service. See Fastly's documentation on\n[Compute](https://www.fastly.com/products/edge-compute/serverless)\n\n## Product Enablement\n\nThe [Product Enablement](https://developer.fastly.com/reference/api/products/) APIs allow customers to enable and disable specific products.\n\nNot all customers are entitled to use these endpoints and so care needs to be given when configuring a \u003cspan pulumi-lang-nodejs=\"`productEnablement`\" pulumi-lang-dotnet=\"`ProductEnablement`\" pulumi-lang-go=\"`productEnablement`\" pulumi-lang-python=\"`product_enablement`\" pulumi-lang-yaml=\"`productEnablement`\" pulumi-lang-java=\"`productEnablement`\"\u003e`product_enablement`\u003c/span\u003e block in your Terraform configuration.\n\nConsult the Product Enablement Guide to understand the internal workings for the \u003cspan pulumi-lang-nodejs=\"`productEnablement`\" pulumi-lang-dotnet=\"`ProductEnablement`\" pulumi-lang-go=\"`productEnablement`\" pulumi-lang-python=\"`product_enablement`\" pulumi-lang-yaml=\"`productEnablement`\" pulumi-lang-java=\"`productEnablement`\"\u003e`product_enablement`\u003c/span\u003e block.\n\n## Import\n\nFastly Services can be imported using their service ID, e.g.\n\n```sh\n$ pulumi import fastly:index/serviceCompute:ServiceCompute demo xxxxxxxxxxxxxxxxxxxx\n```\n\nBy default, either the active version will be imported, or the latest version if no version is active.\nAlternatively, a specific version of the service can be selected by appending an `@` followed by the version number to the service ID, e.g.\n\n```sh\n$ pulumi import fastly:index/serviceCompute:ServiceCompute demo xxxxxxxxxxxxxxxxxxxx@2\n```\n\n","properties":{"activate":{"type":"boolean","description":"Conditionally prevents new service versions from being activated. The apply step will create a new draft version but will not activate it if this is set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. Default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e"},"activeVersion":{"type":"integer","description":"The currently active version of your Fastly Service"},"backends":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeBackend:ServiceComputeBackend"}},"clonedVersion":{"type":"integer","description":"The latest cloned version by the provider"},"comment":{"type":"string","description":"Description field for the service. Default `Managed by Terraform`"},"dictionaries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeDictionary:ServiceComputeDictionary"}},"domains":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeDomain:ServiceComputeDomain"},"description":"A set of Domain names to serve as entry points for your Service"},"forceDestroy":{"type":"boolean","description":"Services that are active cannot be destroyed. In order to destroy the Service, set \u003cspan pulumi-lang-nodejs=\"`forceDestroy`\" pulumi-lang-dotnet=\"`ForceDestroy`\" pulumi-lang-go=\"`forceDestroy`\" pulumi-lang-python=\"`force_destroy`\" pulumi-lang-yaml=\"`forceDestroy`\" pulumi-lang-java=\"`forceDestroy`\"\u003e`force_destroy`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"forceRefresh":{"type":"boolean","description":"Used internally by the provider to temporarily indicate if all resources should call their associated API to update the local state. This is for scenarios where the service version has been reverted outside of Terraform (e.g. via the Fastly UI) and the provider needs to resync the state for a different active version (this is only if \u003cspan pulumi-lang-nodejs=\"`activate`\" pulumi-lang-dotnet=\"`Activate`\" pulumi-lang-go=\"`activate`\" pulumi-lang-python=\"`activate`\" pulumi-lang-yaml=\"`activate`\" pulumi-lang-java=\"`activate`\"\u003e`activate`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)."},"healthchecks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeHealthcheck:ServiceComputeHealthcheck"}},"imageOptimizerDefaultSettings":{"$ref":"#/types/fastly:index/ServiceComputeImageOptimizerDefaultSettings:ServiceComputeImageOptimizerDefaultSettings"},"imported":{"type":"boolean","description":"Used internally by the provider to temporarily indicate if the service is being imported, and is reset to false once the import is finished"},"loggingBigqueries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingBigquery:ServiceComputeLoggingBigquery"}},"loggingBlobstorages":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingBlobstorage:ServiceComputeLoggingBlobstorage"}},"loggingCloudfiles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingCloudfile:ServiceComputeLoggingCloudfile"}},"loggingDatadogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingDatadog:ServiceComputeLoggingDatadog"}},"loggingDigitaloceans":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingDigitalocean:ServiceComputeLoggingDigitalocean"}},"loggingElasticsearches":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingElasticsearch:ServiceComputeLoggingElasticsearch"}},"loggingFtps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingFtp:ServiceComputeLoggingFtp"}},"loggingGcs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGc:ServiceComputeLoggingGc"}},"loggingGooglepubsubs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGooglepubsub:ServiceComputeLoggingGooglepubsub"}},"loggingGrafanacloudlogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGrafanacloudlog:ServiceComputeLoggingGrafanacloudlog"}},"loggingHeroku":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHeroku:ServiceComputeLoggingHeroku"}},"loggingHoneycombs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHoneycomb:ServiceComputeLoggingHoneycomb"}},"loggingHttps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHttp:ServiceComputeLoggingHttp"}},"loggingKafkas":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingKafka:ServiceComputeLoggingKafka"}},"loggingKineses":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingKinese:ServiceComputeLoggingKinese"}},"loggingLogentries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLogentry:ServiceComputeLoggingLogentry"}},"loggingLogglies":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLoggly:ServiceComputeLoggingLoggly"}},"loggingLogshuttles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLogshuttle:ServiceComputeLoggingLogshuttle"}},"loggingNewrelicotlps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingNewrelicotlp:ServiceComputeLoggingNewrelicotlp"}},"loggingNewrelics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingNewrelic:ServiceComputeLoggingNewrelic"}},"loggingOpenstacks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingOpenstack:ServiceComputeLoggingOpenstack"}},"loggingPapertrails":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingPapertrail:ServiceComputeLoggingPapertrail"}},"loggingS3s":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingS3:ServiceComputeLoggingS3"}},"loggingScalyrs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingScalyr:ServiceComputeLoggingScalyr"}},"loggingSftps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSftp:ServiceComputeLoggingSftp"}},"loggingSplunks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSplunk:ServiceComputeLoggingSplunk"}},"loggingSumologics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSumologic:ServiceComputeLoggingSumologic"}},"loggingSyslogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSyslog:ServiceComputeLoggingSyslog"}},"name":{"type":"string","description":"The unique name for the Service to create"},"package":{"$ref":"#/types/fastly:index/ServiceComputePackage:ServiceComputePackage","description":"The \u003cspan pulumi-lang-nodejs=\"`package`\" pulumi-lang-dotnet=\"`Package`\" pulumi-lang-go=\"`package`\" pulumi-lang-python=\"`package`\" pulumi-lang-yaml=\"`package`\" pulumi-lang-java=\"`package`\"\u003e`package`\u003c/span\u003e block supports uploading or modifying Wasm packages for use in a Fastly Compute service (if omitted, ensure `activate = false` is set on \u003cspan pulumi-lang-nodejs=\"`fastly.ServiceCompute`\" pulumi-lang-dotnet=\"`fastly.ServiceCompute`\" pulumi-lang-go=\"`ServiceCompute`\" pulumi-lang-python=\"`ServiceCompute`\" pulumi-lang-yaml=\"`fastly.ServiceCompute`\" pulumi-lang-java=\"`fastly.ServiceCompute`\"\u003e`fastly.ServiceCompute`\u003c/span\u003e to avoid service validation errors). See Fastly's documentation on [Compute](https://developer.fastly.com/learning/compute/)"},"productEnablement":{"$ref":"#/types/fastly:index/ServiceComputeProductEnablement:ServiceComputeProductEnablement"},"resourceLinks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeResourceLink:ServiceComputeResourceLink"},"description":"A resource link represents a link between a shared resource (such as an KV Store or Config Store) and a service version."},"reuse":{"type":"boolean","description":"Services that are active cannot be destroyed. If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e a service Terraform intends to destroy will instead be deactivated (allowing it to be reused by importing it into another Terraform project). If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, attempting to destroy an active service will cause an error. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"stage":{"type":"boolean","description":"Conditionally enables new service versions to be staged. If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, all changes made by an \u003cspan pulumi-lang-nodejs=\"`apply`\" pulumi-lang-dotnet=\"`Apply`\" pulumi-lang-go=\"`apply`\" pulumi-lang-python=\"`apply`\" pulumi-lang-yaml=\"`apply`\" pulumi-lang-java=\"`apply`\"\u003e`apply`\u003c/span\u003e step will be staged, even if \u003cspan pulumi-lang-nodejs=\"`apply`\" pulumi-lang-dotnet=\"`Apply`\" pulumi-lang-go=\"`apply`\" pulumi-lang-python=\"`apply`\" pulumi-lang-yaml=\"`apply`\" pulumi-lang-java=\"`apply`\"\u003e`apply`\u003c/span\u003e did not create a new draft version. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"stagedVersion":{"type":"integer","description":"The currently staged version of your Fastly Service"},"versionComment":{"type":"string","description":"Description field for the version"}},"required":["activeVersion","clonedVersion","forceRefresh","imported","name","stagedVersion"],"inputProperties":{"activate":{"type":"boolean","description":"Conditionally prevents new service versions from being activated. The apply step will create a new draft version but will not activate it if this is set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. Default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e"},"backends":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeBackend:ServiceComputeBackend"}},"comment":{"type":"string","description":"Description field for the service. Default `Managed by Terraform`"},"dictionaries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeDictionary:ServiceComputeDictionary"}},"domains":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeDomain:ServiceComputeDomain"},"description":"A set of Domain names to serve as entry points for your Service"},"forceDestroy":{"type":"boolean","description":"Services that are active cannot be destroyed. In order to destroy the Service, set \u003cspan pulumi-lang-nodejs=\"`forceDestroy`\" pulumi-lang-dotnet=\"`ForceDestroy`\" pulumi-lang-go=\"`forceDestroy`\" pulumi-lang-python=\"`force_destroy`\" pulumi-lang-yaml=\"`forceDestroy`\" pulumi-lang-java=\"`forceDestroy`\"\u003e`force_destroy`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"healthchecks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeHealthcheck:ServiceComputeHealthcheck"}},"imageOptimizerDefaultSettings":{"$ref":"#/types/fastly:index/ServiceComputeImageOptimizerDefaultSettings:ServiceComputeImageOptimizerDefaultSettings"},"loggingBigqueries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingBigquery:ServiceComputeLoggingBigquery"}},"loggingBlobstorages":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingBlobstorage:ServiceComputeLoggingBlobstorage"}},"loggingCloudfiles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingCloudfile:ServiceComputeLoggingCloudfile"}},"loggingDatadogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingDatadog:ServiceComputeLoggingDatadog"}},"loggingDigitaloceans":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingDigitalocean:ServiceComputeLoggingDigitalocean"}},"loggingElasticsearches":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingElasticsearch:ServiceComputeLoggingElasticsearch"}},"loggingFtps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingFtp:ServiceComputeLoggingFtp"}},"loggingGcs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGc:ServiceComputeLoggingGc"}},"loggingGooglepubsubs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGooglepubsub:ServiceComputeLoggingGooglepubsub"}},"loggingGrafanacloudlogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGrafanacloudlog:ServiceComputeLoggingGrafanacloudlog"}},"loggingHeroku":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHeroku:ServiceComputeLoggingHeroku"}},"loggingHoneycombs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHoneycomb:ServiceComputeLoggingHoneycomb"}},"loggingHttps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHttp:ServiceComputeLoggingHttp"}},"loggingKafkas":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingKafka:ServiceComputeLoggingKafka"}},"loggingKineses":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingKinese:ServiceComputeLoggingKinese"}},"loggingLogentries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLogentry:ServiceComputeLoggingLogentry"}},"loggingLogglies":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLoggly:ServiceComputeLoggingLoggly"}},"loggingLogshuttles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLogshuttle:ServiceComputeLoggingLogshuttle"}},"loggingNewrelicotlps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingNewrelicotlp:ServiceComputeLoggingNewrelicotlp"}},"loggingNewrelics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingNewrelic:ServiceComputeLoggingNewrelic"}},"loggingOpenstacks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingOpenstack:ServiceComputeLoggingOpenstack"}},"loggingPapertrails":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingPapertrail:ServiceComputeLoggingPapertrail"}},"loggingS3s":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingS3:ServiceComputeLoggingS3"}},"loggingScalyrs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingScalyr:ServiceComputeLoggingScalyr"}},"loggingSftps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSftp:ServiceComputeLoggingSftp"}},"loggingSplunks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSplunk:ServiceComputeLoggingSplunk"}},"loggingSumologics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSumologic:ServiceComputeLoggingSumologic"}},"loggingSyslogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSyslog:ServiceComputeLoggingSyslog"}},"name":{"type":"string","description":"The unique name for the Service to create"},"package":{"$ref":"#/types/fastly:index/ServiceComputePackage:ServiceComputePackage","description":"The \u003cspan pulumi-lang-nodejs=\"`package`\" pulumi-lang-dotnet=\"`Package`\" pulumi-lang-go=\"`package`\" pulumi-lang-python=\"`package`\" pulumi-lang-yaml=\"`package`\" pulumi-lang-java=\"`package`\"\u003e`package`\u003c/span\u003e block supports uploading or modifying Wasm packages for use in a Fastly Compute service (if omitted, ensure `activate = false` is set on \u003cspan pulumi-lang-nodejs=\"`fastly.ServiceCompute`\" pulumi-lang-dotnet=\"`fastly.ServiceCompute`\" pulumi-lang-go=\"`ServiceCompute`\" pulumi-lang-python=\"`ServiceCompute`\" pulumi-lang-yaml=\"`fastly.ServiceCompute`\" pulumi-lang-java=\"`fastly.ServiceCompute`\"\u003e`fastly.ServiceCompute`\u003c/span\u003e to avoid service validation errors). See Fastly's documentation on [Compute](https://developer.fastly.com/learning/compute/)"},"productEnablement":{"$ref":"#/types/fastly:index/ServiceComputeProductEnablement:ServiceComputeProductEnablement"},"resourceLinks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeResourceLink:ServiceComputeResourceLink"},"description":"A resource link represents a link between a shared resource (such as an KV Store or Config Store) and a service version."},"reuse":{"type":"boolean","description":"Services that are active cannot be destroyed. If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e a service Terraform intends to destroy will instead be deactivated (allowing it to be reused by importing it into another Terraform project). If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, attempting to destroy an active service will cause an error. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"stage":{"type":"boolean","description":"Conditionally enables new service versions to be staged. If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, all changes made by an \u003cspan pulumi-lang-nodejs=\"`apply`\" pulumi-lang-dotnet=\"`Apply`\" pulumi-lang-go=\"`apply`\" pulumi-lang-python=\"`apply`\" pulumi-lang-yaml=\"`apply`\" pulumi-lang-java=\"`apply`\"\u003e`apply`\u003c/span\u003e step will be staged, even if \u003cspan pulumi-lang-nodejs=\"`apply`\" pulumi-lang-dotnet=\"`Apply`\" pulumi-lang-go=\"`apply`\" pulumi-lang-python=\"`apply`\" pulumi-lang-yaml=\"`apply`\" pulumi-lang-java=\"`apply`\"\u003e`apply`\u003c/span\u003e did not create a new draft version. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"versionComment":{"type":"string","description":"Description field for the version"}},"stateInputs":{"description":"Input properties used for looking up and filtering ServiceCompute resources.\n","properties":{"activate":{"type":"boolean","description":"Conditionally prevents new service versions from being activated. The apply step will create a new draft version but will not activate it if this is set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. Default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e"},"activeVersion":{"type":"integer","description":"The currently active version of your Fastly Service"},"backends":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeBackend:ServiceComputeBackend"}},"clonedVersion":{"type":"integer","description":"The latest cloned version by the provider"},"comment":{"type":"string","description":"Description field for the service. Default `Managed by Terraform`"},"dictionaries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeDictionary:ServiceComputeDictionary"}},"domains":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeDomain:ServiceComputeDomain"},"description":"A set of Domain names to serve as entry points for your Service"},"forceDestroy":{"type":"boolean","description":"Services that are active cannot be destroyed. In order to destroy the Service, set \u003cspan pulumi-lang-nodejs=\"`forceDestroy`\" pulumi-lang-dotnet=\"`ForceDestroy`\" pulumi-lang-go=\"`forceDestroy`\" pulumi-lang-python=\"`force_destroy`\" pulumi-lang-yaml=\"`forceDestroy`\" pulumi-lang-java=\"`forceDestroy`\"\u003e`force_destroy`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"forceRefresh":{"type":"boolean","description":"Used internally by the provider to temporarily indicate if all resources should call their associated API to update the local state. This is for scenarios where the service version has been reverted outside of Terraform (e.g. via the Fastly UI) and the provider needs to resync the state for a different active version (this is only if \u003cspan pulumi-lang-nodejs=\"`activate`\" pulumi-lang-dotnet=\"`Activate`\" pulumi-lang-go=\"`activate`\" pulumi-lang-python=\"`activate`\" pulumi-lang-yaml=\"`activate`\" pulumi-lang-java=\"`activate`\"\u003e`activate`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)."},"healthchecks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeHealthcheck:ServiceComputeHealthcheck"}},"imageOptimizerDefaultSettings":{"$ref":"#/types/fastly:index/ServiceComputeImageOptimizerDefaultSettings:ServiceComputeImageOptimizerDefaultSettings"},"imported":{"type":"boolean","description":"Used internally by the provider to temporarily indicate if the service is being imported, and is reset to false once the import is finished"},"loggingBigqueries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingBigquery:ServiceComputeLoggingBigquery"}},"loggingBlobstorages":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingBlobstorage:ServiceComputeLoggingBlobstorage"}},"loggingCloudfiles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingCloudfile:ServiceComputeLoggingCloudfile"}},"loggingDatadogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingDatadog:ServiceComputeLoggingDatadog"}},"loggingDigitaloceans":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingDigitalocean:ServiceComputeLoggingDigitalocean"}},"loggingElasticsearches":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingElasticsearch:ServiceComputeLoggingElasticsearch"}},"loggingFtps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingFtp:ServiceComputeLoggingFtp"}},"loggingGcs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGc:ServiceComputeLoggingGc"}},"loggingGooglepubsubs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGooglepubsub:ServiceComputeLoggingGooglepubsub"}},"loggingGrafanacloudlogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGrafanacloudlog:ServiceComputeLoggingGrafanacloudlog"}},"loggingHeroku":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHeroku:ServiceComputeLoggingHeroku"}},"loggingHoneycombs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHoneycomb:ServiceComputeLoggingHoneycomb"}},"loggingHttps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHttp:ServiceComputeLoggingHttp"}},"loggingKafkas":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingKafka:ServiceComputeLoggingKafka"}},"loggingKineses":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingKinese:ServiceComputeLoggingKinese"}},"loggingLogentries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLogentry:ServiceComputeLoggingLogentry"}},"loggingLogglies":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLoggly:ServiceComputeLoggingLoggly"}},"loggingLogshuttles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLogshuttle:ServiceComputeLoggingLogshuttle"}},"loggingNewrelicotlps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingNewrelicotlp:ServiceComputeLoggingNewrelicotlp"}},"loggingNewrelics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingNewrelic:ServiceComputeLoggingNewrelic"}},"loggingOpenstacks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingOpenstack:ServiceComputeLoggingOpenstack"}},"loggingPapertrails":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingPapertrail:ServiceComputeLoggingPapertrail"}},"loggingS3s":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingS3:ServiceComputeLoggingS3"}},"loggingScalyrs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingScalyr:ServiceComputeLoggingScalyr"}},"loggingSftps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSftp:ServiceComputeLoggingSftp"}},"loggingSplunks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSplunk:ServiceComputeLoggingSplunk"}},"loggingSumologics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSumologic:ServiceComputeLoggingSumologic"}},"loggingSyslogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSyslog:ServiceComputeLoggingSyslog"}},"name":{"type":"string","description":"The unique name for the Service to create"},"package":{"$ref":"#/types/fastly:index/ServiceComputePackage:ServiceComputePackage","description":"The \u003cspan pulumi-lang-nodejs=\"`package`\" pulumi-lang-dotnet=\"`Package`\" pulumi-lang-go=\"`package`\" pulumi-lang-python=\"`package`\" pulumi-lang-yaml=\"`package`\" pulumi-lang-java=\"`package`\"\u003e`package`\u003c/span\u003e block supports uploading or modifying Wasm packages for use in a Fastly Compute service (if omitted, ensure `activate = false` is set on \u003cspan pulumi-lang-nodejs=\"`fastly.ServiceCompute`\" pulumi-lang-dotnet=\"`fastly.ServiceCompute`\" pulumi-lang-go=\"`ServiceCompute`\" pulumi-lang-python=\"`ServiceCompute`\" pulumi-lang-yaml=\"`fastly.ServiceCompute`\" pulumi-lang-java=\"`fastly.ServiceCompute`\"\u003e`fastly.ServiceCompute`\u003c/span\u003e to avoid service validation errors). See Fastly's documentation on [Compute](https://developer.fastly.com/learning/compute/)"},"productEnablement":{"$ref":"#/types/fastly:index/ServiceComputeProductEnablement:ServiceComputeProductEnablement"},"resourceLinks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeResourceLink:ServiceComputeResourceLink"},"description":"A resource link represents a link between a shared resource (such as an KV Store or Config Store) and a service version."},"reuse":{"type":"boolean","description":"Services that are active cannot be destroyed. If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e a service Terraform intends to destroy will instead be deactivated (allowing it to be reused by importing it into another Terraform project). If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, attempting to destroy an active service will cause an error. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"stage":{"type":"boolean","description":"Conditionally enables new service versions to be staged. If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, all changes made by an \u003cspan pulumi-lang-nodejs=\"`apply`\" pulumi-lang-dotnet=\"`Apply`\" pulumi-lang-go=\"`apply`\" pulumi-lang-python=\"`apply`\" pulumi-lang-yaml=\"`apply`\" pulumi-lang-java=\"`apply`\"\u003e`apply`\u003c/span\u003e step will be staged, even if \u003cspan pulumi-lang-nodejs=\"`apply`\" pulumi-lang-dotnet=\"`Apply`\" pulumi-lang-go=\"`apply`\" pulumi-lang-python=\"`apply`\" pulumi-lang-yaml=\"`apply`\" pulumi-lang-java=\"`apply`\"\u003e`apply`\u003c/span\u003e did not create a new draft version. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"stagedVersion":{"type":"integer","description":"The currently staged version of your Fastly Service"},"versionComment":{"type":"string","description":"Description field for the version"}},"type":"object"}},"fastly:index/serviceDictionaryItems:ServiceDictionaryItems":{"description":"Defines a map of Fastly dictionary items that can be used to populate a service dictionary.  This resource will populate a dictionary with the items and will track their state.\n\n\u003e **Note:** By default the Terraform provider allows you to externally manage the items via API or UI.\nIf you wish to apply your changes in the HCL, then you should explicitly set the \u003cspan pulumi-lang-nodejs=\"`manageItems`\" pulumi-lang-dotnet=\"`ManageItems`\" pulumi-lang-go=\"`manageItems`\" pulumi-lang-python=\"`manage_items`\" pulumi-lang-yaml=\"`manageItems`\" pulumi-lang-java=\"`manageItems`\"\u003e`manage_items`\u003c/span\u003e attribute. An example of this configuration is provided below.\n\n## Limitations\n\n- \u003cspan pulumi-lang-nodejs=\"`writeOnly`\" pulumi-lang-dotnet=\"`WriteOnly`\" pulumi-lang-go=\"`writeOnly`\" pulumi-lang-python=\"`write_only`\" pulumi-lang-yaml=\"`writeOnly`\" pulumi-lang-java=\"`writeOnly`\"\u003e`write_only`\u003c/span\u003e dictionaries are not supported\n\n## Example Usage\n\n### Terraform \u003e= 0.12.6)\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst config = new pulumi.Config();\nconst mydictName = config.get(\"mydictName\") || \"My Dictionary\";\nconst myservice = new fastly.ServiceVcl(\"myservice\", {\n    name: \"demofastly\",\n    domains: [{\n        name: \"demo.notexample.com\",\n        comment: \"demo\",\n    }],\n    backends: [{\n        address: \"http-me.fastly.dev\",\n        name: \"Glitch Test Site\",\n        port: 80,\n    }],\n    dictionaries: [{\n        name: mydictName,\n    }],\n    forceDestroy: true,\n});\nconst items: fastly.ServiceDictionaryItems[] = [];\nmyservice.dictionaries.apply(dictionaries =\u003e {\n    const items: fastly.ServiceDictionaryItems[] = [];\npulumi.all(.filter(d =\u003e d.name == mydictName).reduce((__obj, d) =\u003e ({ ...__obj, [d.name]: d }))).apply(rangeBody =\u003e {\n        for (const range of Object.entries(rangeBody).map(([k, v]) =\u003e ({key: k, value: v}))) {\n            items.push(new fastly.ServiceDictionaryItems(`items-${range.key}`, {\n                serviceId: myservice.id,\n                dictionaryId: range.value.dictionaryId,\n                items: {\n                    key1: \"value1\",\n                    key2: \"value2\",\n                },\n            }));\n        }\n    });\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nconfig = pulumi.Config()\nmydict_name = config.get(\"mydictName\")\nif mydict_name is None:\n    mydict_name = \"My Dictionary\"\nmyservice = fastly.ServiceVcl(\"myservice\",\n    name=\"demofastly\",\n    domains=[{\n        \"name\": \"demo.notexample.com\",\n        \"comment\": \"demo\",\n    }],\n    backends=[{\n        \"address\": \"http-me.fastly.dev\",\n        \"name\": \"Glitch Test Site\",\n        \"port\": 80,\n    }],\n    dictionaries=[{\n        \"name\": mydict_name,\n    }],\n    force_destroy=True)\nitems = []\ndef create_items(range_body):\n    for range in [{\"key\": k, \"value\": v} for [k, v] in enumerate(range_body)]:\n        items.append(fastly.ServiceDictionaryItems(f\"items-{range['key']}\",\n            service_id=myservice.id,\n            dictionary_id=range[\"value\"].dictionary_id,\n            items={\n                \"key1\": \"value1\",\n                \"key2\": \"value2\",\n            }))\n\nmyservice.dictionaries.apply(lambda resolved_outputs: create_items({d.name: d for d in resolved_outputs['dictionaries'] if d.name == mydict_name}))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Config();\n    var mydictName = config.Get(\"mydictName\") ?? \"My Dictionary\";\n    var myservice = new Fastly.ServiceVcl(\"myservice\", new()\n    {\n        Name = \"demofastly\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"demo.notexample.com\",\n                Comment = \"demo\",\n            },\n        },\n        Backends = new[]\n        {\n            new Fastly.Inputs.ServiceVclBackendArgs\n            {\n                Address = \"http-me.fastly.dev\",\n                Name = \"Glitch Test Site\",\n                Port = 80,\n            },\n        },\n        Dictionaries = new[]\n        {\n            new Fastly.Inputs.ServiceVclDictionaryArgs\n            {\n                Name = mydictName,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n    var items = new List\u003cFastly.ServiceDictionaryItems\u003e();\n    foreach (var range in myservice.Dictionaries.Apply(dictionaries =\u003e ).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        items.Add(new Fastly.ServiceDictionaryItems($\"items-{range.Key}\", new()\n        {\n            ServiceId = myservice.Id,\n            DictionaryId = range.Value.DictionaryId,\n            Items = \n            {\n                { \"key1\", \"value1\" },\n                { \"key2\", \"value2\" },\n            },\n        }));\n    }\n});\n```\n```yaml\nconfiguration:\n  mydictName:\n    type: string\n    default: My Dictionary\nresources:\n  myservice:\n    type: fastly:ServiceVcl\n    properties:\n      name: demofastly\n      domains:\n        - name: demo.notexample.com\n          comment: demo\n      backends:\n        - address: http-me.fastly.dev\n          name: Glitch Test Site\n          port: 80\n      dictionaries:\n        - name: ${mydictName}\n      forceDestroy: true\n  items:\n    type: fastly:ServiceDictionaryItems\n    properties:\n      serviceId: ${myservice.id}\n      dictionaryId: ${range.value.dictionaryId}\n      items:\n        key1: value1\n        key2: value2\n    options: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nComplex object usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst config = new pulumi.Config();\nconst mydict = config.getObject\u003c{items?: Record\u003cstring, string\u003e, name?: string}\u003e(\"mydict\") || {\n    items: {\n        key1: \"value1x\",\n        key2: \"value2x\",\n    },\n    name: \"My Dictionary\",\n};\nconst myservice = new fastly.ServiceVcl(\"myservice\", {\n    name: \"demofastly\",\n    domains: [{\n        name: \"demo.notexample.com\",\n        comment: \"demo\",\n    }],\n    backends: [{\n        address: \"http-me.fastly.dev\",\n        name: \"Glitch Test Site\",\n        port: 80,\n    }],\n    dictionaries: [{\n        name: mydict.name,\n    }],\n    forceDestroy: true,\n});\nconst items: fastly.ServiceDictionaryItems[] = [];\nmyservice.dictionaries.apply(dictionaries =\u003e {\n    const items: fastly.ServiceDictionaryItems[] = [];\npulumi.all(.filter(d =\u003e d.name == mydict.name).reduce((__obj, d) =\u003e ({ ...__obj, [d.name]: d }))).apply(rangeBody =\u003e {\n        for (const range of Object.entries(rangeBody).map(([k, v]) =\u003e ({key: k, value: v}))) {\n            items.push(new fastly.ServiceDictionaryItems(`items-${range.key}`, {\n                serviceId: myservice.id,\n                dictionaryId: range.value.dictionaryId,\n                items: mydict.items,\n            }));\n        }\n    });\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nconfig = pulumi.Config()\nmydict = config.get_object(\"mydict\")\nif mydict is None:\n    mydict = {\n        \"items\": {\n            \"key1\": \"value1x\",\n            \"key2\": \"value2x\",\n        },\n        \"name\": \"My Dictionary\",\n    }\nmyservice = fastly.ServiceVcl(\"myservice\",\n    name=\"demofastly\",\n    domains=[{\n        \"name\": \"demo.notexample.com\",\n        \"comment\": \"demo\",\n    }],\n    backends=[{\n        \"address\": \"http-me.fastly.dev\",\n        \"name\": \"Glitch Test Site\",\n        \"port\": 80,\n    }],\n    dictionaries=[{\n        \"name\": mydict[\"name\"],\n    }],\n    force_destroy=True)\nitems = []\ndef create_items(range_body):\n    for range in [{\"key\": k, \"value\": v} for [k, v] in enumerate(range_body)]:\n        items.append(fastly.ServiceDictionaryItems(f\"items-{range['key']}\",\n            service_id=myservice.id,\n            dictionary_id=range[\"value\"].dictionary_id,\n            items=mydict[\"items\"]))\n\nmyservice.dictionaries.apply(lambda resolved_outputs: create_items({d.name: d for d in resolved_outputs['dictionaries'] if d.name == mydict[\"name\"]}))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Config();\n    var mydict = config.GetObject\u003cMydict\u003e(\"mydict\") ?? \n    {\n        { \"items\", \n        {\n            { \"key1\", \"value1x\" },\n            { \"key2\", \"value2x\" },\n        } },\n        { \"name\", \"My Dictionary\" },\n    };\n    var myservice = new Fastly.ServiceVcl(\"myservice\", new()\n    {\n        Name = \"demofastly\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"demo.notexample.com\",\n                Comment = \"demo\",\n            },\n        },\n        Backends = new[]\n        {\n            new Fastly.Inputs.ServiceVclBackendArgs\n            {\n                Address = \"http-me.fastly.dev\",\n                Name = \"Glitch Test Site\",\n                Port = 80,\n            },\n        },\n        Dictionaries = new[]\n        {\n            new Fastly.Inputs.ServiceVclDictionaryArgs\n            {\n                Name = mydict.Name,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n    var items = new List\u003cFastly.ServiceDictionaryItems\u003e();\n    foreach (var range in myservice.Dictionaries.Apply(dictionaries =\u003e ).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        items.Add(new Fastly.ServiceDictionaryItems($\"items-{range.Key}\", new()\n        {\n            ServiceId = myservice.Id,\n            DictionaryId = range.Value.DictionaryId,\n            Items = mydict.Items,\n        }));\n    }\n});\n\npublic class Mydict\n{\n    public Dictionary\u003cstring, string\u003e items { get; set; }\n    public string name { get; set; }\n}\n```\n```yaml\nconfiguration:\n  mydict:\n    type: object({items = union(map(string), none), name = union(none, string)})\n    default:\n      items:\n        key1: value1x\n        key2: value2x\n      name: My Dictionary\nresources:\n  myservice:\n    type: fastly:ServiceVcl\n    properties:\n      name: demofastly\n      domains:\n        - name: demo.notexample.com\n          comment: demo\n      backends:\n        - address: http-me.fastly.dev\n          name: Glitch Test Site\n          port: 80\n      dictionaries:\n        - name: ${mydict.name}\n      forceDestroy: true\n  items:\n    type: fastly:ServiceDictionaryItems\n    properties:\n      serviceId: ${myservice.id}\n      dictionaryId: ${range.value.dictionaryId}\n      items: ${mydict.items}\n    options: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nExpression and functions usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as std from \"@pulumi/std\";\n\nconst dictionaryName = \"My Project Dictionary\";\nconst hostBase = \"demo.ocnotexample.com\";\nconst hostDivisions = [\n    \"alpha\",\n    \"beta\",\n    \"gamma\",\n    \"delta\",\n];\n// Define the standard service that will be used to manage the dictionaries.\nconst myservice = new fastly.ServiceVcl(\"myservice\", {\n    name: \"demofastly\",\n    domains: [{\n        name: \"demo.ocnotexample.com\",\n        comment: \"demo\",\n    }],\n    backends: [{\n        address: \"http-me.fastly.dev\",\n        name: \"Glitch Test Site\",\n        port: 80,\n    }],\n    dictionaries: [{\n        name: dictionaryName,\n    }],\n    forceDestroy: true,\n});\n// This resource is dynamically creating the items from the local variables through for expressions and functions.\nconst project: fastly.ServiceDictionaryItems[] = [];\nmyservice.dictionaries.apply(dictionaries =\u003e {\n    const project: fastly.ServiceDictionaryItems[] = [];\npulumi.all(.filter(d =\u003e d.name == dictionaryName).reduce((__obj, d) =\u003e ({ ...__obj, [d.name]: d }))).apply(rangeBody =\u003e {\n        for (const range of Object.entries(rangeBody).map(([k, v]) =\u003e ({key: k, value: v}))) {\n            project.push(new fastly.ServiceDictionaryItems(`project-${range.key}`, {\n                serviceId: myservice.id,\n                dictionaryId: range.value.dictionaryId,\n                items: hostDivisions.reduce((__obj, division) =\u003e ({ ...__obj, [division]: std.index.format({\n                    input: \"%s.%s\",\n                    args: [\n                        division,\n                        hostBase,\n                    ],\n                }).result })),\n            }));\n        }\n    });\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_std as std\n\ndictionary_name = \"My Project Dictionary\"\nhost_base = \"demo.ocnotexample.com\"\nhost_divisions = [\n    \"alpha\",\n    \"beta\",\n    \"gamma\",\n    \"delta\",\n]\n# Define the standard service that will be used to manage the dictionaries.\nmyservice = fastly.ServiceVcl(\"myservice\",\n    name=\"demofastly\",\n    domains=[{\n        \"name\": \"demo.ocnotexample.com\",\n        \"comment\": \"demo\",\n    }],\n    backends=[{\n        \"address\": \"http-me.fastly.dev\",\n        \"name\": \"Glitch Test Site\",\n        \"port\": 80,\n    }],\n    dictionaries=[{\n        \"name\": dictionary_name,\n    }],\n    force_destroy=True)\n# This resource is dynamically creating the items from the local variables through for expressions and functions.\nproject = []\ndef create_project(range_body):\n    for range in [{\"key\": k, \"value\": v} for [k, v] in enumerate(range_body)]:\n        project.append(fastly.ServiceDictionaryItems(f\"project-{range['key']}\",\n            service_id=myservice.id,\n            dictionary_id=range[\"value\"].dictionary_id,\n            items={division: std.index.format(input=\"%s.%s\",\n                args=[\n                    division,\n                    host_base,\n                ])[\"result\"] for division in host_divisions}))\n\nmyservice.dictionaries.apply(lambda resolved_outputs: create_project({d.name: d for d in resolved_outputs['dictionaries'] if d.name == dictionary_name}))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var dictionaryName = \"My Project Dictionary\";\n\n    var hostBase = \"demo.ocnotexample.com\";\n\n    var hostDivisions = new[]\n    {\n        \"alpha\",\n        \"beta\",\n        \"gamma\",\n        \"delta\",\n    };\n\n    // Define the standard service that will be used to manage the dictionaries.\n    var myservice = new Fastly.ServiceVcl(\"myservice\", new()\n    {\n        Name = \"demofastly\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"demo.ocnotexample.com\",\n                Comment = \"demo\",\n            },\n        },\n        Backends = new[]\n        {\n            new Fastly.Inputs.ServiceVclBackendArgs\n            {\n                Address = \"http-me.fastly.dev\",\n                Name = \"Glitch Test Site\",\n                Port = 80,\n            },\n        },\n        Dictionaries = new[]\n        {\n            new Fastly.Inputs.ServiceVclDictionaryArgs\n            {\n                Name = dictionaryName,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n    // This resource is dynamically creating the items from the local variables through for expressions and functions.\n    var project = new List\u003cFastly.ServiceDictionaryItems\u003e();\n    foreach (var range in myservice.Dictionaries.Apply(dictionaries =\u003e ).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        project.Add(new Fastly.ServiceDictionaryItems($\"project-{range.Key}\", new()\n        {\n            ServiceId = myservice.Id,\n            DictionaryId = range.Value.DictionaryId,\n            Items = hostDivisions.ToDictionary(item =\u003e {\n                var division = item.Value;\n                return division;\n            }, item =\u003e {\n                var division = item.Value;\n                return Std.Index.Format.Invoke(new()\n                {\n                    Input = \"%s.%s\",\n                    Args = new[]\n                    {\n                        division,\n                        hostBase,\n                    },\n                }).Result;\n            }),\n        }));\n    }\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n### Terraform \u003e= 0.12.0 \u0026\u0026 \u003c 0.12.6)\n\n\u003cspan pulumi-lang-nodejs=\"`forEach`\" pulumi-lang-dotnet=\"`ForEach`\" pulumi-lang-go=\"`forEach`\" pulumi-lang-python=\"`for_each`\" pulumi-lang-yaml=\"`forEach`\" pulumi-lang-java=\"`forEach`\"\u003e`for_each`\u003c/span\u003e attributes were not available in Terraform before 0.12.6, however, users can still use \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expressions to achieve\nsimilar behaviour as seen in the example below.\n\n\u003e **Warning:** Terraform might not properly calculate implicit dependencies on computed attributes when using \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expressions\n\nFor scenarios such as adding a Dictionary to a service and at the same time, creating the Dictionary entries (\u003cspan pulumi-lang-nodejs=\"`fastly.ServiceDictionaryItems`\" pulumi-lang-dotnet=\"`fastly.ServiceDictionaryItems`\" pulumi-lang-go=\"`ServiceDictionaryItems`\" pulumi-lang-python=\"`ServiceDictionaryItems`\" pulumi-lang-yaml=\"`fastly.ServiceDictionaryItems`\" pulumi-lang-java=\"`fastly.ServiceDictionaryItems`\"\u003e`fastly.ServiceDictionaryItems`\u003c/span\u003e)\nresource, Terraform will not calculate implicit dependencies correctly on \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expressions. This will result in index lookup\nproblems and the execution will fail.\n\nFor those scenarios, it's recommended to split the changes into two distinct steps:\n\n1. Add the \u003cspan pulumi-lang-nodejs=\"`dictionary`\" pulumi-lang-dotnet=\"`Dictionary`\" pulumi-lang-go=\"`dictionary`\" pulumi-lang-python=\"`dictionary`\" pulumi-lang-yaml=\"`dictionary`\" pulumi-lang-java=\"`dictionary`\"\u003e`dictionary`\u003c/span\u003e block to the \u003cspan pulumi-lang-nodejs=\"`fastly.ServiceVcl`\" pulumi-lang-dotnet=\"`fastly.ServiceVcl`\" pulumi-lang-go=\"`ServiceVcl`\" pulumi-lang-python=\"`ServiceVcl`\" pulumi-lang-yaml=\"`fastly.ServiceVcl`\" pulumi-lang-java=\"`fastly.ServiceVcl`\"\u003e`fastly.ServiceVcl`\u003c/span\u003e and apply the changes\n2. Add the \u003cspan pulumi-lang-nodejs=\"`fastly.ServiceDictionaryItems`\" pulumi-lang-dotnet=\"`fastly.ServiceDictionaryItems`\" pulumi-lang-go=\"`ServiceDictionaryItems`\" pulumi-lang-python=\"`ServiceDictionaryItems`\" pulumi-lang-yaml=\"`fastly.ServiceDictionaryItems`\" pulumi-lang-java=\"`fastly.ServiceDictionaryItems`\"\u003e`fastly.ServiceDictionaryItems`\u003c/span\u003e resource with the \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expressions to the HCL and apply the changes\n\nUsage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst config = new pulumi.Config();\nconst mydictName = config.get(\"mydictName\") || \"My Dictionary\";\nconst myservice = new fastly.ServiceVcl(\"myservice\", {\n    name: \"demofastly\",\n    domains: [{\n        name: \"demo.notexample.com\",\n        comment: \"demo\",\n    }],\n    dictionaries: [{\n        name: mydictName,\n    }],\n});\nconst items = new fastly.ServiceDictionaryItems(\"items\", {\n    serviceId: myservice.id,\n    dictionaryId: myservice.dictionaries.apply(dictionaries =\u003e .reduce((__obj, s) =\u003e ({ ...__obj, [s.name]: s.dictionaryId }))[mydictName]),\n    items: {\n        key1: \"value1\",\n        key2: \"value2\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nconfig = pulumi.Config()\nmydict_name = config.get(\"mydictName\")\nif mydict_name is None:\n    mydict_name = \"My Dictionary\"\nmyservice = fastly.ServiceVcl(\"myservice\",\n    name=\"demofastly\",\n    domains=[{\n        \"name\": \"demo.notexample.com\",\n        \"comment\": \"demo\",\n    }],\n    dictionaries=[{\n        \"name\": mydict_name,\n    }])\nitems = fastly.ServiceDictionaryItems(\"items\",\n    service_id=myservice.id,\n    dictionary_id=myservice.dictionaries.apply(lambda dictionaries: {s.name: s.dictionary_id for s in dictionaries}[mydict_name]),\n    items={\n        \"key1\": \"value1\",\n        \"key2\": \"value2\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Config();\n    var mydictName = config.Get(\"mydictName\") ?? \"My Dictionary\";\n    var myservice = new Fastly.ServiceVcl(\"myservice\", new()\n    {\n        Name = \"demofastly\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"demo.notexample.com\",\n                Comment = \"demo\",\n            },\n        },\n        Dictionaries = new[]\n        {\n            new Fastly.Inputs.ServiceVclDictionaryArgs\n            {\n                Name = mydictName,\n            },\n        },\n    });\n\n    var items = new Fastly.ServiceDictionaryItems(\"items\", new()\n    {\n        ServiceId = myservice.Id,\n        DictionaryId = myservice.Dictionaries.Apply(dictionaries =\u003e .ToDictionary(item =\u003e {\n            var s = item.Value;\n            return s.Name;\n        }, item =\u003e {\n            var s = item.Value;\n            return s.DictionaryId;\n        })[mydictName]),\n        Items = \n        {\n            { \"key1\", \"value1\" },\n            { \"key2\", \"value2\" },\n        },\n    });\n\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Reapplying original items with \u003cspan pulumi-lang-nodejs=\"`managedItems`\" pulumi-lang-dotnet=\"`ManagedItems`\" pulumi-lang-go=\"`managedItems`\" pulumi-lang-python=\"`managed_items`\" pulumi-lang-yaml=\"`managedItems`\" pulumi-lang-java=\"`managedItems`\"\u003e`managed_items`\u003c/span\u003e if the state of the items drifts\n\nBy default the user is opted out from reapplying the original changes if the items are managed externally.\nThe following example demonstrates how the \u003cspan pulumi-lang-nodejs=\"`manageItems`\" pulumi-lang-dotnet=\"`ManageItems`\" pulumi-lang-go=\"`manageItems`\" pulumi-lang-python=\"`manage_items`\" pulumi-lang-yaml=\"`manageItems`\" pulumi-lang-java=\"`manageItems`\"\u003e`manage_items`\u003c/span\u003e field can be used to reapply the changes defined in the HCL if the state of the items drifts.\nWhen the value is explicitly set to 'true', Terraform will keep the original changes and discard any other changes made under this resource outside of Terraform.\n\n\u003e **Warning:** You will lose externally managed items if `manage_items=true`.\n\n\u003e **Note:** The \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e built-in meta-argument takes precedence over \u003cspan pulumi-lang-nodejs=\"`manageItems`\" pulumi-lang-dotnet=\"`ManageItems`\" pulumi-lang-go=\"`manageItems`\" pulumi-lang-python=\"`manage_items`\" pulumi-lang-yaml=\"`manageItems`\" pulumi-lang-java=\"`manageItems`\"\u003e`manage_items`\u003c/span\u003e regardless of its value.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\n//...\nconst items: fastly.ServiceDictionaryItems[] = [];\nfor (const range of Object.entries(.filter(d =\u003e d.name == mydictName).reduce((__obj, d) =\u003e ({ ...__obj, [d.name]: d }))).map(([k, v]) =\u003e ({key: k, value: v}))) {\n    items.push(new fastly.ServiceDictionaryItems(`items-${range.key}`, {\n        serviceId: myservice.id,\n        dictionaryId: range.value.dictionaryId,\n        manageItems: true,\n        items: {\n            key1: \"value1\",\n            key2: \"value2\",\n        },\n    }));\n}\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\n#...\nitems = []\nfor range in [{\"key\": k, \"value\": v} for [k, v] in enumerate({d.name: d for d in myservice.dictionary if d.name == mydict_name})]:\n    items.append(fastly.ServiceDictionaryItems(f\"items-{range['key']}\",\n        service_id=myservice[\"id\"],\n        dictionary_id=range[\"value\"][\"dictionaryId\"],\n        manage_items=True,\n        items={\n            \"key1\": \"value1\",\n            \"key2\": \"value2\",\n        }))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    //...\n    var items = new List\u003cFastly.ServiceDictionaryItems\u003e();\n    foreach (var range in .ToDictionary(item =\u003e {\n        var d = item.Value;\n        return d.Name;\n    }, item =\u003e {\n        var d = item.Value;\n        return d;\n    }).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        items.Add(new Fastly.ServiceDictionaryItems($\"items-{range.Key}\", new()\n        {\n            ServiceId = myservice.Id,\n            DictionaryId = range.Value.DictionaryId,\n            ManageItems = true,\n            Items = \n            {\n                { \"key1\", \"value1\" },\n                { \"key2\", \"value2\" },\n            },\n        }));\n    }\n});\n```\n```yaml\nresources:\n  #...\n  items:\n    type: fastly:ServiceDictionaryItems\n    properties:\n      serviceId: ${myservice.id}\n      dictionaryId: ${range.value.dictionaryId}\n      manageItems: true\n      items:\n        key1: value1\n        key2: value2\n    options: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n\u003e **Note:** The dictionary resource should be empty before importing\n\nThis is an example of the import command being applied to the resource named `fastly_service_dictionary_items.items`\nThe resource ID is a combined value of the \u003cspan pulumi-lang-nodejs=\"`serviceId`\" pulumi-lang-dotnet=\"`ServiceId`\" pulumi-lang-go=\"`serviceId`\" pulumi-lang-python=\"`service_id`\" pulumi-lang-yaml=\"`serviceId`\" pulumi-lang-java=\"`serviceId`\"\u003e`service_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`dictionaryId`\" pulumi-lang-dotnet=\"`DictionaryId`\" pulumi-lang-go=\"`dictionaryId`\" pulumi-lang-python=\"`dictionary_id`\" pulumi-lang-yaml=\"`dictionaryId`\" pulumi-lang-java=\"`dictionaryId`\"\u003e`dictionary_id`\u003c/span\u003e separated by a forward slash.\n\n```sh\n$ pulumi import fastly:index/serviceDictionaryItems:ServiceDictionaryItems items xxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxx\n```\n\nIf Terraform is already managing remote dictionary items against a resource being imported then the user will be asked to remove it from the existing Terraform state.\nThe following is an example of the Terraform state command to remove the resource named `fastly_service_dictionary_items.items` from the Terraform state file.\n\n```sh\n$ terraform state rm fastly_service_dictionary_items.items\n```\n\n","properties":{"dictionaryId":{"type":"string","description":"The ID of the dictionary that the items belong to\n"},"items":{"type":"object","additionalProperties":{"type":"string"},"description":"A map representing an entry in the dictionary, (key/value)\n"},"manageItems":{"type":"boolean","description":"Whether to reapply changes if the state of the items drifts, i.e. if items are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the service that the dictionary belongs to\n"}},"required":["dictionaryId","serviceId"],"inputProperties":{"dictionaryId":{"type":"string","description":"The ID of the dictionary that the items belong to\n","willReplaceOnChanges":true},"items":{"type":"object","additionalProperties":{"type":"string"},"description":"A map representing an entry in the dictionary, (key/value)\n"},"manageItems":{"type":"boolean","description":"Whether to reapply changes if the state of the items drifts, i.e. if items are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the service that the dictionary belongs to\n","willReplaceOnChanges":true}},"requiredInputs":["dictionaryId","serviceId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceDictionaryItems resources.\n","properties":{"dictionaryId":{"type":"string","description":"The ID of the dictionary that the items belong to\n","willReplaceOnChanges":true},"items":{"type":"object","additionalProperties":{"type":"string"},"description":"A map representing an entry in the dictionary, (key/value)\n"},"manageItems":{"type":"boolean","description":"Whether to reapply changes if the state of the items drifts, i.e. if items are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the service that the dictionary belongs to\n","willReplaceOnChanges":true}},"type":"object"}},"fastly:index/serviceDynamicSnippetContent:ServiceDynamicSnippetContent":{"description":"Defines content that represents blocks of VCL logic that is inserted into your service.  This resource will populate the content of a dynamic snippet and allow it to be manged without the creation of a new service verison.\n\n\u003e **Note:** By default the Terraform provider allows you to externally manage the snippets via API or UI.\nIf you wish to apply your changes in the HCL, then you should explicitly set the \u003cspan pulumi-lang-nodejs=\"`manageSnippets`\" pulumi-lang-dotnet=\"`ManageSnippets`\" pulumi-lang-go=\"`manageSnippets`\" pulumi-lang-python=\"`manage_snippets`\" pulumi-lang-yaml=\"`manageSnippets`\" pulumi-lang-java=\"`manageSnippets`\"\u003e`manage_snippets`\u003c/span\u003e attribute. An example of this configuration is provided below.\n\n\n## Example Usage\n\n### Terraform \u003e= 0.12.6)\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst myservice = new fastly.ServiceVcl(\"myservice\", {\n    name: \"snippet_test\",\n    domains: [{\n        name: \"snippet.fastlytestdomain.com\",\n        comment: \"snippet test\",\n    }],\n    backends: [{\n        address: \"http-me.fastly.dev\",\n        name: \"Glitch Test Site\",\n        port: 80,\n    }],\n    dynamicsnippets: [{\n        name: \"My Dynamic Snippet\",\n        type: \"recv\",\n        priority: 110,\n    }],\n    defaultHost: \"http-me.fastly.dev\",\n    forceDestroy: true,\n});\nconst myDynContent: fastly.ServiceDynamicSnippetContent[] = [];\nmyservice.dynamicsnippets.apply(dynamicsnippets =\u003e {\n    const myDynContent: fastly.ServiceDynamicSnippetContent[] = [];\npulumi.all(.filter(d =\u003e d.name == \"My Dynamic Snippet\").reduce((__obj, d) =\u003e ({ ...__obj, [d.name]: d }))).apply(rangeBody =\u003e {\n        for (const range of Object.entries(rangeBody).map(([k, v]) =\u003e ({key: k, value: v}))) {\n            myDynContent.push(new fastly.ServiceDynamicSnippetContent(`my_dyn_content-${range.key}`, {\n                serviceId: myservice.id,\n                snippetId: range.value.snippetId,\n                content: `if ( req.url ) {\n set req.http.my-snippet-test-header = \"true\";\n}`,\n            }));\n        }\n    });\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nmyservice = fastly.ServiceVcl(\"myservice\",\n    name=\"snippet_test\",\n    domains=[{\n        \"name\": \"snippet.fastlytestdomain.com\",\n        \"comment\": \"snippet test\",\n    }],\n    backends=[{\n        \"address\": \"http-me.fastly.dev\",\n        \"name\": \"Glitch Test Site\",\n        \"port\": 80,\n    }],\n    dynamicsnippets=[{\n        \"name\": \"My Dynamic Snippet\",\n        \"type\": \"recv\",\n        \"priority\": 110,\n    }],\n    default_host=\"http-me.fastly.dev\",\n    force_destroy=True)\nmy_dyn_content = []\ndef create_my_dyn_content(range_body):\n    for range in [{\"key\": k, \"value\": v} for [k, v] in enumerate(range_body)]:\n        my_dyn_content.append(fastly.ServiceDynamicSnippetContent(f\"my_dyn_content-{range['key']}\",\n            service_id=myservice.id,\n            snippet_id=range[\"value\"].snippet_id,\n            content=\"\"\"if ( req.url ) {\n set req.http.my-snippet-test-header = \"true\";\n}\"\"\"))\n\nmyservice.dynamicsnippets.apply(lambda resolved_outputs: create_my_dyn_content({d.name: d for d in resolved_outputs['dynamicsnippets'] if d.name == \"My Dynamic Snippet\"}))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myservice = new Fastly.ServiceVcl(\"myservice\", new()\n    {\n        Name = \"snippet_test\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"snippet.fastlytestdomain.com\",\n                Comment = \"snippet test\",\n            },\n        },\n        Backends = new[]\n        {\n            new Fastly.Inputs.ServiceVclBackendArgs\n            {\n                Address = \"http-me.fastly.dev\",\n                Name = \"Glitch Test Site\",\n                Port = 80,\n            },\n        },\n        Dynamicsnippets = new[]\n        {\n            new Fastly.Inputs.ServiceVclDynamicsnippetArgs\n            {\n                Name = \"My Dynamic Snippet\",\n                Type = \"recv\",\n                Priority = 110,\n            },\n        },\n        DefaultHost = \"http-me.fastly.dev\",\n        ForceDestroy = true,\n    });\n\n    var myDynContent = new List\u003cFastly.ServiceDynamicSnippetContent\u003e();\n    foreach (var range in myservice.Dynamicsnippets.Apply(dynamicsnippets =\u003e ).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        myDynContent.Add(new Fastly.ServiceDynamicSnippetContent($\"my_dyn_content-{range.Key}\", new()\n        {\n            ServiceId = myservice.Id,\n            SnippetId = range.Value.SnippetId,\n            Content = @\"if ( req.url ) {\n set req.http.my-snippet-test-header = \"\"true\"\";\n}\",\n        }));\n    }\n});\n```\n```yaml\nresources:\n  myservice:\n    type: fastly:ServiceVcl\n    properties:\n      name: snippet_test\n      domains:\n        - name: snippet.fastlytestdomain.com\n          comment: snippet test\n      backends:\n        - address: http-me.fastly.dev\n          name: Glitch Test Site\n          port: 80\n      dynamicsnippets:\n        - name: My Dynamic Snippet\n          type: recv\n          priority: 110\n      defaultHost: http-me.fastly.dev\n      forceDestroy: true\n  myDynContent:\n    type: fastly:ServiceDynamicSnippetContent\n    name: my_dyn_content\n    properties:\n      serviceId: ${myservice.id}\n      snippetId: ${range.value.snippetId}\n      content: |-\n        if ( req.url ) {\n         set req.http.my-snippet-test-header = \"true\";\n        }\n    options: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nMultiple dynamic snippets:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst myservice = new fastly.ServiceVcl(\"myservice\", {\n    name: \"snippet_test\",\n    domains: [{\n        name: \"snippet.fastlytestdomain.com\",\n        comment: \"snippet test\",\n    }],\n    backends: [{\n        address: \"http-me.fastly.dev\",\n        name: \"Glitch Test Site\",\n        port: 80,\n    }],\n    dynamicsnippets: [\n        {\n            name: \"My Dynamic Snippet One\",\n            type: \"recv\",\n            priority: 110,\n        },\n        {\n            name: \"My Dynamic Snippet Two\",\n            type: \"recv\",\n            priority: 110,\n        },\n    ],\n    defaultHost: \"http-me.fastly.dev\",\n    forceDestroy: true,\n});\nconst myDynContentOne: fastly.ServiceDynamicSnippetContent[] = [];\nmyservice.dynamicsnippets.apply(dynamicsnippets =\u003e {\n    const myDynContentOne: fastly.ServiceDynamicSnippetContent[] = [];\npulumi.all(.filter(d =\u003e d.name == \"My Dynamic Snippet One\").reduce((__obj, d) =\u003e ({ ...__obj, [d.name]: d }))).apply(rangeBody =\u003e {\n        for (const range of Object.entries(rangeBody).map(([k, v]) =\u003e ({key: k, value: v}))) {\n            myDynContentOne.push(new fastly.ServiceDynamicSnippetContent(`my_dyn_content_one-${range.key}`, {\n                serviceId: myservice.id,\n                snippetId: range.value.snippetId,\n                content: `if ( req.url ) {\n set req.http.my-snippet-test-header-one = \"true\";\n}`,\n            }));\n        }\n    });\n});\nconst myDynContentTwo: fastly.ServiceDynamicSnippetContent[] = [];\nmyservice.dynamicsnippets.apply(dynamicsnippets =\u003e {\n    const myDynContentTwo: fastly.ServiceDynamicSnippetContent[] = [];\npulumi.all(.filter(d =\u003e d.name == \"My Dynamic Snippet Two\").reduce((__obj, d) =\u003e ({ ...__obj, [d.name]: d }))).apply(rangeBody =\u003e {\n        for (const range of Object.entries(rangeBody).map(([k, v]) =\u003e ({key: k, value: v}))) {\n            myDynContentTwo.push(new fastly.ServiceDynamicSnippetContent(`my_dyn_content_two-${range.key}`, {\n                serviceId: myservice.id,\n                snippetId: range.value.snippetId,\n                content: `if ( req.url ) {\n set req.http.my-snippet-test-header-two = \"true\";\n}`,\n            }));\n        }\n    });\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nmyservice = fastly.ServiceVcl(\"myservice\",\n    name=\"snippet_test\",\n    domains=[{\n        \"name\": \"snippet.fastlytestdomain.com\",\n        \"comment\": \"snippet test\",\n    }],\n    backends=[{\n        \"address\": \"http-me.fastly.dev\",\n        \"name\": \"Glitch Test Site\",\n        \"port\": 80,\n    }],\n    dynamicsnippets=[\n        {\n            \"name\": \"My Dynamic Snippet One\",\n            \"type\": \"recv\",\n            \"priority\": 110,\n        },\n        {\n            \"name\": \"My Dynamic Snippet Two\",\n            \"type\": \"recv\",\n            \"priority\": 110,\n        },\n    ],\n    default_host=\"http-me.fastly.dev\",\n    force_destroy=True)\nmy_dyn_content_one = []\ndef create_my_dyn_content_one(range_body):\n    for range in [{\"key\": k, \"value\": v} for [k, v] in enumerate(range_body)]:\n        my_dyn_content_one.append(fastly.ServiceDynamicSnippetContent(f\"my_dyn_content_one-{range['key']}\",\n            service_id=myservice.id,\n            snippet_id=range[\"value\"].snippet_id,\n            content=\"\"\"if ( req.url ) {\n set req.http.my-snippet-test-header-one = \"true\";\n}\"\"\"))\n\nmyservice.dynamicsnippets.apply(lambda resolved_outputs: create_my_dyn_content_one({d.name: d for d in resolved_outputs['dynamicsnippets'] if d.name == \"My Dynamic Snippet One\"}))\nmy_dyn_content_two = []\ndef create_my_dyn_content_two(range_body):\n    for range in [{\"key\": k, \"value\": v} for [k, v] in enumerate(range_body)]:\n        my_dyn_content_two.append(fastly.ServiceDynamicSnippetContent(f\"my_dyn_content_two-{range['key']}\",\n            service_id=myservice.id,\n            snippet_id=range[\"value\"].snippet_id,\n            content=\"\"\"if ( req.url ) {\n set req.http.my-snippet-test-header-two = \"true\";\n}\"\"\"))\n\nmyservice.dynamicsnippets.apply(lambda resolved_outputs: create_my_dyn_content_two({d.name: d for d in resolved_outputs['dynamicsnippets'] if d.name == \"My Dynamic Snippet Two\"}))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myservice = new Fastly.ServiceVcl(\"myservice\", new()\n    {\n        Name = \"snippet_test\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"snippet.fastlytestdomain.com\",\n                Comment = \"snippet test\",\n            },\n        },\n        Backends = new[]\n        {\n            new Fastly.Inputs.ServiceVclBackendArgs\n            {\n                Address = \"http-me.fastly.dev\",\n                Name = \"Glitch Test Site\",\n                Port = 80,\n            },\n        },\n        Dynamicsnippets = new[]\n        {\n            new Fastly.Inputs.ServiceVclDynamicsnippetArgs\n            {\n                Name = \"My Dynamic Snippet One\",\n                Type = \"recv\",\n                Priority = 110,\n            },\n            new Fastly.Inputs.ServiceVclDynamicsnippetArgs\n            {\n                Name = \"My Dynamic Snippet Two\",\n                Type = \"recv\",\n                Priority = 110,\n            },\n        },\n        DefaultHost = \"http-me.fastly.dev\",\n        ForceDestroy = true,\n    });\n\n    var myDynContentOne = new List\u003cFastly.ServiceDynamicSnippetContent\u003e();\n    foreach (var range in myservice.Dynamicsnippets.Apply(dynamicsnippets =\u003e ).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        myDynContentOne.Add(new Fastly.ServiceDynamicSnippetContent($\"my_dyn_content_one-{range.Key}\", new()\n        {\n            ServiceId = myservice.Id,\n            SnippetId = range.Value.SnippetId,\n            Content = @\"if ( req.url ) {\n set req.http.my-snippet-test-header-one = \"\"true\"\";\n}\",\n        }));\n    }\n    var myDynContentTwo = new List\u003cFastly.ServiceDynamicSnippetContent\u003e();\n    foreach (var range in myservice.Dynamicsnippets.Apply(dynamicsnippets =\u003e ).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        myDynContentTwo.Add(new Fastly.ServiceDynamicSnippetContent($\"my_dyn_content_two-{range.Key}\", new()\n        {\n            ServiceId = myservice.Id,\n            SnippetId = range.Value.SnippetId,\n            Content = @\"if ( req.url ) {\n set req.http.my-snippet-test-header-two = \"\"true\"\";\n}\",\n        }));\n    }\n});\n```\n```yaml\nresources:\n  myservice:\n    type: fastly:ServiceVcl\n    properties:\n      name: snippet_test\n      domains:\n        - name: snippet.fastlytestdomain.com\n          comment: snippet test\n      backends:\n        - address: http-me.fastly.dev\n          name: Glitch Test Site\n          port: 80\n      dynamicsnippets:\n        - name: My Dynamic Snippet One\n          type: recv\n          priority: 110\n        - name: My Dynamic Snippet Two\n          type: recv\n          priority: 110\n      defaultHost: http-me.fastly.dev\n      forceDestroy: true\n  myDynContentOne:\n    type: fastly:ServiceDynamicSnippetContent\n    name: my_dyn_content_one\n    properties:\n      serviceId: ${myservice.id}\n      snippetId: ${range.value.snippetId}\n      content: |-\n        if ( req.url ) {\n         set req.http.my-snippet-test-header-one = \"true\";\n        }\n    options: {}\n  myDynContentTwo:\n    type: fastly:ServiceDynamicSnippetContent\n    name: my_dyn_content_two\n    properties:\n      serviceId: ${myservice.id}\n      snippetId: ${range.value.snippetId}\n      content: |-\n        if ( req.url ) {\n         set req.http.my-snippet-test-header-two = \"true\";\n        }\n    options: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n\n### Terraform \u003e= 0.12.0 \u0026\u0026 \u003c 0.12.6)\n\n\u003cspan pulumi-lang-nodejs=\"`forEach`\" pulumi-lang-dotnet=\"`ForEach`\" pulumi-lang-go=\"`forEach`\" pulumi-lang-python=\"`for_each`\" pulumi-lang-yaml=\"`forEach`\" pulumi-lang-java=\"`forEach`\"\u003e`for_each`\u003c/span\u003e attributes were not available in Terraform before 0.12.6, however, users can still use \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expressions to achieve\nsimilar behaviour as seen in the example below.\n\n\u003e **Warning:** Terraform might not properly calculate implicit dependencies on computed attributes when using \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expressions\n\nFor scenarios such as adding a Dynamic Snippet to a service and at the same time, creating the Dynamic Snippets (\u003cspan pulumi-lang-nodejs=\"`fastly.ServiceDynamicSnippetContent`\" pulumi-lang-dotnet=\"`fastly.ServiceDynamicSnippetContent`\" pulumi-lang-go=\"`ServiceDynamicSnippetContent`\" pulumi-lang-python=\"`ServiceDynamicSnippetContent`\" pulumi-lang-yaml=\"`fastly.ServiceDynamicSnippetContent`\" pulumi-lang-java=\"`fastly.ServiceDynamicSnippetContent`\"\u003e`fastly.ServiceDynamicSnippetContent`\u003c/span\u003e)\nresource, Terraform will not calculate implicit dependencies correctly on \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expressions. This will result in index lookup\nproblems and the execution will fail.\n\nFor those scenarios, it's recommended to split the changes into two distinct steps:\n\n1. Add the \u003cspan pulumi-lang-nodejs=\"`dynamicsnippet`\" pulumi-lang-dotnet=\"`Dynamicsnippet`\" pulumi-lang-go=\"`dynamicsnippet`\" pulumi-lang-python=\"`dynamicsnippet`\" pulumi-lang-yaml=\"`dynamicsnippet`\" pulumi-lang-java=\"`dynamicsnippet`\"\u003e`dynamicsnippet`\u003c/span\u003e block to the \u003cspan pulumi-lang-nodejs=\"`fastly.ServiceVcl`\" pulumi-lang-dotnet=\"`fastly.ServiceVcl`\" pulumi-lang-go=\"`ServiceVcl`\" pulumi-lang-python=\"`ServiceVcl`\" pulumi-lang-yaml=\"`fastly.ServiceVcl`\" pulumi-lang-java=\"`fastly.ServiceVcl`\"\u003e`fastly.ServiceVcl`\u003c/span\u003e and apply the changes\n2. Add the \u003cspan pulumi-lang-nodejs=\"`fastly.ServiceDynamicSnippetContent`\" pulumi-lang-dotnet=\"`fastly.ServiceDynamicSnippetContent`\" pulumi-lang-go=\"`ServiceDynamicSnippetContent`\" pulumi-lang-python=\"`ServiceDynamicSnippetContent`\" pulumi-lang-yaml=\"`fastly.ServiceDynamicSnippetContent`\" pulumi-lang-java=\"`fastly.ServiceDynamicSnippetContent`\"\u003e`fastly.ServiceDynamicSnippetContent`\u003c/span\u003e resource with the \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expressions to the HCL and apply the changes\n\nUsage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst myservice = new fastly.ServiceVcl(\"myservice\", {\n    name: \"demofastly\",\n    domains: [{\n        name: \"demo.notexample.com\",\n        comment: \"demo\",\n    }],\n    dynamicsnippets: [{\n        name: \"My Dynamic Snippet\",\n        type: \"recv\",\n        priority: 110,\n    }],\n});\nconst myDynContent = new fastly.ServiceDynamicSnippetContent(\"my_dyn_content\", {\n    serviceId: myservice.id,\n    snippetId: myservice.dynamicsnippets.apply(dynamicsnippets =\u003e .reduce((__obj, s) =\u003e ({ ...__obj, [s.name]: s.snippetId }))[\"My Dynamic Snippet\"]),\n    content: `if ( req.url ) {\n set req.http.my-snippet-test-header = \"true\";\n}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nmyservice = fastly.ServiceVcl(\"myservice\",\n    name=\"demofastly\",\n    domains=[{\n        \"name\": \"demo.notexample.com\",\n        \"comment\": \"demo\",\n    }],\n    dynamicsnippets=[{\n        \"name\": \"My Dynamic Snippet\",\n        \"type\": \"recv\",\n        \"priority\": 110,\n    }])\nmy_dyn_content = fastly.ServiceDynamicSnippetContent(\"my_dyn_content\",\n    service_id=myservice.id,\n    snippet_id=myservice.dynamicsnippets.apply(lambda dynamicsnippets: {s.name: s.snippet_id for s in dynamicsnippets}[\"My Dynamic Snippet\"]),\n    content=\"\"\"if ( req.url ) {\n set req.http.my-snippet-test-header = \"true\";\n}\"\"\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myservice = new Fastly.ServiceVcl(\"myservice\", new()\n    {\n        Name = \"demofastly\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"demo.notexample.com\",\n                Comment = \"demo\",\n            },\n        },\n        Dynamicsnippets = new[]\n        {\n            new Fastly.Inputs.ServiceVclDynamicsnippetArgs\n            {\n                Name = \"My Dynamic Snippet\",\n                Type = \"recv\",\n                Priority = 110,\n            },\n        },\n    });\n\n    var myDynContent = new Fastly.ServiceDynamicSnippetContent(\"my_dyn_content\", new()\n    {\n        ServiceId = myservice.Id,\n        SnippetId = myservice.Dynamicsnippets.Apply(dynamicsnippets =\u003e .ToDictionary(item =\u003e {\n            var s = item.Value;\n            return s.Name;\n        }, item =\u003e {\n            var s = item.Value;\n            return s.SnippetId;\n        }).My_Dynamic_Snippet),\n        Content = @\"if ( req.url ) {\n set req.http.my-snippet-test-header = \"\"true\"\";\n}\",\n    });\n\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Reapplying original snippets with \u003cspan pulumi-lang-nodejs=\"`manageSnippets`\" pulumi-lang-dotnet=\"`ManageSnippets`\" pulumi-lang-go=\"`manageSnippets`\" pulumi-lang-python=\"`manage_snippets`\" pulumi-lang-yaml=\"`manageSnippets`\" pulumi-lang-java=\"`manageSnippets`\"\u003e`manage_snippets`\u003c/span\u003e if the state of the snippets drifts\n\nBy default the user is opted out from reapplying the original changes if the snippets are managed externally.\nThe following example demonstrates how the \u003cspan pulumi-lang-nodejs=\"`manageSnippets`\" pulumi-lang-dotnet=\"`ManageSnippets`\" pulumi-lang-go=\"`manageSnippets`\" pulumi-lang-python=\"`manage_snippets`\" pulumi-lang-yaml=\"`manageSnippets`\" pulumi-lang-java=\"`manageSnippets`\"\u003e`manage_snippets`\u003c/span\u003e field can be used to reapply the changes defined in the HCL if the state of the snippets drifts.\nWhen the value is explicitly set to 'true', Terraform will keep the original changes and discard any other changes made under this resource outside of Terraform.\n\n\u003e **Warning:** You will lose externally managed snippets if `manage_snippets=true`.\n\n\u003e **Note:** The \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e built-in meta-argument takes precedence over \u003cspan pulumi-lang-nodejs=\"`manageSnippets`\" pulumi-lang-dotnet=\"`ManageSnippets`\" pulumi-lang-go=\"`manageSnippets`\" pulumi-lang-python=\"`manage_snippets`\" pulumi-lang-yaml=\"`manageSnippets`\" pulumi-lang-java=\"`manageSnippets`\"\u003e`manage_snippets`\u003c/span\u003e regardless of its value.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\n//...\nconst myDynContent: fastly.ServiceDynamicSnippetContent[] = [];\nfor (const range of Object.entries(.filter(d =\u003e d.name == \"My Dynamic Snippet\").reduce((__obj, d) =\u003e ({ ...__obj, [d.name]: d }))).map(([k, v]) =\u003e ({key: k, value: v}))) {\n    myDynContent.push(new fastly.ServiceDynamicSnippetContent(`my_dyn_content-${range.key}`, {\n        serviceId: myservice.id,\n        snippetId: range.value.snippetId,\n        manageSnippets: true,\n        content: `if ( req.url ) {\n set req.http.my-snippet-test-header = \"true\";\n}`,\n    }));\n}\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\n#...\nmy_dyn_content = []\nfor range in [{\"key\": k, \"value\": v} for [k, v] in enumerate({d.name: d for d in myservice.dynamicsnippet if d.name == My Dynamic Snippet})]:\n    my_dyn_content.append(fastly.ServiceDynamicSnippetContent(f\"my_dyn_content-{range['key']}\",\n        service_id=myservice[\"id\"],\n        snippet_id=range[\"value\"][\"snippetId\"],\n        manage_snippets=True,\n        content=\"\"\"if ( req.url ) {\n set req.http.my-snippet-test-header = \"true\";\n}\"\"\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    //...\n    var myDynContent = new List\u003cFastly.ServiceDynamicSnippetContent\u003e();\n    foreach (var range in .ToDictionary(item =\u003e {\n        var d = item.Value;\n        return d.Name;\n    }, item =\u003e {\n        var d = item.Value;\n        return d;\n    }).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        myDynContent.Add(new Fastly.ServiceDynamicSnippetContent($\"my_dyn_content-{range.Key}\", new()\n        {\n            ServiceId = myservice.Id,\n            SnippetId = range.Value.SnippetId,\n            ManageSnippets = true,\n            Content = @\"if ( req.url ) {\n set req.http.my-snippet-test-header = \"\"true\"\";\n}\",\n        }));\n    }\n});\n```\n```yaml\nresources:\n  #...\n  myDynContent:\n    type: fastly:ServiceDynamicSnippetContent\n    name: my_dyn_content\n    properties:\n      serviceId: ${myservice.id}\n      snippetId: ${range.value.snippetId}\n      manageSnippets: true\n      content: |-\n        if ( req.url ) {\n         set req.http.my-snippet-test-header = \"true\";\n        }\n    options: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nThis is an example of the import command being applied to the resource named `fastly_service_dynamic_snippet_content.content`\nThe resource ID is a combined value of the \u003cspan pulumi-lang-nodejs=\"`serviceId`\" pulumi-lang-dotnet=\"`ServiceId`\" pulumi-lang-go=\"`serviceId`\" pulumi-lang-python=\"`service_id`\" pulumi-lang-yaml=\"`serviceId`\" pulumi-lang-java=\"`serviceId`\"\u003e`service_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`snippetId`\" pulumi-lang-dotnet=\"`SnippetId`\" pulumi-lang-go=\"`snippetId`\" pulumi-lang-python=\"`snippet_id`\" pulumi-lang-yaml=\"`snippetId`\" pulumi-lang-java=\"`snippetId`\"\u003e`snippet_id`\u003c/span\u003e separated by a forward slash.\n\n```sh\n$ pulumi import fastly:index/serviceDynamicSnippetContent:ServiceDynamicSnippetContent content xxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxx\n```\n\nIf Terraform is already managing remote content against a resource being imported then the user will be asked to remove it from the existing Terraform state.\nThe following is an example of the Terraform state command to remove the resource named `fastly_service_dynamic_snippet_content.content` from the Terraform state file.\n\n```sh\n$ terraform state rm fastly_service_dynamic_snippet_content.content\n```\n\n","properties":{"content":{"type":"string","description":"The VCL code that specifies exactly what the snippet does\n"},"manageSnippets":{"type":"boolean","description":"Whether to reapply changes if the state of the snippets drifts, i.e. if snippets are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the service that the dynamic snippet belongs to\n"},"snippetId":{"type":"string","description":"The ID of the dynamic snippet that the content belong to\n"}},"required":["content","serviceId","snippetId"],"inputProperties":{"content":{"type":"string","description":"The VCL code that specifies exactly what the snippet does\n"},"manageSnippets":{"type":"boolean","description":"Whether to reapply changes if the state of the snippets drifts, i.e. if snippets are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the service that the dynamic snippet belongs to\n"},"snippetId":{"type":"string","description":"The ID of the dynamic snippet that the content belong to\n"}},"requiredInputs":["content","serviceId","snippetId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceDynamicSnippetContent resources.\n","properties":{"content":{"type":"string","description":"The VCL code that specifies exactly what the snippet does\n"},"manageSnippets":{"type":"boolean","description":"Whether to reapply changes if the state of the snippets drifts, i.e. if snippets are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the service that the dynamic snippet belongs to\n"},"snippetId":{"type":"string","description":"The ID of the dynamic snippet that the content belong to\n"}},"type":"object"}},"fastly:index/serviceVcl:ServiceVcl":{"description":"Provides a Fastly Service, representing the configuration for a website, app,\nAPI, or anything else to be served through Fastly. A Service encompasses Domains\nand Backends.\n\nThe Service resource requires a domain name that is correctly set up to direct\ntraffic to the Fastly service. See Fastly's guide on [Adding CNAME Records][fastly-cname]\non their documentation site for guidance.\n\n## Activation and Staging\n\nBy default, the \u003cspan pulumi-lang-nodejs=\"`activate`\" pulumi-lang-dotnet=\"`Activate`\" pulumi-lang-go=\"`activate`\" pulumi-lang-python=\"`activate`\" pulumi-lang-yaml=\"`activate`\" pulumi-lang-java=\"`activate`\"\u003e`activate`\u003c/span\u003e attribute is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, and the \u003cspan pulumi-lang-nodejs=\"`stage`\" pulumi-lang-dotnet=\"`Stage`\" pulumi-lang-go=\"`stage`\" pulumi-lang-python=\"`stage`\" pulumi-lang-yaml=\"`stage`\" pulumi-lang-java=\"`stage`\"\u003e`stage`\u003c/span\u003e\nattribute is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. This combination means that when `terraform\napply` is executed for a plan which will make changes to the service,\nthe last version created by the provider (the \u003cspan pulumi-lang-nodejs=\"`clonedVersion`\" pulumi-lang-dotnet=\"`ClonedVersion`\" pulumi-lang-go=\"`clonedVersion`\" pulumi-lang-python=\"`cloned_version`\" pulumi-lang-yaml=\"`clonedVersion`\" pulumi-lang-java=\"`clonedVersion`\"\u003e`cloned_version`\u003c/span\u003e) will\nbe cloned to make a draft version, the changes will be applied to that\ndraft version, and that draft version will be activated.\n\nIf desired, \u003cspan pulumi-lang-nodejs=\"`activate`\" pulumi-lang-dotnet=\"`Activate`\" pulumi-lang-go=\"`activate`\" pulumi-lang-python=\"`activate`\" pulumi-lang-yaml=\"`activate`\" pulumi-lang-java=\"`activate`\"\u003e`activate`\u003c/span\u003e can be set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, in which case the\nbehavior above will be modified such that cloning will only occur when\nthe \u003cspan pulumi-lang-nodejs=\"`clonedVersion`\" pulumi-lang-dotnet=\"`ClonedVersion`\" pulumi-lang-go=\"`clonedVersion`\" pulumi-lang-python=\"`cloned_version`\" pulumi-lang-yaml=\"`clonedVersion`\" pulumi-lang-java=\"`clonedVersion`\"\u003e`cloned_version`\u003c/span\u003e is locked, and the draft version will not be\nactivated.\n\nAdditionally, \u003cspan pulumi-lang-nodejs=\"`stage`\" pulumi-lang-dotnet=\"`Stage`\" pulumi-lang-go=\"`stage`\" pulumi-lang-python=\"`stage`\" pulumi-lang-yaml=\"`stage`\" pulumi-lang-java=\"`stage`\"\u003e`stage`\u003c/span\u003e can be set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, with \u003cspan pulumi-lang-nodejs=\"`activate`\" pulumi-lang-dotnet=\"`Activate`\" pulumi-lang-go=\"`activate`\" pulumi-lang-python=\"`activate`\" pulumi-lang-yaml=\"`activate`\" pulumi-lang-java=\"`activate`\"\u003e`activate`\u003c/span\u003e set to\n\u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. This extends the `activate = false` behavior to include\nstaging of applied changes, every time that changes are applied, even\nif the changes were applied to an existing draft version.\n\nFinally, \u003cspan pulumi-lang-nodejs=\"`activate`\" pulumi-lang-dotnet=\"`Activate`\" pulumi-lang-go=\"`activate`\" pulumi-lang-python=\"`activate`\" pulumi-lang-yaml=\"`activate`\" pulumi-lang-java=\"`activate`\"\u003e`activate`\u003c/span\u003e should not be set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e when \u003cspan pulumi-lang-nodejs=\"`stage`\" pulumi-lang-dotnet=\"`Stage`\" pulumi-lang-go=\"`stage`\" pulumi-lang-python=\"`stage`\" pulumi-lang-yaml=\"`stage`\" pulumi-lang-java=\"`stage`\"\u003e`stage`\u003c/span\u003e is also\nset to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. While this combination will not cause any harm to the\nservice, there is no logical reason to both stage and activate every\nset of applied changes.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n    name: \"demofastly\",\n    domains: [{\n        name: \"demo.notexample.com\",\n        comment: \"demo\",\n    }],\n    backends: [{\n        address: \"127.0.0.1\",\n        name: \"localhost\",\n        port: 80,\n    }],\n    forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n    name=\"demofastly\",\n    domains=[{\n        \"name\": \"demo.notexample.com\",\n        \"comment\": \"demo\",\n    }],\n    backends=[{\n        \"address\": \"127.0.0.1\",\n        \"name\": \"localhost\",\n        \"port\": 80,\n    }],\n    force_destroy=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demo = new Fastly.ServiceVcl(\"demo\", new()\n    {\n        Name = \"demofastly\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"demo.notexample.com\",\n                Comment = \"demo\",\n            },\n        },\n        Backends = new[]\n        {\n            new Fastly.Inputs.ServiceVclBackendArgs\n            {\n                Address = \"127.0.0.1\",\n                Name = \"localhost\",\n                Port = 80,\n            },\n        },\n        ForceDestroy = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tName: pulumi.String(\"demofastly\"),\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName:    pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName:    pulumi.String(\"localhost\"),\n\t\t\t\t\tPort:    pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder()\n            .name(\"demofastly\")\n            .domains(ServiceVclDomainArgs.builder()\n                .name(\"demo.notexample.com\")\n                .comment(\"demo\")\n                .build())\n            .backends(ServiceVclBackendArgs.builder()\n                .address(\"127.0.0.1\")\n                .name(\"localhost\")\n                .port(80)\n                .build())\n            .forceDestroy(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demo:\n    type: fastly:ServiceVcl\n    properties:\n      name: demofastly\n      domains:\n        - name: demo.notexample.com\n          comment: demo\n      backends:\n        - address: 127.0.0.1\n          name: localhost\n          port: 80\n      forceDestroy: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nBasic usage with an Amazon S3 Website and that removes the `x-amz-request-id` header:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n    name: \"demofastly\",\n    domains: [{\n        name: \"demo.notexample.com\",\n        comment: \"demo\",\n    }],\n    backends: [{\n        address: \"http-me.fastly.dev\",\n        name: \"Glitch Test Site\",\n        port: 80,\n        overrideHost: \"http-me.fastly.dev\",\n    }],\n    headers: [{\n        destination: \"http.x-amz-request-id\",\n        type: \"cache\",\n        action: \"delete\",\n        name: \"remove x-amz-request-id\",\n    }],\n    gzips: [{\n        name: \"file extensions and content types\",\n        extensions: [\n            \"css\",\n            \"js\",\n        ],\n        contentTypes: [\n            \"text/html\",\n            \"text/css\",\n        ],\n    }],\n    forceDestroy: true,\n});\nconst websiteBucket = new aws.index.S3Bucket(\"website_bucket\", {bucket: \"your-unique-website-bucket-name\"});\nconst websiteConfig = new aws.index.S3BucketWebsiteConfiguration(\"website_config\", {\n    bucket: websiteBucket.id,\n    indexDocument: [{\n        suffix: \"index.html\",\n    }],\n    errorDocument: [{\n        key: \"error.html\",\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n    name=\"demofastly\",\n    domains=[{\n        \"name\": \"demo.notexample.com\",\n        \"comment\": \"demo\",\n    }],\n    backends=[{\n        \"address\": \"http-me.fastly.dev\",\n        \"name\": \"Glitch Test Site\",\n        \"port\": 80,\n        \"override_host\": \"http-me.fastly.dev\",\n    }],\n    headers=[{\n        \"destination\": \"http.x-amz-request-id\",\n        \"type\": \"cache\",\n        \"action\": \"delete\",\n        \"name\": \"remove x-amz-request-id\",\n    }],\n    gzips=[{\n        \"name\": \"file extensions and content types\",\n        \"extensions\": [\n            \"css\",\n            \"js\",\n        ],\n        \"content_types\": [\n            \"text/html\",\n            \"text/css\",\n        ],\n    }],\n    force_destroy=True)\nwebsite_bucket = aws.index.S3Bucket(\"website_bucket\", bucket=your-unique-website-bucket-name)\nwebsite_config = aws.index.S3BucketWebsiteConfiguration(\"website_config\",\n    bucket=website_bucket.id,\n    index_document=[{\n        suffix: index.html,\n    }],\n    error_document=[{\n        key: error.html,\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demo = new Fastly.ServiceVcl(\"demo\", new()\n    {\n        Name = \"demofastly\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"demo.notexample.com\",\n                Comment = \"demo\",\n            },\n        },\n        Backends = new[]\n        {\n            new Fastly.Inputs.ServiceVclBackendArgs\n            {\n                Address = \"http-me.fastly.dev\",\n                Name = \"Glitch Test Site\",\n                Port = 80,\n                OverrideHost = \"http-me.fastly.dev\",\n            },\n        },\n        Headers = new[]\n        {\n            new Fastly.Inputs.ServiceVclHeaderArgs\n            {\n                Destination = \"http.x-amz-request-id\",\n                Type = \"cache\",\n                Action = \"delete\",\n                Name = \"remove x-amz-request-id\",\n            },\n        },\n        Gzips = new[]\n        {\n            new Fastly.Inputs.ServiceVclGzipArgs\n            {\n                Name = \"file extensions and content types\",\n                Extensions = new[]\n                {\n                    \"css\",\n                    \"js\",\n                },\n                ContentTypes = new[]\n                {\n                    \"text/html\",\n                    \"text/css\",\n                },\n            },\n        },\n        ForceDestroy = true,\n    });\n\n    var websiteBucket = new Aws.Index.S3Bucket(\"website_bucket\", new()\n    {\n        Bucket = \"your-unique-website-bucket-name\",\n    });\n\n    var websiteConfig = new Aws.Index.S3BucketWebsiteConfiguration(\"website_config\", new()\n    {\n        Bucket = websiteBucket.Id,\n        IndexDocument = new[]\n        {\n            \n            {\n                { \"suffix\", \"index.html\" },\n            },\n        },\n        ErrorDocument = new[]\n        {\n            \n            {\n                { \"key\", \"error.html\" },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v7/go/aws\"\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tName: pulumi.String(\"demofastly\"),\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName:    pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\n\t\t\t\t\tAddress:      pulumi.String(\"http-me.fastly.dev\"),\n\t\t\t\t\tName:         pulumi.String(\"Glitch Test Site\"),\n\t\t\t\t\tPort:         pulumi.Int(80),\n\t\t\t\t\tOverrideHost: pulumi.String(\"http-me.fastly.dev\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tHeaders: fastly.ServiceVclHeaderArray{\n\t\t\t\t\u0026fastly.ServiceVclHeaderArgs{\n\t\t\t\t\tDestination: pulumi.String(\"http.x-amz-request-id\"),\n\t\t\t\t\tType:        pulumi.String(\"cache\"),\n\t\t\t\t\tAction:      pulumi.String(\"delete\"),\n\t\t\t\t\tName:        pulumi.String(\"remove x-amz-request-id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGzips: fastly.ServiceVclGzipArray{\n\t\t\t\t\u0026fastly.ServiceVclGzipArgs{\n\t\t\t\t\tName: pulumi.String(\"file extensions and content types\"),\n\t\t\t\t\tExtensions: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"css\"),\n\t\t\t\t\t\tpulumi.String(\"js\"),\n\t\t\t\t\t},\n\t\t\t\t\tContentTypes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"text/html\"),\n\t\t\t\t\t\tpulumi.String(\"text/css\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twebsiteBucket, err := aws.NewS3Bucket(ctx, \"website_bucket\", \u0026aws.S3BucketArgs{\n\t\t\tBucket: \"your-unique-website-bucket-name\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = aws.NewS3BucketWebsiteConfiguration(ctx, \"website_config\", \u0026aws.S3BucketWebsiteConfigurationArgs{\n\t\t\tBucket: websiteBucket.Id,\n\t\t\tIndexDocument: []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"suffix\": \"index.html\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tErrorDocument: []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"key\": \"error.html\",\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclHeaderArgs;\nimport com.pulumi.fastly.inputs.ServiceVclGzipArgs;\nimport com.pulumi.aws.S3Bucket;\nimport com.pulumi.aws.S3BucketArgs;\nimport com.pulumi.aws.S3BucketWebsiteConfiguration;\nimport com.pulumi.aws.S3BucketWebsiteConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder()\n            .name(\"demofastly\")\n            .domains(ServiceVclDomainArgs.builder()\n                .name(\"demo.notexample.com\")\n                .comment(\"demo\")\n                .build())\n            .backends(ServiceVclBackendArgs.builder()\n                .address(\"http-me.fastly.dev\")\n                .name(\"Glitch Test Site\")\n                .port(80)\n                .overrideHost(\"http-me.fastly.dev\")\n                .build())\n            .headers(ServiceVclHeaderArgs.builder()\n                .destination(\"http.x-amz-request-id\")\n                .type(\"cache\")\n                .action(\"delete\")\n                .name(\"remove x-amz-request-id\")\n                .build())\n            .gzips(ServiceVclGzipArgs.builder()\n                .name(\"file extensions and content types\")\n                .extensions(                \n                    \"css\",\n                    \"js\")\n                .contentTypes(                \n                    \"text/html\",\n                    \"text/css\")\n                .build())\n            .forceDestroy(true)\n            .build());\n\n        var websiteBucket = new S3Bucket(\"websiteBucket\", S3BucketArgs.builder()\n            .bucket(\"your-unique-website-bucket-name\")\n            .build());\n\n        var websiteConfig = new S3BucketWebsiteConfiguration(\"websiteConfig\", S3BucketWebsiteConfigurationArgs.builder()\n            .bucket(websiteBucket.id())\n            .indexDocument(List.of(Map.of(\"suffix\", \"index.html\")))\n            .errorDocument(List.of(Map.of(\"key\", \"error.html\")))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demo:\n    type: fastly:ServiceVcl\n    properties:\n      name: demofastly\n      domains:\n        - name: demo.notexample.com\n          comment: demo\n      backends:\n        - address: http-me.fastly.dev\n          name: Glitch Test Site\n          port: 80\n          overrideHost: http-me.fastly.dev\n      headers:\n        - destination: http.x-amz-request-id\n          type: cache\n          action: delete\n          name: remove x-amz-request-id\n      gzips:\n        - name: file extensions and content types\n          extensions:\n            - css\n            - js\n          contentTypes:\n            - text/html\n            - text/css\n      forceDestroy: true\n  websiteBucket:\n    type: aws:S3Bucket\n    name: website_bucket\n    properties:\n      bucket: your-unique-website-bucket-name\n  websiteConfig:\n    type: aws:S3BucketWebsiteConfiguration\n    name: website_config\n    properties:\n      bucket: ${websiteBucket.id}\n      indexDocument:\n        - suffix: index.html\n      errorDocument:\n        - key: error.html\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nBasic usage with [custom\nVCL](https://docs.fastly.com/vcl/custom-vcl/uploading-custom-vcl/):\n\n## Import\n\nFastly Services can be imported using their service ID, e.g.\n\n```sh\n$ pulumi import fastly:index/serviceVcl:ServiceVcl demo xxxxxxxxxxxxxxxxxxxx\n```\n\nBy default, either the active version will be imported, or the latest version if no version is active.\nAlternatively, a specific version of the service can be selected by appending an `@` followed by the version number to the service ID, e.g.\n\n```sh\n$ pulumi import fastly:index/serviceVcl:ServiceVcl demo xxxxxxxxxxxxxxxxxxxx@2\n```\n\n","properties":{"acls":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclAcl:ServiceVclAcl"}},"activate":{"type":"boolean","description":"Conditionally prevents new service versions from being activated. The apply step will create a new draft version but will not activate it if this is set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. Default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e"},"activeVersion":{"type":"integer","description":"The currently active version of your Fastly Service"},"backends":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclBackend:ServiceVclBackend"}},"cacheSettings":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclCacheSetting:ServiceVclCacheSetting"}},"clonedVersion":{"type":"integer","description":"The latest cloned version by the provider"},"comment":{"type":"string","description":"Description field for the service. Default `Managed by Terraform`"},"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclCondition:ServiceVclCondition"}},"defaultHost":{"type":"string","description":"The default hostname"},"defaultTtl":{"type":"integer","description":"The default Time-to-live (TTL) for requests"},"dictionaries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDictionary:ServiceVclDictionary"}},"directors":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDirector:ServiceVclDirector"}},"domains":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDomain:ServiceVclDomain"},"description":"A set of Domain names to serve as entry points for your Service"},"dynamicsnippets":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDynamicsnippet:ServiceVclDynamicsnippet"}},"forceDestroy":{"type":"boolean","description":"Services that are active cannot be destroyed. In order to destroy the Service, set \u003cspan pulumi-lang-nodejs=\"`forceDestroy`\" pulumi-lang-dotnet=\"`ForceDestroy`\" pulumi-lang-go=\"`forceDestroy`\" pulumi-lang-python=\"`force_destroy`\" pulumi-lang-yaml=\"`forceDestroy`\" pulumi-lang-java=\"`forceDestroy`\"\u003e`force_destroy`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"forceRefresh":{"type":"boolean","description":"Used internally by the provider to temporarily indicate if all resources should call their associated API to update the local state. This is for scenarios where the service version has been reverted outside of Terraform (e.g. via the Fastly UI) and the provider needs to resync the state for a different active version (this is only if \u003cspan pulumi-lang-nodejs=\"`activate`\" pulumi-lang-dotnet=\"`Activate`\" pulumi-lang-go=\"`activate`\" pulumi-lang-python=\"`activate`\" pulumi-lang-yaml=\"`activate`\" pulumi-lang-java=\"`activate`\"\u003e`activate`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)."},"gzips":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclGzip:ServiceVclGzip"}},"headers":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclHeader:ServiceVclHeader"}},"healthchecks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclHealthcheck:ServiceVclHealthcheck"}},"http3":{"type":"boolean","description":"Enables support for the HTTP/3 (QUIC) protocol"},"imageOptimizerDefaultSettings":{"$ref":"#/types/fastly:index/ServiceVclImageOptimizerDefaultSettings:ServiceVclImageOptimizerDefaultSettings"},"imported":{"type":"boolean","description":"Used internally by the provider to temporarily indicate if the service is being imported, and is reset to false once the import is finished"},"loggingBigqueries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingBigquery:ServiceVclLoggingBigquery"}},"loggingBlobstorages":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingBlobstorage:ServiceVclLoggingBlobstorage"}},"loggingCloudfiles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingCloudfile:ServiceVclLoggingCloudfile"}},"loggingDatadogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingDatadog:ServiceVclLoggingDatadog"}},"loggingDigitaloceans":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingDigitalocean:ServiceVclLoggingDigitalocean"}},"loggingElasticsearches":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingElasticsearch:ServiceVclLoggingElasticsearch"}},"loggingFtps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingFtp:ServiceVclLoggingFtp"}},"loggingGcs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGc:ServiceVclLoggingGc"}},"loggingGooglepubsubs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGooglepubsub:ServiceVclLoggingGooglepubsub"}},"loggingGrafanacloudlogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGrafanacloudlog:ServiceVclLoggingGrafanacloudlog"}},"loggingHerokus":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHerokus:ServiceVclLoggingHerokus"}},"loggingHoneycombs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHoneycomb:ServiceVclLoggingHoneycomb"}},"loggingHttps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHttp:ServiceVclLoggingHttp"}},"loggingKafkas":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingKafka:ServiceVclLoggingKafka"}},"loggingKineses":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingKinese:ServiceVclLoggingKinese"}},"loggingLogentries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLogentry:ServiceVclLoggingLogentry"}},"loggingLogglies":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLoggly:ServiceVclLoggingLoggly"}},"loggingLogshuttles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLogshuttle:ServiceVclLoggingLogshuttle"}},"loggingNewrelicotlps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingNewrelicotlp:ServiceVclLoggingNewrelicotlp"}},"loggingNewrelics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingNewrelic:ServiceVclLoggingNewrelic"}},"loggingOpenstacks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingOpenstack:ServiceVclLoggingOpenstack"}},"loggingPapertrails":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingPapertrail:ServiceVclLoggingPapertrail"}},"loggingS3s":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingS3:ServiceVclLoggingS3"}},"loggingScalyrs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingScalyr:ServiceVclLoggingScalyr"}},"loggingSftps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSftp:ServiceVclLoggingSftp"}},"loggingSplunks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSplunk:ServiceVclLoggingSplunk"}},"loggingSumologics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSumologic:ServiceVclLoggingSumologic"}},"loggingSyslogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSyslog:ServiceVclLoggingSyslog"}},"name":{"type":"string","description":"The unique name for the Service to create"},"productEnablement":{"$ref":"#/types/fastly:index/ServiceVclProductEnablement:ServiceVclProductEnablement"},"rateLimiters":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclRateLimiter:ServiceVclRateLimiter"}},"requestSettings":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclRequestSetting:ServiceVclRequestSetting"}},"responseObjects":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclResponseObject:ServiceVclResponseObject"}},"reuse":{"type":"boolean","description":"Services that are active cannot be destroyed. If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e a service Terraform intends to destroy will instead be deactivated (allowing it to be reused by importing it into another Terraform project). If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, attempting to destroy an active service will cause an error. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"snippets":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclSnippet:ServiceVclSnippet"}},"stage":{"type":"boolean","description":"Conditionally enables new service versions to be staged. If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, all changes made by an \u003cspan pulumi-lang-nodejs=\"`apply`\" pulumi-lang-dotnet=\"`Apply`\" pulumi-lang-go=\"`apply`\" pulumi-lang-python=\"`apply`\" pulumi-lang-yaml=\"`apply`\" pulumi-lang-java=\"`apply`\"\u003e`apply`\u003c/span\u003e step will be staged, even if \u003cspan pulumi-lang-nodejs=\"`apply`\" pulumi-lang-dotnet=\"`Apply`\" pulumi-lang-go=\"`apply`\" pulumi-lang-python=\"`apply`\" pulumi-lang-yaml=\"`apply`\" pulumi-lang-java=\"`apply`\"\u003e`apply`\u003c/span\u003e did not create a new draft version. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"stagedVersion":{"type":"integer","description":"The currently staged version of your Fastly Service"},"staleIfError":{"type":"boolean","description":"Enables serving a stale object if there is an error"},"staleIfErrorTtl":{"type":"integer","description":"The default time-to-live (TTL) for serving the stale object for the version"},"vcls":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclVcl:ServiceVclVcl"}},"versionComment":{"type":"string","description":"Description field for the version"}},"required":["activeVersion","clonedVersion","forceRefresh","imported","name","stagedVersion"],"inputProperties":{"acls":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclAcl:ServiceVclAcl"}},"activate":{"type":"boolean","description":"Conditionally prevents new service versions from being activated. The apply step will create a new draft version but will not activate it if this is set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. Default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e"},"backends":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclBackend:ServiceVclBackend"}},"cacheSettings":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclCacheSetting:ServiceVclCacheSetting"}},"comment":{"type":"string","description":"Description field for the service. Default `Managed by Terraform`"},"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclCondition:ServiceVclCondition"}},"defaultHost":{"type":"string","description":"The default hostname"},"defaultTtl":{"type":"integer","description":"The default Time-to-live (TTL) for requests"},"dictionaries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDictionary:ServiceVclDictionary"}},"directors":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDirector:ServiceVclDirector"}},"domains":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDomain:ServiceVclDomain"},"description":"A set of Domain names to serve as entry points for your Service"},"dynamicsnippets":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDynamicsnippet:ServiceVclDynamicsnippet"}},"forceDestroy":{"type":"boolean","description":"Services that are active cannot be destroyed. In order to destroy the Service, set \u003cspan pulumi-lang-nodejs=\"`forceDestroy`\" pulumi-lang-dotnet=\"`ForceDestroy`\" pulumi-lang-go=\"`forceDestroy`\" pulumi-lang-python=\"`force_destroy`\" pulumi-lang-yaml=\"`forceDestroy`\" pulumi-lang-java=\"`forceDestroy`\"\u003e`force_destroy`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"gzips":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclGzip:ServiceVclGzip"}},"headers":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclHeader:ServiceVclHeader"}},"healthchecks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclHealthcheck:ServiceVclHealthcheck"}},"http3":{"type":"boolean","description":"Enables support for the HTTP/3 (QUIC) protocol"},"imageOptimizerDefaultSettings":{"$ref":"#/types/fastly:index/ServiceVclImageOptimizerDefaultSettings:ServiceVclImageOptimizerDefaultSettings"},"loggingBigqueries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingBigquery:ServiceVclLoggingBigquery"}},"loggingBlobstorages":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingBlobstorage:ServiceVclLoggingBlobstorage"}},"loggingCloudfiles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingCloudfile:ServiceVclLoggingCloudfile"}},"loggingDatadogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingDatadog:ServiceVclLoggingDatadog"}},"loggingDigitaloceans":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingDigitalocean:ServiceVclLoggingDigitalocean"}},"loggingElasticsearches":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingElasticsearch:ServiceVclLoggingElasticsearch"}},"loggingFtps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingFtp:ServiceVclLoggingFtp"}},"loggingGcs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGc:ServiceVclLoggingGc"}},"loggingGooglepubsubs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGooglepubsub:ServiceVclLoggingGooglepubsub"}},"loggingGrafanacloudlogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGrafanacloudlog:ServiceVclLoggingGrafanacloudlog"}},"loggingHerokus":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHerokus:ServiceVclLoggingHerokus"}},"loggingHoneycombs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHoneycomb:ServiceVclLoggingHoneycomb"}},"loggingHttps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHttp:ServiceVclLoggingHttp"}},"loggingKafkas":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingKafka:ServiceVclLoggingKafka"}},"loggingKineses":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingKinese:ServiceVclLoggingKinese"}},"loggingLogentries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLogentry:ServiceVclLoggingLogentry"}},"loggingLogglies":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLoggly:ServiceVclLoggingLoggly"}},"loggingLogshuttles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLogshuttle:ServiceVclLoggingLogshuttle"}},"loggingNewrelicotlps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingNewrelicotlp:ServiceVclLoggingNewrelicotlp"}},"loggingNewrelics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingNewrelic:ServiceVclLoggingNewrelic"}},"loggingOpenstacks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingOpenstack:ServiceVclLoggingOpenstack"}},"loggingPapertrails":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingPapertrail:ServiceVclLoggingPapertrail"}},"loggingS3s":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingS3:ServiceVclLoggingS3"}},"loggingScalyrs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingScalyr:ServiceVclLoggingScalyr"}},"loggingSftps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSftp:ServiceVclLoggingSftp"}},"loggingSplunks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSplunk:ServiceVclLoggingSplunk"}},"loggingSumologics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSumologic:ServiceVclLoggingSumologic"}},"loggingSyslogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSyslog:ServiceVclLoggingSyslog"}},"name":{"type":"string","description":"The unique name for the Service to create"},"productEnablement":{"$ref":"#/types/fastly:index/ServiceVclProductEnablement:ServiceVclProductEnablement"},"rateLimiters":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclRateLimiter:ServiceVclRateLimiter"}},"requestSettings":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclRequestSetting:ServiceVclRequestSetting"}},"responseObjects":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclResponseObject:ServiceVclResponseObject"}},"reuse":{"type":"boolean","description":"Services that are active cannot be destroyed. If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e a service Terraform intends to destroy will instead be deactivated (allowing it to be reused by importing it into another Terraform project). If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, attempting to destroy an active service will cause an error. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"snippets":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclSnippet:ServiceVclSnippet"}},"stage":{"type":"boolean","description":"Conditionally enables new service versions to be staged. If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, all changes made by an \u003cspan pulumi-lang-nodejs=\"`apply`\" pulumi-lang-dotnet=\"`Apply`\" pulumi-lang-go=\"`apply`\" pulumi-lang-python=\"`apply`\" pulumi-lang-yaml=\"`apply`\" pulumi-lang-java=\"`apply`\"\u003e`apply`\u003c/span\u003e step will be staged, even if \u003cspan pulumi-lang-nodejs=\"`apply`\" pulumi-lang-dotnet=\"`Apply`\" pulumi-lang-go=\"`apply`\" pulumi-lang-python=\"`apply`\" pulumi-lang-yaml=\"`apply`\" pulumi-lang-java=\"`apply`\"\u003e`apply`\u003c/span\u003e did not create a new draft version. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"staleIfError":{"type":"boolean","description":"Enables serving a stale object if there is an error"},"staleIfErrorTtl":{"type":"integer","description":"The default time-to-live (TTL) for serving the stale object for the version"},"vcls":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclVcl:ServiceVclVcl"}},"versionComment":{"type":"string","description":"Description field for the version"}},"stateInputs":{"description":"Input properties used for looking up and filtering ServiceVcl resources.\n","properties":{"acls":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclAcl:ServiceVclAcl"}},"activate":{"type":"boolean","description":"Conditionally prevents new service versions from being activated. The apply step will create a new draft version but will not activate it if this is set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. Default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e"},"activeVersion":{"type":"integer","description":"The currently active version of your Fastly Service"},"backends":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclBackend:ServiceVclBackend"}},"cacheSettings":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclCacheSetting:ServiceVclCacheSetting"}},"clonedVersion":{"type":"integer","description":"The latest cloned version by the provider"},"comment":{"type":"string","description":"Description field for the service. Default `Managed by Terraform`"},"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclCondition:ServiceVclCondition"}},"defaultHost":{"type":"string","description":"The default hostname"},"defaultTtl":{"type":"integer","description":"The default Time-to-live (TTL) for requests"},"dictionaries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDictionary:ServiceVclDictionary"}},"directors":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDirector:ServiceVclDirector"}},"domains":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDomain:ServiceVclDomain"},"description":"A set of Domain names to serve as entry points for your Service"},"dynamicsnippets":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDynamicsnippet:ServiceVclDynamicsnippet"}},"forceDestroy":{"type":"boolean","description":"Services that are active cannot be destroyed. In order to destroy the Service, set \u003cspan pulumi-lang-nodejs=\"`forceDestroy`\" pulumi-lang-dotnet=\"`ForceDestroy`\" pulumi-lang-go=\"`forceDestroy`\" pulumi-lang-python=\"`force_destroy`\" pulumi-lang-yaml=\"`forceDestroy`\" pulumi-lang-java=\"`forceDestroy`\"\u003e`force_destroy`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"forceRefresh":{"type":"boolean","description":"Used internally by the provider to temporarily indicate if all resources should call their associated API to update the local state. This is for scenarios where the service version has been reverted outside of Terraform (e.g. via the Fastly UI) and the provider needs to resync the state for a different active version (this is only if \u003cspan pulumi-lang-nodejs=\"`activate`\" pulumi-lang-dotnet=\"`Activate`\" pulumi-lang-go=\"`activate`\" pulumi-lang-python=\"`activate`\" pulumi-lang-yaml=\"`activate`\" pulumi-lang-java=\"`activate`\"\u003e`activate`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)."},"gzips":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclGzip:ServiceVclGzip"}},"headers":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclHeader:ServiceVclHeader"}},"healthchecks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclHealthcheck:ServiceVclHealthcheck"}},"http3":{"type":"boolean","description":"Enables support for the HTTP/3 (QUIC) protocol"},"imageOptimizerDefaultSettings":{"$ref":"#/types/fastly:index/ServiceVclImageOptimizerDefaultSettings:ServiceVclImageOptimizerDefaultSettings"},"imported":{"type":"boolean","description":"Used internally by the provider to temporarily indicate if the service is being imported, and is reset to false once the import is finished"},"loggingBigqueries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingBigquery:ServiceVclLoggingBigquery"}},"loggingBlobstorages":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingBlobstorage:ServiceVclLoggingBlobstorage"}},"loggingCloudfiles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingCloudfile:ServiceVclLoggingCloudfile"}},"loggingDatadogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingDatadog:ServiceVclLoggingDatadog"}},"loggingDigitaloceans":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingDigitalocean:ServiceVclLoggingDigitalocean"}},"loggingElasticsearches":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingElasticsearch:ServiceVclLoggingElasticsearch"}},"loggingFtps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingFtp:ServiceVclLoggingFtp"}},"loggingGcs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGc:ServiceVclLoggingGc"}},"loggingGooglepubsubs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGooglepubsub:ServiceVclLoggingGooglepubsub"}},"loggingGrafanacloudlogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGrafanacloudlog:ServiceVclLoggingGrafanacloudlog"}},"loggingHerokus":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHerokus:ServiceVclLoggingHerokus"}},"loggingHoneycombs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHoneycomb:ServiceVclLoggingHoneycomb"}},"loggingHttps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHttp:ServiceVclLoggingHttp"}},"loggingKafkas":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingKafka:ServiceVclLoggingKafka"}},"loggingKineses":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingKinese:ServiceVclLoggingKinese"}},"loggingLogentries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLogentry:ServiceVclLoggingLogentry"}},"loggingLogglies":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLoggly:ServiceVclLoggingLoggly"}},"loggingLogshuttles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLogshuttle:ServiceVclLoggingLogshuttle"}},"loggingNewrelicotlps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingNewrelicotlp:ServiceVclLoggingNewrelicotlp"}},"loggingNewrelics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingNewrelic:ServiceVclLoggingNewrelic"}},"loggingOpenstacks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingOpenstack:ServiceVclLoggingOpenstack"}},"loggingPapertrails":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingPapertrail:ServiceVclLoggingPapertrail"}},"loggingS3s":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingS3:ServiceVclLoggingS3"}},"loggingScalyrs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingScalyr:ServiceVclLoggingScalyr"}},"loggingSftps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSftp:ServiceVclLoggingSftp"}},"loggingSplunks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSplunk:ServiceVclLoggingSplunk"}},"loggingSumologics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSumologic:ServiceVclLoggingSumologic"}},"loggingSyslogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSyslog:ServiceVclLoggingSyslog"}},"name":{"type":"string","description":"The unique name for the Service to create"},"productEnablement":{"$ref":"#/types/fastly:index/ServiceVclProductEnablement:ServiceVclProductEnablement"},"rateLimiters":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclRateLimiter:ServiceVclRateLimiter"}},"requestSettings":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclRequestSetting:ServiceVclRequestSetting"}},"responseObjects":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclResponseObject:ServiceVclResponseObject"}},"reuse":{"type":"boolean","description":"Services that are active cannot be destroyed. If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e a service Terraform intends to destroy will instead be deactivated (allowing it to be reused by importing it into another Terraform project). If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, attempting to destroy an active service will cause an error. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"snippets":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclSnippet:ServiceVclSnippet"}},"stage":{"type":"boolean","description":"Conditionally enables new service versions to be staged. If set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, all changes made by an \u003cspan pulumi-lang-nodejs=\"`apply`\" pulumi-lang-dotnet=\"`Apply`\" pulumi-lang-go=\"`apply`\" pulumi-lang-python=\"`apply`\" pulumi-lang-yaml=\"`apply`\" pulumi-lang-java=\"`apply`\"\u003e`apply`\u003c/span\u003e step will be staged, even if \u003cspan pulumi-lang-nodejs=\"`apply`\" pulumi-lang-dotnet=\"`Apply`\" pulumi-lang-go=\"`apply`\" pulumi-lang-python=\"`apply`\" pulumi-lang-yaml=\"`apply`\" pulumi-lang-java=\"`apply`\"\u003e`apply`\u003c/span\u003e did not create a new draft version. Default \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e"},"stagedVersion":{"type":"integer","description":"The currently staged version of your Fastly Service"},"staleIfError":{"type":"boolean","description":"Enables serving a stale object if there is an error"},"staleIfErrorTtl":{"type":"integer","description":"The default time-to-live (TTL) for serving the stale object for the version"},"vcls":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclVcl:ServiceVclVcl"}},"versionComment":{"type":"string","description":"Description field for the version"}},"type":"object"}},"fastly:index/tlsActivation:TlsActivation":{"description":"Enables TLS on a domain using a specified custom TLS certificate.\n\n\u003e **Note:** The Fastly service must be provisioned _prior_ to enabling TLS on it. This can be achieved in Pulumi using \u003cspan pulumi-lang-nodejs=\"`dependsOn`\" pulumi-lang-dotnet=\"`DependsOn`\" pulumi-lang-go=\"`dependsOn`\" pulumi-lang-python=\"`depends_on`\" pulumi-lang-yaml=\"`dependsOn`\" pulumi-lang-java=\"`dependsOn`\"\u003e`depends_on`\u003c/span\u003e.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n    name: \"my-service\",\n    domains: [{\n        name: \"example.com\",\n    }],\n    backends: [{\n        address: \"127.0.0.1\",\n        name: \"localhost\",\n    }],\n    forceDestroy: true,\n});\nconst demoTlsPrivateKey = new fastly.TlsPrivateKey(\"demo\", {\n    keyPem: \"...\",\n    name: \"demo-key\",\n});\nconst demoTlsCertificate = new fastly.TlsCertificate(\"demo\", {\n    certificateBody: \"...\",\n    name: \"demo-cert\",\n}, {\n    dependsOn: [demoTlsPrivateKey],\n});\nconst test = new fastly.TlsActivation(\"test\", {\n    certificateId: demoTlsCertificate.id,\n    domain: \"example.com\",\n}, {\n    dependsOn: [demo],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n    name=\"my-service\",\n    domains=[{\n        \"name\": \"example.com\",\n    }],\n    backends=[{\n        \"address\": \"127.0.0.1\",\n        \"name\": \"localhost\",\n    }],\n    force_destroy=True)\ndemo_tls_private_key = fastly.TlsPrivateKey(\"demo\",\n    key_pem=\"...\",\n    name=\"demo-key\")\ndemo_tls_certificate = fastly.TlsCertificate(\"demo\",\n    certificate_body=\"...\",\n    name=\"demo-cert\",\n    opts = pulumi.ResourceOptions(depends_on=[demo_tls_private_key]))\ntest = fastly.TlsActivation(\"test\",\n    certificate_id=demo_tls_certificate.id,\n    domain=\"example.com\",\n    opts = pulumi.ResourceOptions(depends_on=[demo]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demo = new Fastly.ServiceVcl(\"demo\", new()\n    {\n        Name = \"my-service\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"example.com\",\n            },\n        },\n        Backends = new[]\n        {\n            new Fastly.Inputs.ServiceVclBackendArgs\n            {\n                Address = \"127.0.0.1\",\n                Name = \"localhost\",\n            },\n        },\n        ForceDestroy = true,\n    });\n\n    var demoTlsPrivateKey = new Fastly.TlsPrivateKey(\"demo\", new()\n    {\n        KeyPem = \"...\",\n        Name = \"demo-key\",\n    });\n\n    var demoTlsCertificate = new Fastly.TlsCertificate(\"demo\", new()\n    {\n        CertificateBody = \"...\",\n        Name = \"demo-cert\",\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            demoTlsPrivateKey,\n        },\n    });\n\n    var test = new Fastly.TlsActivation(\"test\", new()\n    {\n        CertificateId = demoTlsCertificate.Id,\n        Domain = \"example.com\",\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            demo,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemo, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tName: pulumi.String(\"my-service\"),\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName:    pulumi.String(\"localhost\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdemoTlsPrivateKey, err := fastly.NewTlsPrivateKey(ctx, \"demo\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: pulumi.String(\"...\"),\n\t\t\tName:   pulumi.String(\"demo-key\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdemoTlsCertificate, err := fastly.NewTlsCertificate(ctx, \"demo\", \u0026fastly.TlsCertificateArgs{\n\t\t\tCertificateBody: pulumi.String(\"...\"),\n\t\t\tName:            pulumi.String(\"demo-cert\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdemoTlsPrivateKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"test\", \u0026fastly.TlsActivationArgs{\n\t\t\tCertificateId: demoTlsCertificate.ID(),\n\t\t\tDomain:        pulumi.String(\"example.com\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdemo,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.TlsPrivateKey;\nimport com.pulumi.fastly.TlsPrivateKeyArgs;\nimport com.pulumi.fastly.TlsCertificate;\nimport com.pulumi.fastly.TlsCertificateArgs;\nimport com.pulumi.fastly.TlsActivation;\nimport com.pulumi.fastly.TlsActivationArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder()\n            .name(\"my-service\")\n            .domains(ServiceVclDomainArgs.builder()\n                .name(\"example.com\")\n                .build())\n            .backends(ServiceVclBackendArgs.builder()\n                .address(\"127.0.0.1\")\n                .name(\"localhost\")\n                .build())\n            .forceDestroy(true)\n            .build());\n\n        var demoTlsPrivateKey = new TlsPrivateKey(\"demoTlsPrivateKey\", TlsPrivateKeyArgs.builder()\n            .keyPem(\"...\")\n            .name(\"demo-key\")\n            .build());\n\n        var demoTlsCertificate = new TlsCertificate(\"demoTlsCertificate\", TlsCertificateArgs.builder()\n            .certificateBody(\"...\")\n            .name(\"demo-cert\")\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(demoTlsPrivateKey)\n                .build());\n\n        var test = new TlsActivation(\"test\", TlsActivationArgs.builder()\n            .certificateId(demoTlsCertificate.id())\n            .domain(\"example.com\")\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(demo)\n                .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demo:\n    type: fastly:ServiceVcl\n    properties:\n      name: my-service\n      domains:\n        - name: example.com\n      backends:\n        - address: 127.0.0.1\n          name: localhost\n      forceDestroy: true\n  demoTlsPrivateKey:\n    type: fastly:TlsPrivateKey\n    name: demo\n    properties:\n      keyPem: '...'\n      name: demo-key\n  demoTlsCertificate:\n    type: fastly:TlsCertificate\n    name: demo\n    properties:\n      certificateBody: '...'\n      name: demo-cert\n    options:\n      dependsOn:\n        - ${demoTlsPrivateKey}\n  test:\n    type: fastly:TlsActivation\n    properties:\n      certificateId: ${demoTlsCertificate.id}\n      domain: example.com\n    options:\n      dependsOn:\n        - ${demo}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\u003e **Warning:** Updating the \u003cspan pulumi-lang-nodejs=\"`fastly.TlsPrivateKey`\" pulumi-lang-dotnet=\"`fastly.TlsPrivateKey`\" pulumi-lang-go=\"`TlsPrivateKey`\" pulumi-lang-python=\"`TlsPrivateKey`\" pulumi-lang-yaml=\"`fastly.TlsPrivateKey`\" pulumi-lang-java=\"`fastly.TlsPrivateKey`\"\u003e`fastly.TlsPrivateKey`\u003c/span\u003e/\u003cspan pulumi-lang-nodejs=\"`fastly.TlsCertificate`\" pulumi-lang-dotnet=\"`fastly.TlsCertificate`\" pulumi-lang-go=\"`TlsCertificate`\" pulumi-lang-python=\"`TlsCertificate`\" pulumi-lang-yaml=\"`fastly.TlsCertificate`\" pulumi-lang-java=\"`fastly.TlsCertificate`\"\u003e`fastly.TlsCertificate`\u003c/span\u003e resources should be done in multiple plan/apply steps to avoid potential downtime. The new certificate and associated private key must first be created so they exist alongside the currently active resources. Once the new resources have been created, then the \u003cspan pulumi-lang-nodejs=\"`fastly.TlsActivation`\" pulumi-lang-dotnet=\"`fastly.TlsActivation`\" pulumi-lang-go=\"`TlsActivation`\" pulumi-lang-python=\"`TlsActivation`\" pulumi-lang-yaml=\"`fastly.TlsActivation`\" pulumi-lang-java=\"`fastly.TlsActivation`\"\u003e`fastly.TlsActivation`\u003c/span\u003e can be updated to point to the new certificate. Finally, the original key/certificate resources can be deleted.\n\n## Import\n\nA TLS activation can be imported using its ID, e.g.\n\n```sh\n$ pulumi import fastly:index/tlsActivation:TlsActivation demo xxxxxxxx\n```\n\n","properties":{"certificateId":{"type":"string","description":"ID of certificate to use. Must have the \u003cspan pulumi-lang-nodejs=\"`domain`\" pulumi-lang-dotnet=\"`Domain`\" pulumi-lang-go=\"`domain`\" pulumi-lang-python=\"`domain`\" pulumi-lang-yaml=\"`domain`\" pulumi-lang-java=\"`domain`\"\u003e`domain`\u003c/span\u003e specified in the certificate's Subject Alternative Names.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration to be used to terminate TLS traffic, or use the default one if missing.\n"},"createdAt":{"type":"string","description":"Time-stamp (GMT) when TLS was enabled.\n"},"domain":{"type":"string","description":"Domain to enable TLS on. Must be assigned to an existing Fastly Service.\n"},"mutualAuthenticationId":{"type":"string","description":"An alphanumeric string identifying a mutual authentication.\n"}},"required":["certificateId","configurationId","createdAt","domain","mutualAuthenticationId"],"inputProperties":{"certificateId":{"type":"string","description":"ID of certificate to use. Must have the \u003cspan pulumi-lang-nodejs=\"`domain`\" pulumi-lang-dotnet=\"`Domain`\" pulumi-lang-go=\"`domain`\" pulumi-lang-python=\"`domain`\" pulumi-lang-yaml=\"`domain`\" pulumi-lang-java=\"`domain`\"\u003e`domain`\u003c/span\u003e specified in the certificate's Subject Alternative Names.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration to be used to terminate TLS traffic, or use the default one if missing.\n","willReplaceOnChanges":true},"domain":{"type":"string","description":"Domain to enable TLS on. Must be assigned to an existing Fastly Service.\n","willReplaceOnChanges":true},"mutualAuthenticationId":{"type":"string","description":"An alphanumeric string identifying a mutual authentication.\n"}},"requiredInputs":["certificateId","domain"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsActivation resources.\n","properties":{"certificateId":{"type":"string","description":"ID of certificate to use. Must have the \u003cspan pulumi-lang-nodejs=\"`domain`\" pulumi-lang-dotnet=\"`Domain`\" pulumi-lang-go=\"`domain`\" pulumi-lang-python=\"`domain`\" pulumi-lang-yaml=\"`domain`\" pulumi-lang-java=\"`domain`\"\u003e`domain`\u003c/span\u003e specified in the certificate's Subject Alternative Names.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration to be used to terminate TLS traffic, or use the default one if missing.\n","willReplaceOnChanges":true},"createdAt":{"type":"string","description":"Time-stamp (GMT) when TLS was enabled.\n"},"domain":{"type":"string","description":"Domain to enable TLS on. Must be assigned to an existing Fastly Service.\n","willReplaceOnChanges":true},"mutualAuthenticationId":{"type":"string","description":"An alphanumeric string identifying a mutual authentication.\n"}},"type":"object"}},"fastly:index/tlsCertificate:TlsCertificate":{"description":"Uploads a custom TLS certificate to Fastly to be used to terminate TLS traffic.\n\n\u003e Each TLS certificate **must** have its corresponding private key uploaded _prior_ to uploading the certificate. This\ncan be achieved in Pulumi using \u003cspan pulumi-lang-nodejs=\"`dependsOn`\" pulumi-lang-dotnet=\"`DependsOn`\" pulumi-lang-go=\"`dependsOn`\" pulumi-lang-python=\"`depends_on`\" pulumi-lang-yaml=\"`dependsOn`\" pulumi-lang-java=\"`dependsOn`\"\u003e`depends_on`\u003c/span\u003e\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as tls from \"@pulumi/tls\";\n\nconst key = new tls.PrivateKey(\"key\", {algorithm: \"RSA\"});\nconst cert = new tls.SelfSignedCert(\"cert\", {\n    keyAlgorithm: key.algorithm,\n    privateKeyPem: key.privateKeyPem,\n    subject: [{\n        commonName: \"example.com\",\n    }],\n    isCaCertificate: true,\n    validityPeriodHours: 360,\n    allowedUses: [\n        \"cert_signing\",\n        \"server_auth\",\n    ],\n    dnsNames: [\"example.com\"],\n});\nconst keyTlsPrivateKey = new fastly.TlsPrivateKey(\"key\", {\n    keyPem: key.privateKeyPem,\n    name: \"tf-demo\",\n});\nconst example = new fastly.TlsCertificate(\"example\", {\n    name: \"tf-demo\",\n    certificateBody: cert.certPem,\n}, {\n    dependsOn: [keyTlsPrivateKey],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_tls as tls\n\nkey = tls.PrivateKey(\"key\", algorithm=\"RSA\")\ncert = tls.SelfSignedCert(\"cert\",\n    key_algorithm=key.algorithm,\n    private_key_pem=key.private_key_pem,\n    subject=[{\n        \"commonName\": \"example.com\",\n    }],\n    is_ca_certificate=True,\n    validity_period_hours=360,\n    allowed_uses=[\n        \"cert_signing\",\n        \"server_auth\",\n    ],\n    dns_names=[\"example.com\"])\nkey_tls_private_key = fastly.TlsPrivateKey(\"key\",\n    key_pem=key.private_key_pem,\n    name=\"tf-demo\")\nexample = fastly.TlsCertificate(\"example\",\n    name=\"tf-demo\",\n    certificate_body=cert.cert_pem,\n    opts = pulumi.ResourceOptions(depends_on=[key_tls_private_key]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var key = new Tls.PrivateKey(\"key\", new()\n    {\n        Algorithm = \"RSA\",\n    });\n\n    var cert = new Tls.SelfSignedCert(\"cert\", new()\n    {\n        KeyAlgorithm = key.Algorithm,\n        PrivateKeyPem = key.PrivateKeyPem,\n        Subject = new[]\n        {\n            \n            {\n                { \"commonName\", \"example.com\" },\n            },\n        },\n        IsCaCertificate = true,\n        ValidityPeriodHours = 360,\n        AllowedUses = new[]\n        {\n            \"cert_signing\",\n            \"server_auth\",\n        },\n        DnsNames = new[]\n        {\n            \"example.com\",\n        },\n    });\n\n    var keyTlsPrivateKey = new Fastly.TlsPrivateKey(\"key\", new()\n    {\n        KeyPem = key.PrivateKeyPem,\n        Name = \"tf-demo\",\n    });\n\n    var example = new Fastly.TlsCertificate(\"example\", new()\n    {\n        Name = \"tf-demo\",\n        CertificateBody = cert.CertPem,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            keyTlsPrivateKey,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v5/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkey, err := tls.NewPrivateKey(ctx, \"key\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcert, err := tls.NewSelfSignedCert(ctx, \"cert\", \u0026tls.SelfSignedCertArgs{\n\t\t\tKeyAlgorithm:  key.Algorithm,\n\t\t\tPrivateKeyPem: key.PrivateKeyPem,\n\t\t\tSubject: tls.SelfSignedCertSubjectArgs{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"commonName\": \"example.com\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tIsCaCertificate:     pulumi.Bool(true),\n\t\t\tValidityPeriodHours: pulumi.Int(360),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"cert_signing\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyTlsPrivateKey, err := fastly.NewTlsPrivateKey(ctx, \"key\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: key.PrivateKeyPem,\n\t\t\tName:   pulumi.String(\"tf-demo\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsCertificate(ctx, \"example\", \u0026fastly.TlsCertificateArgs{\n\t\t\tName:            pulumi.String(\"tf-demo\"),\n\t\t\tCertificateBody: cert.CertPem,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkeyTlsPrivateKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.tls.SelfSignedCert;\nimport com.pulumi.tls.SelfSignedCertArgs;\nimport com.pulumi.fastly.TlsPrivateKey;\nimport com.pulumi.fastly.TlsPrivateKeyArgs;\nimport com.pulumi.fastly.TlsCertificate;\nimport com.pulumi.fastly.TlsCertificateArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var key = new PrivateKey(\"key\", PrivateKeyArgs.builder()\n            .algorithm(\"RSA\")\n            .build());\n\n        var cert = new SelfSignedCert(\"cert\", SelfSignedCertArgs.builder()\n            .keyAlgorithm(key.algorithm())\n            .privateKeyPem(key.privateKeyPem())\n            .subject(SelfSignedCertSubjectArgs.builder()\n                .commonName(\"example.com\")\n                .build())\n            .isCaCertificate(true)\n            .validityPeriodHours(360)\n            .allowedUses(            \n                \"cert_signing\",\n                \"server_auth\")\n            .dnsNames(\"example.com\")\n            .build());\n\n        var keyTlsPrivateKey = new TlsPrivateKey(\"keyTlsPrivateKey\", TlsPrivateKeyArgs.builder()\n            .keyPem(key.privateKeyPem())\n            .name(\"tf-demo\")\n            .build());\n\n        var example = new TlsCertificate(\"example\", TlsCertificateArgs.builder()\n            .name(\"tf-demo\")\n            .certificateBody(cert.certPem())\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(keyTlsPrivateKey)\n                .build());\n\n    }\n}\n```\n```yaml\nresources:\n  key:\n    type: tls:PrivateKey\n    properties:\n      algorithm: RSA\n  cert:\n    type: tls:SelfSignedCert\n    properties:\n      keyAlgorithm: ${key.algorithm}\n      privateKeyPem: ${key.privateKeyPem}\n      subject:\n        - commonName: example.com\n      isCaCertificate: true\n      validityPeriodHours: 360\n      allowedUses:\n        - cert_signing\n        - server_auth\n      dnsNames:\n        - example.com\n  keyTlsPrivateKey:\n    type: fastly:TlsPrivateKey\n    name: key\n    properties:\n      keyPem: ${key.privateKeyPem}\n      name: tf-demo\n  example:\n    type: fastly:TlsCertificate\n    properties:\n      name: tf-demo\n      certificateBody: ${cert.certPem}\n    options:\n      dependsOn:\n        - ${keyTlsPrivateKey}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Updating certificates\n\nThere are three scenarios for updating a certificate:\n\n1. The certificate is about to expire but the private key stays the same.\n2. The certificate is about to expire but the private key is changing.\n3. The domains on the certificate are changing.\n\nIn the first scenario you only need to update the \u003cspan pulumi-lang-nodejs=\"`certificateBody`\" pulumi-lang-dotnet=\"`CertificateBody`\" pulumi-lang-go=\"`certificateBody`\" pulumi-lang-python=\"`certificate_body`\" pulumi-lang-yaml=\"`certificateBody`\" pulumi-lang-java=\"`certificateBody`\"\u003e`certificate_body`\u003c/span\u003e attribute of the \u003cspan pulumi-lang-nodejs=\"`fastly.TlsCertificate`\" pulumi-lang-dotnet=\"`fastly.TlsCertificate`\" pulumi-lang-go=\"`TlsCertificate`\" pulumi-lang-python=\"`TlsCertificate`\" pulumi-lang-yaml=\"`fastly.TlsCertificate`\" pulumi-lang-java=\"`fastly.TlsCertificate`\"\u003e`fastly.TlsCertificate`\u003c/span\u003e resource, while the other scenarios require a new private key (\u003cspan pulumi-lang-nodejs=\"`fastly.TlsPrivateKey`\" pulumi-lang-dotnet=\"`fastly.TlsPrivateKey`\" pulumi-lang-go=\"`TlsPrivateKey`\" pulumi-lang-python=\"`TlsPrivateKey`\" pulumi-lang-yaml=\"`fastly.TlsPrivateKey`\" pulumi-lang-java=\"`fastly.TlsPrivateKey`\"\u003e`fastly.TlsPrivateKey`\u003c/span\u003e) and certificate (\u003cspan pulumi-lang-nodejs=\"`fastly.TlsCertificate`\" pulumi-lang-dotnet=\"`fastly.TlsCertificate`\" pulumi-lang-go=\"`TlsCertificate`\" pulumi-lang-python=\"`TlsCertificate`\" pulumi-lang-yaml=\"`fastly.TlsCertificate`\" pulumi-lang-java=\"`fastly.TlsCertificate`\"\u003e`fastly.TlsCertificate`\u003c/span\u003e) to be generated.\n\nWhen updating both the \u003cspan pulumi-lang-nodejs=\"`fastly.TlsPrivateKey`\" pulumi-lang-dotnet=\"`fastly.TlsPrivateKey`\" pulumi-lang-go=\"`TlsPrivateKey`\" pulumi-lang-python=\"`TlsPrivateKey`\" pulumi-lang-yaml=\"`fastly.TlsPrivateKey`\" pulumi-lang-java=\"`fastly.TlsPrivateKey`\"\u003e`fastly.TlsPrivateKey`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`fastly.TlsCertificate`\" pulumi-lang-dotnet=\"`fastly.TlsCertificate`\" pulumi-lang-go=\"`TlsCertificate`\" pulumi-lang-python=\"`TlsCertificate`\" pulumi-lang-yaml=\"`fastly.TlsCertificate`\" pulumi-lang-java=\"`fastly.TlsCertificate`\"\u003e`fastly.TlsCertificate`\u003c/span\u003e resources, they should be done in multiple plan/apply steps to avoid potential downtime. The new certificate and associated private key must first be created so they exist alongside the currently active resources. Once the new resources have been created, then the \u003cspan pulumi-lang-nodejs=\"`fastly.TlsActivation`\" pulumi-lang-dotnet=\"`fastly.TlsActivation`\" pulumi-lang-go=\"`TlsActivation`\" pulumi-lang-python=\"`TlsActivation`\" pulumi-lang-yaml=\"`fastly.TlsActivation`\" pulumi-lang-java=\"`fastly.TlsActivation`\"\u003e`fastly.TlsActivation`\u003c/span\u003e can be updated to point to the new certificate. Finally, the original key/certificate resources can be deleted.\n\n## Import\n\nA certificate can be imported using its Fastly certificate ID, e.g.\n\n```sh\n$ pulumi import fastly:index/tlsCertificate:TlsCertificate demo xxxxxxxxxxx\n```\n\n","properties":{"certificateBody":{"type":"string","description":"PEM-formatted certificate, optionally including any intermediary certificates.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when the certificate was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"All the domains (including wildcard domains) that are listed in the certificate's Subject Alternative Names (SAN) list.\n"},"issuedTo":{"type":"string","description":"The hostname for which a certificate was issued.\n"},"issuer":{"type":"string","description":"The certificate authority that issued the certificate.\n"},"name":{"type":"string","description":"Human-readable name used to identify the certificate. Defaults to the certificate's Common Name or first Subject Alternative Name entry.\n"},"replace":{"type":"boolean","description":"A recommendation from Fastly indicating the key associated with this certificate is in need of rotation.\n"},"serialNumber":{"type":"string","description":"A value assigned by the issuer that is unique to a certificate.\n"},"signatureAlgorithm":{"type":"string","description":"The algorithm used to sign the certificate.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the certificate was last updated.\n"}},"required":["certificateBody","createdAt","domains","issuedTo","issuer","name","replace","serialNumber","signatureAlgorithm","updatedAt"],"inputProperties":{"certificateBody":{"type":"string","description":"PEM-formatted certificate, optionally including any intermediary certificates.\n"},"name":{"type":"string","description":"Human-readable name used to identify the certificate. Defaults to the certificate's Common Name or first Subject Alternative Name entry.\n"}},"requiredInputs":["certificateBody"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsCertificate resources.\n","properties":{"certificateBody":{"type":"string","description":"PEM-formatted certificate, optionally including any intermediary certificates.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when the certificate was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"All the domains (including wildcard domains) that are listed in the certificate's Subject Alternative Names (SAN) list.\n"},"issuedTo":{"type":"string","description":"The hostname for which a certificate was issued.\n"},"issuer":{"type":"string","description":"The certificate authority that issued the certificate.\n"},"name":{"type":"string","description":"Human-readable name used to identify the certificate. Defaults to the certificate's Common Name or first Subject Alternative Name entry.\n"},"replace":{"type":"boolean","description":"A recommendation from Fastly indicating the key associated with this certificate is in need of rotation.\n"},"serialNumber":{"type":"string","description":"A value assigned by the issuer that is unique to a certificate.\n"},"signatureAlgorithm":{"type":"string","description":"The algorithm used to sign the certificate.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the certificate was last updated.\n"}},"type":"object"}},"fastly:index/tlsMutualAuthentication:TlsMutualAuthentication":{"description":"The Mutual TLS API allows for client-to-server authentication using client-side X.509 authentication.\n\nThe main Mutual Authentication object represents the certificate bundle and other configurations which support Mutual TLS for your domains.\n\nMutual TLS can be added to existing TLS activations to allow for client-to-server authentication. In order to use mutual TLS, you must already have active server-side TLS using either custom certificates or an enabled Fastly-managed subscription.\n\nThe examples below demonstrate how to use Mutual Authentication along with a TLS Subscription. Refer to the \u003cspan pulumi-lang-nodejs=\"`fastly.TlsSubscription`\" pulumi-lang-dotnet=\"`fastly.TlsSubscription`\" pulumi-lang-go=\"`TlsSubscription`\" pulumi-lang-python=\"`TlsSubscription`\" pulumi-lang-yaml=\"`fastly.TlsSubscription`\" pulumi-lang-java=\"`fastly.TlsSubscription`\"\u003e`fastly.TlsSubscription`\u003c/span\u003e resource documentation for a deeper explanation of that code.\n\n","properties":{"activationIds":{"type":"array","items":{"type":"string"},"description":"List of TLS Activation IDs\n"},"certBundle":{"type":"string","description":"One or more certificates. Enter each individual certificate blob on a new line. Must be PEM-formatted.\n"},"createdAt":{"type":"string","description":"Date and time in ISO 8601 format.\n"},"enforced":{"type":"boolean","description":"Determines whether Mutual TLS will fail closed (enforced) or fail open. A true value will require a successful Mutual TLS handshake for the connection to continue and will fail closed if unsuccessful. A false value will fail open and allow the connection to proceed (if this attribute is not set we default to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"include":{"type":"string","description":"A comma-separated list used by the Terraform provider during a state refresh to return more data related to your mutual authentication from the Fastly API (permitted values: \u003cspan pulumi-lang-nodejs=\"`tlsActivations`\" pulumi-lang-dotnet=\"`TlsActivations`\" pulumi-lang-go=\"`tlsActivations`\" pulumi-lang-python=\"`tls_activations`\" pulumi-lang-yaml=\"`tlsActivations`\" pulumi-lang-java=\"`tlsActivations`\"\u003e`tls_activations`\u003c/span\u003e).\n"},"name":{"type":"string","description":"A custom name for your mutual authentication. If name is not supplied we will auto-generate one.\n"},"tlsActivations":{"type":"array","items":{"type":"string"},"description":"List of alphanumeric strings identifying TLS activations.\n"},"updatedAt":{"type":"string","description":"Date and time in ISO 8601 format.\n"}},"required":["certBundle","createdAt","enforced","name","tlsActivations","updatedAt"],"inputProperties":{"activationIds":{"type":"array","items":{"type":"string"},"description":"List of TLS Activation IDs\n"},"certBundle":{"type":"string","description":"One or more certificates. Enter each individual certificate blob on a new line. Must be PEM-formatted.\n"},"enforced":{"type":"boolean","description":"Determines whether Mutual TLS will fail closed (enforced) or fail open. A true value will require a successful Mutual TLS handshake for the connection to continue and will fail closed if unsuccessful. A false value will fail open and allow the connection to proceed (if this attribute is not set we default to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"include":{"type":"string","description":"A comma-separated list used by the Terraform provider during a state refresh to return more data related to your mutual authentication from the Fastly API (permitted values: \u003cspan pulumi-lang-nodejs=\"`tlsActivations`\" pulumi-lang-dotnet=\"`TlsActivations`\" pulumi-lang-go=\"`tlsActivations`\" pulumi-lang-python=\"`tls_activations`\" pulumi-lang-yaml=\"`tlsActivations`\" pulumi-lang-java=\"`tlsActivations`\"\u003e`tls_activations`\u003c/span\u003e).\n"},"name":{"type":"string","description":"A custom name for your mutual authentication. If name is not supplied we will auto-generate one.\n"}},"requiredInputs":["certBundle"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsMutualAuthentication resources.\n","properties":{"activationIds":{"type":"array","items":{"type":"string"},"description":"List of TLS Activation IDs\n"},"certBundle":{"type":"string","description":"One or more certificates. Enter each individual certificate blob on a new line. Must be PEM-formatted.\n"},"createdAt":{"type":"string","description":"Date and time in ISO 8601 format.\n"},"enforced":{"type":"boolean","description":"Determines whether Mutual TLS will fail closed (enforced) or fail open. A true value will require a successful Mutual TLS handshake for the connection to continue and will fail closed if unsuccessful. A false value will fail open and allow the connection to proceed (if this attribute is not set we default to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"include":{"type":"string","description":"A comma-separated list used by the Terraform provider during a state refresh to return more data related to your mutual authentication from the Fastly API (permitted values: \u003cspan pulumi-lang-nodejs=\"`tlsActivations`\" pulumi-lang-dotnet=\"`TlsActivations`\" pulumi-lang-go=\"`tlsActivations`\" pulumi-lang-python=\"`tls_activations`\" pulumi-lang-yaml=\"`tlsActivations`\" pulumi-lang-java=\"`tlsActivations`\"\u003e`tls_activations`\u003c/span\u003e).\n"},"name":{"type":"string","description":"A custom name for your mutual authentication. If name is not supplied we will auto-generate one.\n"},"tlsActivations":{"type":"array","items":{"type":"string"},"description":"List of alphanumeric strings identifying TLS activations.\n"},"updatedAt":{"type":"string","description":"Date and time in ISO 8601 format.\n"}},"type":"object"}},"fastly:index/tlsPlatformCertificate:TlsPlatformCertificate":{"description":"Uploads a TLS certificate to the Fastly Platform TLS service.\n\n\u003e Each TLS certificate **must** have its corresponding private key uploaded _prior_ to uploading the certificate. This\ncan be achieved in Pulumi using \u003cspan pulumi-lang-nodejs=\"`dependsOn`\" pulumi-lang-dotnet=\"`DependsOn`\" pulumi-lang-go=\"`dependsOn`\" pulumi-lang-python=\"`depends_on`\" pulumi-lang-yaml=\"`dependsOn`\" pulumi-lang-java=\"`dependsOn`\"\u003e`depends_on`\u003c/span\u003e\n\n## Example Usage\n\nBasic usage with self-signed CA:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as tls from \"@pulumi/tls\";\n\nconst caKey = new tls.PrivateKey(\"ca_key\", {algorithm: \"RSA\"});\nconst key = new tls.PrivateKey(\"key\", {algorithm: \"RSA\"});\nconst ca = new tls.SelfSignedCert(\"ca\", {\n    keyAlgorithm: caKey.algorithm,\n    privateKeyPem: caKey.privateKeyPem,\n    subject: [{\n        commonName: \"Example CA\",\n    }],\n    isCaCertificate: true,\n    validityPeriodHours: 360,\n    allowedUses: [\n        \"cert_signing\",\n        \"server_auth\",\n    ],\n});\nconst example = new tls.CertRequest(\"example\", {\n    keyAlgorithm: key.algorithm,\n    privateKeyPem: key.privateKeyPem,\n    subject: [{\n        commonName: \"example.com\",\n    }],\n    dnsNames: [\n        \"example.com\",\n        \"www.example.com\",\n    ],\n});\nconst cert = new tls.LocallySignedCert(\"cert\", {\n    certRequestPem: example.certRequestPem,\n    caKeyAlgorithm: caKey.algorithm,\n    caPrivateKeyPem: caKey.privateKeyPem,\n    caCertPem: ca.certPem,\n    validityPeriodHours: 360,\n    allowedUses: [\n        \"cert_signing\",\n        \"server_auth\",\n    ],\n});\nconst config = fastly.getTlsConfiguration({\n    tlsService: \"PLATFORM\",\n});\nconst keyTlsPrivateKey = new fastly.TlsPrivateKey(\"key\", {\n    keyPem: key.privateKeyPem,\n    name: \"tf-demo\",\n});\nconst certTlsPlatformCertificate = new fastly.TlsPlatformCertificate(\"cert\", {\n    certificateBody: cert.certPem,\n    intermediatesBlob: ca.certPem,\n    configurationId: config.then(config =\u003e config.id),\n    allowUntrustedRoot: true,\n}, {\n    dependsOn: [keyTlsPrivateKey],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_tls as tls\n\nca_key = tls.PrivateKey(\"ca_key\", algorithm=\"RSA\")\nkey = tls.PrivateKey(\"key\", algorithm=\"RSA\")\nca = tls.SelfSignedCert(\"ca\",\n    key_algorithm=ca_key.algorithm,\n    private_key_pem=ca_key.private_key_pem,\n    subject=[{\n        \"commonName\": \"Example CA\",\n    }],\n    is_ca_certificate=True,\n    validity_period_hours=360,\n    allowed_uses=[\n        \"cert_signing\",\n        \"server_auth\",\n    ])\nexample = tls.CertRequest(\"example\",\n    key_algorithm=key.algorithm,\n    private_key_pem=key.private_key_pem,\n    subject=[{\n        \"commonName\": \"example.com\",\n    }],\n    dns_names=[\n        \"example.com\",\n        \"www.example.com\",\n    ])\ncert = tls.LocallySignedCert(\"cert\",\n    cert_request_pem=example.cert_request_pem,\n    ca_key_algorithm=ca_key.algorithm,\n    ca_private_key_pem=ca_key.private_key_pem,\n    ca_cert_pem=ca.cert_pem,\n    validity_period_hours=360,\n    allowed_uses=[\n        \"cert_signing\",\n        \"server_auth\",\n    ])\nconfig = fastly.get_tls_configuration(tls_service=\"PLATFORM\")\nkey_tls_private_key = fastly.TlsPrivateKey(\"key\",\n    key_pem=key.private_key_pem,\n    name=\"tf-demo\")\ncert_tls_platform_certificate = fastly.TlsPlatformCertificate(\"cert\",\n    certificate_body=cert.cert_pem,\n    intermediates_blob=ca.cert_pem,\n    configuration_id=config.id,\n    allow_untrusted_root=True,\n    opts = pulumi.ResourceOptions(depends_on=[key_tls_private_key]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var caKey = new Tls.PrivateKey(\"ca_key\", new()\n    {\n        Algorithm = \"RSA\",\n    });\n\n    var key = new Tls.PrivateKey(\"key\", new()\n    {\n        Algorithm = \"RSA\",\n    });\n\n    var ca = new Tls.SelfSignedCert(\"ca\", new()\n    {\n        KeyAlgorithm = caKey.Algorithm,\n        PrivateKeyPem = caKey.PrivateKeyPem,\n        Subject = new[]\n        {\n            \n            {\n                { \"commonName\", \"Example CA\" },\n            },\n        },\n        IsCaCertificate = true,\n        ValidityPeriodHours = 360,\n        AllowedUses = new[]\n        {\n            \"cert_signing\",\n            \"server_auth\",\n        },\n    });\n\n    var example = new Tls.CertRequest(\"example\", new()\n    {\n        KeyAlgorithm = key.Algorithm,\n        PrivateKeyPem = key.PrivateKeyPem,\n        Subject = new[]\n        {\n            \n            {\n                { \"commonName\", \"example.com\" },\n            },\n        },\n        DnsNames = new[]\n        {\n            \"example.com\",\n            \"www.example.com\",\n        },\n    });\n\n    var cert = new Tls.LocallySignedCert(\"cert\", new()\n    {\n        CertRequestPem = example.CertRequestPem,\n        CaKeyAlgorithm = caKey.Algorithm,\n        CaPrivateKeyPem = caKey.PrivateKeyPem,\n        CaCertPem = ca.CertPem,\n        ValidityPeriodHours = 360,\n        AllowedUses = new[]\n        {\n            \"cert_signing\",\n            \"server_auth\",\n        },\n    });\n\n    var config = Fastly.GetTlsConfiguration.Invoke(new()\n    {\n        TlsService = \"PLATFORM\",\n    });\n\n    var keyTlsPrivateKey = new Fastly.TlsPrivateKey(\"key\", new()\n    {\n        KeyPem = key.PrivateKeyPem,\n        Name = \"tf-demo\",\n    });\n\n    var certTlsPlatformCertificate = new Fastly.TlsPlatformCertificate(\"cert\", new()\n    {\n        CertificateBody = cert.CertPem,\n        IntermediatesBlob = ca.CertPem,\n        ConfigurationId = config.Apply(getTlsConfigurationResult =\u003e getTlsConfigurationResult.Id),\n        AllowUntrustedRoot = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            keyTlsPrivateKey,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v5/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcaKey, err := tls.NewPrivateKey(ctx, \"ca_key\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkey, err := tls.NewPrivateKey(ctx, \"key\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tca, err := tls.NewSelfSignedCert(ctx, \"ca\", \u0026tls.SelfSignedCertArgs{\n\t\t\tKeyAlgorithm:  caKey.Algorithm,\n\t\t\tPrivateKeyPem: caKey.PrivateKeyPem,\n\t\t\tSubject: tls.SelfSignedCertSubjectArgs{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"commonName\": \"Example CA\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tIsCaCertificate:     pulumi.Bool(true),\n\t\t\tValidityPeriodHours: pulumi.Int(360),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"cert_signing\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := tls.NewCertRequest(ctx, \"example\", \u0026tls.CertRequestArgs{\n\t\t\tKeyAlgorithm:  key.Algorithm,\n\t\t\tPrivateKeyPem: key.PrivateKeyPem,\n\t\t\tSubject: tls.CertRequestSubjectArgs{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"commonName\": \"example.com\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"example.com\"),\n\t\t\t\tpulumi.String(\"www.example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcert, err := tls.NewLocallySignedCert(ctx, \"cert\", \u0026tls.LocallySignedCertArgs{\n\t\t\tCertRequestPem:      example.CertRequestPem,\n\t\t\tCaKeyAlgorithm:      caKey.Algorithm,\n\t\t\tCaPrivateKeyPem:     caKey.PrivateKeyPem,\n\t\t\tCaCertPem:           ca.CertPem,\n\t\t\tValidityPeriodHours: pulumi.Int(360),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"cert_signing\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconfig, err := fastly.GetTlsConfiguration(ctx, \u0026fastly.GetTlsConfigurationArgs{\n\t\t\tTlsService: pulumi.StringRef(\"PLATFORM\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyTlsPrivateKey, err := fastly.NewTlsPrivateKey(ctx, \"key\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: key.PrivateKeyPem,\n\t\t\tName:   pulumi.String(\"tf-demo\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsPlatformCertificate(ctx, \"cert\", \u0026fastly.TlsPlatformCertificateArgs{\n\t\t\tCertificateBody:    cert.CertPem,\n\t\t\tIntermediatesBlob:  ca.CertPem,\n\t\t\tConfigurationId:    pulumi.String(config.Id),\n\t\t\tAllowUntrustedRoot: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkeyTlsPrivateKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.tls.SelfSignedCert;\nimport com.pulumi.tls.SelfSignedCertArgs;\nimport com.pulumi.tls.CertRequest;\nimport com.pulumi.tls.CertRequestArgs;\nimport com.pulumi.tls.LocallySignedCert;\nimport com.pulumi.tls.LocallySignedCertArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsConfigurationArgs;\nimport com.pulumi.fastly.TlsPrivateKey;\nimport com.pulumi.fastly.TlsPrivateKeyArgs;\nimport com.pulumi.fastly.TlsPlatformCertificate;\nimport com.pulumi.fastly.TlsPlatformCertificateArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var caKey = new PrivateKey(\"caKey\", PrivateKeyArgs.builder()\n            .algorithm(\"RSA\")\n            .build());\n\n        var key = new PrivateKey(\"key\", PrivateKeyArgs.builder()\n            .algorithm(\"RSA\")\n            .build());\n\n        var ca = new SelfSignedCert(\"ca\", SelfSignedCertArgs.builder()\n            .keyAlgorithm(caKey.algorithm())\n            .privateKeyPem(caKey.privateKeyPem())\n            .subject(SelfSignedCertSubjectArgs.builder()\n                .commonName(\"Example CA\")\n                .build())\n            .isCaCertificate(true)\n            .validityPeriodHours(360)\n            .allowedUses(            \n                \"cert_signing\",\n                \"server_auth\")\n            .build());\n\n        var example = new CertRequest(\"example\", CertRequestArgs.builder()\n            .keyAlgorithm(key.algorithm())\n            .privateKeyPem(key.privateKeyPem())\n            .subject(CertRequestSubjectArgs.builder()\n                .commonName(\"example.com\")\n                .build())\n            .dnsNames(            \n                \"example.com\",\n                \"www.example.com\")\n            .build());\n\n        var cert = new LocallySignedCert(\"cert\", LocallySignedCertArgs.builder()\n            .certRequestPem(example.certRequestPem())\n            .caKeyAlgorithm(caKey.algorithm())\n            .caPrivateKeyPem(caKey.privateKeyPem())\n            .caCertPem(ca.certPem())\n            .validityPeriodHours(360)\n            .allowedUses(            \n                \"cert_signing\",\n                \"server_auth\")\n            .build());\n\n        final var config = FastlyFunctions.getTlsConfiguration(GetTlsConfigurationArgs.builder()\n            .tlsService(\"PLATFORM\")\n            .build());\n\n        var keyTlsPrivateKey = new TlsPrivateKey(\"keyTlsPrivateKey\", TlsPrivateKeyArgs.builder()\n            .keyPem(key.privateKeyPem())\n            .name(\"tf-demo\")\n            .build());\n\n        var certTlsPlatformCertificate = new TlsPlatformCertificate(\"certTlsPlatformCertificate\", TlsPlatformCertificateArgs.builder()\n            .certificateBody(cert.certPem())\n            .intermediatesBlob(ca.certPem())\n            .configurationId(config.id())\n            .allowUntrustedRoot(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(keyTlsPrivateKey)\n                .build());\n\n    }\n}\n```\n```yaml\nresources:\n  caKey:\n    type: tls:PrivateKey\n    name: ca_key\n    properties:\n      algorithm: RSA\n  key:\n    type: tls:PrivateKey\n    properties:\n      algorithm: RSA\n  ca:\n    type: tls:SelfSignedCert\n    properties:\n      keyAlgorithm: ${caKey.algorithm}\n      privateKeyPem: ${caKey.privateKeyPem}\n      subject:\n        - commonName: Example CA\n      isCaCertificate: true\n      validityPeriodHours: 360\n      allowedUses:\n        - cert_signing\n        - server_auth\n  example:\n    type: tls:CertRequest\n    properties:\n      keyAlgorithm: ${key.algorithm}\n      privateKeyPem: ${key.privateKeyPem}\n      subject:\n        - commonName: example.com\n      dnsNames:\n        - example.com\n        - www.example.com\n  cert:\n    type: tls:LocallySignedCert\n    properties:\n      certRequestPem: ${example.certRequestPem}\n      caKeyAlgorithm: ${caKey.algorithm}\n      caPrivateKeyPem: ${caKey.privateKeyPem}\n      caCertPem: ${ca.certPem}\n      validityPeriodHours: 360\n      allowedUses:\n        - cert_signing\n        - server_auth\n  keyTlsPrivateKey:\n    type: fastly:TlsPrivateKey\n    name: key\n    properties:\n      keyPem: ${key.privateKeyPem}\n      name: tf-demo\n  certTlsPlatformCertificate:\n    type: fastly:TlsPlatformCertificate\n    name: cert\n    properties:\n      certificateBody: ${cert.certPem}\n      intermediatesBlob: ${ca.certPem}\n      configurationId: ${config.id}\n      allowUntrustedRoot: true\n    options:\n      dependsOn:\n        - ${keyTlsPrivateKey}\nvariables:\n  config:\n    fn::invoke:\n      function: fastly:getTlsConfiguration\n      arguments:\n        tlsService: PLATFORM\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nA certificate can be imported using its Fastly certificate ID, e.g.\n\n```sh\n$ pulumi import fastly:index/tlsPlatformCertificate:TlsPlatformCertificate demo xxxxxxxxxxx\n```\n\n","properties":{"allowUntrustedRoot":{"type":"boolean","description":"Disable checking whether the root of the certificate chain is trusted. Useful for development purposes to allow use of self-signed CAs. Defaults to false. Write-only on create.\n"},"certificateBody":{"type":"string","description":"PEM-formatted certificate.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration to be used to terminate TLS traffic.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when the certificate was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"All the domains (including wildcard domains) that are listed in any certificate's Subject Alternative Names (SAN) list.\n"},"intermediatesBlob":{"type":"string","description":"PEM-formatted certificate chain from the \u003cspan pulumi-lang-nodejs=\"`certificateBody`\" pulumi-lang-dotnet=\"`CertificateBody`\" pulumi-lang-go=\"`certificateBody`\" pulumi-lang-python=\"`certificate_body`\" pulumi-lang-yaml=\"`certificateBody`\" pulumi-lang-java=\"`certificateBody`\"\u003e`certificate_body`\u003c/span\u003e to its root.\n"},"notAfter":{"type":"string","description":"Timestamp (GMT) when the certificate will expire.\n"},"notBefore":{"type":"string","description":"Timestamp (GMT) when the certificate will become valid.\n"},"replace":{"type":"boolean","description":"A recommendation from Fastly indicating the key associated with this certificate is in need of rotation.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the certificate was last updated.\n"}},"required":["certificateBody","configurationId","createdAt","domains","intermediatesBlob","notAfter","notBefore","replace","updatedAt"],"inputProperties":{"allowUntrustedRoot":{"type":"boolean","description":"Disable checking whether the root of the certificate chain is trusted. Useful for development purposes to allow use of self-signed CAs. Defaults to false. Write-only on create.\n"},"certificateBody":{"type":"string","description":"PEM-formatted certificate.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration to be used to terminate TLS traffic.\n","willReplaceOnChanges":true},"intermediatesBlob":{"type":"string","description":"PEM-formatted certificate chain from the \u003cspan pulumi-lang-nodejs=\"`certificateBody`\" pulumi-lang-dotnet=\"`CertificateBody`\" pulumi-lang-go=\"`certificateBody`\" pulumi-lang-python=\"`certificate_body`\" pulumi-lang-yaml=\"`certificateBody`\" pulumi-lang-java=\"`certificateBody`\"\u003e`certificate_body`\u003c/span\u003e to its root.\n"}},"requiredInputs":["certificateBody","configurationId","intermediatesBlob"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsPlatformCertificate resources.\n","properties":{"allowUntrustedRoot":{"type":"boolean","description":"Disable checking whether the root of the certificate chain is trusted. Useful for development purposes to allow use of self-signed CAs. Defaults to false. Write-only on create.\n"},"certificateBody":{"type":"string","description":"PEM-formatted certificate.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration to be used to terminate TLS traffic.\n","willReplaceOnChanges":true},"createdAt":{"type":"string","description":"Timestamp (GMT) when the certificate was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"All the domains (including wildcard domains) that are listed in any certificate's Subject Alternative Names (SAN) list.\n"},"intermediatesBlob":{"type":"string","description":"PEM-formatted certificate chain from the \u003cspan pulumi-lang-nodejs=\"`certificateBody`\" pulumi-lang-dotnet=\"`CertificateBody`\" pulumi-lang-go=\"`certificateBody`\" pulumi-lang-python=\"`certificate_body`\" pulumi-lang-yaml=\"`certificateBody`\" pulumi-lang-java=\"`certificateBody`\"\u003e`certificate_body`\u003c/span\u003e to its root.\n"},"notAfter":{"type":"string","description":"Timestamp (GMT) when the certificate will expire.\n"},"notBefore":{"type":"string","description":"Timestamp (GMT) when the certificate will become valid.\n"},"replace":{"type":"boolean","description":"A recommendation from Fastly indicating the key associated with this certificate is in need of rotation.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the certificate was last updated.\n"}},"type":"object"}},"fastly:index/tlsPrivateKey:TlsPrivateKey":{"description":"Uploads a Custom TLS Private Key to Fastly. This can be combined with a \u003cspan pulumi-lang-nodejs=\"`fastly.TlsCertificate`\" pulumi-lang-dotnet=\"`fastly.TlsCertificate`\" pulumi-lang-go=\"`TlsCertificate`\" pulumi-lang-python=\"`TlsCertificate`\" pulumi-lang-yaml=\"`fastly.TlsCertificate`\" pulumi-lang-java=\"`fastly.TlsCertificate`\"\u003e`fastly.TlsCertificate`\u003c/span\u003e resource to provide a TLS Certificate able to be applied to a Fastly Service.\n\nThe Private Key resource requires a key in PEM format, and a name to identify it.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as tls from \"@pulumi/tls\";\n\nconst demo = new tls.PrivateKey(\"demo\", {algorithm: \"RSA\"});\nconst demoTlsPrivateKey = new fastly.TlsPrivateKey(\"demo\", {\n    keyPem: demo.privateKeyPem,\n    name: \"tf-demo\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_tls as tls\n\ndemo = tls.PrivateKey(\"demo\", algorithm=\"RSA\")\ndemo_tls_private_key = fastly.TlsPrivateKey(\"demo\",\n    key_pem=demo.private_key_pem,\n    name=\"tf-demo\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demo = new Tls.PrivateKey(\"demo\", new()\n    {\n        Algorithm = \"RSA\",\n    });\n\n    var demoTlsPrivateKey = new Fastly.TlsPrivateKey(\"demo\", new()\n    {\n        KeyPem = demo.PrivateKeyPem,\n        Name = \"tf-demo\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v5/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemo, err := tls.NewPrivateKey(ctx, \"demo\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsPrivateKey(ctx, \"demo\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: demo.PrivateKeyPem,\n\t\t\tName:   pulumi.String(\"tf-demo\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.fastly.TlsPrivateKey;\nimport com.pulumi.fastly.TlsPrivateKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demo = new PrivateKey(\"demo\", PrivateKeyArgs.builder()\n            .algorithm(\"RSA\")\n            .build());\n\n        var demoTlsPrivateKey = new TlsPrivateKey(\"demoTlsPrivateKey\", TlsPrivateKeyArgs.builder()\n            .keyPem(demo.privateKeyPem())\n            .name(\"tf-demo\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demo:\n    type: tls:PrivateKey\n    properties:\n      algorithm: RSA\n  demoTlsPrivateKey:\n    type: fastly:TlsPrivateKey\n    name: demo\n    properties:\n      keyPem: ${demo.privateKeyPem}\n      name: tf-demo\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nA Private Key can be imported using its ID, e.g.\n\n```sh\n$ pulumi import fastly:index/tlsPrivateKey:TlsPrivateKey demo xxxxxxxxxxx\n```\n\n","properties":{"createdAt":{"type":"string","description":"Time-stamp (GMT) when the private key was created.\n"},"keyLength":{"type":"integer","description":"The key length used to generate the private key.\n"},"keyPem":{"type":"string","description":"Private key in PEM format.\n","secret":true},"keyType":{"type":"string","description":"The algorithm used to generate the private key. Must be RSA.\n"},"name":{"type":"string","description":"Customisable name of the private key.\n"},"publicKeySha1":{"type":"string","description":"Useful for safely identifying the key.\n"},"replace":{"type":"boolean","description":"Whether Fastly recommends replacing this private key.\n"}},"required":["createdAt","keyLength","keyPem","keyType","name","publicKeySha1","replace"],"inputProperties":{"keyPem":{"type":"string","description":"Private key in PEM format.\n","secret":true,"willReplaceOnChanges":true},"name":{"type":"string","description":"Customisable name of the private key.\n","willReplaceOnChanges":true}},"requiredInputs":["keyPem"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsPrivateKey resources.\n","properties":{"createdAt":{"type":"string","description":"Time-stamp (GMT) when the private key was created.\n"},"keyLength":{"type":"integer","description":"The key length used to generate the private key.\n"},"keyPem":{"type":"string","description":"Private key in PEM format.\n","secret":true,"willReplaceOnChanges":true},"keyType":{"type":"string","description":"The algorithm used to generate the private key. Must be RSA.\n"},"name":{"type":"string","description":"Customisable name of the private key.\n","willReplaceOnChanges":true},"publicKeySha1":{"type":"string","description":"Useful for safely identifying the key.\n"},"replace":{"type":"boolean","description":"Whether Fastly recommends replacing this private key.\n"}},"type":"object"}},"fastly:index/tlsSubscription:TlsSubscription":{"description":"Enables TLS on a domain using a certificate managed by Fastly.\n\nDNS records need to be modified on the domain being secured, in order to respond to the ACME domain ownership challenge.\n\nThere are two options for doing this: the \u003cspan pulumi-lang-nodejs=\"`managedDnsChallenges`\" pulumi-lang-dotnet=\"`ManagedDnsChallenges`\" pulumi-lang-go=\"`managedDnsChallenges`\" pulumi-lang-python=\"`managed_dns_challenges`\" pulumi-lang-yaml=\"`managedDnsChallenges`\" pulumi-lang-java=\"`managedDnsChallenges`\"\u003e`managed_dns_challenges`\u003c/span\u003e, which is the default method; and the \u003cspan pulumi-lang-nodejs=\"`managedHttpChallenges`\" pulumi-lang-dotnet=\"`ManagedHttpChallenges`\" pulumi-lang-go=\"`managedHttpChallenges`\" pulumi-lang-python=\"`managed_http_challenges`\" pulumi-lang-yaml=\"`managedHttpChallenges`\" pulumi-lang-java=\"`managedHttpChallenges`\"\u003e`managed_http_challenges`\u003c/span\u003e, which points production traffic to Fastly.\n\n\u003e See the [Fastly documentation](https://docs.fastly.com/en/guides/serving-https-traffic-using-fastly-managed-certificates#verifying-domain-ownership) for more information on verifying domain ownership.\n\nThe examples below demonstrate usage with AWS Route53 to configure DNS, and the \u003cspan pulumi-lang-nodejs=\"`fastly.TlsSubscriptionValidation`\" pulumi-lang-dotnet=\"`fastly.TlsSubscriptionValidation`\" pulumi-lang-go=\"`TlsSubscriptionValidation`\" pulumi-lang-python=\"`TlsSubscriptionValidation`\" pulumi-lang-yaml=\"`fastly.TlsSubscriptionValidation`\" pulumi-lang-java=\"`fastly.TlsSubscriptionValidation`\"\u003e`fastly.TlsSubscriptionValidation`\u003c/span\u003e resource to wait for validation to complete.\n\n## Example Usage\n\n**Basic usage:**\n\nThe following example demonstrates how to configure two subdomains (e.g. `a.example.com`, `b.example.com`).\n\nThe workflow configures a \u003cspan pulumi-lang-nodejs=\"`fastly.TlsSubscription`\" pulumi-lang-dotnet=\"`fastly.TlsSubscription`\" pulumi-lang-go=\"`TlsSubscription`\" pulumi-lang-python=\"`TlsSubscription`\" pulumi-lang-yaml=\"`fastly.TlsSubscription`\" pulumi-lang-java=\"`fastly.TlsSubscription`\"\u003e`fastly.TlsSubscription`\u003c/span\u003e resource, then a \u003cspan pulumi-lang-nodejs=\"`awsRoute53Record`\" pulumi-lang-dotnet=\"`AwsRoute53Record`\" pulumi-lang-go=\"`awsRoute53Record`\" pulumi-lang-python=\"`aws_route53_record`\" pulumi-lang-yaml=\"`awsRoute53Record`\" pulumi-lang-java=\"`awsRoute53Record`\"\u003e`aws_route53_record`\u003c/span\u003e resource for handling the creation of the 'challenge' DNS records (e.g. `_acme-challenge.a.example.com` and `_acme-challenge.b.example.com`).\n\nWe configure the \u003cspan pulumi-lang-nodejs=\"`fastly.TlsSubscriptionValidation`\" pulumi-lang-dotnet=\"`fastly.TlsSubscriptionValidation`\" pulumi-lang-go=\"`TlsSubscriptionValidation`\" pulumi-lang-python=\"`TlsSubscriptionValidation`\" pulumi-lang-yaml=\"`fastly.TlsSubscriptionValidation`\" pulumi-lang-java=\"`fastly.TlsSubscriptionValidation`\"\u003e`fastly.TlsSubscriptionValidation`\u003c/span\u003e resource, which blocks other resources until the challenge DNS records have been validated by Fastly.\n\nOnce the validation has been successful, the configured \u003cspan pulumi-lang-nodejs=\"`fastly.getTlsConfiguration`\" pulumi-lang-dotnet=\"`fastly.getTlsConfiguration`\" pulumi-lang-go=\"`getTlsConfiguration`\" pulumi-lang-python=\"`get_tls_configuration`\" pulumi-lang-yaml=\"`fastly.getTlsConfiguration`\" pulumi-lang-java=\"`fastly.getTlsConfiguration`\"\u003e`fastly.getTlsConfiguration`\u003c/span\u003e data source will filter the available results looking for an appropriate TLS configuration object. If that filtering process is successful, then the subsequent \u003cspan pulumi-lang-nodejs=\"`awsRoute53Record`\" pulumi-lang-dotnet=\"`AwsRoute53Record`\" pulumi-lang-go=\"`awsRoute53Record`\" pulumi-lang-python=\"`aws_route53_record`\" pulumi-lang-yaml=\"`awsRoute53Record`\" pulumi-lang-java=\"`awsRoute53Record`\"\u003e`aws_route53_record`\u003c/span\u003e resources (for configuring the subdomains) will be executed using the returned TLS configuration data.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as std from \"@pulumi/std\";\n\n// NOTE: Creating a hosted zone will automatically create SOA/NS records.\nconst production = new aws.index.Route53Zone(\"production\", {name: \"example.com\"});\nconst example = new aws.index.Route53domainsRegisteredDomain(\"example\", {\n    nameServer: Object.entries(production.nameServers).map(([k, v]) =\u003e ({key: k, value: v})).map(entry =\u003e ({\n        name: entry.value,\n    })),\n    domainName: \"example.com\",\n});\nconst subdomains = [\n    \"a.example.com\",\n    \"b.example.com\",\n];\nconst exampleServiceVcl = new fastly.ServiceVcl(\"example\", {\n    domains: subdomains.map((v, k) =\u003e ({key: k, value: v})).map(entry =\u003e ({\n        name: entry.value,\n    })),\n    name: \"example-service\",\n    backends: [{\n        address: \"127.0.0.1\",\n        name: \"localhost\",\n    }],\n    forceDestroy: true,\n});\nconst exampleTlsSubscription = new fastly.TlsSubscription(\"example\", {\n    domains: exampleServiceVcl.domains.apply(domains =\u003e .map(domain =\u003e (domain.name))),\n    certificateAuthority: \"lets-encrypt\",\n});\nconst domainValidation: aws.index.Route53Record[] = [];\nexampleTlsSubscription.domains.apply(domains =\u003e {\n    for (const range of Object.entries(domains.reduce((__obj, domain) =\u003e ({ ...__obj, [domain]: exampleTlsSubscription.managedDnsChallenges.apply(managedDnsChallenges =\u003e managedDnsChallenges.filter(obj =\u003e obj.recordName == `_acme-challenge.${domain}`).map(obj =\u003e (obj)))[0] }))).map(([k, v]) =\u003e ({key: k, value: v}))) {\n        domainValidation.push(new aws.index.Route53Record(`domain_validation-${range.key}`, {\n            name: range.value.recordName,\n            type: range.value.recordType,\n            zoneId: production.zoneId,\n            allowOverwrite: true,\n            records: [range.value.recordValue],\n            ttl: 60,\n        }, {\n        dependsOn: [exampleTlsSubscription],\n    }));\n    }\n});\n// This is a resource that other resources can depend on if they require the certificate to be issued.\n// NOTE: Internally the resource keeps retrying `GetTLSSubscription` until no error is returned (or the configured timeout is reached).\nconst exampleTlsSubscriptionValidation = new fastly.TlsSubscriptionValidation(\"example\", {subscriptionId: exampleTlsSubscription.id}, {\n    dependsOn: [domainValidation],\n});\n// This data source lists all available configuration objects.\n// It uses a `default` attribute to narrow down the list to just one configuration object.\n// If the filtered list has a length that is not exactly one element, you'll see an error returned.\n// The single TLS configuration is then returned and can be referenced by other resources (see aws_route53_record below).\n//\n// IMPORTANT: Not all customers will have a 'default' configuration.\n// If you have issues filtering with `default = true`, then you may need another attribute.\n// Refer to the fastly_tls_configuration documentation for available attributes:\n// https://registry.terraform.io/providers/fastly/fastly/latest/docs/data-sources/tls_configuration#optional\nconst defaultTls = fastly.getTlsConfiguration({\n    \"default\": true,\n});\n// Once validation is complete and we've retrieved the TLS configuration data, we can create multiple subdomain records.\nconst subdomain: aws.index.Route53Record[] = [];\nfor (const range = {value: 0}; range.value \u003c std.index.toset({\n    input: subdomains,\n}).result; range.value++) {\n    subdomain.push(new aws.index.Route53Record(`subdomain-${range.value}`, {\n        name: range.value,\n        records: .filter(record =\u003e record.recordType == \"CNAME\").map(record =\u003e (record.recordValue)),\n        ttl: 300,\n        type: \"CNAME\",\n        zoneId: production.zoneId,\n    }));\n}\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_fastly as fastly\nimport pulumi_std as std\n\n# NOTE: Creating a hosted zone will automatically create SOA/NS records.\nproduction = aws.index.Route53Zone(\"production\", name=example.com)\nexample = aws.index.Route53domainsRegisteredDomain(\"example\",\n    name_server=[{\n        name: entry.value,\n    } for entry in [{\"key\": k, \"value\": v} for k, v in production.name_servers]],\n    domain_name=example.com)\nsubdomains = [\n    \"a.example.com\",\n    \"b.example.com\",\n]\nexample_service_vcl = fastly.ServiceVcl(\"example\",\n    domains=[{\n        \"name\": entry[\"value\"],\n    } for entry in [{\"key\": k, \"value\": v} for k, v in subdomains]],\n    name=\"example-service\",\n    backends=[{\n        \"address\": \"127.0.0.1\",\n        \"name\": \"localhost\",\n    }],\n    force_destroy=True)\nexample_tls_subscription = fastly.TlsSubscription(\"example\",\n    domains=example_service_vcl.domains.apply(lambda domains: [domain.name for domain in domains]),\n    certificate_authority=\"lets-encrypt\")\ndomain_validation = []\ndef create_domain_validation(range_body):\n    for range in [{\"key\": k, \"value\": v} for [k, v] in enumerate(range_body)]:\n        domain_validation.append(aws.index.Route53Record(f\"domain_validation-{range['key']}\",\n            name=range.value.record_name,\n            type=range.value.record_type,\n            zone_id=production.zone_id,\n            allow_overwrite=True,\n            records=[range.value.record_value],\n            ttl=60,\n            opts = pulumi.ResourceOptions(depends_on=[example_tls_subscription])))\n\nexample_tls_subscription.domains.apply(lambda resolved_outputs: create_domain_validation({domain: example_tls_subscription.managed_dns_challenges.apply(lambda managed_dns_challenges: [obj for obj in managed_dns_challenges if obj.record_name == f\"_acme-challenge.{domain}\"])[0] for domain in resolved_outputs['domains']}))\n# This is a resource that other resources can depend on if they require the certificate to be issued.\n# NOTE: Internally the resource keeps retrying `GetTLSSubscription` until no error is returned (or the configured timeout is reached).\nexample_tls_subscription_validation = fastly.TlsSubscriptionValidation(\"example\", subscription_id=example_tls_subscription.id,\nopts = pulumi.ResourceOptions(depends_on=[domain_validation]))\n# This data source lists all available configuration objects.\n# It uses a `default` attribute to narrow down the list to just one configuration object.\n# If the filtered list has a length that is not exactly one element, you'll see an error returned.\n# The single TLS configuration is then returned and can be referenced by other resources (see aws_route53_record below).\n#\n# IMPORTANT: Not all customers will have a 'default' configuration.\n# If you have issues filtering with `default = true`, then you may need another attribute.\n# Refer to the fastly_tls_configuration documentation for available attributes:\n# https://registry.terraform.io/providers/fastly/fastly/latest/docs/data-sources/tls_configuration#optional\ndefault_tls = fastly.get_tls_configuration(default=True)\n# Once validation is complete and we've retrieved the TLS configuration data, we can create multiple subdomain records.\nsubdomain = []\nfor range in [{\"value\": i} for i in range(0, std.index.toset(input=subdomains).result)]:\n    subdomain.append(aws.index.Route53Record(f\"subdomain-{range['value']}\",\n        name=range.value,\n        records=[record.record_value for record in default_tls.dns_records if record.record_type == CNAME],\n        ttl=300,\n        type=CNAME,\n        zone_id=production.zone_id))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Fastly = Pulumi.Fastly;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // NOTE: Creating a hosted zone will automatically create SOA/NS records.\n    var production = new Aws.Index.Route53Zone(\"production\", new()\n    {\n        Name = \"example.com\",\n    });\n\n    var example = new Aws.Index.Route53domainsRegisteredDomain(\"example\", new()\n    {\n        NameServer = .Select(entry =\u003e \n        {\n            return \n            {\n                { \"name\", entry.Value },\n            };\n        }).ToList(),\n        DomainName = \"example.com\",\n    });\n\n    var subdomains = new[]\n    {\n        \"a.example.com\",\n        \"b.example.com\",\n    };\n\n    var exampleServiceVcl = new Fastly.ServiceVcl(\"example\", new()\n    {\n        Domains = subdomains.Select((v, k) =\u003e new { Key = k, Value = v }).Select(entry =\u003e \n        {\n            return new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = entry.Value,\n            };\n        }).ToList(),\n        Name = \"example-service\",\n        Backends = new[]\n        {\n            new Fastly.Inputs.ServiceVclBackendArgs\n            {\n                Address = \"127.0.0.1\",\n                Name = \"localhost\",\n            },\n        },\n        ForceDestroy = true,\n    });\n\n    var exampleTlsSubscription = new Fastly.TlsSubscription(\"example\", new()\n    {\n        Domains = exampleServiceVcl.Domains.Apply(domains =\u003e .Select(domain =\u003e \n        {\n            return domain.Name;\n        }).ToList()),\n        CertificateAuthority = \"lets-encrypt\",\n    });\n\n    var domainValidation = new List\u003cAws.Index.Route53Record\u003e();\n    foreach (var range in exampleTlsSubscription.Domains.Apply(domains =\u003e domains.ToDictionary(item =\u003e {\n        var domain = item.Value;\n        return domain;\n    }, item =\u003e {\n        var domain = item.Value;\n        return exampleTlsSubscription.ManagedDnsChallenges.Apply(managedDnsChallenges =\u003e managedDnsChallenges.Where(obj =\u003e obj.RecordName == $\"_acme-challenge.{domain}\").Select(obj =\u003e \n        {\n            return obj;\n        }).ToList())[0];\n    })).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        domainValidation.Add(new Aws.Index.Route53Record($\"domain_validation-{range.Key}\", new()\n        {\n            Name = range.Value.RecordName,\n            Type = range.Value.RecordType,\n            ZoneId = production.ZoneId,\n            AllowOverwrite = true,\n            Records = new[]\n            {\n                range.Value.RecordValue,\n            },\n            Ttl = 60,\n        }, new CustomResourceOptions\n        {\n            DependsOn =\n            {\n                exampleTlsSubscription,\n            },\n        }));\n    }\n    // This is a resource that other resources can depend on if they require the certificate to be issued.\n    // NOTE: Internally the resource keeps retrying `GetTLSSubscription` until no error is returned (or the configured timeout is reached).\n    var exampleTlsSubscriptionValidation = new Fastly.TlsSubscriptionValidation(\"example\", new()\n    {\n        SubscriptionId = exampleTlsSubscription.Id,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            domainValidation,\n        },\n    });\n\n    // This data source lists all available configuration objects.\n    // It uses a `default` attribute to narrow down the list to just one configuration object.\n    // If the filtered list has a length that is not exactly one element, you'll see an error returned.\n    // The single TLS configuration is then returned and can be referenced by other resources (see aws_route53_record below).\n    //\n    // IMPORTANT: Not all customers will have a 'default' configuration.\n    // If you have issues filtering with `default = true`, then you may need another attribute.\n    // Refer to the fastly_tls_configuration documentation for available attributes:\n    // https://registry.terraform.io/providers/fastly/fastly/latest/docs/data-sources/tls_configuration#optional\n    var defaultTls = Fastly.GetTlsConfiguration.Invoke(new()\n    {\n        Default = true,\n    });\n\n    // Once validation is complete and we've retrieved the TLS configuration data, we can create multiple subdomain records.\n    var subdomain = new List\u003cAws.Index.Route53Record\u003e();\n    for (var rangeIndex = 0; rangeIndex \u003c Std.Index.Toset.Invoke(new()\n    {\n        Input = subdomains,\n    }).Result; rangeIndex++)\n    {\n        var range = new { Value = rangeIndex };\n        subdomain.Add(new Aws.Index.Route53Record($\"subdomain-{range.Value}\", new()\n        {\n            Name = range.Value,\n            Records = ,\n            Ttl = 300,\n            Type = \"CNAME\",\n            ZoneId = production.ZoneId,\n        }));\n    }\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n**Configuring an apex and a wildcard domain:**\n\nThe following example is similar to the above but differs by demonstrating how to handle configuring an apex domain (e.g. `example.com`) and a wildcard domain (e.g. `*.example.com`) so you can support multiple subdomains to your service.\n\nThe difference in the workflow is with how to handle the Fastly API returning a single 'challenge' for both domains (e.g. `_acme-challenge.example.com`). This is done by normalising the wildcard (i.e. replacing `*.example.com` with `example.com`) and then working around the issue of the returned object having two identical keys.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as std from \"@pulumi/std\";\n\n// NOTE: Creating a hosted zone will automatically create SOA/NS records.\nconst production = new aws.index.Route53Zone(\"production\", {name: \"example.com\"});\nconst example = new aws.index.Route53domainsRegisteredDomain(\"example\", {\n    nameServer: Object.entries(production.nameServers).map(([k, v]) =\u003e ({key: k, value: v})).map(entry =\u003e ({\n        name: entry.value,\n    })),\n    domainName: \"example.com\",\n});\nconst domains = [\n    \"example.com\",\n    \"*.example.com\",\n];\nconst exampleServiceVcl = new fastly.ServiceVcl(\"example\", {\n    domains: domains.map((v, k) =\u003e ({key: k, value: v})).map(entry =\u003e ({\n        name: entry.value,\n    })),\n    name: \"example-service\",\n    backends: [{\n        address: \"127.0.0.1\",\n        name: \"localhost\",\n    }],\n    forceDestroy: true,\n});\nconst exampleTlsSubscription = new fastly.TlsSubscription(\"example\", {\n    domains: exampleServiceVcl.domains.apply(domains =\u003e .map(domain =\u003e (domain.name))),\n    certificateAuthority: \"lets-encrypt\",\n});\nconst domainValidation: aws.index.Route53Record[] = [];\nexampleTlsSubscription.domains.apply(domains =\u003e {\n    const domainValidation: aws.index.Route53Record[] = [];\npulumi.all(domains.reduce((__obj, domain) =\u003e ({ ...__obj, [std.index.replace({\n        text: domain,\n        search: \"*.\",\n        replace: \"\",\n    }).result]: exampleTlsSubscription.managedDnsChallenges.apply(managedDnsChallenges =\u003e managedDnsChallenges.filter(obj =\u003e obj.recordName == `_acme-challenge.${std.index.replace({\n        text: domain,\n        search: \"*.\",\n        replace: \"\",\n    }).result}`).map(obj =\u003e (obj)))[0] }))).apply(rangeBody =\u003e {\n        for (const range of Object.entries(rangeBody).map(([k, v]) =\u003e ({key: k, value: v}))) {\n            domainValidation.push(new aws.index.Route53Record(`domain_validation-${range.key}`, {\n                name: range.value[0].recordName,\n                type: range.value[0].recordType,\n                zoneId: production.zoneId,\n                allowOverwrite: true,\n                records: [range.value[0].recordValue],\n                ttl: 60,\n            }, {\n            dependsOn: [exampleTlsSubscription],\n        }));\n        }\n    });\n});\n// This is a resource that other resources can depend on if they require the certificate to be issued.\n// NOTE: Internally the resource keeps retrying `GetTLSSubscription` until no error is returned (or the configured timeout is reached).\nconst exampleTlsSubscriptionValidation = new fastly.TlsSubscriptionValidation(\"example\", {subscriptionId: exampleTlsSubscription.id}, {\n    dependsOn: [domainValidation],\n});\n// This data source lists all available configuration objects.\n// It uses a `default` attribute to narrow down the list to just one configuration object.\n// If the filtered list has a length that is not exactly one element, you'll see an error returned.\n// The single TLS configuration is then returned and can be referenced by other resources (see aws_route53_record below).\n//\n// IMPORTANT: Not all customers will have a 'default' configuration.\n// If you have issues filtering with `default = true`, then you may need another attribute.\n// Refer to the fastly_tls_configuration documentation for available attributes:\n// https://registry.terraform.io/providers/fastly/fastly/latest/docs/data-sources/tls_configuration#optional\nconst defaultTls = fastly.getTlsConfiguration({\n    \"default\": true,\n});\n// Once validation is complete and we've retrieved the TLS configuration data, we can create multiple records...\nconst apex = new aws.index.Route53Record(\"apex\", {\n    name: \"example.com\",\n    records: .filter(record =\u003e record.recordType == \"A\").map(record =\u003e (record.recordValue)),\n    ttl: 300,\n    type: \"A\",\n    zoneId: production.zoneId,\n});\n// NOTE: This subdomain matches our Fastly service because of the wildcard domain (`*.example.com`) that was added to the service.\nconst subdomain = new aws.index.Route53Record(\"subdomain\", {\n    name: \"test.example.com\",\n    records: .filter(record =\u003e record.recordType == \"CNAME\").map(record =\u003e (record.recordValue)),\n    ttl: 300,\n    type: \"CNAME\",\n    zoneId: production.zoneId,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_fastly as fastly\nimport pulumi_std as std\n\n# NOTE: Creating a hosted zone will automatically create SOA/NS records.\nproduction = aws.index.Route53Zone(\"production\", name=example.com)\nexample = aws.index.Route53domainsRegisteredDomain(\"example\",\n    name_server=[{\n        name: entry.value,\n    } for entry in [{\"key\": k, \"value\": v} for k, v in production.name_servers]],\n    domain_name=example.com)\ndomains = [\n    \"example.com\",\n    \"*.example.com\",\n]\nexample_service_vcl = fastly.ServiceVcl(\"example\",\n    domains=[{\n        \"name\": entry[\"value\"],\n    } for entry in [{\"key\": k, \"value\": v} for k, v in domains]],\n    name=\"example-service\",\n    backends=[{\n        \"address\": \"127.0.0.1\",\n        \"name\": \"localhost\",\n    }],\n    force_destroy=True)\nexample_tls_subscription = fastly.TlsSubscription(\"example\",\n    domains=example_service_vcl.domains.apply(lambda domains: [domain.name for domain in domains]),\n    certificate_authority=\"lets-encrypt\")\ndomain_validation = []\ndef create_domain_validation(range_body):\n    for range in [{\"key\": k, \"value\": v} for [k, v] in enumerate(range_body)]:\n        domain_validation.append(aws.index.Route53Record(f\"domain_validation-{range['key']}\",\n            name=range.value[0].record_name,\n            type=range.value[0].record_type,\n            zone_id=production.zone_id,\n            allow_overwrite=True,\n            records=[range.value[0].record_value],\n            ttl=60,\n            opts = pulumi.ResourceOptions(depends_on=[example_tls_subscription])))\n\nexample_tls_subscription.domains.apply(lambda resolved_outputs: create_domain_validation({std.index.replace(text=domain,\n    search=\"*.\",\n    replace=\"\")[\"result\"]: example_tls_subscription.managed_dns_challenges.apply(lambda managed_dns_challenges: [obj for obj in managed_dns_challenges if obj.record_name == f\"_acme-challenge.{std.index.replace(text=domain,\n    search='*.',\n    replace='')['result']}\"])[0] for domain in resolved_outputs['domains']}))\n# This is a resource that other resources can depend on if they require the certificate to be issued.\n# NOTE: Internally the resource keeps retrying `GetTLSSubscription` until no error is returned (or the configured timeout is reached).\nexample_tls_subscription_validation = fastly.TlsSubscriptionValidation(\"example\", subscription_id=example_tls_subscription.id,\nopts = pulumi.ResourceOptions(depends_on=[domain_validation]))\n# This data source lists all available configuration objects.\n# It uses a `default` attribute to narrow down the list to just one configuration object.\n# If the filtered list has a length that is not exactly one element, you'll see an error returned.\n# The single TLS configuration is then returned and can be referenced by other resources (see aws_route53_record below).\n#\n# IMPORTANT: Not all customers will have a 'default' configuration.\n# If you have issues filtering with `default = true`, then you may need another attribute.\n# Refer to the fastly_tls_configuration documentation for available attributes:\n# https://registry.terraform.io/providers/fastly/fastly/latest/docs/data-sources/tls_configuration#optional\ndefault_tls = fastly.get_tls_configuration(default=True)\n# Once validation is complete and we've retrieved the TLS configuration data, we can create multiple records...\napex = aws.index.Route53Record(\"apex\",\n    name=example.com,\n    records=[record.record_value for record in default_tls.dns_records if record.record_type == A],\n    ttl=300,\n    type=A,\n    zone_id=production.zone_id)\n# NOTE: This subdomain matches our Fastly service because of the wildcard domain (`*.example.com`) that was added to the service.\nsubdomain = aws.index.Route53Record(\"subdomain\",\n    name=test.example.com,\n    records=[record.record_value for record in default_tls.dns_records if record.record_type == CNAME],\n    ttl=300,\n    type=CNAME,\n    zone_id=production.zone_id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Fastly = Pulumi.Fastly;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // NOTE: Creating a hosted zone will automatically create SOA/NS records.\n    var production = new Aws.Index.Route53Zone(\"production\", new()\n    {\n        Name = \"example.com\",\n    });\n\n    var example = new Aws.Index.Route53domainsRegisteredDomain(\"example\", new()\n    {\n        NameServer = .Select(entry =\u003e \n        {\n            return \n            {\n                { \"name\", entry.Value },\n            };\n        }).ToList(),\n        DomainName = \"example.com\",\n    });\n\n    var domains = new[]\n    {\n        \"example.com\",\n        \"*.example.com\",\n    };\n\n    var exampleServiceVcl = new Fastly.ServiceVcl(\"example\", new()\n    {\n        Domains = domains.Select((v, k) =\u003e new { Key = k, Value = v }).Select(entry =\u003e \n        {\n            return new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = entry.Value,\n            };\n        }).ToList(),\n        Name = \"example-service\",\n        Backends = new[]\n        {\n            new Fastly.Inputs.ServiceVclBackendArgs\n            {\n                Address = \"127.0.0.1\",\n                Name = \"localhost\",\n            },\n        },\n        ForceDestroy = true,\n    });\n\n    var exampleTlsSubscription = new Fastly.TlsSubscription(\"example\", new()\n    {\n        Domains = exampleServiceVcl.Domains.Apply(domains =\u003e .Select(domain =\u003e \n        {\n            return domain.Name;\n        }).ToList()),\n        CertificateAuthority = \"lets-encrypt\",\n    });\n\n    var domainValidation = new List\u003cAws.Index.Route53Record\u003e();\n    foreach (var range in exampleTlsSubscription.Domains.Apply(domains =\u003e domains).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        domainValidation.Add(new Aws.Index.Route53Record($\"domain_validation-{range.Key}\", new()\n        {\n            Name = range.Value[0].RecordName,\n            Type = range.Value[0].RecordType,\n            ZoneId = production.ZoneId,\n            AllowOverwrite = true,\n            Records = new[]\n            {\n                range.Value[0].RecordValue,\n            },\n            Ttl = 60,\n        }, new CustomResourceOptions\n        {\n            DependsOn =\n            {\n                exampleTlsSubscription,\n            },\n        }));\n    }\n    // This is a resource that other resources can depend on if they require the certificate to be issued.\n    // NOTE: Internally the resource keeps retrying `GetTLSSubscription` until no error is returned (or the configured timeout is reached).\n    var exampleTlsSubscriptionValidation = new Fastly.TlsSubscriptionValidation(\"example\", new()\n    {\n        SubscriptionId = exampleTlsSubscription.Id,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            domainValidation,\n        },\n    });\n\n    // This data source lists all available configuration objects.\n    // It uses a `default` attribute to narrow down the list to just one configuration object.\n    // If the filtered list has a length that is not exactly one element, you'll see an error returned.\n    // The single TLS configuration is then returned and can be referenced by other resources (see aws_route53_record below).\n    //\n    // IMPORTANT: Not all customers will have a 'default' configuration.\n    // If you have issues filtering with `default = true`, then you may need another attribute.\n    // Refer to the fastly_tls_configuration documentation for available attributes:\n    // https://registry.terraform.io/providers/fastly/fastly/latest/docs/data-sources/tls_configuration#optional\n    var defaultTls = Fastly.GetTlsConfiguration.Invoke(new()\n    {\n        Default = true,\n    });\n\n    // Once validation is complete and we've retrieved the TLS configuration data, we can create multiple records...\n    var apex = new Aws.Index.Route53Record(\"apex\", new()\n    {\n        Name = \"example.com\",\n        Records = ,\n        Ttl = 300,\n        Type = \"A\",\n        ZoneId = production.ZoneId,\n    });\n\n    // NOTE: This subdomain matches our Fastly service because of the wildcard domain (`*.example.com`) that was added to the service.\n    var subdomain = new Aws.Index.Route53Record(\"subdomain\", new()\n    {\n        Name = \"test.example.com\",\n        Records = ,\n        Ttl = 300,\n        Type = \"CNAME\",\n        ZoneId = production.ZoneId,\n    });\n\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nA subscription can be imported using its Fastly subscription ID, e.g.\n\n```sh\n$ pulumi import fastly:index/tlsSubscription:TlsSubscription demo xxxxxxxxxxx\n```\n\n","properties":{"certificateAuthority":{"type":"string","description":"The entity that issues and certifies the TLS certificates for your subscription. Valid values are `lets-encrypt`, \u003cspan pulumi-lang-nodejs=\"`globalsign`\" pulumi-lang-dotnet=\"`Globalsign`\" pulumi-lang-go=\"`globalsign`\" pulumi-lang-python=\"`globalsign`\" pulumi-lang-yaml=\"`globalsign`\" pulumi-lang-java=\"`globalsign`\"\u003e`globalsign`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`certainly`\" pulumi-lang-dotnet=\"`Certainly`\" pulumi-lang-go=\"`certainly`\" pulumi-lang-python=\"`certainly`\" pulumi-lang-yaml=\"`certainly`\" pulumi-lang-java=\"`certainly`\"\u003e`certainly`\u003c/span\u003e.\n"},"certificateId":{"type":"string","description":"The certificate ID associated with the subscription.\n"},"commonName":{"type":"string","description":"The common name associated with the subscription generated by Fastly TLS. If you do not pass a common name on create, we will default to the first TLS domain included. If provided, the domain chosen as the common name must be included in TLS domains.\n"},"configurationId":{"type":"string","description":"The ID of the set of TLS configuration options that apply to the enabled domains on this subscription.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when the subscription was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"List of domains on which to enable TLS.\n"},"forceDestroy":{"type":"boolean","description":"Force delete the subscription even if it has active domains. Warning: this can disable production traffic if used incorrectly. Defaults to false.\n"},"forceUpdate":{"type":"boolean","description":"Force update the subscription even if it has active domains. Warning: this can disable production traffic if used incorrectly.\n"},"managedDnsChallenge":{"type":"object","additionalProperties":{"type":"string"},"description":"The details required to configure DNS to respond to ACME DNS challenge in order to verify domain ownership.\n","deprecationMessage":"Use 'managed_dns_challenges' attribute instead"},"managedDnsChallenges":{"type":"array","items":{"$ref":"#/types/fastly:index/TlsSubscriptionManagedDnsChallenge:TlsSubscriptionManagedDnsChallenge"},"description":"A list of options for configuring DNS to respond to ACME DNS challenge in order to verify domain ownership.\n"},"managedHttpChallenges":{"type":"array","items":{"$ref":"#/types/fastly:index/TlsSubscriptionManagedHttpChallenge:TlsSubscriptionManagedHttpChallenge"},"description":"A list of options for configuring DNS to respond to ACME HTTP challenge in order to verify domain ownership. Best accessed through a \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expression to filter the relevant record.\n"},"state":{"type":"string","description":"The current state of the subscription. The list of possible states are: \u003cspan pulumi-lang-nodejs=\"`pending`\" pulumi-lang-dotnet=\"`Pending`\" pulumi-lang-go=\"`pending`\" pulumi-lang-python=\"`pending`\" pulumi-lang-yaml=\"`pending`\" pulumi-lang-java=\"`pending`\"\u003e`pending`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`processing`\" pulumi-lang-dotnet=\"`Processing`\" pulumi-lang-go=\"`processing`\" pulumi-lang-python=\"`processing`\" pulumi-lang-yaml=\"`processing`\" pulumi-lang-java=\"`processing`\"\u003e`processing`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`issued`\" pulumi-lang-dotnet=\"`Issued`\" pulumi-lang-go=\"`issued`\" pulumi-lang-python=\"`issued`\" pulumi-lang-yaml=\"`issued`\" pulumi-lang-java=\"`issued`\"\u003e`issued`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`renewing`\" pulumi-lang-dotnet=\"`Renewing`\" pulumi-lang-go=\"`renewing`\" pulumi-lang-python=\"`renewing`\" pulumi-lang-yaml=\"`renewing`\" pulumi-lang-java=\"`renewing`\"\u003e`renewing`\u003c/span\u003e.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the subscription was updated.\n"}},"required":["certificateAuthority","certificateId","commonName","configurationId","createdAt","domains","managedDnsChallenge","managedDnsChallenges","managedHttpChallenges","state","updatedAt"],"inputProperties":{"certificateAuthority":{"type":"string","description":"The entity that issues and certifies the TLS certificates for your subscription. Valid values are `lets-encrypt`, \u003cspan pulumi-lang-nodejs=\"`globalsign`\" pulumi-lang-dotnet=\"`Globalsign`\" pulumi-lang-go=\"`globalsign`\" pulumi-lang-python=\"`globalsign`\" pulumi-lang-yaml=\"`globalsign`\" pulumi-lang-java=\"`globalsign`\"\u003e`globalsign`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`certainly`\" pulumi-lang-dotnet=\"`Certainly`\" pulumi-lang-go=\"`certainly`\" pulumi-lang-python=\"`certainly`\" pulumi-lang-yaml=\"`certainly`\" pulumi-lang-java=\"`certainly`\"\u003e`certainly`\u003c/span\u003e.\n","willReplaceOnChanges":true},"commonName":{"type":"string","description":"The common name associated with the subscription generated by Fastly TLS. If you do not pass a common name on create, we will default to the first TLS domain included. If provided, the domain chosen as the common name must be included in TLS domains.\n"},"configurationId":{"type":"string","description":"The ID of the set of TLS configuration options that apply to the enabled domains on this subscription.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"List of domains on which to enable TLS.\n"},"forceDestroy":{"type":"boolean","description":"Force delete the subscription even if it has active domains. Warning: this can disable production traffic if used incorrectly. Defaults to false.\n"},"forceUpdate":{"type":"boolean","description":"Force update the subscription even if it has active domains. Warning: this can disable production traffic if used incorrectly.\n"}},"requiredInputs":["certificateAuthority","domains"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsSubscription resources.\n","properties":{"certificateAuthority":{"type":"string","description":"The entity that issues and certifies the TLS certificates for your subscription. Valid values are `lets-encrypt`, \u003cspan pulumi-lang-nodejs=\"`globalsign`\" pulumi-lang-dotnet=\"`Globalsign`\" pulumi-lang-go=\"`globalsign`\" pulumi-lang-python=\"`globalsign`\" pulumi-lang-yaml=\"`globalsign`\" pulumi-lang-java=\"`globalsign`\"\u003e`globalsign`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`certainly`\" pulumi-lang-dotnet=\"`Certainly`\" pulumi-lang-go=\"`certainly`\" pulumi-lang-python=\"`certainly`\" pulumi-lang-yaml=\"`certainly`\" pulumi-lang-java=\"`certainly`\"\u003e`certainly`\u003c/span\u003e.\n","willReplaceOnChanges":true},"certificateId":{"type":"string","description":"The certificate ID associated with the subscription.\n"},"commonName":{"type":"string","description":"The common name associated with the subscription generated by Fastly TLS. If you do not pass a common name on create, we will default to the first TLS domain included. If provided, the domain chosen as the common name must be included in TLS domains.\n"},"configurationId":{"type":"string","description":"The ID of the set of TLS configuration options that apply to the enabled domains on this subscription.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when the subscription was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"List of domains on which to enable TLS.\n"},"forceDestroy":{"type":"boolean","description":"Force delete the subscription even if it has active domains. Warning: this can disable production traffic if used incorrectly. Defaults to false.\n"},"forceUpdate":{"type":"boolean","description":"Force update the subscription even if it has active domains. Warning: this can disable production traffic if used incorrectly.\n"},"managedDnsChallenge":{"type":"object","additionalProperties":{"type":"string"},"description":"The details required to configure DNS to respond to ACME DNS challenge in order to verify domain ownership.\n","deprecationMessage":"Use 'managed_dns_challenges' attribute instead"},"managedDnsChallenges":{"type":"array","items":{"$ref":"#/types/fastly:index/TlsSubscriptionManagedDnsChallenge:TlsSubscriptionManagedDnsChallenge"},"description":"A list of options for configuring DNS to respond to ACME DNS challenge in order to verify domain ownership.\n"},"managedHttpChallenges":{"type":"array","items":{"$ref":"#/types/fastly:index/TlsSubscriptionManagedHttpChallenge:TlsSubscriptionManagedHttpChallenge"},"description":"A list of options for configuring DNS to respond to ACME HTTP challenge in order to verify domain ownership. Best accessed through a \u003cspan pulumi-lang-nodejs=\"`for`\" pulumi-lang-dotnet=\"`For`\" pulumi-lang-go=\"`for`\" pulumi-lang-python=\"`for`\" pulumi-lang-yaml=\"`for`\" pulumi-lang-java=\"`for`\"\u003e`for`\u003c/span\u003e expression to filter the relevant record.\n"},"state":{"type":"string","description":"The current state of the subscription. The list of possible states are: \u003cspan pulumi-lang-nodejs=\"`pending`\" pulumi-lang-dotnet=\"`Pending`\" pulumi-lang-go=\"`pending`\" pulumi-lang-python=\"`pending`\" pulumi-lang-yaml=\"`pending`\" pulumi-lang-java=\"`pending`\"\u003e`pending`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`processing`\" pulumi-lang-dotnet=\"`Processing`\" pulumi-lang-go=\"`processing`\" pulumi-lang-python=\"`processing`\" pulumi-lang-yaml=\"`processing`\" pulumi-lang-java=\"`processing`\"\u003e`processing`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`issued`\" pulumi-lang-dotnet=\"`Issued`\" pulumi-lang-go=\"`issued`\" pulumi-lang-python=\"`issued`\" pulumi-lang-yaml=\"`issued`\" pulumi-lang-java=\"`issued`\"\u003e`issued`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`renewing`\" pulumi-lang-dotnet=\"`Renewing`\" pulumi-lang-go=\"`renewing`\" pulumi-lang-python=\"`renewing`\" pulumi-lang-yaml=\"`renewing`\" pulumi-lang-java=\"`renewing`\"\u003e`renewing`\u003c/span\u003e.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the subscription was updated.\n"}},"type":"object"}},"fastly:index/tlsSubscriptionValidation:TlsSubscriptionValidation":{"description":"This resource represents a successful validation of a Fastly TLS Subscription in concert with other resources.\n\nMost commonly, this resource is used together with a resource for a DNS record and \u003cspan pulumi-lang-nodejs=\"`fastly.TlsSubscription`\" pulumi-lang-dotnet=\"`fastly.TlsSubscription`\" pulumi-lang-go=\"`TlsSubscription`\" pulumi-lang-python=\"`TlsSubscription`\" pulumi-lang-yaml=\"`fastly.TlsSubscription`\" pulumi-lang-java=\"`fastly.TlsSubscription`\"\u003e`fastly.TlsSubscription`\u003c/span\u003e to request a DNS validated certificate, deploy the required validation records and wait for validation to complete.\n\n\u003e **Warning:** This resource implements a part of the validation workflow. It does not represent a real-world entity in Fastly, therefore changing or deleting this resource on its own has no immediate effect.\n\n## Example Usage\n\nDNS Validation with AWS Route53:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as std from \"@pulumi/std\";\n\n// NOTE: Creating a hosted zone will automatically create SOA/NS records.\nconst production = new aws.index.Route53Zone(\"production\", {name: \"example.com\"});\nconst example = new aws.index.Route53domainsRegisteredDomain(\"example\", {\n    nameServer: Object.entries(production.nameServers).map(([k, v]) =\u003e ({key: k, value: v})).map(entry =\u003e ({\n        name: entry.value,\n    })),\n    domainName: \"example.com\",\n});\nconst subdomains = [\n    \"a.example.com\",\n    \"b.example.com\",\n];\nconst exampleServiceVcl = new fastly.ServiceVcl(\"example\", {\n    domains: subdomains.map((v, k) =\u003e ({key: k, value: v})).map(entry =\u003e ({\n        name: entry.value,\n    })),\n    name: \"example-service\",\n    backends: [{\n        address: \"127.0.0.1\",\n        name: \"localhost\",\n    }],\n    forceDestroy: true,\n});\nconst exampleTlsSubscription = new fastly.TlsSubscription(\"example\", {\n    domains: exampleServiceVcl.domains.apply(domains =\u003e .map(domain =\u003e (domain.name))),\n    certificateAuthority: \"lets-encrypt\",\n});\nconst domainValidation: aws.index.Route53Record[] = [];\nexampleTlsSubscription.domains.apply(domains =\u003e {\n    for (const range of Object.entries(domains.reduce((__obj, domain) =\u003e ({ ...__obj, [domain]: exampleTlsSubscription.managedDnsChallenges.apply(managedDnsChallenges =\u003e managedDnsChallenges.filter(obj =\u003e obj.recordName == `_acme-challenge.${domain}`).map(obj =\u003e (obj)))[0] }))).map(([k, v]) =\u003e ({key: k, value: v}))) {\n        domainValidation.push(new aws.index.Route53Record(`domain_validation-${range.key}`, {\n            name: range.value.recordName,\n            type: range.value.recordType,\n            zoneId: production.zoneId,\n            allowOverwrite: true,\n            records: [range.value.recordValue],\n            ttl: 60,\n        }, {\n        dependsOn: [exampleTlsSubscription],\n    }));\n    }\n});\n// This is a resource that other resources can depend on if they require the certificate to be issued.\n// NOTE: Internally the resource keeps retrying `GetTLSSubscription` until no error is returned (or the configured timeout is reached).\nconst exampleTlsSubscriptionValidation = new fastly.TlsSubscriptionValidation(\"example\", {subscriptionId: exampleTlsSubscription.id}, {\n    dependsOn: [domainValidation],\n});\n// This data source lists all available configuration objects.\n// It uses a `default` attribute to narrow down the list to just one configuration object.\n// If the filtered list has a length that is not exactly one element, you'll see an error returned.\n// The single TLS configuration is then returned and can be referenced by other resources (see aws_route53_record below).\n//\n// IMPORTANT: Not all customers will have a 'default' configuration.\n// If you have issues filtering with `default = true`, then you may need another attribute.\n// Refer to the fastly_tls_configuration documentation for available attributes:\n// https://registry.terraform.io/providers/fastly/fastly/latest/docs/data-sources/tls_configuration#optional\nconst defaultTls = fastly.getTlsConfiguration({\n    \"default\": true,\n});\n// Once validation is complete and we've retrieved the TLS configuration data, we can create multiple subdomain records.\nconst subdomain: aws.index.Route53Record[] = [];\nfor (const range = {value: 0}; range.value \u003c std.index.toset({\n    input: subdomains,\n}).result; range.value++) {\n    subdomain.push(new aws.index.Route53Record(`subdomain-${range.value}`, {\n        name: range.value,\n        records: .filter(record =\u003e record.recordType == \"CNAME\").map(record =\u003e (record.recordValue)),\n        ttl: 300,\n        type: \"CNAME\",\n        zoneId: production.zoneId,\n    }));\n}\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_fastly as fastly\nimport pulumi_std as std\n\n# NOTE: Creating a hosted zone will automatically create SOA/NS records.\nproduction = aws.index.Route53Zone(\"production\", name=example.com)\nexample = aws.index.Route53domainsRegisteredDomain(\"example\",\n    name_server=[{\n        name: entry.value,\n    } for entry in [{\"key\": k, \"value\": v} for k, v in production.name_servers]],\n    domain_name=example.com)\nsubdomains = [\n    \"a.example.com\",\n    \"b.example.com\",\n]\nexample_service_vcl = fastly.ServiceVcl(\"example\",\n    domains=[{\n        \"name\": entry[\"value\"],\n    } for entry in [{\"key\": k, \"value\": v} for k, v in subdomains]],\n    name=\"example-service\",\n    backends=[{\n        \"address\": \"127.0.0.1\",\n        \"name\": \"localhost\",\n    }],\n    force_destroy=True)\nexample_tls_subscription = fastly.TlsSubscription(\"example\",\n    domains=example_service_vcl.domains.apply(lambda domains: [domain.name for domain in domains]),\n    certificate_authority=\"lets-encrypt\")\ndomain_validation = []\ndef create_domain_validation(range_body):\n    for range in [{\"key\": k, \"value\": v} for [k, v] in enumerate(range_body)]:\n        domain_validation.append(aws.index.Route53Record(f\"domain_validation-{range['key']}\",\n            name=range.value.record_name,\n            type=range.value.record_type,\n            zone_id=production.zone_id,\n            allow_overwrite=True,\n            records=[range.value.record_value],\n            ttl=60,\n            opts = pulumi.ResourceOptions(depends_on=[example_tls_subscription])))\n\nexample_tls_subscription.domains.apply(lambda resolved_outputs: create_domain_validation({domain: example_tls_subscription.managed_dns_challenges.apply(lambda managed_dns_challenges: [obj for obj in managed_dns_challenges if obj.record_name == f\"_acme-challenge.{domain}\"])[0] for domain in resolved_outputs['domains']}))\n# This is a resource that other resources can depend on if they require the certificate to be issued.\n# NOTE: Internally the resource keeps retrying `GetTLSSubscription` until no error is returned (or the configured timeout is reached).\nexample_tls_subscription_validation = fastly.TlsSubscriptionValidation(\"example\", subscription_id=example_tls_subscription.id,\nopts = pulumi.ResourceOptions(depends_on=[domain_validation]))\n# This data source lists all available configuration objects.\n# It uses a `default` attribute to narrow down the list to just one configuration object.\n# If the filtered list has a length that is not exactly one element, you'll see an error returned.\n# The single TLS configuration is then returned and can be referenced by other resources (see aws_route53_record below).\n#\n# IMPORTANT: Not all customers will have a 'default' configuration.\n# If you have issues filtering with `default = true`, then you may need another attribute.\n# Refer to the fastly_tls_configuration documentation for available attributes:\n# https://registry.terraform.io/providers/fastly/fastly/latest/docs/data-sources/tls_configuration#optional\ndefault_tls = fastly.get_tls_configuration(default=True)\n# Once validation is complete and we've retrieved the TLS configuration data, we can create multiple subdomain records.\nsubdomain = []\nfor range in [{\"value\": i} for i in range(0, std.index.toset(input=subdomains).result)]:\n    subdomain.append(aws.index.Route53Record(f\"subdomain-{range['value']}\",\n        name=range.value,\n        records=[record.record_value for record in default_tls.dns_records if record.record_type == CNAME],\n        ttl=300,\n        type=CNAME,\n        zone_id=production.zone_id))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Fastly = Pulumi.Fastly;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // NOTE: Creating a hosted zone will automatically create SOA/NS records.\n    var production = new Aws.Index.Route53Zone(\"production\", new()\n    {\n        Name = \"example.com\",\n    });\n\n    var example = new Aws.Index.Route53domainsRegisteredDomain(\"example\", new()\n    {\n        NameServer = .Select(entry =\u003e \n        {\n            return \n            {\n                { \"name\", entry.Value },\n            };\n        }).ToList(),\n        DomainName = \"example.com\",\n    });\n\n    var subdomains = new[]\n    {\n        \"a.example.com\",\n        \"b.example.com\",\n    };\n\n    var exampleServiceVcl = new Fastly.ServiceVcl(\"example\", new()\n    {\n        Domains = subdomains.Select((v, k) =\u003e new { Key = k, Value = v }).Select(entry =\u003e \n        {\n            return new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = entry.Value,\n            };\n        }).ToList(),\n        Name = \"example-service\",\n        Backends = new[]\n        {\n            new Fastly.Inputs.ServiceVclBackendArgs\n            {\n                Address = \"127.0.0.1\",\n                Name = \"localhost\",\n            },\n        },\n        ForceDestroy = true,\n    });\n\n    var exampleTlsSubscription = new Fastly.TlsSubscription(\"example\", new()\n    {\n        Domains = exampleServiceVcl.Domains.Apply(domains =\u003e .Select(domain =\u003e \n        {\n            return domain.Name;\n        }).ToList()),\n        CertificateAuthority = \"lets-encrypt\",\n    });\n\n    var domainValidation = new List\u003cAws.Index.Route53Record\u003e();\n    foreach (var range in exampleTlsSubscription.Domains.Apply(domains =\u003e domains.ToDictionary(item =\u003e {\n        var domain = item.Value;\n        return domain;\n    }, item =\u003e {\n        var domain = item.Value;\n        return exampleTlsSubscription.ManagedDnsChallenges.Apply(managedDnsChallenges =\u003e managedDnsChallenges.Where(obj =\u003e obj.RecordName == $\"_acme-challenge.{domain}\").Select(obj =\u003e \n        {\n            return obj;\n        }).ToList())[0];\n    })).Select(pair =\u003e new { pair.Key, pair.Value }))\n    {\n        domainValidation.Add(new Aws.Index.Route53Record($\"domain_validation-{range.Key}\", new()\n        {\n            Name = range.Value.RecordName,\n            Type = range.Value.RecordType,\n            ZoneId = production.ZoneId,\n            AllowOverwrite = true,\n            Records = new[]\n            {\n                range.Value.RecordValue,\n            },\n            Ttl = 60,\n        }, new CustomResourceOptions\n        {\n            DependsOn =\n            {\n                exampleTlsSubscription,\n            },\n        }));\n    }\n    // This is a resource that other resources can depend on if they require the certificate to be issued.\n    // NOTE: Internally the resource keeps retrying `GetTLSSubscription` until no error is returned (or the configured timeout is reached).\n    var exampleTlsSubscriptionValidation = new Fastly.TlsSubscriptionValidation(\"example\", new()\n    {\n        SubscriptionId = exampleTlsSubscription.Id,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            domainValidation,\n        },\n    });\n\n    // This data source lists all available configuration objects.\n    // It uses a `default` attribute to narrow down the list to just one configuration object.\n    // If the filtered list has a length that is not exactly one element, you'll see an error returned.\n    // The single TLS configuration is then returned and can be referenced by other resources (see aws_route53_record below).\n    //\n    // IMPORTANT: Not all customers will have a 'default' configuration.\n    // If you have issues filtering with `default = true`, then you may need another attribute.\n    // Refer to the fastly_tls_configuration documentation for available attributes:\n    // https://registry.terraform.io/providers/fastly/fastly/latest/docs/data-sources/tls_configuration#optional\n    var defaultTls = Fastly.GetTlsConfiguration.Invoke(new()\n    {\n        Default = true,\n    });\n\n    // Once validation is complete and we've retrieved the TLS configuration data, we can create multiple subdomain records.\n    var subdomain = new List\u003cAws.Index.Route53Record\u003e();\n    for (var rangeIndex = 0; rangeIndex \u003c Std.Index.Toset.Invoke(new()\n    {\n        Input = subdomains,\n    }).Result; rangeIndex++)\n    {\n        var range = new { Value = rangeIndex };\n        subdomain.Add(new Aws.Index.Route53Record($\"subdomain-{range.Value}\", new()\n        {\n            Name = range.Value,\n            Records = ,\n            Ttl = 300,\n            Type = \"CNAME\",\n            ZoneId = production.ZoneId,\n        }));\n    }\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"subscriptionId":{"type":"string","description":"The ID of the TLS Subscription that should be validated.\n"}},"required":["subscriptionId"],"inputProperties":{"subscriptionId":{"type":"string","description":"The ID of the TLS Subscription that should be validated.\n","willReplaceOnChanges":true}},"requiredInputs":["subscriptionId"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsSubscriptionValidation resources.\n","properties":{"subscriptionId":{"type":"string","description":"The ID of the TLS Subscription that should be validated.\n","willReplaceOnChanges":true}},"type":"object"}},"fastly:index/user:User":{"description":"Provides a Fastly User, representing the configuration for a user account for interacting with Fastly.\n\nThe User resource requires a login and name, and optionally a role.\n\n## Example Usage\n\nBasic usage:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.User(\"demo\", {\n    login: \"demo@example.com\",\n    name: \"Demo User\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.User(\"demo\",\n    login=\"demo@example.com\",\n    name=\"Demo User\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demo = new Fastly.User(\"demo\", new()\n    {\n        Login = \"demo@example.com\",\n        Name = \"Demo User\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewUser(ctx, \"demo\", \u0026fastly.UserArgs{\n\t\t\tLogin: pulumi.String(\"demo@example.com\"),\n\t\t\tName:  pulumi.String(\"Demo User\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.User;\nimport com.pulumi.fastly.UserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var demo = new User(\"demo\", UserArgs.builder()\n            .login(\"demo@example.com\")\n            .name(\"Demo User\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  demo:\n    type: fastly:User\n    properties:\n      login: demo@example.com\n      name: Demo User\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nA Fastly User can be imported using their user ID, e.g.\n\n```sh\n$ pulumi import fastly:index/user:User demo xxxxxxxxxxxxxxxxxxxx\n```\n\n","properties":{"login":{"type":"string","description":"The email address, which is the login name, of the User\n"},"name":{"type":"string","description":"The real life name of the user\n"},"role":{"type":"string","description":"The role of this user. Can be \u003cspan pulumi-lang-nodejs=\"`user`\" pulumi-lang-dotnet=\"`User`\" pulumi-lang-go=\"`user`\" pulumi-lang-python=\"`user`\" pulumi-lang-yaml=\"`user`\" pulumi-lang-java=\"`user`\"\u003e`user`\u003c/span\u003e (the default), \u003cspan pulumi-lang-nodejs=\"`billing`\" pulumi-lang-dotnet=\"`Billing`\" pulumi-lang-go=\"`billing`\" pulumi-lang-python=\"`billing`\" pulumi-lang-yaml=\"`billing`\" pulumi-lang-java=\"`billing`\"\u003e`billing`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`engineer`\" pulumi-lang-dotnet=\"`Engineer`\" pulumi-lang-go=\"`engineer`\" pulumi-lang-python=\"`engineer`\" pulumi-lang-yaml=\"`engineer`\" pulumi-lang-java=\"`engineer`\"\u003e`engineer`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`superuser`\" pulumi-lang-dotnet=\"`Superuser`\" pulumi-lang-go=\"`superuser`\" pulumi-lang-python=\"`superuser`\" pulumi-lang-yaml=\"`superuser`\" pulumi-lang-java=\"`superuser`\"\u003e`superuser`\u003c/span\u003e. For detailed information on the abilities granted to each role, see [Fastly's Documentation on User roles](https://docs.fastly.com/en/guides/configuring-user-roles-and-permissions#user-roles-and-what-they-can-do)\n"}},"required":["login","name"],"inputProperties":{"login":{"type":"string","description":"The email address, which is the login name, of the User\n","willReplaceOnChanges":true},"name":{"type":"string","description":"The real life name of the user\n"},"role":{"type":"string","description":"The role of this user. Can be \u003cspan pulumi-lang-nodejs=\"`user`\" pulumi-lang-dotnet=\"`User`\" pulumi-lang-go=\"`user`\" pulumi-lang-python=\"`user`\" pulumi-lang-yaml=\"`user`\" pulumi-lang-java=\"`user`\"\u003e`user`\u003c/span\u003e (the default), \u003cspan pulumi-lang-nodejs=\"`billing`\" pulumi-lang-dotnet=\"`Billing`\" pulumi-lang-go=\"`billing`\" pulumi-lang-python=\"`billing`\" pulumi-lang-yaml=\"`billing`\" pulumi-lang-java=\"`billing`\"\u003e`billing`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`engineer`\" pulumi-lang-dotnet=\"`Engineer`\" pulumi-lang-go=\"`engineer`\" pulumi-lang-python=\"`engineer`\" pulumi-lang-yaml=\"`engineer`\" pulumi-lang-java=\"`engineer`\"\u003e`engineer`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`superuser`\" pulumi-lang-dotnet=\"`Superuser`\" pulumi-lang-go=\"`superuser`\" pulumi-lang-python=\"`superuser`\" pulumi-lang-yaml=\"`superuser`\" pulumi-lang-java=\"`superuser`\"\u003e`superuser`\u003c/span\u003e. For detailed information on the abilities granted to each role, see [Fastly's Documentation on User roles](https://docs.fastly.com/en/guides/configuring-user-roles-and-permissions#user-roles-and-what-they-can-do)\n"}},"requiredInputs":["login"],"stateInputs":{"description":"Input properties used for looking up and filtering User resources.\n","properties":{"login":{"type":"string","description":"The email address, which is the login name, of the User\n","willReplaceOnChanges":true},"name":{"type":"string","description":"The real life name of the user\n"},"role":{"type":"string","description":"The role of this user. Can be \u003cspan pulumi-lang-nodejs=\"`user`\" pulumi-lang-dotnet=\"`User`\" pulumi-lang-go=\"`user`\" pulumi-lang-python=\"`user`\" pulumi-lang-yaml=\"`user`\" pulumi-lang-java=\"`user`\"\u003e`user`\u003c/span\u003e (the default), \u003cspan pulumi-lang-nodejs=\"`billing`\" pulumi-lang-dotnet=\"`Billing`\" pulumi-lang-go=\"`billing`\" pulumi-lang-python=\"`billing`\" pulumi-lang-yaml=\"`billing`\" pulumi-lang-java=\"`billing`\"\u003e`billing`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`engineer`\" pulumi-lang-dotnet=\"`Engineer`\" pulumi-lang-go=\"`engineer`\" pulumi-lang-python=\"`engineer`\" pulumi-lang-yaml=\"`engineer`\" pulumi-lang-java=\"`engineer`\"\u003e`engineer`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`superuser`\" pulumi-lang-dotnet=\"`Superuser`\" pulumi-lang-go=\"`superuser`\" pulumi-lang-python=\"`superuser`\" pulumi-lang-yaml=\"`superuser`\" pulumi-lang-java=\"`superuser`\"\u003e`superuser`\u003c/span\u003e. For detailed information on the abilities granted to each role, see [Fastly's Documentation on User roles](https://docs.fastly.com/en/guides/configuring-user-roles-and-permissions#user-roles-and-what-they-can-do)\n"}},"type":"object"}}},"functions":{"fastly:index/getComputeAcls:getComputeAcls":{"description":"Use this data source to retrieve a list of [Fastly Compute ACLs](https://www.fastly.com/documentation/reference/api/compute-acls/).\n\n","outputs":{"description":"A collection of values returned by getComputeAcls.\n","properties":{"acls":{"description":"List of all Compute ACLs.\n","items":{"$ref":"#/types/fastly:index/getComputeAclsAcl:getComputeAclsAcl"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"}},"required":["acls","id"],"type":"object"}},"fastly:index/getConfigstores:getConfigstores":{"outputs":{"description":"A collection of values returned by getConfigstores.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"stores":{"description":"List of all Config Stores.\n","items":{"$ref":"#/types/fastly:index/getConfigstoresStore:getConfigstoresStore"},"type":"array"}},"required":["stores","id"],"type":"object"}},"fastly:index/getDatacenters:getDatacenters":{"description":"Use this data source to get the list of the [Fastly datacenters](https://developer.fastly.com/reference/api/utils/pops/).\n\n","outputs":{"description":"A collection of values returned by getDatacenters.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"pops":{"description":"A list of all Fastly POPs.\n","items":{"$ref":"#/types/fastly:index/getDatacentersPop:getDatacentersPop"},"type":"array"}},"required":["pops","id"],"type":"object"}},"fastly:index/getDictionaries:getDictionaries":{"description":"Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleServiceVcl = new fastly.ServiceVcl(\"example\", {\n    name: \"Example Service\",\n    domains: [{\n        name: \"example.com\",\n    }],\n    dictionaries: [\n        {\n            name: \"example_1\",\n        },\n        {\n            name: \"example_2\",\n        },\n        {\n            name: \"example_3\",\n        },\n    ],\n    forceDestroy: true,\n});\nconst example = fastly.getDictionariesOutput({\n    serviceId: exampleServiceVcl.id,\n    serviceVersion: exampleServiceVcl.activeVersion,\n});\nexport const serviceDictionaries = example;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_service_vcl = fastly.ServiceVcl(\"example\",\n    name=\"Example Service\",\n    domains=[{\n        \"name\": \"example.com\",\n    }],\n    dictionaries=[\n        {\n            \"name\": \"example_1\",\n        },\n        {\n            \"name\": \"example_2\",\n        },\n        {\n            \"name\": \"example_3\",\n        },\n    ],\n    force_destroy=True)\nexample = fastly.get_dictionaries_output(service_id=example_service_vcl.id,\n    service_version=example_service_vcl.active_version)\npulumi.export(\"serviceDictionaries\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var exampleServiceVcl = new Fastly.ServiceVcl(\"example\", new()\n    {\n        Name = \"Example Service\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"example.com\",\n            },\n        },\n        Dictionaries = new[]\n        {\n            new Fastly.Inputs.ServiceVclDictionaryArgs\n            {\n                Name = \"example_1\",\n            },\n            new Fastly.Inputs.ServiceVclDictionaryArgs\n            {\n                Name = \"example_2\",\n            },\n            new Fastly.Inputs.ServiceVclDictionaryArgs\n            {\n                Name = \"example_3\",\n            },\n        },\n        ForceDestroy = true,\n    });\n\n    var example = Fastly.GetDictionaries.Invoke(new()\n    {\n        ServiceId = exampleServiceVcl.Id,\n        ServiceVersion = exampleServiceVcl.ActiveVersion,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"serviceDictionaries\"] = example,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleServiceVcl, err := fastly.NewServiceVcl(ctx, \"example\", \u0026fastly.ServiceVclArgs{\n\t\t\tName: pulumi.String(\"Example Service\"),\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDictionaries: fastly.ServiceVclDictionaryArray{\n\t\t\t\t\u0026fastly.ServiceVclDictionaryArgs{\n\t\t\t\t\tName: pulumi.String(\"example_1\"),\n\t\t\t\t},\n\t\t\t\t\u0026fastly.ServiceVclDictionaryArgs{\n\t\t\t\t\tName: pulumi.String(\"example_2\"),\n\t\t\t\t},\n\t\t\t\t\u0026fastly.ServiceVclDictionaryArgs{\n\t\t\t\t\tName: pulumi.String(\"example_3\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample := fastly.GetDictionariesOutput(ctx, fastly.GetDictionariesOutputArgs{\n\t\t\tServiceId:      exampleServiceVcl.ID(),\n\t\t\tServiceVersion: exampleServiceVcl.ActiveVersion,\n\t\t}, nil)\n\t\tctx.Export(\"serviceDictionaries\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDictionaryArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetDictionariesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var exampleServiceVcl = new ServiceVcl(\"exampleServiceVcl\", ServiceVclArgs.builder()\n            .name(\"Example Service\")\n            .domains(ServiceVclDomainArgs.builder()\n                .name(\"example.com\")\n                .build())\n            .dictionaries(            \n                ServiceVclDictionaryArgs.builder()\n                    .name(\"example_1\")\n                    .build(),\n                ServiceVclDictionaryArgs.builder()\n                    .name(\"example_2\")\n                    .build(),\n                ServiceVclDictionaryArgs.builder()\n                    .name(\"example_3\")\n                    .build())\n            .forceDestroy(true)\n            .build());\n\n        final var example = FastlyFunctions.getDictionaries(GetDictionariesArgs.builder()\n            .serviceId(exampleServiceVcl.id())\n            .serviceVersion(exampleServiceVcl.activeVersion())\n            .build());\n\n        ctx.export(\"serviceDictionaries\", example);\n    }\n}\n```\n```yaml\nresources:\n  exampleServiceVcl:\n    type: fastly:ServiceVcl\n    name: example\n    properties:\n      name: Example Service\n      domains:\n        - name: example.com\n      dictionaries:\n        - name: example_1\n        - name: example_2\n        - name: example_3\n      forceDestroy: true\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getDictionaries\n      arguments:\n        serviceId: ${exampleServiceVcl.id}\n        serviceVersion: ${exampleServiceVcl.activeVersion}\noutputs:\n  serviceDictionaries: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n[1]: https://developer.fastly.com/reference/api/dictionaries/\n","inputs":{"description":"A collection of arguments for invoking getDictionaries.\n","properties":{"serviceId":{"type":"string","description":"Alphanumeric string identifying the service.\n"},"serviceVersion":{"type":"integer","description":"Integer identifying a service version.\n"}},"type":"object","required":["serviceId","serviceVersion"]},"outputs":{"description":"A collection of values returned by getDictionaries.\n","properties":{"dictionaries":{"description":"List of all dictionaries for the version of the service.\n","items":{"$ref":"#/types/fastly:index/getDictionariesDictionary:getDictionariesDictionary"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"serviceId":{"description":"Alphanumeric string identifying the service.\n","type":"string"},"serviceVersion":{"description":"Integer identifying a service version.\n","type":"integer"}},"required":["dictionaries","serviceId","serviceVersion","id"],"type":"object"}},"fastly:index/getDomains:getDomains":{"description":"Use this data source to get information about versionless domains.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getDomains({});\nexport const allDomains = example.then(example =\u003e example.domains);\nexport const totalDomains = example.then(example =\u003e example.total);\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_domains()\npulumi.export(\"allDomains\", example.domains)\npulumi.export(\"totalDomains\", example.total)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetDomains.Invoke();\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"allDomains\"] = example.Apply(getDomainsResult =\u003e getDomainsResult.Domains),\n        [\"totalDomains\"] = example.Apply(getDomainsResult =\u003e getDomainsResult.Total),\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.GetDomains(ctx, \u0026fastly.GetDomainsArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"allDomains\", example.Domains)\n\t\tctx.Export(\"totalDomains\", example.Total)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetDomainsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = FastlyFunctions.getDomains(GetDomainsArgs.builder()\n            .build());\n\n        ctx.export(\"allDomains\", example.domains());\n        ctx.export(\"totalDomains\", example.total());\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getDomains\n      arguments: {}\noutputs:\n  allDomains: ${example.domains}\n  totalDomains: ${example.total}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n[1]: https://www.fastly.com/documentation/reference/api/domain-management/domains/\n","inputs":{"description":"A collection of arguments for invoking getDomains.\n","properties":{"total":{"type":"integer","description":"The total number of domains returned.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getDomains.\n","properties":{"domains":{"description":"A domain represents the domain name through which visitors will retrieve content. There can be multiple domains for a service.\n","items":{"$ref":"#/types/fastly:index/getDomainsDomain:getDomainsDomain"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"total":{"description":"The total number of domains returned.\n","type":"integer"}},"required":["domains","total","id"],"type":"object"}},"fastly:index/getDomainsV1:getDomainsV1":{"inputs":{"description":"A collection of arguments for invoking getDomainsV1.\n","properties":{"total":{"type":"integer","description":"The total number of domains returned.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getDomainsV1.\n","properties":{"domains":{"description":"A domain represents the domain name through which visitors will retrieve content. There can be multiple domains for a service.\n","items":{"$ref":"#/types/fastly:index/getDomainsV1Domain:getDomainsV1Domain"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"total":{"description":"The total number of domains returned.\n","type":"integer"}},"required":["domains","total","id"],"type":"object"}},"fastly:index/getFastlyIpRanges:getFastlyIpRanges":{"description":"Use this data source to get the [IP ranges](https://docs.fastly.com/guides/securing-communications/accessing-fastlys-ip-ranges) of Fastly edge nodes.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst fastly = fastly.getFastlyIpRanges({});\nconst fromFastly = new aws.index.SecurityGroup(\"from_fastly\", {\n    name: \"from_fastly\",\n    ingress: [{\n        fromPort: \"443\",\n        toPort: \"443\",\n        protocol: \"tcp\",\n        cidrBlocks: fastly.cidrBlocks,\n        ipv6CidrBlocks: fastly.ipv6CidrBlocks,\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_fastly as fastly\n\nfastly = fastly.get_fastly_ip_ranges()\nfrom_fastly = aws.index.SecurityGroup(\"from_fastly\",\n    name=from_fastly,\n    ingress=[{\n        fromPort: 443,\n        toPort: 443,\n        protocol: tcp,\n        cidrBlocks: fastly.cidr_blocks,\n        ipv6CidrBlocks: fastly.ipv6_cidr_blocks,\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var fastly = Fastly.GetFastlyIpRanges.Invoke();\n\n    var fromFastly = new Aws.Index.SecurityGroup(\"from_fastly\", new()\n    {\n        Name = \"from_fastly\",\n        Ingress = new[]\n        {\n            \n            {\n                { \"fromPort\", \"443\" },\n                { \"toPort\", \"443\" },\n                { \"protocol\", \"tcp\" },\n                { \"cidrBlocks\", fastly.Apply(getFastlyIpRangesResult =\u003e getFastlyIpRangesResult.CidrBlocks) },\n                { \"ipv6CidrBlocks\", fastly.Apply(getFastlyIpRangesResult =\u003e getFastlyIpRangesResult.Ipv6CidrBlocks) },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v7/go/aws\"\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfastly, err := fastly.GetFastlyIpRanges(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = aws.NewSecurityGroup(ctx, \"from_fastly\", \u0026aws.SecurityGroupArgs{\n\t\t\tName: \"from_fastly\",\n\t\t\tIngress: []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"fromPort\":       \"443\",\n\t\t\t\t\t\"toPort\":         \"443\",\n\t\t\t\t\t\"protocol\":       \"tcp\",\n\t\t\t\t\t\"cidrBlocks\":     fastly.CidrBlocks,\n\t\t\t\t\t\"ipv6CidrBlocks\": fastly.Ipv6CidrBlocks,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.aws.SecurityGroup;\nimport com.pulumi.aws.SecurityGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var fastly = FastlyFunctions.getFastlyIpRanges(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n        var fromFastly = new SecurityGroup(\"fromFastly\", SecurityGroupArgs.builder()\n            .name(\"from_fastly\")\n            .ingress(List.of(Map.ofEntries(\n                Map.entry(\"fromPort\", \"443\"),\n                Map.entry(\"toPort\", \"443\"),\n                Map.entry(\"protocol\", \"tcp\"),\n                Map.entry(\"cidrBlocks\", fastly.cidrBlocks()),\n                Map.entry(\"ipv6CidrBlocks\", fastly.ipv6CidrBlocks())\n            )))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  fromFastly:\n    type: aws:SecurityGroup\n    name: from_fastly\n    properties:\n      name: from_fastly\n      ingress:\n        - fromPort: '443'\n          toPort: '443'\n          protocol: tcp\n          cidrBlocks: ${fastly.cidrBlocks}\n          ipv6CidrBlocks: ${fastly.ipv6CidrBlocks}\nvariables:\n  fastly:\n    fn::invoke:\n      function: fastly:getFastlyIpRanges\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n[1]: https://docs.fastly.com/guides/securing-communications/accessing-fastlys-ip-ranges\n","outputs":{"description":"A collection of values returned by getFastlyIpRanges.\n","properties":{"cidrBlocks":{"description":"The lexically ordered list of ipv4 CIDR blocks.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"ipv6CidrBlocks":{"description":"The lexically ordered list of ipv6 CIDR blocks.\n","items":{"type":"string"},"type":"array"}},"required":["cidrBlocks","ipv6CidrBlocks","id"],"type":"object"}},"fastly:index/getKvstores:getKvstores":{"outputs":{"description":"A collection of values returned by getKvstores.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"stores":{"description":"List of all KV Stores.\n","items":{"$ref":"#/types/fastly:index/getKvstoresStore:getKvstoresStore"},"type":"array"}},"required":["stores","id"],"type":"object"}},"fastly:index/getNgwafAccountLists:getNgwafAccountLists":{"description":"Use this data source to get a Fastly Next-Gen WAF Account List.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst accountLists = fastly.getNgwafAccountLists({});\nexport const fastlyNgwafAccountListsAll = accountLists;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\naccount_lists = fastly.get_ngwaf_account_lists()\npulumi.export(\"fastlyNgwafAccountListsAll\", account_lists)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var accountLists = Fastly.GetNgwafAccountLists.Invoke();\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"fastlyNgwafAccountListsAll\"] = accountLists,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\taccountLists, err := fastly.GetNgwafAccountLists(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"fastlyNgwafAccountListsAll\", accountLists)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var accountLists = FastlyFunctions.getNgwafAccountLists(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n        ctx.export(\"fastlyNgwafAccountListsAll\", accountLists);\n    }\n}\n```\n```yaml\nvariables:\n  accountLists:\n    fn::invoke:\n      function: fastly:getNgwafAccountLists\n      arguments: {}\noutputs:\n  fastlyNgwafAccountListsAll: ${accountLists}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getNgwafAccountLists.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"lists":{"description":"The list of lists.\n","items":{"$ref":"#/types/fastly:index/getNgwafAccountListsList:getNgwafAccountListsList"},"type":"array"}},"required":["lists","id"],"type":"object"}},"fastly:index/getNgwafAccountRules:getNgwafAccountRules":{"description":"Use this data source to get a Fastly Next-Gen WAF Account Rule.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst accountRules = fastly.getNgwafAccountRules({});\nexport const fastlyNgwafAccountRulesAll = accountRules;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\naccount_rules = fastly.get_ngwaf_account_rules()\npulumi.export(\"fastlyNgwafAccountRulesAll\", account_rules)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var accountRules = Fastly.GetNgwafAccountRules.Invoke();\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"fastlyNgwafAccountRulesAll\"] = accountRules,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\taccountRules, err := fastly.GetNgwafAccountRules(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"fastlyNgwafAccountRulesAll\", accountRules)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var accountRules = FastlyFunctions.getNgwafAccountRules(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n        ctx.export(\"fastlyNgwafAccountRulesAll\", accountRules);\n    }\n}\n```\n```yaml\nvariables:\n  accountRules:\n    fn::invoke:\n      function: fastly:getNgwafAccountRules\n      arguments: {}\noutputs:\n  fastlyNgwafAccountRulesAll: ${accountRules}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getNgwafAccountRules.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"rules":{"description":"The list of rules.\n","items":{"$ref":"#/types/fastly:index/getNgwafAccountRulesRule:getNgwafAccountRulesRule"},"type":"array"}},"required":["rules","id"],"type":"object"}},"fastly:index/getNgwafAccountSignals:getNgwafAccountSignals":{"description":"Use this data source to get a Fastly Next-Gen WAF Account Signal.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst accountSignals = fastly.getNgwafAccountSignals({});\nexport const fastlyNgwafAccountSignalsAll = accountSignals;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\naccount_signals = fastly.get_ngwaf_account_signals()\npulumi.export(\"fastlyNgwafAccountSignalsAll\", account_signals)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var accountSignals = Fastly.GetNgwafAccountSignals.Invoke();\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"fastlyNgwafAccountSignalsAll\"] = accountSignals,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\taccountSignals, err := fastly.GetNgwafAccountSignals(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"fastlyNgwafAccountSignalsAll\", accountSignals)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var accountSignals = FastlyFunctions.getNgwafAccountSignals(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n        ctx.export(\"fastlyNgwafAccountSignalsAll\", accountSignals);\n    }\n}\n```\n```yaml\nvariables:\n  accountSignals:\n    fn::invoke:\n      function: fastly:getNgwafAccountSignals\n      arguments: {}\noutputs:\n  fastlyNgwafAccountSignalsAll: ${accountSignals}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getNgwafAccountSignals.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"signals":{"description":"The list of custom signals.\n","items":{"$ref":"#/types/fastly:index/getNgwafAccountSignalsSignal:getNgwafAccountSignalsSignal"},"type":"array"}},"required":["signals","id"],"type":"object"}},"fastly:index/getNgwafAlertDatadogIntegration:getNgwafAlertDatadogIntegration":{"description":"Use this data source to get a Fastly Next-Gen WAF Alert Datadog integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst ngwafDatadogAlerts = fastly.getNgwafAlertDatadogIntegration({\n    workspaceId: testRedactionsWorkspace.id,\n});\nexport const ngwafDatadogAlertsAll = datadogAlerts;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nngwaf_datadog_alerts = fastly.get_ngwaf_alert_datadog_integration(workspace_id=test_redactions_workspace[\"id\"])\npulumi.export(\"ngwafDatadogAlertsAll\", datadog_alerts)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ngwafDatadogAlerts = Fastly.GetNgwafAlertDatadogIntegration.Invoke(new()\n    {\n        WorkspaceId = testRedactionsWorkspace.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"ngwafDatadogAlertsAll\"] = datadogAlerts,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupNgwafAlertDatadogIntegration(ctx, \u0026fastly.LookupNgwafAlertDatadogIntegrationArgs{\n\t\t\tWorkspaceId: testRedactionsWorkspace.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ngwafDatadogAlertsAll\", datadogAlerts)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafAlertDatadogIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var ngwafDatadogAlerts = FastlyFunctions.getNgwafAlertDatadogIntegration(GetNgwafAlertDatadogIntegrationArgs.builder()\n            .workspaceId(testRedactionsWorkspace.id())\n            .build());\n\n        ctx.export(\"ngwafDatadogAlertsAll\", datadogAlerts);\n    }\n}\n```\n```yaml\nvariables:\n  ngwafDatadogAlerts:\n    fn::invoke:\n      function: fastly:getNgwafAlertDatadogIntegration\n      arguments:\n        workspaceId: ${testRedactionsWorkspace.id}\noutputs:\n  ngwafDatadogAlertsAll: ${datadogAlerts}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNgwafAlertDatadogIntegration.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafAlertDatadogIntegration.\n","properties":{"datadogAlerts":{"description":"List of all Datadog alerts for a workspace.\n","items":{"$ref":"#/types/fastly:index/getNgwafAlertDatadogIntegrationDatadogAlert:getNgwafAlertDatadogIntegrationDatadogAlert"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["datadogAlerts","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafAlertJiraIntegration:getNgwafAlertJiraIntegration":{"description":"Use this data source to get a Fastly Next-Gen WAF Alert Jira integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst ngwafJiraAlerts = fastly.getNgwafAlertJiraIntegration({\n    workspaceId: testRedactionsWorkspace.id,\n});\nexport const ngwafJiraAlertsAll = jiraAlerts;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nngwaf_jira_alerts = fastly.get_ngwaf_alert_jira_integration(workspace_id=test_redactions_workspace[\"id\"])\npulumi.export(\"ngwafJiraAlertsAll\", jira_alerts)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ngwafJiraAlerts = Fastly.GetNgwafAlertJiraIntegration.Invoke(new()\n    {\n        WorkspaceId = testRedactionsWorkspace.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"ngwafJiraAlertsAll\"] = jiraAlerts,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupNgwafAlertJiraIntegration(ctx, \u0026fastly.LookupNgwafAlertJiraIntegrationArgs{\n\t\t\tWorkspaceId: testRedactionsWorkspace.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ngwafJiraAlertsAll\", jiraAlerts)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafAlertJiraIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var ngwafJiraAlerts = FastlyFunctions.getNgwafAlertJiraIntegration(GetNgwafAlertJiraIntegrationArgs.builder()\n            .workspaceId(testRedactionsWorkspace.id())\n            .build());\n\n        ctx.export(\"ngwafJiraAlertsAll\", jiraAlerts);\n    }\n}\n```\n```yaml\nvariables:\n  ngwafJiraAlerts:\n    fn::invoke:\n      function: fastly:getNgwafAlertJiraIntegration\n      arguments:\n        workspaceId: ${testRedactionsWorkspace.id}\noutputs:\n  ngwafJiraAlertsAll: ${jiraAlerts}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNgwafAlertJiraIntegration.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafAlertJiraIntegration.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"jiraAlerts":{"description":"List of all Jira alerts for a workspace.\n","items":{"$ref":"#/types/fastly:index/getNgwafAlertJiraIntegrationJiraAlert:getNgwafAlertJiraIntegrationJiraAlert"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["jiraAlerts","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafAlertMailingListIntegration:getNgwafAlertMailingListIntegration":{"description":"Use this data source to get a Fastly Next-Gen WAF Alert Mailing List integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst ngwafJiraAlerts = fastly.getNgwafAlertJiraIntegration({\n    workspaceId: testRedactionsWorkspace.id,\n});\nexport const ngwafJiraAlertsAll = jiraAlerts;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nngwaf_jira_alerts = fastly.get_ngwaf_alert_jira_integration(workspace_id=test_redactions_workspace[\"id\"])\npulumi.export(\"ngwafJiraAlertsAll\", jira_alerts)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ngwafJiraAlerts = Fastly.GetNgwafAlertJiraIntegration.Invoke(new()\n    {\n        WorkspaceId = testRedactionsWorkspace.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"ngwafJiraAlertsAll\"] = jiraAlerts,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupNgwafAlertJiraIntegration(ctx, \u0026fastly.LookupNgwafAlertJiraIntegrationArgs{\n\t\t\tWorkspaceId: testRedactionsWorkspace.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ngwafJiraAlertsAll\", jiraAlerts)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafAlertJiraIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var ngwafJiraAlerts = FastlyFunctions.getNgwafAlertJiraIntegration(GetNgwafAlertJiraIntegrationArgs.builder()\n            .workspaceId(testRedactionsWorkspace.id())\n            .build());\n\n        ctx.export(\"ngwafJiraAlertsAll\", jiraAlerts);\n    }\n}\n```\n```yaml\nvariables:\n  ngwafJiraAlerts:\n    fn::invoke:\n      function: fastly:getNgwafAlertJiraIntegration\n      arguments:\n        workspaceId: ${testRedactionsWorkspace.id}\noutputs:\n  ngwafJiraAlertsAll: ${jiraAlerts}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNgwafAlertMailingListIntegration.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafAlertMailingListIntegration.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"mailingListAlerts":{"description":"List of all Mailing List alerts for a workspace.\n","items":{"$ref":"#/types/fastly:index/getNgwafAlertMailingListIntegrationMailingListAlert:getNgwafAlertMailingListIntegrationMailingListAlert"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["mailingListAlerts","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafAlertMicrosoftTeamsIntegration:getNgwafAlertMicrosoftTeamsIntegration":{"description":"Use this data source to get a Fastly Next-Gen WAF Alert Microsoft Teams integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst ngwafJiraAlerts = fastly.getNgwafAlertJiraIntegration({\n    workspaceId: testRedactionsWorkspace.id,\n});\nexport const ngwafJiraAlertsAll = jiraAlerts;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nngwaf_jira_alerts = fastly.get_ngwaf_alert_jira_integration(workspace_id=test_redactions_workspace[\"id\"])\npulumi.export(\"ngwafJiraAlertsAll\", jira_alerts)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ngwafJiraAlerts = Fastly.GetNgwafAlertJiraIntegration.Invoke(new()\n    {\n        WorkspaceId = testRedactionsWorkspace.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"ngwafJiraAlertsAll\"] = jiraAlerts,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupNgwafAlertJiraIntegration(ctx, \u0026fastly.LookupNgwafAlertJiraIntegrationArgs{\n\t\t\tWorkspaceId: testRedactionsWorkspace.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ngwafJiraAlertsAll\", jiraAlerts)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafAlertJiraIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var ngwafJiraAlerts = FastlyFunctions.getNgwafAlertJiraIntegration(GetNgwafAlertJiraIntegrationArgs.builder()\n            .workspaceId(testRedactionsWorkspace.id())\n            .build());\n\n        ctx.export(\"ngwafJiraAlertsAll\", jiraAlerts);\n    }\n}\n```\n```yaml\nvariables:\n  ngwafJiraAlerts:\n    fn::invoke:\n      function: fastly:getNgwafAlertJiraIntegration\n      arguments:\n        workspaceId: ${testRedactionsWorkspace.id}\noutputs:\n  ngwafJiraAlertsAll: ${jiraAlerts}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNgwafAlertMicrosoftTeamsIntegration.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafAlertMicrosoftTeamsIntegration.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"microsoftTeamsAlerts":{"description":"List of all Microsoft Teams alerts for a workspace.\n","items":{"$ref":"#/types/fastly:index/getNgwafAlertMicrosoftTeamsIntegrationMicrosoftTeamsAlert:getNgwafAlertMicrosoftTeamsIntegrationMicrosoftTeamsAlert"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["microsoftTeamsAlerts","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafAlertOpsgenieIntegration:getNgwafAlertOpsgenieIntegration":{"description":"Use this data source to get a Fastly Next-Gen WAF Alert Opsgenie integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst ngwafOpsgenieAlerts = fastly.getNgwafAlertOpsgenieIntegration({\n    workspaceId: testRedactionsWorkspace.id,\n});\nexport const ngwafOpsgenieAlertsAll = opsgenieAlerts;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nngwaf_opsgenie_alerts = fastly.get_ngwaf_alert_opsgenie_integration(workspace_id=test_redactions_workspace[\"id\"])\npulumi.export(\"ngwafOpsgenieAlertsAll\", opsgenie_alerts)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ngwafOpsgenieAlerts = Fastly.GetNgwafAlertOpsgenieIntegration.Invoke(new()\n    {\n        WorkspaceId = testRedactionsWorkspace.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"ngwafOpsgenieAlertsAll\"] = opsgenieAlerts,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupNgwafAlertOpsgenieIntegration(ctx, \u0026fastly.LookupNgwafAlertOpsgenieIntegrationArgs{\n\t\t\tWorkspaceId: testRedactionsWorkspace.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ngwafOpsgenieAlertsAll\", opsgenieAlerts)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafAlertOpsgenieIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var ngwafOpsgenieAlerts = FastlyFunctions.getNgwafAlertOpsgenieIntegration(GetNgwafAlertOpsgenieIntegrationArgs.builder()\n            .workspaceId(testRedactionsWorkspace.id())\n            .build());\n\n        ctx.export(\"ngwafOpsgenieAlertsAll\", opsgenieAlerts);\n    }\n}\n```\n```yaml\nvariables:\n  ngwafOpsgenieAlerts:\n    fn::invoke:\n      function: fastly:getNgwafAlertOpsgenieIntegration\n      arguments:\n        workspaceId: ${testRedactionsWorkspace.id}\noutputs:\n  ngwafOpsgenieAlertsAll: ${opsgenieAlerts}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNgwafAlertOpsgenieIntegration.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafAlertOpsgenieIntegration.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"opsgenieAlerts":{"description":"List of all Opsgenie alerts for a workspace.\n","items":{"$ref":"#/types/fastly:index/getNgwafAlertOpsgenieIntegrationOpsgenieAlert:getNgwafAlertOpsgenieIntegrationOpsgenieAlert"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["opsgenieAlerts","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafAlertPagerdutyIntegration:getNgwafAlertPagerdutyIntegration":{"description":"Use this data source to get a Fastly Next-Gen WAF Alert PagerDuty integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst ngwafPagerdutyAlerts = fastly.getNgwafAlertPagerdutyIntegration({\n    workspaceId: example.id,\n});\nexport const ngwafPagerdutyAlertsAll = ngwafPagerdutyAlerts;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nngwaf_pagerduty_alerts = fastly.get_ngwaf_alert_pagerduty_integration(workspace_id=example[\"id\"])\npulumi.export(\"ngwafPagerdutyAlertsAll\", ngwaf_pagerduty_alerts)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ngwafPagerdutyAlerts = Fastly.GetNgwafAlertPagerdutyIntegration.Invoke(new()\n    {\n        WorkspaceId = example.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"ngwafPagerdutyAlertsAll\"] = ngwafPagerdutyAlerts,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tngwafPagerdutyAlerts, err := fastly.LookupNgwafAlertPagerdutyIntegration(ctx, \u0026fastly.LookupNgwafAlertPagerdutyIntegrationArgs{\n\t\t\tWorkspaceId: example.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ngwafPagerdutyAlertsAll\", ngwafPagerdutyAlerts)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafAlertPagerdutyIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var ngwafPagerdutyAlerts = FastlyFunctions.getNgwafAlertPagerdutyIntegration(GetNgwafAlertPagerdutyIntegrationArgs.builder()\n            .workspaceId(example.id())\n            .build());\n\n        ctx.export(\"ngwafPagerdutyAlertsAll\", ngwafPagerdutyAlerts);\n    }\n}\n```\n```yaml\nvariables:\n  ngwafPagerdutyAlerts:\n    fn::invoke:\n      function: fastly:getNgwafAlertPagerdutyIntegration\n      arguments:\n        workspaceId: ${example.id}\noutputs:\n  ngwafPagerdutyAlertsAll: ${ngwafPagerdutyAlerts}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNgwafAlertPagerdutyIntegration.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafAlertPagerdutyIntegration.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"pagerdutyAlerts":{"description":"List of all PagerDuty alerts for a workspace.\n","items":{"$ref":"#/types/fastly:index/getNgwafAlertPagerdutyIntegrationPagerdutyAlert:getNgwafAlertPagerdutyIntegrationPagerdutyAlert"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["pagerdutyAlerts","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafAlertSlackIntegration:getNgwafAlertSlackIntegration":{"description":"Use this data source to get a Fastly Next-Gen WAF Alert Slack integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst ngwafSlackAlerts = fastly.getNgwafAlertSlackIntegration({\n    workspaceId: example.id,\n});\nexport const ngwafSlackAlertsAll = ngwafSlackAlerts;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nngwaf_slack_alerts = fastly.get_ngwaf_alert_slack_integration(workspace_id=example[\"id\"])\npulumi.export(\"ngwafSlackAlertsAll\", ngwaf_slack_alerts)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ngwafSlackAlerts = Fastly.GetNgwafAlertSlackIntegration.Invoke(new()\n    {\n        WorkspaceId = example.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"ngwafSlackAlertsAll\"] = ngwafSlackAlerts,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tngwafSlackAlerts, err := fastly.LookupNgwafAlertSlackIntegration(ctx, \u0026fastly.LookupNgwafAlertSlackIntegrationArgs{\n\t\t\tWorkspaceId: example.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ngwafSlackAlertsAll\", ngwafSlackAlerts)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafAlertSlackIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var ngwafSlackAlerts = FastlyFunctions.getNgwafAlertSlackIntegration(GetNgwafAlertSlackIntegrationArgs.builder()\n            .workspaceId(example.id())\n            .build());\n\n        ctx.export(\"ngwafSlackAlertsAll\", ngwafSlackAlerts);\n    }\n}\n```\n```yaml\nvariables:\n  ngwafSlackAlerts:\n    fn::invoke:\n      function: fastly:getNgwafAlertSlackIntegration\n      arguments:\n        workspaceId: ${example.id}\noutputs:\n  ngwafSlackAlertsAll: ${ngwafSlackAlerts}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNgwafAlertSlackIntegration.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafAlertSlackIntegration.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"slackAlerts":{"description":"List of all Slack alerts for a workspace.\n","items":{"$ref":"#/types/fastly:index/getNgwafAlertSlackIntegrationSlackAlert:getNgwafAlertSlackIntegrationSlackAlert"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["slackAlerts","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafAlertWebhookIntegration:getNgwafAlertWebhookIntegration":{"description":"Use this data source to get a Fastly Next-Gen WAF Alert Webhook integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst ngwafWebhookAlerts = fastly.getNgwafAlertWebhookIntegration({\n    workspaceId: example.id,\n});\nexport const ngwafWebhookAlertsAll = ngwafWebhookAlerts;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nngwaf_webhook_alerts = fastly.get_ngwaf_alert_webhook_integration(workspace_id=example[\"id\"])\npulumi.export(\"ngwafWebhookAlertsAll\", ngwaf_webhook_alerts)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ngwafWebhookAlerts = Fastly.GetNgwafAlertWebhookIntegration.Invoke(new()\n    {\n        WorkspaceId = example.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"ngwafWebhookAlertsAll\"] = ngwafWebhookAlerts,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tngwafWebhookAlerts, err := fastly.LookupNgwafAlertWebhookIntegration(ctx, \u0026fastly.LookupNgwafAlertWebhookIntegrationArgs{\n\t\t\tWorkspaceId: example.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ngwafWebhookAlertsAll\", ngwafWebhookAlerts)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafAlertWebhookIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var ngwafWebhookAlerts = FastlyFunctions.getNgwafAlertWebhookIntegration(GetNgwafAlertWebhookIntegrationArgs.builder()\n            .workspaceId(example.id())\n            .build());\n\n        ctx.export(\"ngwafWebhookAlertsAll\", ngwafWebhookAlerts);\n    }\n}\n```\n```yaml\nvariables:\n  ngwafWebhookAlerts:\n    fn::invoke:\n      function: fastly:getNgwafAlertWebhookIntegration\n      arguments:\n        workspaceId: ${example.id}\noutputs:\n  ngwafWebhookAlertsAll: ${ngwafWebhookAlerts}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNgwafAlertWebhookIntegration.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafAlertWebhookIntegration.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"webhookAlerts":{"description":"List of all webhook alerts for a workspace.\n","items":{"$ref":"#/types/fastly:index/getNgwafAlertWebhookIntegrationWebhookAlert:getNgwafAlertWebhookIntegrationWebhookAlert"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["webhookAlerts","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafRedactions:getNgwafRedactions":{"description":"Use this data source to get a list of [Fastly Next-Gen WAF Redactions][1].\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst ngwafRedactions = fastly.getNgwafRedactions({\n    workspaceId: testRedactionsWorkspace.id,\n});\nexport const fastlyNgwafRedactionsAll = redactions;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nngwaf_redactions = fastly.get_ngwaf_redactions(workspace_id=test_redactions_workspace[\"id\"])\npulumi.export(\"fastlyNgwafRedactionsAll\", redactions)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ngwafRedactions = Fastly.GetNgwafRedactions.Invoke(new()\n    {\n        WorkspaceId = testRedactionsWorkspace.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"fastlyNgwafRedactionsAll\"] = redactions,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.GetNgwafRedactions(ctx, \u0026fastly.GetNgwafRedactionsArgs{\n\t\t\tWorkspaceId: testRedactionsWorkspace.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"fastlyNgwafRedactionsAll\", redactions)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafRedactionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var ngwafRedactions = FastlyFunctions.getNgwafRedactions(GetNgwafRedactionsArgs.builder()\n            .workspaceId(testRedactionsWorkspace.id())\n            .build());\n\n        ctx.export(\"fastlyNgwafRedactionsAll\", redactions);\n    }\n}\n```\n```yaml\nvariables:\n  ngwafRedactions:\n    fn::invoke:\n      function: fastly:getNgwafRedactions\n      arguments:\n        workspaceId: ${testRedactionsWorkspace.id}\noutputs:\n  fastlyNgwafRedactionsAll: ${redactions}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n[1]: https://www.fastly.com/documentation/reference/api/ngwaf/redactions/\n","inputs":{"description":"A collection of arguments for invoking getNgwafRedactions.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafRedactions.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"redactions":{"description":"List of all redactions for a workspace.\n","items":{"$ref":"#/types/fastly:index/getNgwafRedactionsRedaction:getNgwafRedactionsRedaction"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["redactions","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafThresholds:getNgwafThresholds":{"inputs":{"description":"A collection of arguments for invoking getNgwafThresholds.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafThresholds.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"thresholds":{"description":"List of all thresholds for a given workspace.\n","items":{"$ref":"#/types/fastly:index/getNgwafThresholdsThreshold:getNgwafThresholdsThreshold"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["thresholds","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafVirtualPatches:getNgwafVirtualPatches":{"description":"Use this data source to get a list of [Fastly Next-Gen WAF Virtual Patches][1] for a given workspace.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst listPatches = fastly.getNgwafVirtualPatches({\n    workspaceId: testVirtualPatchesWorkspace.id,\n});\nexport const fastlyNgwafVirtualPatchesAll = listPatches;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nlist_patches = fastly.get_ngwaf_virtual_patches(workspace_id=test_virtual_patches_workspace[\"id\"])\npulumi.export(\"fastlyNgwafVirtualPatchesAll\", list_patches)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var listPatches = Fastly.GetNgwafVirtualPatches.Invoke(new()\n    {\n        WorkspaceId = testVirtualPatchesWorkspace.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"fastlyNgwafVirtualPatchesAll\"] = listPatches,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tlistPatches, err := fastly.LookupNgwafVirtualPatches(ctx, \u0026fastly.LookupNgwafVirtualPatchesArgs{\n\t\t\tWorkspaceId: testVirtualPatchesWorkspace.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"fastlyNgwafVirtualPatchesAll\", listPatches)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafVirtualPatchesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var listPatches = FastlyFunctions.getNgwafVirtualPatches(GetNgwafVirtualPatchesArgs.builder()\n            .workspaceId(testVirtualPatchesWorkspace.id())\n            .build());\n\n        ctx.export(\"fastlyNgwafVirtualPatchesAll\", listPatches);\n    }\n}\n```\n```yaml\nvariables:\n  listPatches:\n    fn::invoke:\n      function: fastly:getNgwafVirtualPatches\n      arguments:\n        workspaceId: ${testVirtualPatchesWorkspace.id}\noutputs:\n  fastlyNgwafVirtualPatchesAll: ${listPatches}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n[1]: https://www.fastly.com/documentation/reference/api/ngwaf/virtual-patches/\n","inputs":{"description":"A collection of arguments for invoking getNgwafVirtualPatches.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafVirtualPatches.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"virtualPatches":{"description":"List of all virtual patches for a given workspace.\n","items":{"$ref":"#/types/fastly:index/getNgwafVirtualPatchesVirtualPatch:getNgwafVirtualPatchesVirtualPatch"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["virtualPatches","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafWorkspaceLists:getNgwafWorkspaceLists":{"description":"Use this data source to get a Fastly Next-Gen WAF Workspace List.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst workspaceLists = fastly.getNgwafWorkspaceLists({\n    workspaceId: example.id,\n});\nexport const fastlyNgwafWorkspaceListsAll = workspaceLists;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nworkspace_lists = fastly.get_ngwaf_workspace_lists(workspace_id=example[\"id\"])\npulumi.export(\"fastlyNgwafWorkspaceListsAll\", workspace_lists)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var workspaceLists = Fastly.GetNgwafWorkspaceLists.Invoke(new()\n    {\n        WorkspaceId = example.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"fastlyNgwafWorkspaceListsAll\"] = workspaceLists,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tworkspaceLists, err := fastly.GetNgwafWorkspaceLists(ctx, \u0026fastly.GetNgwafWorkspaceListsArgs{\n\t\t\tWorkspaceId: example.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"fastlyNgwafWorkspaceListsAll\", workspaceLists)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafWorkspaceListsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var workspaceLists = FastlyFunctions.getNgwafWorkspaceLists(GetNgwafWorkspaceListsArgs.builder()\n            .workspaceId(example.id())\n            .build());\n\n        ctx.export(\"fastlyNgwafWorkspaceListsAll\", workspaceLists);\n    }\n}\n```\n```yaml\nvariables:\n  workspaceLists:\n    fn::invoke:\n      function: fastly:getNgwafWorkspaceLists\n      arguments:\n        workspaceId: ${example.id}\noutputs:\n  fastlyNgwafWorkspaceListsAll: ${workspaceLists}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNgwafWorkspaceLists.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafWorkspaceLists.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"lists":{"description":"The list of lists.\n","items":{"$ref":"#/types/fastly:index/getNgwafWorkspaceListsList:getNgwafWorkspaceListsList"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["lists","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafWorkspaceRules:getNgwafWorkspaceRules":{"description":"Use this data source to get a Fastly Next-Gen WAF Workspace Rule.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst workspaceRules = fastly.getNgwafWorkspaceRules({\n    workspaceId: example.id,\n});\nexport const fastlyNgwafWorkspaceRulesAll = workspaceRules;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nworkspace_rules = fastly.get_ngwaf_workspace_rules(workspace_id=example[\"id\"])\npulumi.export(\"fastlyNgwafWorkspaceRulesAll\", workspace_rules)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var workspaceRules = Fastly.GetNgwafWorkspaceRules.Invoke(new()\n    {\n        WorkspaceId = example.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"fastlyNgwafWorkspaceRulesAll\"] = workspaceRules,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tworkspaceRules, err := fastly.GetNgwafWorkspaceRules(ctx, \u0026fastly.GetNgwafWorkspaceRulesArgs{\n\t\t\tWorkspaceId: example.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"fastlyNgwafWorkspaceRulesAll\", workspaceRules)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafWorkspaceRulesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var workspaceRules = FastlyFunctions.getNgwafWorkspaceRules(GetNgwafWorkspaceRulesArgs.builder()\n            .workspaceId(example.id())\n            .build());\n\n        ctx.export(\"fastlyNgwafWorkspaceRulesAll\", workspaceRules);\n    }\n}\n```\n```yaml\nvariables:\n  workspaceRules:\n    fn::invoke:\n      function: fastly:getNgwafWorkspaceRules\n      arguments:\n        workspaceId: ${example.id}\noutputs:\n  fastlyNgwafWorkspaceRulesAll: ${workspaceRules}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNgwafWorkspaceRules.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafWorkspaceRules.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"rules":{"description":"The list of rules.\n","items":{"$ref":"#/types/fastly:index/getNgwafWorkspaceRulesRule:getNgwafWorkspaceRulesRule"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["rules","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafWorkspaceSignals:getNgwafWorkspaceSignals":{"description":"Use this data source to get a Fastly Next-Gen WAF Workspace Signal.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst workspaceSignals = fastly.getNgwafWorkspaceSignals({\n    workspaceId: example.id,\n});\nexport const fastlyNgwafWorkspaceSignalsAll = workspaceSignals;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nworkspace_signals = fastly.get_ngwaf_workspace_signals(workspace_id=example[\"id\"])\npulumi.export(\"fastlyNgwafWorkspaceSignalsAll\", workspace_signals)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var workspaceSignals = Fastly.GetNgwafWorkspaceSignals.Invoke(new()\n    {\n        WorkspaceId = example.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"fastlyNgwafWorkspaceSignalsAll\"] = workspaceSignals,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tworkspaceSignals, err := fastly.GetNgwafWorkspaceSignals(ctx, \u0026fastly.GetNgwafWorkspaceSignalsArgs{\n\t\t\tWorkspaceId: example.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"fastlyNgwafWorkspaceSignalsAll\", workspaceSignals)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetNgwafWorkspaceSignalsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var workspaceSignals = FastlyFunctions.getNgwafWorkspaceSignals(GetNgwafWorkspaceSignalsArgs.builder()\n            .workspaceId(example.id())\n            .build());\n\n        ctx.export(\"fastlyNgwafWorkspaceSignalsAll\", workspaceSignals);\n    }\n}\n```\n```yaml\nvariables:\n  workspaceSignals:\n    fn::invoke:\n      function: fastly:getNgwafWorkspaceSignals\n      arguments:\n        workspaceId: ${example.id}\noutputs:\n  fastlyNgwafWorkspaceSignalsAll: ${workspaceSignals}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNgwafWorkspaceSignals.\n","properties":{"workspaceId":{"type":"string","description":"The ID of the workspace.\n"}},"type":"object","required":["workspaceId"]},"outputs":{"description":"A collection of values returned by getNgwafWorkspaceSignals.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"signals":{"description":"The list of custom signals.\n","items":{"$ref":"#/types/fastly:index/getNgwafWorkspaceSignalsSignal:getNgwafWorkspaceSignalsSignal"},"type":"array"},"workspaceId":{"description":"The ID of the workspace.\n","type":"string"}},"required":["signals","workspaceId","id"],"type":"object"}},"fastly:index/getNgwafWorkspaces:getNgwafWorkspaces":{"description":"Use this data source to get a list of [Fastly Next-Gen WAF Workspaces][1].\n\n","outputs":{"description":"A collection of values returned by getNgwafWorkspaces.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"workspaces":{"description":"List of all workspaces.\n","items":{"$ref":"#/types/fastly:index/getNgwafWorkspacesWorkspace:getNgwafWorkspacesWorkspace"},"type":"array"}},"required":["workspaces","id"],"type":"object"}},"fastly:index/getPackageHash:getPackageHash":{"description":"Use this data source to generate a SHA512 hash of all files (in sorted order) within the package.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getPackageHash({\n    filename: \"./path/to/package.tar.gz\",\n});\nconst exampleServiceCompute = new fastly.ServiceCompute(\"example\", {\"package\": {\n    filename: \"./path/to/package.tar.gz\",\n    sourceCodeHash: example.then(example =\u003e example.hash),\n}});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_package_hash(filename=\"./path/to/package.tar.gz\")\nexample_service_compute = fastly.ServiceCompute(\"example\", package={\n    \"filename\": \"./path/to/package.tar.gz\",\n    \"source_code_hash\": example.hash,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetPackageHash.Invoke(new()\n    {\n        Filename = \"./path/to/package.tar.gz\",\n    });\n\n    var exampleServiceCompute = new Fastly.ServiceCompute(\"example\", new()\n    {\n        Package = new Fastly.Inputs.ServiceComputePackageArgs\n        {\n            Filename = \"./path/to/package.tar.gz\",\n            SourceCodeHash = example.Apply(getPackageHashResult =\u003e getPackageHashResult.Hash),\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.GetPackageHash(ctx, \u0026fastly.GetPackageHashArgs{\n\t\t\tFilename: pulumi.StringRef(\"./path/to/package.tar.gz\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceCompute(ctx, \"example\", \u0026fastly.ServiceComputeArgs{\n\t\t\tPackage: \u0026fastly.ServiceComputePackageArgs{\n\t\t\t\tFilename:       pulumi.String(\"./path/to/package.tar.gz\"),\n\t\t\t\tSourceCodeHash: pulumi.String(example.Hash),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetPackageHashArgs;\nimport com.pulumi.fastly.ServiceCompute;\nimport com.pulumi.fastly.ServiceComputeArgs;\nimport com.pulumi.fastly.inputs.ServiceComputePackageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = FastlyFunctions.getPackageHash(GetPackageHashArgs.builder()\n            .filename(\"./path/to/package.tar.gz\")\n            .build());\n\n        var exampleServiceCompute = new ServiceCompute(\"exampleServiceCompute\", ServiceComputeArgs.builder()\n            .package_(ServiceComputePackageArgs.builder()\n                .filename(\"./path/to/package.tar.gz\")\n                .sourceCodeHash(example.hash())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  exampleServiceCompute:\n    type: fastly:ServiceCompute\n    name: example\n    properties:\n      package:\n        filename: ./path/to/package.tar.gz\n        sourceCodeHash: ${example.hash}\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getPackageHash\n      arguments:\n        filename: ./path/to/package.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getPackageHash.\n","properties":{"content":{"type":"string","description":"The contents of the Wasm deployment package as a base64 encoded string (e.g. could be provided using an input variable or via external data source output variable). Conflicts with \u003cspan pulumi-lang-nodejs=\"`filename`\" pulumi-lang-dotnet=\"`Filename`\" pulumi-lang-go=\"`filename`\" pulumi-lang-python=\"`filename`\" pulumi-lang-yaml=\"`filename`\" pulumi-lang-java=\"`filename`\"\u003e`filename`\u003c/span\u003e. Exactly one of these two arguments must be specified\n"},"filename":{"type":"string","description":"The path to the Wasm deployment package within your local filesystem. Conflicts with \u003cspan pulumi-lang-nodejs=\"`content`\" pulumi-lang-dotnet=\"`Content`\" pulumi-lang-go=\"`content`\" pulumi-lang-python=\"`content`\" pulumi-lang-yaml=\"`content`\" pulumi-lang-java=\"`content`\"\u003e`content`\u003c/span\u003e. Exactly one of these two arguments must be specified\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getPackageHash.\n","properties":{"content":{"description":"The contents of the Wasm deployment package as a base64 encoded string (e.g. could be provided using an input variable or via external data source output variable). Conflicts with \u003cspan pulumi-lang-nodejs=\"`filename`\" pulumi-lang-dotnet=\"`Filename`\" pulumi-lang-go=\"`filename`\" pulumi-lang-python=\"`filename`\" pulumi-lang-yaml=\"`filename`\" pulumi-lang-java=\"`filename`\"\u003e`filename`\u003c/span\u003e. Exactly one of these two arguments must be specified\n","type":"string"},"filename":{"description":"The path to the Wasm deployment package within your local filesystem. Conflicts with \u003cspan pulumi-lang-nodejs=\"`content`\" pulumi-lang-dotnet=\"`Content`\" pulumi-lang-go=\"`content`\" pulumi-lang-python=\"`content`\" pulumi-lang-yaml=\"`content`\" pulumi-lang-java=\"`content`\"\u003e`content`\u003c/span\u003e. Exactly one of these two arguments must be specified\n","type":"string"},"hash":{"description":"A SHA512 hash of all files (in sorted order) within the package.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"}},"required":["hash","id"],"type":"object"}},"fastly:index/getSecretstores:getSecretstores":{"outputs":{"description":"A collection of values returned by getSecretstores.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"stores":{"description":"List of all Secrets Stores.\n","items":{"$ref":"#/types/fastly:index/getSecretstoresStore:getSecretstoresStore"},"type":"array"}},"required":["stores","id"],"type":"object"}},"fastly:index/getServices:getServices":{"description":"Use this data source to get the list of the [Fastly services](https://developer.fastly.com/reference/api/services/service/).\n\n","outputs":{"description":"A collection of values returned by getServices.\n","properties":{"details":{"description":"A detailed list of Fastly services in your account. This is limited to the services the API token can read.\n","items":{"$ref":"#/types/fastly:index/getServicesDetail:getServicesDetail"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"ids":{"description":"A list of service IDs in your account. This is limited to the services the API token can read.\n","items":{"type":"string"},"type":"array"}},"required":["details","ids","id"],"type":"object"}},"fastly:index/getStagingIps:getStagingIps":{"inputs":{"description":"A collection of arguments for invoking getStagingIps.\n","properties":{"serviceId":{"type":"string","description":"Alphanumeric string identifying the service.\n"},"serviceVersion":{"type":"integer","description":"Integer identifying a service version.\n"}},"type":"object","required":["serviceId","serviceVersion"]},"outputs":{"description":"A collection of values returned by getStagingIps.\n","properties":{"domains":{"description":"List of domains with their staging IP addresses.\n","items":{"$ref":"#/types/fastly:index/getStagingIpsDomain:getStagingIpsDomain"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"serviceId":{"description":"Alphanumeric string identifying the service.\n","type":"string"},"serviceVersion":{"description":"Integer identifying a service version.\n","type":"integer"}},"required":["domains","serviceId","serviceVersion","id"],"type":"object"}},"fastly:index/getTlsActivation:getTlsActivation":{"description":"Use this data source to get information on a TLS activation, including the certificate used, and the domain on which TLS was enabled.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is \u003cspan pulumi-lang-nodejs=\"`id`\" pulumi-lang-dotnet=\"`Id`\" pulumi-lang-go=\"`id`\" pulumi-lang-python=\"`id`\" pulumi-lang-yaml=\"`id`\" pulumi-lang-java=\"`id`\"\u003e`id`\u003c/span\u003e which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getTlsActivation({\n    domain: \"example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_activation(domain=\"example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetTlsActivation.Invoke(new()\n    {\n        Domain = \"example.com\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsActivation(ctx, \u0026fastly.LookupTlsActivationArgs{\n\t\t\tDomain: pulumi.StringRef(\"example.com\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsActivationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = FastlyFunctions.getTlsActivation(GetTlsActivationArgs.builder()\n            .domain(\"example.com\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getTlsActivation\n      arguments:\n        domain: example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTlsActivation.\n","properties":{"certificateId":{"type":"string","description":"ID of the TLS Certificate used.\n"},"configurationId":{"type":"string","description":"ID of the TLS Configuration used.\n"},"domain":{"type":"string","description":"Domain that TLS was enabled on.\n"},"id":{"type":"string","description":"Fastly Activation ID. Conflicts with all other filters.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsActivation.\n","properties":{"certificateId":{"description":"ID of the TLS Certificate used.\n","type":"string"},"configurationId":{"description":"ID of the TLS Configuration used.\n","type":"string"},"createdAt":{"description":"Timestamp (GMT) when TLS was enabled.\n","type":"string"},"domain":{"description":"Domain that TLS was enabled on.\n","type":"string"},"id":{"description":"Fastly Activation ID. Conflicts with all other filters.\n","type":"string"}},"required":["certificateId","configurationId","createdAt","domain","id"],"type":"object"}},"fastly:index/getTlsActivationIds:getTlsActivationIds":{"description":"Use this data source to get the list of TLS Activation identifiers in Fastly.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getTlsActivationIds({\n    certificateId: exampleFastlyTlsCertificate.id,\n});\nconst exampleGetTlsActivation = example.then(example =\u003e .reduce((__obj, [__key, __value]) =\u003e ({ ...__obj, [__key]: fastly.getTlsActivation({\n    id: __value,\n}) })));\nexport const activationDomains = exampleGetTlsActivation.apply(exampleGetTlsActivation =\u003e Object.values(exampleGetTlsActivation).map(a =\u003e (a.domain)));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_activation_ids(certificate_id=example_fastly_tls_certificate[\"id\"])\nexample_get_tls_activation = {__key: fastly.get_tls_activation(id=__value) for __key, __value in example.ids}\npulumi.export(\"activationDomains\", [a.domain for a in example_get_tls_activation])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetTlsActivationIds.Invoke(new()\n    {\n        CertificateId = exampleFastlyTlsCertificate.Id,\n    });\n\n    var exampleGetTlsActivation = ;\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"activationDomains\"] = exampleGetTlsActivation.Apply(exampleGetTlsActivation =\u003e (exampleGetTlsActivation).Values.Select(a =\u003e \n        {\n            return a.Domain;\n        }).ToList()),\n    };\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTlsActivationIds.\n","properties":{"certificateId":{"type":"string","description":"ID of TLS certificate used to filter activations\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsActivationIds.\n","properties":{"certificateId":{"description":"ID of TLS certificate used to filter activations\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"ids":{"description":"List of IDs of the TLS Activations.\n","items":{"type":"string"},"type":"array"}},"required":["ids","id"],"type":"object"}},"fastly:index/getTlsCertificate:getTlsCertificate":{"description":"Use this data source to get information of a TLS certificate for use with other resources.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is \u003cspan pulumi-lang-nodejs=\"`id`\" pulumi-lang-dotnet=\"`Id`\" pulumi-lang-go=\"`id`\" pulumi-lang-python=\"`id`\" pulumi-lang-yaml=\"`id`\" pulumi-lang-java=\"`id`\"\u003e`id`\u003c/span\u003e which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getTlsCertificate({\n    name: \"example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_certificate(name=\"example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetTlsCertificate.Invoke(new()\n    {\n        Name = \"example.com\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsCertificate(ctx, \u0026fastly.LookupTlsCertificateArgs{\n\t\t\tName: pulumi.StringRef(\"example.com\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = FastlyFunctions.getTlsCertificate(GetTlsCertificateArgs.builder()\n            .name(\"example.com\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getTlsCertificate\n      arguments:\n        name: example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTlsCertificate.\n","properties":{"domains":{"type":"array","items":{"type":"string"},"description":"Domains that are listed in any certificates' Subject Alternative Names (SAN) list.\n"},"id":{"type":"string","description":"Unique ID assigned to certificate by Fastly\n"},"issuedTo":{"type":"string","description":"The hostname for which a certificate was issued.\n"},"issuer":{"type":"string","description":"The certificate authority that issued the certificate.\n"},"name":{"type":"string","description":"Human-readable name used to identify the certificate. Defaults to the certificate's Common Name or first Subject Alternative Name entry.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsCertificate.\n","properties":{"createdAt":{"description":"Timestamp (GMT) when the certificate was created\n","type":"string"},"domains":{"description":"Domains that are listed in any certificates' Subject Alternative Names (SAN) list.\n","items":{"type":"string"},"type":"array"},"id":{"description":"Unique ID assigned to certificate by Fastly\n","type":"string"},"issuedTo":{"description":"The hostname for which a certificate was issued.\n","type":"string"},"issuer":{"description":"The certificate authority that issued the certificate.\n","type":"string"},"name":{"description":"Human-readable name used to identify the certificate. Defaults to the certificate's Common Name or first Subject Alternative Name entry.\n","type":"string"},"replace":{"description":"A recommendation from Fastly indicating the key associated with this certificate is in need of rotation\n","type":"boolean"},"serialNumber":{"description":"A value assigned by the issuer that is unique to a certificate\n","type":"string"},"signatureAlgorithm":{"description":"The algorithm used to sign the certificate\n","type":"string"},"updatedAt":{"description":"Timestamp (GMT) when the certificate was last updated\n","type":"string"}},"required":["createdAt","domains","id","issuedTo","issuer","name","replace","serialNumber","signatureAlgorithm","updatedAt"],"type":"object"}},"fastly:index/getTlsCertificateIds:getTlsCertificateIds":{"description":"Use this data source to get the IDs of available TLS certificates for use with other resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getTlsCertificateIds({});\nconst exampleTlsActivation = new fastly.TlsActivation(\"example\", {certificateId: example.then(example =\u003e example.ids?.[0])});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_certificate_ids()\nexample_tls_activation = fastly.TlsActivation(\"example\", certificate_id=example.ids[0])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetTlsCertificateIds.Invoke();\n\n    var exampleTlsActivation = new Fastly.TlsActivation(\"example\", new()\n    {\n        CertificateId = example.Apply(getTlsCertificateIdsResult =\u003e getTlsCertificateIdsResult.Ids[0]),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.GetTlsCertificateIds(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"example\", \u0026fastly.TlsActivationArgs{\n\t\t\tCertificateId: pulumi.String(example.Ids[0]),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.TlsActivation;\nimport com.pulumi.fastly.TlsActivationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = FastlyFunctions.getTlsCertificateIds(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n        var exampleTlsActivation = new TlsActivation(\"exampleTlsActivation\", TlsActivationArgs.builder()\n            .certificateId(example.ids()[0])\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  exampleTlsActivation:\n    type: fastly:TlsActivation\n    name: example\n    properties:\n      certificateId: ${example.ids[0]}\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getTlsCertificateIds\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getTlsCertificateIds.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"ids":{"description":"List of IDs corresponding to Custom TLS certificates.\n","items":{"type":"string"},"type":"array"}},"required":["ids","id"],"type":"object"}},"fastly:index/getTlsConfiguration:getTlsConfiguration":{"description":"Use this data source to get the ID of a TLS configuration for use with other resources.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is \u003cspan pulumi-lang-nodejs=\"`id`\" pulumi-lang-dotnet=\"`Id`\" pulumi-lang-go=\"`id`\" pulumi-lang-python=\"`id`\" pulumi-lang-yaml=\"`id`\" pulumi-lang-java=\"`id`\"\u003e`id`\u003c/span\u003e which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getTlsConfiguration({\n    \"default\": true,\n});\nconst exampleTlsActivation = new fastly.TlsActivation(\"example\", {configurationId: example.then(example =\u003e example.id)});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_configuration(default=True)\nexample_tls_activation = fastly.TlsActivation(\"example\", configuration_id=example.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetTlsConfiguration.Invoke(new()\n    {\n        Default = true,\n    });\n\n    var exampleTlsActivation = new Fastly.TlsActivation(\"example\", new()\n    {\n        ConfigurationId = example.Apply(getTlsConfigurationResult =\u003e getTlsConfigurationResult.Id),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.GetTlsConfiguration(ctx, \u0026fastly.GetTlsConfigurationArgs{\n\t\t\tDefault: pulumi.BoolRef(true),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"example\", \u0026fastly.TlsActivationArgs{\n\t\t\tConfigurationId: pulumi.String(example.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsConfigurationArgs;\nimport com.pulumi.fastly.TlsActivation;\nimport com.pulumi.fastly.TlsActivationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = FastlyFunctions.getTlsConfiguration(GetTlsConfigurationArgs.builder()\n            .default_(true)\n            .build());\n\n        var exampleTlsActivation = new TlsActivation(\"exampleTlsActivation\", TlsActivationArgs.builder()\n            .configurationId(example.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  exampleTlsActivation:\n    type: fastly:TlsActivation\n    name: example\n    properties:\n      configurationId: ${example.id}\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getTlsConfiguration\n      arguments:\n        default: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTlsConfiguration.\n","properties":{"default":{"type":"boolean","description":"Signifies whether Fastly will use this configuration as a default when creating a new TLS activation.\n"},"httpProtocols":{"type":"array","items":{"type":"string"},"description":"HTTP protocols available on the TLS configuration.\n"},"id":{"type":"string","description":"ID of the TLS configuration obtained from the Fastly API or another data source. Conflicts with all the other filters.\n"},"name":{"type":"string","description":"Custom name of the TLS configuration.\n"},"tlsProtocols":{"type":"array","items":{"type":"string"},"description":"TLS protocols available on the TLS configuration.\n"},"tlsService":{"type":"string","description":"Whether the configuration should support the `PLATFORM` or `CUSTOM` TLS service.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsConfiguration.\n","properties":{"createdAt":{"description":"Timestamp (GMT) when the configuration was created.\n","type":"string"},"default":{"description":"Signifies whether Fastly will use this configuration as a default when creating a new TLS activation.\n","type":"boolean"},"dnsRecords":{"description":"The available DNS addresses that can be used to enable TLS for a domain. DNS must be configured for a domain for TLS handshakes to succeed. If enabling TLS on an apex domain (e.g. `example.com`) you must create four A records (or four AAAA records for IPv6 support) using the displayed global A record's IP addresses with your DNS provider. For subdomains and wildcard domains (e.g. `www.example.com` or `*.example.com`) you will need to create a relevant CNAME record.\n","items":{"$ref":"#/types/fastly:index/getTlsConfigurationDnsRecord:getTlsConfigurationDnsRecord"},"type":"array"},"httpProtocols":{"description":"HTTP protocols available on the TLS configuration.\n","items":{"type":"string"},"type":"array"},"id":{"description":"ID of the TLS configuration obtained from the Fastly API or another data source. Conflicts with all the other filters.\n","type":"string"},"name":{"description":"Custom name of the TLS configuration.\n","type":"string"},"tlsProtocols":{"description":"TLS protocols available on the TLS configuration.\n","items":{"type":"string"},"type":"array"},"tlsService":{"description":"Whether the configuration should support the `PLATFORM` or `CUSTOM` TLS service.\n","type":"string"},"updatedAt":{"description":"Timestamp (GMT) when the configuration was last updated.\n","type":"string"}},"required":["createdAt","default","dnsRecords","httpProtocols","id","name","tlsProtocols","tlsService","updatedAt"],"type":"object"}},"fastly:index/getTlsConfigurationIds:getTlsConfigurationIds":{"description":"Use this data source to get the IDs of available TLS configurations for use with other resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getTlsConfigurationIds({});\nconst exampleTlsActivation = new fastly.TlsActivation(\"example\", {configurationId: example.then(example =\u003e example.ids?.[0])});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_configuration_ids()\nexample_tls_activation = fastly.TlsActivation(\"example\", configuration_id=example.ids[0])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetTlsConfigurationIds.Invoke();\n\n    var exampleTlsActivation = new Fastly.TlsActivation(\"example\", new()\n    {\n        ConfigurationId = example.Apply(getTlsConfigurationIdsResult =\u003e getTlsConfigurationIdsResult.Ids[0]),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.GetTlsConfigurationIds(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"example\", \u0026fastly.TlsActivationArgs{\n\t\t\tConfigurationId: pulumi.String(example.Ids[0]),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.TlsActivation;\nimport com.pulumi.fastly.TlsActivationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = FastlyFunctions.getTlsConfigurationIds(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n        var exampleTlsActivation = new TlsActivation(\"exampleTlsActivation\", TlsActivationArgs.builder()\n            .configurationId(example.ids()[0])\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  exampleTlsActivation:\n    type: fastly:TlsActivation\n    name: example\n    properties:\n      configurationId: ${example.ids[0]}\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getTlsConfigurationIds\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getTlsConfigurationIds.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"ids":{"description":"List of IDs corresponding to available TLS configurations.\n","items":{"type":"string"},"type":"array"}},"required":["ids","id"],"type":"object"}},"fastly:index/getTlsDomain:getTlsDomain":{"description":"Use this data source to get the IDs of activations, certificates and subscriptions associated with a domain.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst domain = fastly.getTlsDomain({\n    domain: \"example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndomain = fastly.get_tls_domain(domain=\"example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var domain = Fastly.GetTlsDomain.Invoke(new()\n    {\n        Domain = \"example.com\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.GetTlsDomain(ctx, \u0026fastly.GetTlsDomainArgs{\n\t\t\tDomain: \"example.com\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsDomainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var domain = FastlyFunctions.getTlsDomain(GetTlsDomainArgs.builder()\n            .domain(\"example.com\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  domain:\n    fn::invoke:\n      function: fastly:getTlsDomain\n      arguments:\n        domain: example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTlsDomain.\n","properties":{"domain":{"type":"string","description":"Domain name to look up activations, certificates and subscriptions for.\n"}},"type":"object","required":["domain"]},"outputs":{"description":"A collection of values returned by getTlsDomain.\n","properties":{"domain":{"description":"Domain name to look up activations, certificates and subscriptions for.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"tlsActivationIds":{"description":"IDs of the activations associated with the domain.\n","items":{"type":"string"},"type":"array"},"tlsCertificateIds":{"description":"IDs of the certificates associated with the domain.\n","items":{"type":"string"},"type":"array"},"tlsSubscriptionIds":{"description":"IDs of the subscriptions associated with the domain.\n","items":{"type":"string"},"type":"array"}},"required":["domain","tlsActivationIds","tlsCertificateIds","tlsSubscriptionIds","id"],"type":"object"}},"fastly:index/getTlsPlatformCertificate:getTlsPlatformCertificate":{"description":"Use this data source to get information of a Platform TLS certificate for use with other resources.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is \u003cspan pulumi-lang-nodejs=\"`id`\" pulumi-lang-dotnet=\"`Id`\" pulumi-lang-go=\"`id`\" pulumi-lang-python=\"`id`\" pulumi-lang-yaml=\"`id`\" pulumi-lang-java=\"`id`\"\u003e`id`\u003c/span\u003e which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getTlsPlatformCertificate({\n    domains: [\"example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_platform_certificate(domains=[\"example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetTlsPlatformCertificate.Invoke(new()\n    {\n        Domains = new[]\n        {\n            \"example.com\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsPlatformCertificate(ctx, \u0026fastly.LookupTlsPlatformCertificateArgs{\n\t\t\tDomains: []string{\n\t\t\t\t\"example.com\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsPlatformCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = FastlyFunctions.getTlsPlatformCertificate(GetTlsPlatformCertificateArgs.builder()\n            .domains(\"example.com\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getTlsPlatformCertificate\n      arguments:\n        domains:\n          - example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTlsPlatformCertificate.\n","properties":{"domains":{"type":"array","items":{"type":"string"},"description":"Domains that are listed in any certificate's Subject Alternative Names (SAN) list.\n"},"id":{"type":"string","description":"Unique ID assigned to certificate by Fastly. Conflicts with all the other filters.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsPlatformCertificate.\n","properties":{"configurationId":{"description":"ID of TLS configuration used to terminate TLS traffic.\n","type":"string"},"createdAt":{"description":"Timestamp (GMT) when the certificate was created.\n","type":"string"},"domains":{"description":"Domains that are listed in any certificate's Subject Alternative Names (SAN) list.\n","items":{"type":"string"},"type":"array"},"id":{"description":"Unique ID assigned to certificate by Fastly. Conflicts with all the other filters.\n","type":"string"},"notAfter":{"description":"Timestamp (GMT) when the certificate will expire.\n","type":"string"},"notBefore":{"description":"Timestamp (GMT) when the certificate will become valid.\n","type":"string"},"replace":{"description":"A recommendation from Fastly indicating the key associated with this certificate is in need of rotation.\n","type":"boolean"},"updatedAt":{"description":"Timestamp (GMT) when the certificate was last updated.\n","type":"string"}},"required":["configurationId","createdAt","domains","id","notAfter","notBefore","replace","updatedAt"],"type":"object"}},"fastly:index/getTlsPlatformCertificateIds:getTlsPlatformCertificateIds":{"description":"Use this data source to get the IDs of available Platform TLS Certificates for use with other resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getTlsPlatformCertificateIds({});\nconst exampleGetTlsPlatformCertificate = example.then(example =\u003e fastly.getTlsPlatformCertificate({\n    id: example.ids?.[0],\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_platform_certificate_ids()\nexample_get_tls_platform_certificate = fastly.get_tls_platform_certificate(id=example.ids[0])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetTlsPlatformCertificateIds.Invoke();\n\n    var exampleGetTlsPlatformCertificate = Fastly.GetTlsPlatformCertificate.Invoke(new()\n    {\n        Id = example.Apply(getTlsPlatformCertificateIdsResult =\u003e getTlsPlatformCertificateIdsResult.Ids[0]),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := fastly.GetTlsPlatformCertificateIds(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.LookupTlsPlatformCertificate(ctx, \u0026fastly.LookupTlsPlatformCertificateArgs{\n\t\t\tId: pulumi.StringRef(example.Ids[0]),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsPlatformCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = FastlyFunctions.getTlsPlatformCertificateIds(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n        final var exampleGetTlsPlatformCertificate = FastlyFunctions.getTlsPlatformCertificate(GetTlsPlatformCertificateArgs.builder()\n            .id(example.ids()[0])\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getTlsPlatformCertificateIds\n      arguments: {}\n  exampleGetTlsPlatformCertificate:\n    fn::invoke:\n      function: fastly:getTlsPlatformCertificate\n      arguments:\n        id: ${example.ids[0]}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getTlsPlatformCertificateIds.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"ids":{"description":"List of IDs corresponding to Platform TLS certificates.\n","items":{"type":"string"},"type":"array"}},"required":["ids","id"],"type":"object"}},"fastly:index/getTlsPrivateKey:getTlsPrivateKey":{"description":"Use this data source to get information on a TLS Private Key uploaded to Fastly.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\n of filters, they may become mutually exclusive. The exception to this is \u003cspan pulumi-lang-nodejs=\"`id`\" pulumi-lang-dotnet=\"`Id`\" pulumi-lang-go=\"`id`\" pulumi-lang-python=\"`id`\" pulumi-lang-yaml=\"`id`\" pulumi-lang-java=\"`id`\"\u003e`id`\u003c/span\u003e which must not be specified in combination\n with any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search\n is specific enough to return a single key.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = fastly.getTlsPrivateKey({\n    name: \"demo-private-key\",\n});\nexport const privateKeyNeedsReplacing = demo.then(demo =\u003e demo.replace);\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.get_tls_private_key(name=\"demo-private-key\")\npulumi.export(\"privateKeyNeedsReplacing\", demo.replace)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demo = Fastly.GetTlsPrivateKey.Invoke(new()\n    {\n        Name = \"demo-private-key\",\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"privateKeyNeedsReplacing\"] = demo.Apply(getTlsPrivateKeyResult =\u003e getTlsPrivateKeyResult.Replace),\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemo, err := fastly.LookupTlsPrivateKey(ctx, \u0026fastly.LookupTlsPrivateKeyArgs{\n\t\t\tName: pulumi.StringRef(\"demo-private-key\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"privateKeyNeedsReplacing\", demo.Replace)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsPrivateKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var demo = FastlyFunctions.getTlsPrivateKey(GetTlsPrivateKeyArgs.builder()\n            .name(\"demo-private-key\")\n            .build());\n\n        ctx.export(\"privateKeyNeedsReplacing\", demo.replace());\n    }\n}\n```\n```yaml\nvariables:\n  demo:\n    fn::invoke:\n      function: fastly:getTlsPrivateKey\n      arguments:\n        name: demo-private-key\noutputs:\n  privateKeyNeedsReplacing: ${demo.replace}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTlsPrivateKey.\n","properties":{"createdAt":{"type":"string","description":"Timestamp (GMT) when the private key was created.\n"},"id":{"type":"string","description":"Fastly private key ID. Conflicts with all the other filters\n"},"keyLength":{"type":"integer","description":"The key length used to generate the private key.\n"},"keyType":{"type":"string","description":"The algorithm used to generate the private key. Must be RSA.\n"},"name":{"type":"string","description":"The human-readable name assigned to the private key when uploaded.\n"},"publicKeySha1":{"type":"string","description":"A hash of the associated public key, useful for safely identifying it.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsPrivateKey.\n","properties":{"createdAt":{"description":"Timestamp (GMT) when the private key was created.\n","type":"string"},"id":{"description":"Fastly private key ID. Conflicts with all the other filters\n","type":"string"},"keyLength":{"description":"The key length used to generate the private key.\n","type":"integer"},"keyType":{"description":"The algorithm used to generate the private key. Must be RSA.\n","type":"string"},"name":{"description":"The human-readable name assigned to the private key when uploaded.\n","type":"string"},"publicKeySha1":{"description":"A hash of the associated public key, useful for safely identifying it.\n","type":"string"},"replace":{"description":"Whether Fastly recommends replacing this private key.\n","type":"boolean"}},"required":["createdAt","id","keyLength","keyType","name","publicKeySha1","replace"],"type":"object"}},"fastly:index/getTlsPrivateKeyIds:getTlsPrivateKeyIds":{"description":"Use this data source to get the list of TLS private key identifiers in Fastly.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = fastly.getTlsPrivateKeyIds({});\nconst example = fastly.getTlsPrivateKey({\n    id: demoFastlyTlsPrivateKeyIds.ids[0],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.get_tls_private_key_ids()\nexample = fastly.get_tls_private_key(id=demo_fastly_tls_private_key_ids[\"ids\"][0])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var demo = Fastly.GetTlsPrivateKeyIds.Invoke();\n\n    var example = Fastly.GetTlsPrivateKey.Invoke(new()\n    {\n        Id = demoFastlyTlsPrivateKeyIds.Ids[0],\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.GetTlsPrivateKeyIds(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.LookupTlsPrivateKey(ctx, \u0026fastly.LookupTlsPrivateKeyArgs{\n\t\t\tId: pulumi.StringRef(demoFastlyTlsPrivateKeyIds.Ids[0]),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsPrivateKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var demo = FastlyFunctions.getTlsPrivateKeyIds(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n        final var example = FastlyFunctions.getTlsPrivateKey(GetTlsPrivateKeyArgs.builder()\n            .id(demoFastlyTlsPrivateKeyIds.ids()[0])\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  demo:\n    fn::invoke:\n      function: fastly:getTlsPrivateKeyIds\n      arguments: {}\n  example:\n    fn::invoke:\n      function: fastly:getTlsPrivateKey\n      arguments:\n        id: ${demoFastlyTlsPrivateKeyIds.ids[0]}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getTlsPrivateKeyIds.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"ids":{"description":"List of IDs of the TLS private keys.\n","items":{"type":"string"},"type":"array"}},"required":["ids","id"],"type":"object"}},"fastly:index/getTlsSubscription:getTlsSubscription":{"description":"Use this data source to get information about a TLS subscription.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getTlsSubscription({\n    domains: [\"example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_subscription(domains=[\"example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetTlsSubscription.Invoke(new()\n    {\n        Domains = new[]\n        {\n            \"example.com\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsSubscription(ctx, \u0026fastly.LookupTlsSubscriptionArgs{\n\t\t\tDomains: []string{\n\t\t\t\t\"example.com\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsSubscriptionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = FastlyFunctions.getTlsSubscription(GetTlsSubscriptionArgs.builder()\n            .domains(\"example.com\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getTlsSubscription\n      arguments:\n        domains:\n          - example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTlsSubscription.\n","properties":{"certificateAuthority":{"type":"string","description":"The entity that issues and certifies the TLS certificates for the subscription.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration used to terminate TLS traffic.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"List of domains on which to enable TLS.\n"},"id":{"type":"string","description":"ID of TLS subscription. Conflicts with all the other filters.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsSubscription.\n","properties":{"certificateAuthority":{"description":"The entity that issues and certifies the TLS certificates for the subscription.\n","type":"string"},"certificateIds":{"description":"List of certificate IDs associated with the Subscription.\n","items":{"type":"string"},"type":"array"},"commonName":{"description":"The common name associated with the subscription generated by Fastly TLS.\n","type":"string"},"configurationId":{"description":"ID of TLS configuration used to terminate TLS traffic.\n","type":"string"},"createdAt":{"description":"Timestamp (GMT) when subscription was created.\n","type":"string"},"domains":{"description":"List of domains on which to enable TLS.\n","items":{"type":"string"},"type":"array"},"id":{"description":"ID of TLS subscription. Conflicts with all the other filters.\n","type":"string"},"state":{"description":"The current state of the subscription. The list of possible states are: \u003cspan pulumi-lang-nodejs=\"`pending`\" pulumi-lang-dotnet=\"`Pending`\" pulumi-lang-go=\"`pending`\" pulumi-lang-python=\"`pending`\" pulumi-lang-yaml=\"`pending`\" pulumi-lang-java=\"`pending`\"\u003e`pending`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`processing`\" pulumi-lang-dotnet=\"`Processing`\" pulumi-lang-go=\"`processing`\" pulumi-lang-python=\"`processing`\" pulumi-lang-yaml=\"`processing`\" pulumi-lang-java=\"`processing`\"\u003e`processing`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`issued`\" pulumi-lang-dotnet=\"`Issued`\" pulumi-lang-go=\"`issued`\" pulumi-lang-python=\"`issued`\" pulumi-lang-yaml=\"`issued`\" pulumi-lang-java=\"`issued`\"\u003e`issued`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`renewing`\" pulumi-lang-dotnet=\"`Renewing`\" pulumi-lang-go=\"`renewing`\" pulumi-lang-python=\"`renewing`\" pulumi-lang-yaml=\"`renewing`\" pulumi-lang-java=\"`renewing`\"\u003e`renewing`\u003c/span\u003e.\n","type":"string"},"updatedAt":{"description":"Timestamp (GMT) when subscription was last updated.\n","type":"string"}},"required":["certificateAuthority","certificateIds","commonName","configurationId","createdAt","domains","id","state","updatedAt"],"type":"object"}},"fastly:index/getTlsSubscriptionIds:getTlsSubscriptionIds":{"description":"Use this data source to get the list of IDs of TLS Subscriptions in Fastly.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = fastly.getTlsSubscriptionIds({});\nconst exampleGetTlsSubscription = example.then(example =\u003e .reduce((__obj, [__key, __value]) =\u003e ({ ...__obj, [__key]: fastly.getTlsSubscription({\n    id: __value,\n}) })));\nexport const subscriptionDomains = exampleGetTlsSubscription.apply(exampleGetTlsSubscription =\u003e Object.values(exampleGetTlsSubscription).map(a =\u003e (a.certificateAuthority)));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_subscription_ids()\nexample_get_tls_subscription = {__key: fastly.get_tls_subscription(id=__value) for __key, __value in example.ids}\npulumi.export(\"subscriptionDomains\", [a.certificate_authority for a in example_get_tls_subscription])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Fastly.GetTlsSubscriptionIds.Invoke();\n\n    var exampleGetTlsSubscription = ;\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"subscriptionDomains\"] = exampleGetTlsSubscription.Apply(exampleGetTlsSubscription =\u003e (exampleGetTlsSubscription).Values.Select(a =\u003e \n        {\n            return a.CertificateAuthority;\n        }).ToList()),\n    };\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getTlsSubscriptionIds.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"ids":{"description":"IDs of available TLS subscriptions.\n","items":{"type":"string"},"type":"array"}},"required":["ids","id"],"type":"object"}},"fastly:index/getVclSnippets:getVclSnippets":{"description":"VCL Snippets are blocks of VCL logic inserted into your service's configuration that don't require custom VCL.\n\nUse this data source to get a list of [Fastly VCL Snippets](https://www.fastly.com/documentation/reference/api/vcl-services/snippet/) for the specified service/version.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleServiceVcl = new fastly.ServiceVcl(\"example\", {\n    name: \"Example Service\",\n    domains: [{\n        name: \"example.com\",\n    }],\n    forceDestroy: true,\n});\nconst example = fastly.getVclSnippetsOutput({\n    serviceId: exampleServiceVcl.id,\n    serviceVersion: exampleServiceVcl.activeVersion,\n});\nexport const serviceVclSnippets = example;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_service_vcl = fastly.ServiceVcl(\"example\",\n    name=\"Example Service\",\n    domains=[{\n        \"name\": \"example.com\",\n    }],\n    force_destroy=True)\nexample = fastly.get_vcl_snippets_output(service_id=example_service_vcl.id,\n    service_version=example_service_vcl.active_version)\npulumi.export(\"serviceVclSnippets\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var exampleServiceVcl = new Fastly.ServiceVcl(\"example\", new()\n    {\n        Name = \"Example Service\",\n        Domains = new[]\n        {\n            new Fastly.Inputs.ServiceVclDomainArgs\n            {\n                Name = \"example.com\",\n            },\n        },\n        ForceDestroy = true,\n    });\n\n    var example = Fastly.GetVclSnippets.Invoke(new()\n    {\n        ServiceId = exampleServiceVcl.Id,\n        ServiceVersion = exampleServiceVcl.ActiveVersion,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"serviceVclSnippets\"] = example,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v11/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleServiceVcl, err := fastly.NewServiceVcl(ctx, \"example\", \u0026fastly.ServiceVclArgs{\n\t\t\tName: pulumi.String(\"Example Service\"),\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample := fastly.GetVclSnippetsOutput(ctx, fastly.GetVclSnippetsOutputArgs{\n\t\t\tServiceId:      exampleServiceVcl.ID(),\n\t\t\tServiceVersion: exampleServiceVcl.ActiveVersion,\n\t\t}, nil)\n\t\tctx.Export(\"serviceVclSnippets\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetVclSnippetsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var exampleServiceVcl = new ServiceVcl(\"exampleServiceVcl\", ServiceVclArgs.builder()\n            .name(\"Example Service\")\n            .domains(ServiceVclDomainArgs.builder()\n                .name(\"example.com\")\n                .build())\n            .forceDestroy(true)\n            .build());\n\n        final var example = FastlyFunctions.getVclSnippets(GetVclSnippetsArgs.builder()\n            .serviceId(exampleServiceVcl.id())\n            .serviceVersion(exampleServiceVcl.activeVersion())\n            .build());\n\n        ctx.export(\"serviceVclSnippets\", example);\n    }\n}\n```\n```yaml\nresources:\n  exampleServiceVcl:\n    type: fastly:ServiceVcl\n    name: example\n    properties:\n      name: Example Service\n      domains:\n        - name: example.com\n      forceDestroy: true\nvariables:\n  example:\n    fn::invoke:\n      function: fastly:getVclSnippets\n      arguments:\n        serviceId: ${exampleServiceVcl.id}\n        serviceVersion: ${exampleServiceVcl.activeVersion}\noutputs:\n  serviceVclSnippets: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n[1]: https://www.fastly.com/documentation/reference/api/vcl-services/snippet/\n","inputs":{"description":"A collection of arguments for invoking getVclSnippets.\n","properties":{"serviceId":{"type":"string","description":"Alphanumeric string identifying the service.\n"},"serviceVersion":{"type":"integer","description":"Integer identifying a service version.\n"}},"type":"object","required":["serviceId","serviceVersion"]},"outputs":{"description":"A collection of values returned by getVclSnippets.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"serviceId":{"description":"Alphanumeric string identifying the service.\n","type":"string"},"serviceVersion":{"description":"Integer identifying a service version.\n","type":"integer"},"vclSnippets":{"description":"List of all VCL snippets for the version of the service.\n","items":{"$ref":"#/types/fastly:index/getVclSnippetsVclSnippet:getVclSnippetsVclSnippet"},"type":"array"}},"required":["serviceId","serviceVersion","vclSnippets","id"],"type":"object"}},"pulumi:providers:fastly/terraformConfig":{"description":"This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider.","inputs":{"properties":{"__self__":{"type":"ref","$ref":"#/provider"}},"type":"pulumi:providers:fastly/terraformConfig","required":["__self__"]},"outputs":{"properties":{"result":{"additionalProperties":{"$ref":"pulumi.json#/Any"},"type":"object"}},"required":["result"],"type":"object"}}}}