github.com/recobe182/terraform@v0.8.5-0.20170117231232-49ab22a935b7/website/source/docs/providers/aws/r/cloudfront_distribution.html.markdown (about) 1 --- 2 layout: "aws" 3 page_title: "AWS: cloudfront_distribution" 4 sidebar_current: "docs-aws-resource-cloudfront-distribution" 5 description: |- 6 Provides a CloudFront web distribution resource. 7 --- 8 9 # aws\_cloudfront\_distribution 10 11 Creates an Amazon CloudFront web distribution. 12 13 For information about CloudFront distributions, see the 14 [Amazon CloudFront Developer Guide][1]. For specific information about creating 15 CloudFront web distributions, see the [POST Distribution][2] page in the Amazon 16 CloudFront API Reference. 17 18 ~> **NOTE:** CloudFront distributions take about 15 minutes to a deployed state 19 after creation or modification. During this time, deletes to resources will be 20 blocked. If you need to delete a distribution that is enabled and you do not 21 want to wait, you need to use the `retain_on_delete` flag. 22 23 ## Example Usage 24 25 The following example below creates a CloudFront distribution with an S3 origin. 26 27 ``` 28 resource "aws_s3_bucket" "b" { 29 bucket = "mybucket" 30 acl = "private" 31 32 tags { 33 Name = "My bucket" 34 } 35 } 36 37 resource "aws_cloudfront_distribution" "s3_distribution" { 38 origin { 39 domain_name = "${aws_s3_bucket.b.bucket}.s3.amazonaws.com" 40 origin_id = "myS3Origin" 41 42 s3_origin_config { 43 origin_access_identity = "origin-access-identity/cloudfront/ABCDEFG1234567" 44 } 45 } 46 47 enabled = true 48 is_ipv6_enabled = true 49 comment = "Some comment" 50 default_root_object = "index.html" 51 52 logging_config { 53 include_cookies = false 54 bucket = "mylogs.s3.amazonaws.com" 55 prefix = "myprefix" 56 } 57 58 aliases = ["mysite.example.com", "yoursite.example.com"] 59 60 default_cache_behavior { 61 allowed_methods = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"] 62 cached_methods = ["GET", "HEAD"] 63 target_origin_id = "myS3Origin" 64 65 forwarded_values { 66 query_string = false 67 68 cookies { 69 forward = "none" 70 } 71 } 72 73 viewer_protocol_policy = "allow-all" 74 min_ttl = 0 75 default_ttl = 3600 76 max_ttl = 86400 77 } 78 79 price_class = "PriceClass_200" 80 81 restrictions { 82 geo_restriction { 83 restriction_type = "whitelist" 84 locations = ["US", "CA", "GB", "DE"] 85 } 86 } 87 88 tags { 89 Environment = "production" 90 } 91 92 viewer_certificate { 93 cloudfront_default_certificate = true 94 } 95 } 96 ``` 97 98 ## Argument Reference 99 100 The CloudFront distribution argument layout is a complex structure composed 101 of several sub-resources - these resources are laid out below. 102 103 ### Top-Level Arguments 104 105 * `aliases` (Optional) - Extra CNAMEs (alternate domain names), if any, for 106 this distribution. 107 108 * `cache_behavior` (Optional) - A [cache behavior](#cache-behavior-arguments) 109 resource for this distribution (multiples allowed). 110 111 * `comment` (Optional) - Any comments you want to include about the 112 distribution. 113 114 * `custom_error_response` (Optional) - One or more [custom error 115 response](#custom-error-response-arguments) elements (multiples allowed). 116 117 * `default_cache_behavior` (Required) - The [default cache 118 behavior](#default-cache-behavior-arguments) for this distribution (maximum 119 one). 120 121 * `default_root_object` (Optional) - The object that you want CloudFront to 122 return (for example, index.html) when an end user requests the root URL. 123 124 * `enabled` (Required) - Whether the distribution is enabled to accept end 125 user requests for content. 126 127 * `is_ipv6_enabled` (Optional) - Whether the IPv6 is enabled for the distribution. 128 129 * `http_version` (Optional) - The maximum HTTP version to support on the 130 distribution. Allowed values are `http1.1` and `http2`. The default is 131 `http2`. 132 133 * `logging_config` (Optional) - The [logging 134 configuration](#logging-config-arguments) that controls how logs are written 135 to your distribution (maximum one). 136 137 * `origin` (Required) - One or more [origins](#origin-arguments) for this 138 distribution (multiples allowed). 139 140 * `price_class` (Optional) - The price class for this distribution. One of 141 `PriceClass_All`, `PriceClass_200`, `PriceClass_100` 142 143 * `restrictions` (Required) - The [restriction 144 configuration](#restrictions-arguments) for this distribution (maximum one). 145 146 * `tags` - (Optional) A mapping of tags to assign to the resource. 147 148 * `viewer_certificate` (Required) - The [SSL 149 configuration](#viewer-certificate-arguments) for this distribution (maximum 150 one). 151 152 * `web_acl_id` (Optional) - If you're using AWS WAF to filter CloudFront 153 requests, the Id of the AWS WAF web ACL that is associated with the 154 distribution. 155 156 * `retain_on_delete` (Optional) - Disables the distribution instead of 157 deleting it when destroying the resource through Terraform. If this is set, 158 the distribution needs to be deleted manually afterwards. Default: `false`. 159 160 #### Cache Behavior Arguments 161 162 * `allowed_methods` (Required) - Controls which HTTP methods CloudFront 163 processes and forwards to your Amazon S3 bucket or your custom origin. 164 165 * `cached_methods` (Required) - Controls whether CloudFront caches the 166 response to requests using the specified HTTP methods. 167 168 * `compress` (Optional) - Whether you want CloudFront to automatically 169 compress content for web requests that include `Accept-Encoding: gzip` in 170 the request header (default: `false`). 171 172 * `default_ttl` (Required) - The default amount of time (in seconds) that an 173 object is in a CloudFront cache before CloudFront forwards another request 174 in the absence of an `Cache-Control max-age` or `Expires` header. 175 176 * `forwarded_values` (Required) - The [forwarded values 177 configuration](#forwarded-values-arguments) that specifies how CloudFront 178 handles query strings, cookies and headers (maximum one). 179 180 * `max_ttl` (Required) - The maximum amount of time (in seconds) that an 181 object is in a CloudFront cache before CloudFront forwards another request 182 to your origin to determine whether the object has been updated. Only 183 effective in the presence of `Cache-Control max-age`, `Cache-Control 184 s-maxage`, and `Expires` headers. 185 186 * `min_ttl` (Required) - The minimum amount of time that you want objects to 187 stay in CloudFront caches before CloudFront queries your origin to see 188 whether the object has been updated. 189 190 * `path_pattern` (Required) - The pattern (for example, `images/*.jpg)` that 191 specifies which requests you want this cache behavior to apply to. 192 193 * `smooth_streaming` (Optional) - Indicates whether you want to distribute 194 media files in Microsoft Smooth Streaming format using the origin that is 195 associated with this cache behavior. 196 197 * `target_origin_id` (Required) - The value of ID for the origin that you want 198 CloudFront to route requests to when a request matches the path pattern 199 either for a cache behavior or for the default cache behavior. 200 201 * `trusted_signers` (Optional) - The AWS accounts, if any, that you want to 202 allow to create signed URLs for private content. 203 204 * `viewer_protocol_policy` (Required) - Use this element to specify the 205 protocol that users can use to access the files in the origin specified by 206 TargetOriginId when a request matches the path pattern in PathPattern. One 207 of `allow-all`, `https-only`, or `redirect-to-https`. 208 209 ##### Forwarded Values Arguments 210 211 * `cookies` (Required) - The [forwarded values cookies](#cookies-arguments) 212 that specifies how CloudFront handles cookies (maximum one). 213 214 * `headers` (Optional) - Specifies the Headers, if any, that you want 215 CloudFront to vary upon for this cache behavior. Specify `*` to include all 216 headers. 217 218 * `query_string` (Required) - Indicates whether you want CloudFront to forward 219 query strings to the origin that is associated with this cache behavior. 220 221 * `query_string_cache_keys` (Optional) - When specified, along with a value of 222 `true` for `query_string`, all query strings are forwarded, however only the 223 query string keys listed in this argument are cached. When omitted with a 224 value of `true` for `query_string`, all query string keys are cached. 225 226 ##### Cookies Arguments 227 228 * `forward` (Required) - Specifies whether you want CloudFront to forward 229 cookies to the origin that is associated with this cache behavior. You can 230 specify `all`, `none` or `whitelist`. If `whitelist`, you must include the 231 subsequent `whitelisted_names` 232 233 * `whitelisted_names` (Optional) - If you have specified `whitelist` to 234 `forward`, the whitelisted cookies that you want CloudFront to forward to 235 your origin. 236 237 #### Custom Error Response Arguments 238 239 * `error_caching_min_ttl` (Optional) - The minimum amount of time you want 240 HTTP error codes to stay in CloudFront caches before CloudFront queries your 241 origin to see whether the object has been updated. 242 243 * `error_code` (Required) - The 4xx or 5xx HTTP status code that you want to 244 customize. 245 246 * `response_code` (Optional) - The HTTP status code that you want CloudFront 247 to return with the custom error page to the viewer. 248 249 * `response_page_path` (Optional) - The path of the custom error page (for 250 example, `/custom_404.html`). 251 252 #### Default Cache Behavior Arguments 253 254 The arguments for `default_cache_behavior` are the same as for 255 [`cache_behavior`](#cache-behavior-arguments), except for the `path_pattern` 256 argument is not required. 257 258 #### Logging Config Arguments 259 260 * `bucket` (Required) - The Amazon S3 bucket to store the access logs in, for 261 example, `myawslogbucket.s3.amazonaws.com`. 262 263 * `include_cookies` (Optional) - Specifies whether you want CloudFront to 264 include cookies in access logs (default: `false`). 265 266 * `prefix` (Optional) - An optional string that you want CloudFront to prefix 267 to the access log filenames for this distribution, for example, `myprefix/`. 268 269 #### Origin Arguments 270 271 * `custom_origin_config` - The [CloudFront custom 272 origin](#custom-origin-config-arguments) configuration information. If an S3 273 origin is required, use `s3_origin_config` instead. 274 275 * `domain_name` (Required) - The DNS domain name of either the S3 bucket, or 276 web site of your custom origin. 277 278 * `custom_header` (Optional) - One or more sub-resources with `name` and 279 `value` parameters that specify header data that will be sent to the origin 280 (multiples allowed). 281 282 * `origin_id` (Required) - A unique identifier for the origin. 283 284 * `origin_path` (Optional) - An optional element that causes CloudFront to 285 request your content from a directory in your Amazon S3 bucket or your 286 custom origin. 287 288 * `s3_origin_config` - The [CloudFront S3 origin](#s3-origin-config-arguments) 289 configuration information. If a custom origin is required, use 290 `custom_origin_config` instead. 291 292 ##### Custom Origin Config Arguments 293 294 * `http_port` (Required) - The HTTP port the custom origin listens on. 295 296 * `https_port` (Required) - The HTTPS port the custom origin listens on. 297 298 * `origin_protocol_policy` (Required) - The origin protocol policy to apply to 299 your origin. One of `http-only`, `https-only`, or `match-viewer`. 300 301 * `origin_ssl_protocols` (Required) - The SSL/TLS protocols that you want 302 CloudFront to use when communicating with your origin over HTTPS. A list of 303 one or more of `SSLv3`, `TLSv1`, `TLSv1.1`, and `TLSv1.2`. 304 305 ##### S3 Origin Config Arguments 306 307 * `origin_access_identity` (Optional) - The [CloudFront origin access 308 identity][5] to associate with the origin. 309 310 #### Restrictions Arguments 311 312 The `restrictions` sub-resource takes another single sub-resource named 313 `geo_restriction` (see the example for usage). 314 315 The arguments of `geo_restriction` are: 316 317 * `locations` (Optional) - The [ISO 3166-1-alpha-2 codes][4] for which you 318 want CloudFront either to distribute your content (`whitelist`) or not 319 distribute your content (`blacklist`). 320 321 * `restriction_type` (Required) - The method that you want to use to restrict 322 distribution of your content by country: `none`, `whitelist`, or 323 `blacklist`. 324 325 #### Viewer Certificate Arguments 326 327 * `acm_certificate_arn` - The ARN of the [AWS Certificate Manager][6] 328 certificate that you wish to use with this distribution. Specify this, 329 `cloudfront_default_certificate`, or `iam_certificate_id`. The ACM 330 certificate must be in US-EAST-1. 331 332 * `cloudfront_default_certificate` - `true` if you want viewers to use HTTPS 333 to request your objects and you're using the CloudFront domain name for your 334 distribution. Specify this, `acm_certificate_arn`, or `iam_certificate_id`. 335 336 * `iam_certificate_id` - The IAM certificate identifier of the custom viewer 337 certificate for this distribution if you are using a custom domain. Specify 338 this, `acm_certificate_arn`, or `cloudfront_default_certificate`. 339 340 * `minimum_protocol_version` - The minimum version of the SSL protocol that 341 you want CloudFront to use for HTTPS connections. One of `SSLv3` or `TLSv1`. 342 Default: `SSLv3`. **NOTE**: If you are using a custom certificate (specified 343 with `acm_certificate_arn` or `iam_certificate_id`), and have specified 344 `sni-only` in `ssl_support_method`, `TLSv1` must be specified. 345 346 * `ssl_support_method`: Specifies how you want CloudFront to serve HTTPS 347 requests. One of `vip` or `sni-only`. Required if you specify 348 `acm_certificate_arn` or `iam_certificate_id`. **NOTE:** `vip` causes 349 CloudFront to use a dedicated IP address and may incur extra charges. 350 351 ## Attribute Reference 352 353 The following attributes are exported: 354 355 * `id` - The identifier for the distribution. For example: `EDFDVBD632BHDS5`. 356 357 * `caller_reference` - Internal value used by CloudFront to allow future 358 updates to the distribution configuration. 359 360 * `status` - The current status of the distribution. `Deployed` if the 361 distribution's information is fully propagated throughout the Amazon 362 CloudFront system. 363 364 * `active_trusted_signers` - The key pair IDs that CloudFront is aware of for 365 each trusted signer, if the distribution is set up to serve private content 366 with signed URLs. 367 368 * `domain_name` - The domain name corresponding to the distribution. For 369 example: `d604721fxaaqy9.cloudfront.net`. 370 371 * `last_modified_time` - The date and time the distribution was last modified. 372 373 * `in_progress_validation_batches` - The number of invalidation batches 374 currently in progress. 375 376 * `etag` - The current version of the distribution's information. For example: 377 `E2QWRUHAPOMQZL`. 378 379 * `hosted_zone_id` - The CloudFront Route 53 zone ID that can be used to 380 route an [Alias Resource Record Set][7] to. This attribute is simply an 381 alias for the zone ID `Z2FDTNDATAQYW2`. 382 383 384 [1]: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html 385 [2]: http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/CreateDistribution.html 386 [3]: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html 387 [4]: http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm 388 [5]: /docs/providers/aws/r/cloudfront_origin_access_identity.html 389 [6]: https://aws.amazon.com/certificate-manager/ 390 [7]: http://docs.aws.amazon.com/Route53/latest/APIReference/CreateAliasRRSAPI.html 391 392 393 ## Import 394 395 Cloudfront Distributions can be imported using the `id`, e.g. 396 397 ``` 398 $ terraform import aws_cloudfront_distribution.distribution E74FTE3EXAMPLE 399 ```