From 781d45fe0d5a562ef5b0d8c23527f4c443c86e58 Mon Sep 17 00:00:00 2001 From: awssdkgo Date: Mon, 11 Nov 2019 19:38:03 +0000 Subject: [PATCH] Release v1.25.32 (2019-11-11) === ### Service Client Updates * `service/ce`: Updates service API and documentation * `service/cloudformation`: Updates service API, documentation, and waiters * The Resource Import feature enables customers to import existing AWS resources into new or existing CloudFormation Stacks. --- CHANGELOG.md | 8 + aws/version.go | 2 +- models/apis/ce/2017-10-25/api-2.json | 37 ++ models/apis/ce/2017-10-25/docs-2.json | 52 ++- .../apis/cloudformation/2010-05-15/api-2.json | 78 ++++- .../cloudformation/2010-05-15/docs-2.json | 79 ++++- .../apis/cloudformation/2010-05-15/smoke.json | 19 ++ .../cloudformation/2010-05-15/waiters-2.json | 57 +++- service/cloudformation/api.go | 236 ++++++++++++- .../cloudformationiface/interface.go | 3 + service/cloudformation/integ_test.go | 59 ++++ service/cloudformation/waiters.go | 83 ++++- service/costexplorer/api.go | 322 ++++++++++++++++-- .../costexploreriface/interface.go | 4 + 14 files changed, 967 insertions(+), 72 deletions(-) create mode 100644 models/apis/cloudformation/2010-05-15/smoke.json create mode 100644 service/cloudformation/integ_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index ae04d0a41cb..7dfcde8c890 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +Release v1.25.32 (2019-11-11) +=== + +### Service Client Updates +* `service/ce`: Updates service API and documentation +* `service/cloudformation`: Updates service API, documentation, and waiters + * The Resource Import feature enables customers to import existing AWS resources into new or existing CloudFormation Stacks. + Release v1.25.31 (2019-11-08) === diff --git a/aws/version.go b/aws/version.go index 199dbfee58c..52bd1d2423c 100644 --- a/aws/version.go +++ b/aws/version.go @@ -5,4 +5,4 @@ package aws const SDKName = "aws-sdk-go" // SDKVersion is the version of this SDK -const SDKVersion = "1.25.31" +const SDKVersion = "1.25.32" diff --git a/models/apis/ce/2017-10-25/api-2.json b/models/apis/ce/2017-10-25/api-2.json index c54002bce13..67364aedad8 100644 --- a/models/apis/ce/2017-10-25/api-2.json +++ b/models/apis/ce/2017-10-25/api-2.json @@ -30,6 +30,22 @@ {"shape":"RequestChangedException"} ] }, + "GetCostAndUsageWithResources":{ + "name":"GetCostAndUsageWithResources", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"GetCostAndUsageWithResourcesRequest"}, + "output":{"shape":"GetCostAndUsageWithResourcesResponse"}, + "errors":[ + {"shape":"DataUnavailableException"}, + {"shape":"LimitExceededException"}, + {"shape":"BillExpirationException"}, + {"shape":"InvalidNextTokenException"}, + {"shape":"RequestChangedException"} + ] + }, "GetCostForecast":{ "name":"GetCostForecast", "http":{ @@ -335,6 +351,7 @@ "INSTANCE_TYPE_FAMILY", "BILLING_ENTITY", "RESERVATION_ID", + "RESOURCE_ID", "RIGHTSIZING_TYPE", "SAVINGS_PLANS_TYPE", "SAVINGS_PLAN_ARN", @@ -473,6 +490,26 @@ "ResultsByTime":{"shape":"ResultsByTime"} } }, + "GetCostAndUsageWithResourcesRequest":{ + "type":"structure", + "required":["TimePeriod"], + "members":{ + "TimePeriod":{"shape":"DateInterval"}, + "Granularity":{"shape":"Granularity"}, + "Filter":{"shape":"Expression"}, + "Metrics":{"shape":"MetricNames"}, + "GroupBy":{"shape":"GroupDefinitions"}, + "NextPageToken":{"shape":"NextPageToken"} + } + }, + "GetCostAndUsageWithResourcesResponse":{ + "type":"structure", + "members":{ + "NextPageToken":{"shape":"NextPageToken"}, + "GroupDefinitions":{"shape":"GroupDefinitions"}, + "ResultsByTime":{"shape":"ResultsByTime"} + } + }, "GetCostForecastRequest":{ "type":"structure", "required":[ diff --git a/models/apis/ce/2017-10-25/docs-2.json b/models/apis/ce/2017-10-25/docs-2.json index 4ffeccd5f9e..8fb24b13f36 100644 --- a/models/apis/ce/2017-10-25/docs-2.json +++ b/models/apis/ce/2017-10-25/docs-2.json @@ -3,6 +3,7 @@ "service": "

The Cost Explorer API enables you to programmatically query your cost and usage data. You can query for aggregated data such as total monthly costs or total daily usage. You can also query for granular data, such as the number of daily write operations for Amazon DynamoDB database tables in your production environment.

Service Endpoint

The Cost Explorer API provides the following endpoint:

For information about costs associated with the Cost Explorer API, see AWS Cost Management Pricing.

", "operations": { "GetCostAndUsage": "

Retrieves cost and usage metrics for your account. You can specify which cost and usage-related metric, such as BlendedCosts or UsageQuantity, that you want the request to return. You can also filter and group your data by various dimensions, such as SERVICE or AZ, in a specific time range. For a complete list of valid dimensions, see the GetDimensionValues operation. Master accounts in an organization in AWS Organizations have access to all member accounts.

", + "GetCostAndUsageWithResources": "

Retrieves cost and usage metrics with resources for your account. You can specify which cost and usage-related metric, such as BlendedCosts or UsageQuantity, that you want the request to return. You can also filter and group your data by various dimensions, such as SERVICE or AZ, in a specific time range. For a complete list of valid dimensions, see the GetDimensionValues operation. Master accounts in an organization in AWS Organizations have access to all member accounts. This API is currently available for the Amazon Elastic Compute Cloud – Compute service only.

This is an opt-in only feature. You can enable this feature from the Cost Explorer Settings page. For information on how to access the Settings page, see Controlling Access for Cost Explorer in the AWS Billing and Cost Management User Guide.

", "GetCostForecast": "

Retrieves a forecast for how much Amazon Web Services predicts that you will spend over the forecast time period that you select, based on your past costs.

", "GetDimensionValues": "

Retrieves all available filter values for a specified filter over a period of time. You can search the dimension values for an arbitrary string.

", "GetReservationCoverage": "

Retrieves the reservation coverage for your account. This enables you to see how much of your Amazon Elastic Compute Cloud, Amazon ElastiCache, Amazon Relational Database Service, or Amazon Redshift usage is covered by a reservation. An organization's master account can see the coverage of the associated member accounts. For any time period, you can filter data about reservation usage by the following dimensions:

To determine valid values for a dimension, use the GetDimensionValues operation.

", @@ -11,8 +12,8 @@ "GetRightsizingRecommendation": "

Creates recommendations that helps you save cost by identifying idle and underutilized Amazon EC2 instances.

Recommendations are generated to either downsize or terminate instances, along with providing savings detail and metrics. For details on calculation and function, see Optimizing Your Cost with Rightsizing Recommendations.

", "GetSavingsPlansCoverage": "

Retrieves the Savings Plans covered for your account. This enables you to see how much of your cost is covered by a Savings Plan. An organization’s master account can see the coverage of the associated member accounts. For any time period, you can filter data for Savings Plans usage with the following dimensions:

To determine valid values for a dimension, use the GetDimensionValues operation.

", "GetSavingsPlansPurchaseRecommendation": "

Retrieves your request parameters, Savings Plan Recommendations Summary and Details.

", - "GetSavingsPlansUtilization": "

Retrieves the Savings Plans utilization for your account across date ranges with daily or monthly granularity. Master accounts in an organization have access to member accounts. You can use GetDimensionValues to determine the possible dimension values.

You cannot group by any dimension values for GetSavingsPlansUtilization.

", - "GetSavingsPlansUtilizationDetails": "

Retrieves a single daily or monthly Savings Plans utilization rate and details for your account. Master accounts in an organization have access to member accounts. You can use GetDimensionValues to determine the possible dimension values.

You can't group by any dimension values for GetSavingsPlansUtilizationDetails.

", + "GetSavingsPlansUtilization": "

Retrieves the Savings Plans utilization for your account across date ranges with daily or monthly granularity. Master accounts in an organization have access to member accounts. You can use GetDimensionValues in SAVINGS_PLANS to determine the possible dimension values.

You cannot group by any dimension values for GetSavingsPlansUtilization.

", + "GetSavingsPlansUtilizationDetails": "

Retrieves attribute data along with aggregate utilization and savings data for a given time period. This doesn't support granular or grouped data (daily/monthly) in response. You can't retrieve data by dates in a single response similar to GetSavingsPlanUtilization, but you have the option to make multiple calls to GetSavingsPlanUtilizationDetails by providing individual dates. You can use GetDimensionValues in SAVINGS_PLANS to determine the possible dimension values.

GetSavingsPlanUtilizationDetails internally groups data by SavingsPlansArn.

", "GetTags": "

Queries for available tag keys and tag values for a specified period. You can search the tag values for an arbitrary string.

", "GetUsageForecast": "

Retrieves a forecast for how much Amazon Web Services predicts that you will use over the forecast time period that you select, based on your past usage.

" }, @@ -66,7 +67,7 @@ "Context": { "base": null, "refs": { - "GetDimensionValuesRequest$Context": "

The context for the call to GetDimensionValues. This can be RESERVATIONS or COST_AND_USAGE. The default value is COST_AND_USAGE. If the context is set to RESERVATIONS, the resulting dimension values can be used in the GetReservationUtilization operation. If the context is set to COST_AND_USAGE, the resulting dimension values can be used in the GetCostAndUsage operation.

If you set the context to COST_AND_USAGE, you can use the following dimensions for searching:

If you set the context to RESERVATIONS, you can use the following dimensions for searching:

If you set the context to SAVINGS_PLANS, you can use the following dimensions for searching:

" + "GetDimensionValuesRequest$Context": "

The context for the call to GetDimensionValues. This can be RESERVATIONS or COST_AND_USAGE. The default value is COST_AND_USAGE. If the context is set to RESERVATIONS, the resulting dimension values can be used in the GetReservationUtilization operation. If the context is set to COST_AND_USAGE, the resulting dimension values can be used in the GetCostAndUsage operation.

If you set the context to COST_AND_USAGE, you can use the following dimensions for searching:

If you set the context to RESERVATIONS, you can use the following dimensions for searching:

If you set the context to SAVINGS_PLANS, you can use the following dimensions for searching:

" } }, "Coverage": { @@ -136,6 +137,7 @@ "CoverageByTime$TimePeriod": "

The period that this coverage was used over.

", "ForecastResult$TimePeriod": "

The period of time that the forecast covers.

", "GetCostAndUsageRequest$TimePeriod": "

Sets the start and end dates for retrieving AWS costs. The start date is inclusive, but the end date is exclusive. For example, if start is 2017-01-01 and end is 2017-05-01, then the cost and usage data is retrieved from 2017-01-01 up to and including 2017-04-30 but not including 2017-05-01.

", + "GetCostAndUsageWithResourcesRequest$TimePeriod": "

Sets the start and end dates for retrieving Amazon Web Services costs. The range must be within the last 14 days (the start date cannot be earlier than 14 days ago). The start date is inclusive, but the end date is exclusive. For example, if start is 2017-01-01 and end is 2017-05-01, then the cost and usage data is retrieved from 2017-01-01 up to and including 2017-04-30 but not including 2017-05-01.

", "GetCostForecastRequest$TimePeriod": "

The period of time that you want the forecast to cover.

", "GetDimensionValuesRequest$TimePeriod": "

The start and end dates for retrieving the dimension values. The start date is inclusive, but the end date is exclusive. For example, if start is 2017-01-01 and end is 2017-05-01, then the cost and usage data is retrieved from 2017-01-01 up to and including 2017-04-30 but not including 2017-05-01.

", "GetReservationCoverageRequest$TimePeriod": "

The start and end dates of the period that you want to retrieve data about reservation coverage for. You can retrieve data for a maximum of 13 months: the last 12 months and the current month. The start date is inclusive, but the end date is exclusive. For example, if start is 2017-01-01 and end is 2017-05-01, then the cost and usage data is retrieved from 2017-01-01 up to and including 2017-04-30 but not including 2017-05-01.

", @@ -174,7 +176,7 @@ "DimensionValuesWithAttributesList": { "base": null, "refs": { - "GetDimensionValuesResponse$DimensionValues": "

The filters that you used to filter your request. Some dimensions are available only for a specific context.

If you set the context to COST_AND_USAGE, you can use the following dimensions for searching:

If you set the context to RESERVATIONS, you can use the following dimensions for searching:

If you set the context to SAVINGS_PLANS, you can use the following dimensions for searching:

" + "GetDimensionValuesResponse$DimensionValues": "

The filters that you used to filter your request. Some dimensions are available only for a specific context.

If you set the context to COST_AND_USAGE, you can use the following dimensions for searching:

If you set the context to RESERVATIONS, you can use the following dimensions for searching:

If you set the context to SAVINGS_PLANS, you can use the following dimensions for searching:

" } }, "EC2InstanceDetails": { @@ -242,13 +244,14 @@ "Expression$Not": "

Return results that don't match a Dimension object.

", "Expressions$member": null, "GetCostAndUsageRequest$Filter": "

Filters AWS costs by different dimensions. For example, you can specify SERVICE and LINKED_ACCOUNT and get the costs that are associated with that account's usage of that service. You can nest Expression objects to define any combination of dimension filters. For more information, see Expression.

", + "GetCostAndUsageWithResourcesRequest$Filter": "

Filters Amazon Web Services costs by different dimensions. For example, you can specify SERVICE and LINKED_ACCOUNT and get the costs that are associated with that account's usage of that service. You can nest Expression objects to define any combination of dimension filters. For more information, see Expression.

The GetCostAndUsageWithResources operation requires that you either group by or filter by a ResourceId.

", "GetCostForecastRequest$Filter": "

The filters that you want to use to filter your forecast. Cost Explorer API supports all of the Cost Explorer filters.

", "GetReservationCoverageRequest$Filter": "

Filters utilization data by dimensions. You can filter by the following dimensions:

GetReservationCoverage uses the same Expression object as the other operations, but only AND is supported among each dimension. You can nest only one level deep. If there are multiple values for a dimension, they are OR'd together.

If you don't provide a SERVICE filter, Cost Explorer defaults to EC2.

", "GetReservationUtilizationRequest$Filter": "

Filters utilization data by dimensions. You can filter by the following dimensions:

GetReservationUtilization uses the same Expression object as the other operations, but only AND is supported among each dimension, and nesting is supported up to only one level deep. If there are multiple values for a dimension, they are OR'd together.

", "GetRightsizingRecommendationRequest$Filter": null, "GetSavingsPlansCoverageRequest$Filter": "

Filters Savings Plans coverage data by dimensions. You can filter data for Savings Plans usage with the following dimensions:

GetSavingsPlansCoverage uses the same Expression object as the other operations, but only AND is supported among each dimension. If there are multiple values for a dimension, they are OR'd together.

", - "GetSavingsPlansUtilizationDetailsRequest$Filter": "

Filters Savings Plans utilization coverage data for active Savings Plans dimensions. You can filter data with the following dimensions:

GetSavingsPlansUtilizationDetails uses the same Expression object as the other operations, but only AND is supported among each dimension. If there are multiple values for a dimension, they are OR'd together.

", - "GetSavingsPlansUtilizationRequest$Filter": "

Filters Savings Plans utilization coverage data for active Savings Plans dimensions. You can filter data with the following dimensions:

GetSavingsPlansUtilization uses the same Expression object as the other operations, but only AND is supported among each dimension. If there are multiple values for a dimension, they are OR'd together.

", + "GetSavingsPlansUtilizationDetailsRequest$Filter": "

Filters Savings Plans utilization coverage data for active Savings Plans dimensions. You can filter data with the following dimensions:

GetSavingsPlansUtilizationDetails uses the same Expression object as the other operations, but only AND is supported among each dimension.

", + "GetSavingsPlansUtilizationRequest$Filter": "

Filters Savings Plans utilization coverage data for active Savings Plans dimensions. You can filter data with the following dimensions:

GetSavingsPlansUtilization uses the same Expression object as the other operations, but only AND is supported among each dimension.

", "GetUsageForecastRequest$Filter": "

The filters that you want to use to filter your forecast. Cost Explorer API supports all of the Cost Explorer filters.

" } }, @@ -376,7 +379,7 @@ "SavingsPlansCoverageData$OnDemandCost": "

The cost of your Amazon Web Services usage at the public On-Demand rate.

", "SavingsPlansCoverageData$TotalCost": "

The total cost of your Amazon Web Services usage, regardless of your purchase option.

", "SavingsPlansCoverageData$CoveragePercentage": "

The percentage of your existing Savings Planscovered usage, divided by all of your eligible Savings Plans usage in an account(or set of accounts).

", - "SavingsPlansDetails$Region": "

A geographic location where the Savings Plans is hosted.

", + "SavingsPlansDetails$Region": "

A collection of AWS resources in a geographic area. Each AWS Region is isolated and independent of the other Regions.

", "SavingsPlansDetails$InstanceFamily": "

A group of instance types that Savings Plans applies to.

", "SavingsPlansDetails$OfferingId": "

The unique ID used to distinguish Savings Plans from one another.

", "SavingsPlansPurchaseRecommendationDetail$AccountId": "

The AccountID the recommendation is generated for.

", @@ -408,7 +411,7 @@ "SavingsPlansSavings$NetSavings": "

The savings amount that you are accumulating for the usage that is covered by a Savings Plans, when compared to the On-Demand equivalent of the same usage.

", "SavingsPlansSavings$OnDemandCostEquivalent": "

How much the amount that the usage would have cost if it was accrued at the On-Demand rate.

", "SavingsPlansUtilization$TotalCommitment": "

The total amount of Savings Plans commitment that's been purchased in an account (or set of accounts).

", - "SavingsPlansUtilization$UsedCommitment": "

The amount of your Savings Plans commitment that was not consumed from Savings Plans eligible usage in a specific period.

", + "SavingsPlansUtilization$UsedCommitment": "

The amount of your Savings Plans commitment that was consumed from Savings Plans eligible usage in a specific period.

", "SavingsPlansUtilization$UnusedCommitment": "

The amount of your Savings Plans commitment that was not consumed from Savings Plans eligible usage in a specific period.

", "SavingsPlansUtilization$UtilizationPercentage": "

The amount of UsedCommitment divided by the TotalCommitment for your Savings Plans.

", "TargetInstance$EstimatedMonthlyCost": "

Expected cost to operate this instance type on a monthly basis.

", @@ -428,6 +431,16 @@ "refs": { } }, + "GetCostAndUsageWithResourcesRequest": { + "base": null, + "refs": { + } + }, + "GetCostAndUsageWithResourcesResponse": { + "base": null, + "refs": { + } + }, "GetCostForecastRequest": { "base": null, "refs": { @@ -551,12 +564,13 @@ "Granularity": { "base": null, "refs": { - "GetCostAndUsageRequest$Granularity": "

Sets the AWS cost granularity to MONTHLY or DAILY. If Granularity isn't set, the response object doesn't include the Granularity, either MONTHLY or DAILY.

The GetCostAndUsageRequest operation supports only DAILY and MONTHLY granularities.

", + "GetCostAndUsageRequest$Granularity": "

Sets the AWS cost granularity to MONTHLY or DAILY, or HOURLY. If Granularity isn't set, the response object doesn't include the Granularity, either MONTHLY or DAILY, or HOURLY.

The GetCostAndUsageRequest operation supports only DAILY and MONTHLY granularities.

", + "GetCostAndUsageWithResourcesRequest$Granularity": "

Sets the AWS cost granularity to MONTHLY, DAILY, or HOURLY. If Granularity isn't set, the response object doesn't include the Granularity, MONTHLY, DAILY, or HOURLY.

", "GetCostForecastRequest$Granularity": "

How granular you want the forecast to be. You can get 3 months of DAILY forecasts or 12 months of MONTHLY forecasts.

The GetCostForecast operation supports only DAILY and MONTHLY granularities.

", "GetReservationCoverageRequest$Granularity": "

The granularity of the AWS cost data for the reservation. Valid values are MONTHLY and DAILY.

If GroupBy is set, Granularity can't be set. If Granularity isn't set, the response object doesn't include Granularity, either MONTHLY or DAILY.

The GetReservationCoverage operation supports only DAILY and MONTHLY granularities.

", "GetReservationUtilizationRequest$Granularity": "

If GroupBy is set, Granularity can't be set. If Granularity isn't set, the response object doesn't include Granularity, either MONTHLY or DAILY. If both GroupBy and Granularity aren't set, GetReservationUtilization defaults to DAILY.

The GetReservationUtilization operation supports only DAILY and MONTHLY granularities.

", - "GetSavingsPlansCoverageRequest$Granularity": "

The granularity of the Amazon Web Services cost data for your Savings Plans. Granularity can't be set if GroupBy is set.

", - "GetSavingsPlansUtilizationRequest$Granularity": "

The granularity of the Amazon Web Services utillization data for your Savings Plans.

", + "GetSavingsPlansCoverageRequest$Granularity": "

The granularity of the Amazon Web Services cost data for your Savings Plans. Granularity can't be set if GroupBy is set.

The GetSavingsPlansCoverage operation supports only DAILY and MONTHLY granularities.

", + "GetSavingsPlansUtilizationRequest$Granularity": "

The granularity of the Amazon Web Services utillization data for your Savings Plans.

The GetSavingsPlansUtilization operation supports only DAILY and MONTHLY granularities.

", "GetUsageForecastRequest$Granularity": "

How granular you want the forecast to be. You can get 3 months of DAILY forecasts or 12 months of MONTHLY forecasts.

The GetUsageForecast operation supports only DAILY and MONTHLY granularities.

" } }, @@ -589,6 +603,8 @@ "refs": { "GetCostAndUsageRequest$GroupBy": "

You can group AWS costs using up to two different groups, either dimensions, tag keys, or both.

When you group by tag key, you get all tag values, including empty strings.

Valid values are AZ, INSTANCE_TYPE, LEGAL_ENTITY_NAME, LINKED_ACCOUNT, OPERATION, PLATFORM, PURCHASE_TYPE, SERVICE, TAGS, TENANCY, and USAGE_TYPE.

", "GetCostAndUsageResponse$GroupDefinitions": "

The groups that are specified by the Filter or GroupBy parameters in the request.

", + "GetCostAndUsageWithResourcesRequest$GroupBy": "

You can group Amazon Web Services costs using up to two different groups: either dimensions, tag keys, or both.

", + "GetCostAndUsageWithResourcesResponse$GroupDefinitions": "

The groups that are specified by the Filter or GroupBy parameters in the request.

", "GetReservationCoverageRequest$GroupBy": "

You can group the data by the following attributes:

", "GetReservationUtilizationRequest$GroupBy": "

Groups only by SUBSCRIPTION_ID. Metadata is included.

", "GetSavingsPlansCoverageRequest$GroupBy": "

You can group the data using the attributes INSTANCE_FAMILY, REGION, or SERVICE.

" @@ -669,8 +685,9 @@ "base": null, "refs": { "GetCostAndUsageRequest$Metrics": "

Which metrics are returned in the query. For more information about blended and unblended rates, see Why does the \"blended\" annotation appear on some line items in my bill?.

Valid values are AmortizedCost, BlendedCost, NetAmortizedCost, NetUnblendedCost, NormalizedUsageAmount, UnblendedCost, and UsageQuantity.

If you return the UsageQuantity metric, the service aggregates all usage numbers without taking into account the units. For example, if you aggregate usageQuantity across all of Amazon EC2, the results aren't meaningful because Amazon EC2 compute hours and data transfer are measured in different units (for example, hours vs. GB). To get more meaningful UsageQuantity metrics, filter by UsageType or UsageTypeGroups.

Metrics is required for GetCostAndUsage requests.

", + "GetCostAndUsageWithResourcesRequest$Metrics": "

Which metrics are returned in the query. For more information about blended and unblended rates, see Why does the \"blended\" annotation appear on some line items in my bill?.

Valid values are AmortizedCost, BlendedCost, NetAmortizedCost, NetUnblendedCost, NormalizedUsageAmount, UnblendedCost, and UsageQuantity.

If you return the UsageQuantity metric, the service aggregates all usage numbers without taking the units into account. For example, if you aggregate usageQuantity across all of Amazon EC2, the results aren't meaningful because Amazon EC2 compute hours and data transfer are measured in different units (for example, hours vs. GB). To get more meaningful UsageQuantity metrics, filter by UsageType or UsageTypeGroups.

Metrics is required for GetCostAndUsageWithResources requests.

", "GetReservationCoverageRequest$Metrics": "

The measurement that you want your reservation coverage reported in.

Valid values are Hour, Unit, and Cost. You can use multiple values in a request.

", - "GetSavingsPlansCoverageRequest$Metrics": "

The measurement that you want your Savings Plans coverage reported in. The only valid value is spendCoveredBySavingsPlans.

" + "GetSavingsPlansCoverageRequest$Metrics": "

The measurement that you want your Savings Plans coverage reported in. The only valid value is SpendCoveredBySavingsPlans.

" } }, "MetricUnit": { @@ -711,6 +728,8 @@ "refs": { "GetCostAndUsageRequest$NextPageToken": "

The token to retrieve the next set of results. AWS provides the token when the response from a previous call has more results than the maximum page size.

", "GetCostAndUsageResponse$NextPageToken": "

The token for the next set of retrievable results. AWS provides the token when the response from a previous call has more results than the maximum page size.

", + "GetCostAndUsageWithResourcesRequest$NextPageToken": "

The token to retrieve the next set of results. AWS provides the token when the response from a previous call has more results than the maximum page size.

", + "GetCostAndUsageWithResourcesResponse$NextPageToken": "

The token for the next set of retrievable results. AWS provides the token when the response from a previous call has more results than the maximum page size.

", "GetDimensionValuesRequest$NextPageToken": "

The token to retrieve the next set of results. AWS provides the token when the response from a previous call has more results than the maximum page size.

", "GetDimensionValuesResponse$NextPageToken": "

The token for the next set of retrievable results. AWS provides the token when the response from a previous call has more results than the maximum page size.

", "GetReservationCoverageRequest$NextPageToken": "

The token to retrieve the next set of results. AWS provides the token when the response from a previous call has more results than the maximum page size.

", @@ -938,7 +957,8 @@ "ResultsByTime": { "base": null, "refs": { - "GetCostAndUsageResponse$ResultsByTime": "

The time period that is covered by the results in the response.

" + "GetCostAndUsageResponse$ResultsByTime": "

The time period that is covered by the results in the response.

", + "GetCostAndUsageWithResourcesResponse$ResultsByTime": "

The time period that is covered by the results in the response.

" } }, "RightsizingRecommendation": { @@ -1030,7 +1050,7 @@ "SavingsPlansPurchaseRecommendationMetadata": { "base": "

Metadata about your Savings Plans Purchase Recommendations.

", "refs": { - "GetSavingsPlansPurchaseRecommendationResponse$Metadata": "

The accountIDs these recommendations are generated for.

" + "GetSavingsPlansPurchaseRecommendationResponse$Metadata": "

Information regarding this specific recommendation set.

" } }, "SavingsPlansPurchaseRecommendationSummary": { @@ -1059,7 +1079,7 @@ "base": "

The aggregated utilization metrics for your Savings Plans usage.

", "refs": { "GetSavingsPlansUtilizationDetailsResponse$Total": "

The total Savings Plans utilization, regardless of time period.

", - "GetSavingsPlansUtilizationResponse$Total": "

The total amount of time that you used your Savings Plans, regardless of date ranges.

" + "GetSavingsPlansUtilizationResponse$Total": "

The total amount of cost/commitment that you used your Savings Plans, regardless of date ranges.

" } }, "SavingsPlansUtilizationByTime": { @@ -1083,7 +1103,7 @@ "SavingsPlansUtilizationsByTime": { "base": null, "refs": { - "GetSavingsPlansUtilizationResponse$SavingsPlansUtilizationsByTime": "

The amount of time (in hours) ou used your Savings Plans. This allows you to specify date ranges.

" + "GetSavingsPlansUtilizationResponse$SavingsPlansUtilizationsByTime": "

The amount of cost/commitment you used your Savings Plans. This allows you to specify date ranges.

" } }, "SearchString": { diff --git a/models/apis/cloudformation/2010-05-15/api-2.json b/models/apis/cloudformation/2010-05-15/api-2.json index 34266a6e069..0e71f2be72f 100644 --- a/models/apis/cloudformation/2010-05-15/api-2.json +++ b/models/apis/cloudformation/2010-05-15/api-2.json @@ -741,7 +741,8 @@ "enum":[ "Add", "Modify", - "Remove" + "Remove", + "Import" ] }, "ChangeSetId":{ @@ -805,7 +806,8 @@ "type":"string", "enum":[ "CREATE", - "UPDATE" + "UPDATE", + "IMPORT" ] }, "ChangeSource":{ @@ -873,7 +875,8 @@ "ChangeSetName":{"shape":"ChangeSetName"}, "ClientToken":{"shape":"ClientToken"}, "Description":{"shape":"Description"}, - "ChangeSetType":{"shape":"ChangeSetType"} + "ChangeSetType":{"shape":"ChangeSetType"}, + "ResourcesToImport":{"shape":"ResourcesToImport"} } }, "CreateChangeSetOutput":{ @@ -1401,7 +1404,8 @@ "ResourceTypes":{"shape":"ResourceTypes"}, "Version":{"shape":"Version"}, "Metadata":{"shape":"Metadata"}, - "DeclaredTransforms":{"shape":"TransformsList"} + "DeclaredTransforms":{"shape":"TransformsList"}, + "ResourceIdentifierSummaries":{"shape":"ResourceIdentifierSummaries"} } }, "Imports":{ @@ -1838,6 +1842,39 @@ "type":"list", "member":{"shape":"ResourceChangeDetail"} }, + "ResourceIdentifierProperties":{ + "type":"map", + "key":{"shape":"ResourceIdentifierPropertyKey"}, + "value":{"shape":"ResourceIdentifierPropertyValue"}, + "max":256, + "min":1 + }, + "ResourceIdentifierPropertyKey":{ + "type":"string", + "max":2048, + "min":1 + }, + "ResourceIdentifierPropertyValue":{ + "type":"string", + "max":2048, + "min":1 + }, + "ResourceIdentifierSummaries":{ + "type":"list", + "member":{"shape":"ResourceIdentifierSummary"} + }, + "ResourceIdentifierSummary":{ + "type":"structure", + "members":{ + "ResourceType":{"shape":"ResourceType"}, + "LogicalResourceIds":{"shape":"LogicalResourceIds"}, + "ResourceIdentifiers":{"shape":"ResourceIdentifiers"} + } + }, + "ResourceIdentifiers":{ + "type":"list", + "member":{"shape":"ResourceIdentifierPropertyKey"} + }, "ResourceProperties":{"type":"string"}, "ResourceSignalStatus":{ "type":"string", @@ -1863,7 +1900,13 @@ "DELETE_SKIPPED", "UPDATE_IN_PROGRESS", "UPDATE_FAILED", - "UPDATE_COMPLETE" + "UPDATE_COMPLETE", + "IMPORT_FAILED", + "IMPORT_COMPLETE", + "IMPORT_IN_PROGRESS", + "IMPORT_ROLLBACK_IN_PROGRESS", + "IMPORT_ROLLBACK_FAILED", + "IMPORT_ROLLBACK_COMPLETE" ] }, "ResourceStatusReason":{"type":"string"}, @@ -1875,6 +1918,19 @@ "RequiresRecreation":{"shape":"RequiresRecreation"} } }, + "ResourceToImport":{ + "type":"structure", + "required":[ + "ResourceType", + "LogicalResourceId", + "ResourceIdentifier" + ], + "members":{ + "ResourceType":{"shape":"ResourceType"}, + "LogicalResourceId":{"shape":"LogicalResourceId"}, + "ResourceIdentifier":{"shape":"ResourceIdentifierProperties"} + } + }, "ResourceToSkip":{ "type":"string", "pattern":"[a-zA-Z0-9]+|[a-zA-Z][-a-zA-Z0-9]*\\.[a-zA-Z0-9]+" @@ -1888,6 +1944,11 @@ "type":"list", "member":{"shape":"ResourceType"} }, + "ResourcesToImport":{ + "type":"list", + "member":{"shape":"ResourceToImport"}, + "max":200 + }, "ResourcesToSkip":{ "type":"list", "member":{"shape":"ResourceToSkip"} @@ -2415,7 +2476,12 @@ "UPDATE_ROLLBACK_FAILED", "UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS", "UPDATE_ROLLBACK_COMPLETE", - "REVIEW_IN_PROGRESS" + "REVIEW_IN_PROGRESS", + "IMPORT_IN_PROGRESS", + "IMPORT_COMPLETE", + "IMPORT_ROLLBACK_IN_PROGRESS", + "IMPORT_ROLLBACK_FAILED", + "IMPORT_ROLLBACK_COMPLETE" ] }, "StackStatusFilter":{ diff --git a/models/apis/cloudformation/2010-05-15/docs-2.json b/models/apis/cloudformation/2010-05-15/docs-2.json index eae3fa90418..89363b0f2e6 100644 --- a/models/apis/cloudformation/2010-05-15/docs-2.json +++ b/models/apis/cloudformation/2010-05-15/docs-2.json @@ -4,7 +4,7 @@ "operations": { "CancelUpdateStack": "

Cancels an update on the specified stack. If the call completes successfully, the stack rolls back the update and reverts to the previous stack configuration.

You can cancel only stacks that are in the UPDATE_IN_PROGRESS state.

", "ContinueUpdateRollback": "

For a specified stack that is in the UPDATE_ROLLBACK_FAILED state, continues rolling it back to the UPDATE_ROLLBACK_COMPLETE state. Depending on the cause of the failure, you can manually fix the error and continue the rollback. By continuing the rollback, you can return your stack to a working state (the UPDATE_ROLLBACK_COMPLETE state), and then try to update the stack again.

A stack goes into the UPDATE_ROLLBACK_FAILED state when AWS CloudFormation cannot roll back all changes after a failed stack update. For example, you might have a stack that is rolling back to an old database instance that was deleted outside of AWS CloudFormation. Because AWS CloudFormation doesn't know the database was deleted, it assumes that the database instance still exists and attempts to roll back to it, causing the update rollback to fail.

", - "CreateChangeSet": "

Creates a list of changes that will be applied to a stack so that you can review the changes before executing them. You can create a change set for a stack that doesn't exist or an existing stack. If you create a change set for a stack that doesn't exist, the change set shows all of the resources that AWS CloudFormation will create. If you create a change set for an existing stack, AWS CloudFormation compares the stack's information with the information that you submit in the change set and lists the differences. Use change sets to understand which resources AWS CloudFormation will create or change, and how it will change resources in an existing stack, before you create or update a stack.

To create a change set for a stack that doesn't exist, for the ChangeSetType parameter, specify CREATE. To create a change set for an existing stack, specify UPDATE for the ChangeSetType parameter. After the CreateChangeSet call successfully completes, AWS CloudFormation starts creating the change set. To check the status of the change set or to review it, use the DescribeChangeSet action.

When you are satisfied with the changes the change set will make, execute the change set by using the ExecuteChangeSet action. AWS CloudFormation doesn't make changes until you execute the change set.

", + "CreateChangeSet": "

Creates a list of changes that will be applied to a stack so that you can review the changes before executing them. You can create a change set for a stack that doesn't exist or an existing stack. If you create a change set for a stack that doesn't exist, the change set shows all of the resources that AWS CloudFormation will create. If you create a change set for an existing stack, AWS CloudFormation compares the stack's information with the information that you submit in the change set and lists the differences. Use change sets to understand which resources AWS CloudFormation will create or change, and how it will change resources in an existing stack, before you create or update a stack.

To create a change set for a stack that doesn't exist, for the ChangeSetType parameter, specify CREATE. To create a change set for an existing stack, specify UPDATE for the ChangeSetType parameter. To create a change set for an import operation, specify IMPORT for the ChangeSetType parameter. After the CreateChangeSet call successfully completes, AWS CloudFormation starts creating the change set. To check the status of the change set or to review it, use the DescribeChangeSet action.

When you are satisfied with the changes the change set will make, execute the change set by using the ExecuteChangeSet action. AWS CloudFormation doesn't make changes until you execute the change set.

", "CreateStack": "

Creates a stack as specified in the template. After the call completes successfully, the stack creation starts. You can check the status of the stack via the DescribeStacks API.

", "CreateStackInstances": "

Creates stack instances for the specified accounts, within the specified regions. A stack instance refers to a stack in a specific account and region. Accounts and Regions are required parameters—you must specify at least one account and one region.

", "CreateStackSet": "

Creates a stack set.

", @@ -45,7 +45,7 @@ "UpdateStack": "

Updates a stack as specified in the template. After the call completes successfully, the stack update starts. You can check the status of the stack via the DescribeStacks action.

To get a copy of the template for an existing stack, you can use the GetTemplate action.

For more information about creating an update template, updating a stack, and monitoring the progress of the update, see Updating a Stack.

", "UpdateStackInstances": "

Updates the parameter values for stack instances for the specified accounts, within the specified regions. A stack instance refers to a stack in a specific account and region.

You can only update stack instances in regions and accounts where they already exist; to create additional stack instances, use CreateStackInstances.

During stack set updates, any parameters overridden for a stack instance are not updated, but retain their overridden value.

You can only update the parameter values that are specified in the stack set; to add or delete a parameter itself, use UpdateStackSet to update the stack set template. If you add a parameter to a template, before you can override the parameter value specified in the stack set you must first use UpdateStackSet to update all stack instances with the updated template and parameter value specified in the stack set. Once a stack instance has been updated with the new parameter, you can then override the parameter value using UpdateStackInstances.

", "UpdateStackSet": "

Updates the stack set, and associated stack instances in the specified accounts and regions.

Even if the stack set operation created by updating the stack set fails (completely or partially, below or above a specified failure tolerance), the stack set is updated with your changes. Subsequent CreateStackInstances calls on the specified stack set use the updated stack set.

", - "UpdateTerminationProtection": "

Updates termination protection for the specified stack. If a user attempts to delete a stack with termination protection enabled, the operation fails and the stack remains unchanged. For more information, see Protecting a Stack From Being Deleted in the AWS CloudFormation User Guide.

For nested stacks, termination protection is set on the root stack and cannot be changed directly on the nested stack.

", + "UpdateTerminationProtection": "

Updates termination protection for the specified stack. If a user attempts to delete a stack with termination protection enabled, the operation fails and the stack remains unchanged. For more information, see Protecting a Stack From Being Deleted in the AWS CloudFormation User Guide.

For nested stacks, termination protection is set on the root stack and cannot be changed directly on the nested stack.

", "ValidateTemplate": "

Validates a specified template. AWS CloudFormation first checks if the template is valid JSON. If it isn't, AWS CloudFormation checks if the template is valid YAML. If both these checks fail, AWS CloudFormation returns a template validation error.

" }, "shapes": { @@ -79,7 +79,7 @@ } }, "AccountLimit": { - "base": "

The AccountLimit data type. For more information about account limits, see AWS CloudFormation Limits in the AWS CloudFormation User Guide.

", + "base": "

The AccountLimit data type.

CloudFormation has the following limits per account:

For more information about these account limits, and other CloudFormation limits, see AWS CloudFormation Limits in the AWS CloudFormation User Guide.

", "refs": { "AccountLimitList$member": null } @@ -142,15 +142,15 @@ "Capabilities": { "base": null, "refs": { - "CreateChangeSetInput$Capabilities": "

In some cases, you must explicity acknowledge that your stack template contains certain capabilities in order for AWS CloudFormation to create the stack.

", - "CreateStackInput$Capabilities": "

In some cases, you must explicity acknowledge that your stack template contains certain capabilities in order for AWS CloudFormation to create the stack.

", - "CreateStackSetInput$Capabilities": "

In some cases, you must explicity acknowledge that your stack set template contains certain capabilities in order for AWS CloudFormation to create the stack set and related stack instances.

", + "CreateChangeSetInput$Capabilities": "

In some cases, you must explicitly acknowledge that your stack template contains certain capabilities in order for AWS CloudFormation to create the stack.

", + "CreateStackInput$Capabilities": "

In some cases, you must explicitly acknowledge that your stack template contains certain capabilities in order for AWS CloudFormation to create the stack.

", + "CreateStackSetInput$Capabilities": "

In some cases, you must explicitly acknowledge that your stack set template contains certain capabilities in order for AWS CloudFormation to create the stack set and related stack instances.

", "DescribeChangeSetOutput$Capabilities": "

If you execute the change set, the list of capabilities that were explicitly acknowledged when the change set was created.

", "GetTemplateSummaryOutput$Capabilities": "

The capabilities found within the template. If your template contains IAM resources, you must specify the CAPABILITY_IAM or CAPABILITY_NAMED_IAM value for this parameter when you use the CreateStack or UpdateStack actions with your template; otherwise, those actions return an InsufficientCapabilities error.

For more information, see Acknowledging IAM Resources in AWS CloudFormation Templates.

", "Stack$Capabilities": "

The capabilities allowed in the stack.

", "StackSet$Capabilities": "

The capabilities that are allowed in the stack set. Some stack set templates might include resources that can affect permissions in your AWS account—for example, by creating new AWS Identity and Access Management (IAM) users. For more information, see Acknowledging IAM Resources in AWS CloudFormation Templates.

", - "UpdateStackInput$Capabilities": "

In some cases, you must explicity acknowledge that your stack template contains certain capabilities in order for AWS CloudFormation to update the stack.

", - "UpdateStackSetInput$Capabilities": "

In some cases, you must explicity acknowledge that your stack template contains certain capabilities in order for AWS CloudFormation to update the stack set and its associated stack instances.

", + "UpdateStackInput$Capabilities": "

In some cases, you must explicitly acknowledge that your stack template contains certain capabilities in order for AWS CloudFormation to update the stack.

", + "UpdateStackSetInput$Capabilities": "

In some cases, you must explicitly acknowledge that your stack template contains certain capabilities in order for AWS CloudFormation to update the stack set and its associated stack instances.

", "ValidateTemplateOutput$Capabilities": "

The capabilities found within the template. If your template contains IAM resources, you must specify the CAPABILITY_IAM or CAPABILITY_NAMED_IAM value for this parameter when you use the CreateStack or UpdateStack actions with your template; otherwise, those actions return an InsufficientCapabilities error.

For more information, see Acknowledging IAM Resources in AWS CloudFormation Templates.

" } }, @@ -245,7 +245,7 @@ "ChangeSetType": { "base": null, "refs": { - "CreateChangeSetInput$ChangeSetType": "

The type of change set operation. To create a change set for a new stack, specify CREATE. To create a change set for an existing stack, specify UPDATE.

If you create a change set for a new stack, AWS Cloudformation creates a stack with a unique stack ID, but no template or resources. The stack will be in the REVIEW_IN_PROGRESS state until you execute the change set.

By default, AWS CloudFormation specifies UPDATE. You can't use the UPDATE type to create a change set for a new stack or the CREATE type to create a change set for an existing stack.

" + "CreateChangeSetInput$ChangeSetType": "

The type of change set operation. To create a change set for a new stack, specify CREATE. To create a change set for an existing stack, specify UPDATE. To create a change set for an import operation, specify IMPORT.

If you create a change set for a new stack, AWS Cloudformation creates a stack with a unique stack ID, but no template or resources. The stack will be in the REVIEW_IN_PROGRESS state until you execute the change set.

By default, AWS CloudFormation specifies UPDATE. You can't use the UPDATE type to create a change set for a new stack or the CREATE type to create a change set for an existing stack.

" } }, "ChangeSource": { @@ -733,7 +733,7 @@ "LimitName": { "base": null, "refs": { - "AccountLimit$Name": "

The name of the account limit.

" + "AccountLimit$Name": "

The name of the account limit.

Values: ConcurrentResourcesLimit | StackLimit | StackOutputsLimit

" } }, "LimitValue": { @@ -840,6 +840,7 @@ "DetectStackResourceDriftInput$LogicalResourceId": "

The logical name of the resource for which to return drift information.

", "LogicalResourceIds$member": null, "ResourceChange$LogicalResourceId": "

The resource's logical ID, which is defined in the stack's template.

", + "ResourceToImport$LogicalResourceId": "

The logical ID of the target resource as specified in the template.

", "RetainResources$member": null, "SignalResourceInput$LogicalResourceId": "

The logical ID of the resource that you want to signal. The logical ID is the name of the resource that given in the template.

", "StackEvent$LogicalResourceId": "

The logical name of the resource specified in the template.

", @@ -852,7 +853,8 @@ "LogicalResourceIds": { "base": null, "refs": { - "DetectStackDriftInput$LogicalResourceIds": "

The logical names of any resources you want to use as filters.

" + "DetectStackDriftInput$LogicalResourceIds": "

The logical names of any resources you want to use as filters.

", + "ResourceIdentifierSummary$LogicalResourceIds": "

The logical IDs of the target resources of the specified ResourceType, as defined in the import template.

" } }, "MaxConcurrentCount": { @@ -1187,6 +1189,43 @@ "ResourceChange$Details": "

For the Modify action, a list of ResourceChangeDetail structures that describes the changes that AWS CloudFormation will make to the resource.

" } }, + "ResourceIdentifierProperties": { + "base": null, + "refs": { + "ResourceToImport$ResourceIdentifier": "

A key-value pair that identifies the target resource. The key is an identifier property (for example, BucketName for AWS::S3::Bucket resources) and the value is the actual property value (for example, MyS3Bucket).

" + } + }, + "ResourceIdentifierPropertyKey": { + "base": null, + "refs": { + "ResourceIdentifierProperties$key": null, + "ResourceIdentifiers$member": null + } + }, + "ResourceIdentifierPropertyValue": { + "base": null, + "refs": { + "ResourceIdentifierProperties$value": null + } + }, + "ResourceIdentifierSummaries": { + "base": null, + "refs": { + "GetTemplateSummaryOutput$ResourceIdentifierSummaries": "

A list of resource identifier summaries that describe the target resources of an import operation and the properties you can provide during the import to identify the target resources. For example, BucketName is a possible identifier property for an AWS::S3::Bucket resource.

" + } + }, + "ResourceIdentifierSummary": { + "base": "

Describes the target resources of a specific type in your import template (for example, all AWS::S3::Bucket resources) and the properties you can provide during the import to identify resources of that type.

", + "refs": { + "ResourceIdentifierSummaries$member": null + } + }, + "ResourceIdentifiers": { + "base": null, + "refs": { + "ResourceIdentifierSummary$ResourceIdentifiers": "

The resource properties you can provide during the import to identify your target resources. For example, BucketName is a possible identifier property for AWS::S3::Bucket resources.

" + } + }, "ResourceProperties": { "base": null, "refs": { @@ -1229,6 +1268,12 @@ "ResourceChangeDetail$Target": "

A ResourceTargetDefinition structure that describes the field that AWS CloudFormation will change and whether the resource will be recreated.

" } }, + "ResourceToImport": { + "base": "

Describes the target resource of an import operation.

", + "refs": { + "ResourcesToImport$member": null + } + }, "ResourceToSkip": { "base": null, "refs": { @@ -1239,6 +1284,8 @@ "base": null, "refs": { "ResourceChange$ResourceType": "

The type of AWS CloudFormation resource, such as AWS::S3::Bucket.

", + "ResourceIdentifierSummary$ResourceType": "

The template resource type of the target resources, such as AWS::S3::Bucket.

", + "ResourceToImport$ResourceType": "

The type of resource to import into your stack, such as AWS::S3::Bucket.

", "ResourceTypes$member": null, "StackEvent$ResourceType": "

Type of resource. (For more information, go to AWS Resource Types Reference in the AWS CloudFormation User Guide.)

", "StackResource$ResourceType": "

Type of resource. (For more information, go to AWS Resource Types Reference in the AWS CloudFormation User Guide.)

", @@ -1256,6 +1303,12 @@ "UpdateStackInput$ResourceTypes": "

The template resource types that you have permissions to work with for this update stack action, such as AWS::EC2::Instance, AWS::EC2::*, or Custom::MyCustomInstance.

If the list of resource types doesn't include a resource that you're updating, the stack update fails. By default, AWS CloudFormation grants permissions to all resource types. AWS Identity and Access Management (IAM) uses this parameter for AWS CloudFormation-specific condition keys in IAM policies. For more information, see Controlling Access with AWS Identity and Access Management.

" } }, + "ResourcesToImport": { + "base": null, + "refs": { + "CreateChangeSetInput$ResourcesToImport": "

The resources to import into your stack.

" + } + }, "ResourcesToSkip": { "base": null, "refs": { @@ -1402,7 +1455,7 @@ "Export$ExportingStackId": "

The stack that contains the exported output name and value.

", "Stack$StackId": "

Unique identifier of the stack.

", "Stack$ParentId": "

For nested stacks--stacks created as resources for another stack--the stack ID of the direct parent of this stack. For the first level of nested stacks, the root stack is also the parent stack.

For more information, see Working with Nested Stacks in the AWS CloudFormation User Guide.

", - "Stack$RootId": "

For nested stacks--stacks created as resources for another stack--the stack ID of the the top-level stack to which the nested stack ultimately belongs.

For more information, see Working with Nested Stacks in the AWS CloudFormation User Guide.

", + "Stack$RootId": "

For nested stacks--stacks created as resources for another stack--the stack ID of the top-level stack to which the nested stack ultimately belongs.

For more information, see Working with Nested Stacks in the AWS CloudFormation User Guide.

", "StackEvent$StackId": "

The unique ID name of the instance of the stack.

", "StackInstance$StackId": "

The ID of the stack instance.

", "StackInstanceSummary$StackId": "

The ID of the stack instance.

", @@ -1411,7 +1464,7 @@ "StackResourceDrift$StackId": "

The ID of the stack.

", "StackSummary$StackId": "

Unique stack identifier.

", "StackSummary$ParentId": "

For nested stacks--stacks created as resources for another stack--the stack ID of the direct parent of this stack. For the first level of nested stacks, the root stack is also the parent stack.

For more information, see Working with Nested Stacks in the AWS CloudFormation User Guide.

", - "StackSummary$RootId": "

For nested stacks--stacks created as resources for another stack--the stack ID of the the top-level stack to which the nested stack ultimately belongs.

For more information, see Working with Nested Stacks in the AWS CloudFormation User Guide.

", + "StackSummary$RootId": "

For nested stacks--stacks created as resources for another stack--the stack ID of the top-level stack to which the nested stack ultimately belongs.

For more information, see Working with Nested Stacks in the AWS CloudFormation User Guide.

", "UpdateStackOutput$StackId": "

Unique identifier of the stack.

", "UpdateTerminationProtectionOutput$StackId": "

The unique ID of the stack.

" } diff --git a/models/apis/cloudformation/2010-05-15/smoke.json b/models/apis/cloudformation/2010-05-15/smoke.json new file mode 100644 index 00000000000..ae27d0e7fe7 --- /dev/null +++ b/models/apis/cloudformation/2010-05-15/smoke.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "defaultRegion": "us-west-2", + "testCases": [ + { + "operationName": "ListStacks", + "input": {}, + "errorExpectedFromService": false + }, + { + "operationName": "CreateStack", + "input": { + "StackName": "fakestack", + "TemplateURL": "http:\/\/s3.amazonaws.com\/foo\/bar" + }, + "errorExpectedFromService": true + } + ] +} diff --git a/models/apis/cloudformation/2010-05-15/waiters-2.json b/models/apis/cloudformation/2010-05-15/waiters-2.json index 4e8c8282182..01bb0986e4b 100644 --- a/models/apis/cloudformation/2010-05-15/waiters-2.json +++ b/models/apis/cloudformation/2010-05-15/waiters-2.json @@ -102,6 +102,12 @@ "matcher": "pathAny", "state": "failure" }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_ROLLBACK_IN_PROGRESS", + "matcher": "pathAny", + "state": "failure" + }, { "argument": "Stacks[].StackStatus", "expected": "UPDATE_ROLLBACK_FAILED", @@ -110,7 +116,7 @@ }, { "argument": "Stacks[].StackStatus", - "expected": "UPDATE_ROLLBACK_IN_PROGRESS", + "expected": "UPDATE_ROLLBACK_COMPLETE", "matcher": "pathAny", "state": "failure" } @@ -153,6 +159,55 @@ } ] }, + "StackImportComplete": { + "delay": 30, + "maxAttempts": 120, + "operation": "DescribeStacks", + "description": "Wait until stack status is IMPORT_COMPLETE.", + "acceptors": [ + { + "argument": "Stacks[].StackStatus", + "expected": "IMPORT_COMPLETE", + "matcher": "pathAll", + "state": "success" + }, + { + "expected": "ROLLBACK_COMPLETE", + "matcher": "pathAny", + "state": "failure", + "argument": "Stacks[].StackStatus" + }, + { + "expected": "ROLLBACK_FAILED", + "matcher": "pathAny", + "state": "failure", + "argument": "Stacks[].StackStatus" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "IMPORT_ROLLBACK_IN_PROGRESS", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "IMPORT_ROLLBACK_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "expected": "IMPORT_ROLLBACK_COMPLETE", + "matcher": "pathAny", + "state": "failure", + "argument": "Stacks[].StackStatus" + }, + { + "expected": "ValidationError", + "matcher": "error", + "state": "failure" + } + ] + }, "ChangeSetCreateComplete": { "delay": 30, "operation": "DescribeChangeSet", diff --git a/service/cloudformation/api.go b/service/cloudformation/api.go index e0ac414e9d4..c79f716f12d 100644 --- a/service/cloudformation/api.go +++ b/service/cloudformation/api.go @@ -245,10 +245,11 @@ func (c *CloudFormation) CreateChangeSetRequest(input *CreateChangeSetInput) (re // // To create a change set for a stack that doesn't exist, for the ChangeSetType // parameter, specify CREATE. To create a change set for an existing stack, -// specify UPDATE for the ChangeSetType parameter. After the CreateChangeSet -// call successfully completes, AWS CloudFormation starts creating the change -// set. To check the status of the change set or to review it, use the DescribeChangeSet -// action. +// specify UPDATE for the ChangeSetType parameter. To create a change set for +// an import operation, specify IMPORT for the ChangeSetType parameter. After +// the CreateChangeSet call successfully completes, AWS CloudFormation starts +// creating the change set. To check the status of the change set or to review +// it, use the DescribeChangeSet action. // // When you are satisfied with the changes the change set will make, execute // the change set by using the ExecuteChangeSet action. AWS CloudFormation doesn't @@ -4142,10 +4143,10 @@ func (c *CloudFormation) UpdateTerminationProtectionRequest(input *UpdateTermina // Updates termination protection for the specified stack. If a user attempts // to delete a stack with termination protection enabled, the operation fails // and the stack remains unchanged. For more information, see Protecting a Stack -// From Being Deleted (AWSCloudFormation/latest/UserGuide/using-cfn-protect-stacks.html) +// From Being Deleted (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-protect-stacks.html) // in the AWS CloudFormation User Guide. // -// For nested stacks (AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html), +// For nested stacks (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html), // termination protection is set on the root stack and cannot be changed directly // on the nested stack. // @@ -4321,13 +4322,25 @@ func (s *AccountGateResult) SetStatusReason(v string) *AccountGateResult { return s } -// The AccountLimit data type. For more information about account limits, see -// AWS CloudFormation Limits (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html) +// The AccountLimit data type. +// +// CloudFormation has the following limits per account: +// +// * Number of concurrent resources +// +// * Number of stacks +// +// * Number of stack outputs +// +// For more information about these account limits, and other CloudFormation +// limits, see AWS CloudFormation Limits (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html) // in the AWS CloudFormation User Guide. type AccountLimit struct { _ struct{} `type:"structure"` // The name of the account limit. + // + // Values: ConcurrentResourcesLimit | StackLimit | StackOutputsLimit Name *string `type:"string"` // The value that is associated with the account limit name. @@ -4709,7 +4722,7 @@ func (s ContinueUpdateRollbackOutput) GoString() string { type CreateChangeSetInput struct { _ struct{} `type:"structure"` - // In some cases, you must explicity acknowledge that your stack template contains + // In some cases, you must explicitly acknowledge that your stack template contains // certain capabilities in order for AWS CloudFormation to create the stack. // // * CAPABILITY_IAM and CAPABILITY_NAMED_IAM Some stack templates might include @@ -4765,6 +4778,7 @@ type CreateChangeSetInput struct { // The type of change set operation. To create a change set for a new stack, // specify CREATE. To create a change set for an existing stack, specify UPDATE. + // To create a change set for an import operation, specify IMPORT. // // If you create a change set for a new stack, AWS Cloudformation creates a // stack with a unique stack ID, but no template or resources. The stack will @@ -4807,6 +4821,9 @@ type CreateChangeSetInput struct { // in the AWS CloudFormation User Guide. ResourceTypes []*string `type:"list"` + // The resources to import into your stack. + ResourcesToImport []*ResourceToImport `type:"list"` + // The Amazon Resource Name (ARN) of an AWS Identity and Access Management (IAM) // role that AWS CloudFormation assumes when executing the change set. AWS CloudFormation // uses the role's credentials to make calls on your behalf. AWS CloudFormation @@ -4897,6 +4914,16 @@ func (s *CreateChangeSetInput) Validate() error { if s.TemplateURL != nil && len(*s.TemplateURL) < 1 { invalidParams.Add(request.NewErrParamMinLen("TemplateURL", 1)) } + if s.ResourcesToImport != nil { + for i, v := range s.ResourcesToImport { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ResourcesToImport", i), err.(request.ErrInvalidParams)) + } + } + } if s.RollbackConfiguration != nil { if err := s.RollbackConfiguration.Validate(); err != nil { invalidParams.AddNested("RollbackConfiguration", err.(request.ErrInvalidParams)) @@ -4967,6 +4994,12 @@ func (s *CreateChangeSetInput) SetResourceTypes(v []*string) *CreateChangeSetInp return s } +// SetResourcesToImport sets the ResourcesToImport field's value. +func (s *CreateChangeSetInput) SetResourcesToImport(v []*ResourceToImport) *CreateChangeSetInput { + s.ResourcesToImport = v + return s +} + // SetRoleARN sets the RoleARN field's value. func (s *CreateChangeSetInput) SetRoleARN(v string) *CreateChangeSetInput { s.RoleARN = &v @@ -5046,7 +5079,7 @@ func (s *CreateChangeSetOutput) SetStackId(v string) *CreateChangeSetOutput { type CreateStackInput struct { _ struct{} `type:"structure"` - // In some cases, you must explicity acknowledge that your stack template contains + // In some cases, you must explicitly acknowledge that your stack template contains // certain capabilities in order for AWS CloudFormation to create the stack. // // * CAPABILITY_IAM and CAPABILITY_NAMED_IAM Some stack templates might include @@ -5590,7 +5623,7 @@ type CreateStackSetInput struct { // in the AWS CloudFormation User Guide. AdministrationRoleARN *string `min:"20" type:"string"` - // In some cases, you must explicity acknowledge that your stack set template + // In some cases, you must explicitly acknowledge that your stack set template // contains certain capabilities in order for AWS CloudFormation to create the // stack set and related stack instances. // @@ -8093,6 +8126,12 @@ type GetTemplateSummaryOutput struct { // parameter. Parameters []*ParameterDeclaration `type:"list"` + // A list of resource identifier summaries that describe the target resources + // of an import operation and the properties you can provide during the import + // to identify the target resources. For example, BucketName is a possible identifier + // property for an AWS::S3::Bucket resource. + ResourceIdentifierSummaries []*ResourceIdentifierSummary `type:"list"` + // A list of all the template resource types that are defined in the template, // such as AWS::EC2::Instance, AWS::Dynamo::Table, and Custom::MyCustomInstance. ResourceTypes []*string `type:"list"` @@ -8148,6 +8187,12 @@ func (s *GetTemplateSummaryOutput) SetParameters(v []*ParameterDeclaration) *Get return s } +// SetResourceIdentifierSummaries sets the ResourceIdentifierSummaries field's value. +func (s *GetTemplateSummaryOutput) SetResourceIdentifierSummaries(v []*ResourceIdentifierSummary) *GetTemplateSummaryOutput { + s.ResourceIdentifierSummaries = v + return s +} + // SetResourceTypes sets the ResourceTypes field's value. func (s *GetTemplateSummaryOutput) SetResourceTypes(v []*string) *GetTemplateSummaryOutput { s.ResourceTypes = v @@ -9542,6 +9587,53 @@ func (s *ResourceChangeDetail) SetTarget(v *ResourceTargetDefinition) *ResourceC return s } +// Describes the target resources of a specific type in your import template +// (for example, all AWS::S3::Bucket resources) and the properties you can provide +// during the import to identify resources of that type. +type ResourceIdentifierSummary struct { + _ struct{} `type:"structure"` + + // The logical IDs of the target resources of the specified ResourceType, as + // defined in the import template. + LogicalResourceIds []*string `min:"1" type:"list"` + + // The resource properties you can provide during the import to identify your + // target resources. For example, BucketName is a possible identifier property + // for AWS::S3::Bucket resources. + ResourceIdentifiers []*string `type:"list"` + + // The template resource type of the target resources, such as AWS::S3::Bucket. + ResourceType *string `min:"1" type:"string"` +} + +// String returns the string representation +func (s ResourceIdentifierSummary) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ResourceIdentifierSummary) GoString() string { + return s.String() +} + +// SetLogicalResourceIds sets the LogicalResourceIds field's value. +func (s *ResourceIdentifierSummary) SetLogicalResourceIds(v []*string) *ResourceIdentifierSummary { + s.LogicalResourceIds = v + return s +} + +// SetResourceIdentifiers sets the ResourceIdentifiers field's value. +func (s *ResourceIdentifierSummary) SetResourceIdentifiers(v []*string) *ResourceIdentifierSummary { + s.ResourceIdentifiers = v + return s +} + +// SetResourceType sets the ResourceType field's value. +func (s *ResourceIdentifierSummary) SetResourceType(v string) *ResourceIdentifierSummary { + s.ResourceType = &v + return s +} + // The field that AWS CloudFormation will change, such as the name of a resource's // property, and whether the resource will be recreated. type ResourceTargetDefinition struct { @@ -9591,6 +9683,81 @@ func (s *ResourceTargetDefinition) SetRequiresRecreation(v string) *ResourceTarg return s } +// Describes the target resource of an import operation. +type ResourceToImport struct { + _ struct{} `type:"structure"` + + // The logical ID of the target resource as specified in the template. + // + // LogicalResourceId is a required field + LogicalResourceId *string `type:"string" required:"true"` + + // A key-value pair that identifies the target resource. The key is an identifier + // property (for example, BucketName for AWS::S3::Bucket resources) and the + // value is the actual property value (for example, MyS3Bucket). + // + // ResourceIdentifier is a required field + ResourceIdentifier map[string]*string `min:"1" type:"map" required:"true"` + + // The type of resource to import into your stack, such as AWS::S3::Bucket. + // + // ResourceType is a required field + ResourceType *string `min:"1" type:"string" required:"true"` +} + +// String returns the string representation +func (s ResourceToImport) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ResourceToImport) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ResourceToImport) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ResourceToImport"} + if s.LogicalResourceId == nil { + invalidParams.Add(request.NewErrParamRequired("LogicalResourceId")) + } + if s.ResourceIdentifier == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceIdentifier")) + } + if s.ResourceIdentifier != nil && len(s.ResourceIdentifier) < 1 { + invalidParams.Add(request.NewErrParamMinLen("ResourceIdentifier", 1)) + } + if s.ResourceType == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceType")) + } + if s.ResourceType != nil && len(*s.ResourceType) < 1 { + invalidParams.Add(request.NewErrParamMinLen("ResourceType", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetLogicalResourceId sets the LogicalResourceId field's value. +func (s *ResourceToImport) SetLogicalResourceId(v string) *ResourceToImport { + s.LogicalResourceId = &v + return s +} + +// SetResourceIdentifier sets the ResourceIdentifier field's value. +func (s *ResourceToImport) SetResourceIdentifier(v map[string]*string) *ResourceToImport { + s.ResourceIdentifier = v + return s +} + +// SetResourceType sets the ResourceType field's value. +func (s *ResourceToImport) SetResourceType(v string) *ResourceToImport { + s.ResourceType = &v + return s +} + // Structure containing the rollback triggers for AWS CloudFormation to monitor // during stack creation and updating operations, and for the specified monitoring // period afterwards. @@ -10014,7 +10181,7 @@ type Stack struct { RollbackConfiguration *RollbackConfiguration `type:"structure"` // For nested stacks--stacks created as resources for another stack--the stack - // ID of the the top-level stack to which the nested stack ultimately belongs. + // ID of the top-level stack to which the nested stack ultimately belongs. // // For more information, see Working with Nested Stacks (http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html) // in the AWS CloudFormation User Guide. @@ -11850,7 +12017,7 @@ type StackSummary struct { ParentId *string `type:"string"` // For nested stacks--stacks created as resources for another stack--the stack - // ID of the the top-level stack to which the nested stack ultimately belongs. + // ID of the top-level stack to which the nested stack ultimately belongs. // // For more information, see Working with Nested Stacks (http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html) // in the AWS CloudFormation User Guide. @@ -12141,7 +12308,7 @@ func (s *TemplateParameter) SetParameterKey(v string) *TemplateParameter { type UpdateStackInput struct { _ struct{} `type:"structure"` - // In some cases, you must explicity acknowledge that your stack template contains + // In some cases, you must explicitly acknowledge that your stack template contains // certain capabilities in order for AWS CloudFormation to update the stack. // // * CAPABILITY_IAM and CAPABILITY_NAMED_IAM Some stack templates might include @@ -12702,7 +12869,7 @@ type UpdateStackSetInput struct { // same customized administrator role used with this stack set previously. AdministrationRoleARN *string `min:"20" type:"string"` - // In some cases, you must explicity acknowledge that your stack template contains + // In some cases, you must explicitly acknowledge that your stack template contains // certain capabilities in order for AWS CloudFormation to update the stack // set and its associated stack instances. // @@ -13255,6 +13422,9 @@ const ( // ChangeActionRemove is a ChangeAction enum value ChangeActionRemove = "Remove" + + // ChangeActionImport is a ChangeAction enum value + ChangeActionImport = "Import" ) const ( @@ -13280,6 +13450,9 @@ const ( // ChangeSetTypeUpdate is a ChangeSetType enum value ChangeSetTypeUpdate = "UPDATE" + + // ChangeSetTypeImport is a ChangeSetType enum value + ChangeSetTypeImport = "IMPORT" ) const ( @@ -13434,6 +13607,24 @@ const ( // ResourceStatusUpdateComplete is a ResourceStatus enum value ResourceStatusUpdateComplete = "UPDATE_COMPLETE" + + // ResourceStatusImportFailed is a ResourceStatus enum value + ResourceStatusImportFailed = "IMPORT_FAILED" + + // ResourceStatusImportComplete is a ResourceStatus enum value + ResourceStatusImportComplete = "IMPORT_COMPLETE" + + // ResourceStatusImportInProgress is a ResourceStatus enum value + ResourceStatusImportInProgress = "IMPORT_IN_PROGRESS" + + // ResourceStatusImportRollbackInProgress is a ResourceStatus enum value + ResourceStatusImportRollbackInProgress = "IMPORT_ROLLBACK_IN_PROGRESS" + + // ResourceStatusImportRollbackFailed is a ResourceStatus enum value + ResourceStatusImportRollbackFailed = "IMPORT_ROLLBACK_FAILED" + + // ResourceStatusImportRollbackComplete is a ResourceStatus enum value + ResourceStatusImportRollbackComplete = "IMPORT_ROLLBACK_COMPLETE" ) const ( @@ -13590,6 +13781,21 @@ const ( // StackStatusReviewInProgress is a StackStatus enum value StackStatusReviewInProgress = "REVIEW_IN_PROGRESS" + + // StackStatusImportInProgress is a StackStatus enum value + StackStatusImportInProgress = "IMPORT_IN_PROGRESS" + + // StackStatusImportComplete is a StackStatus enum value + StackStatusImportComplete = "IMPORT_COMPLETE" + + // StackStatusImportRollbackInProgress is a StackStatus enum value + StackStatusImportRollbackInProgress = "IMPORT_ROLLBACK_IN_PROGRESS" + + // StackStatusImportRollbackFailed is a StackStatus enum value + StackStatusImportRollbackFailed = "IMPORT_ROLLBACK_FAILED" + + // StackStatusImportRollbackComplete is a StackStatus enum value + StackStatusImportRollbackComplete = "IMPORT_ROLLBACK_COMPLETE" ) const ( diff --git a/service/cloudformation/cloudformationiface/interface.go b/service/cloudformation/cloudformationiface/interface.go index 55c72e508e9..e8748ae9711 100644 --- a/service/cloudformation/cloudformationiface/interface.go +++ b/service/cloudformation/cloudformationiface/interface.go @@ -273,6 +273,9 @@ type CloudFormationAPI interface { WaitUntilStackExists(*cloudformation.DescribeStacksInput) error WaitUntilStackExistsWithContext(aws.Context, *cloudformation.DescribeStacksInput, ...request.WaiterOption) error + WaitUntilStackImportComplete(*cloudformation.DescribeStacksInput) error + WaitUntilStackImportCompleteWithContext(aws.Context, *cloudformation.DescribeStacksInput, ...request.WaiterOption) error + WaitUntilStackUpdateComplete(*cloudformation.DescribeStacksInput) error WaitUntilStackUpdateCompleteWithContext(aws.Context, *cloudformation.DescribeStacksInput, ...request.WaiterOption) error } diff --git a/service/cloudformation/integ_test.go b/service/cloudformation/integ_test.go new file mode 100644 index 00000000000..a3a3421e386 --- /dev/null +++ b/service/cloudformation/integ_test.go @@ -0,0 +1,59 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +// +build go1.10,integration + +package cloudformation_test + +import ( + "context" + "testing" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/awstesting/integration" + "github.com/aws/aws-sdk-go/service/cloudformation" +) + +var _ aws.Config +var _ awserr.Error +var _ request.Request + +func TestInteg_00_ListStacks(t *testing.T) { + ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second) + defer cancelFn() + + sess := integration.SessionWithDefaultRegion("us-west-2") + svc := cloudformation.New(sess) + params := &cloudformation.ListStacksInput{} + _, err := svc.ListStacksWithContext(ctx, params) + if err != nil { + t.Errorf("expect no error, got %v", err) + } +} +func TestInteg_01_CreateStack(t *testing.T) { + ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second) + defer cancelFn() + + sess := integration.SessionWithDefaultRegion("us-west-2") + svc := cloudformation.New(sess) + params := &cloudformation.CreateStackInput{ + StackName: aws.String("fakestack"), + TemplateURL: aws.String("http://s3.amazonaws.com/foo/bar"), + } + _, err := svc.CreateStackWithContext(ctx, params) + if err == nil { + t.Fatalf("expect request to fail") + } + aerr, ok := err.(awserr.RequestFailure) + if !ok { + t.Fatalf("expect awserr, was %T", err) + } + if len(aerr.Code()) == 0 { + t.Errorf("expect non-empty error code") + } + if v := aerr.Code(); v == request.ErrCodeSerialization { + t.Errorf("expect API error code got serialization failure") + } +} diff --git a/service/cloudformation/waiters.go b/service/cloudformation/waiters.go index afe8a1b2eb3..cabb91cee56 100644 --- a/service/cloudformation/waiters.go +++ b/service/cloudformation/waiters.go @@ -188,6 +188,11 @@ func (c *CloudFormation) WaitUntilStackDeleteCompleteWithContext(ctx aws.Context Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus", Expected: "ROLLBACK_FAILED", }, + { + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus", + Expected: "UPDATE_ROLLBACK_IN_PROGRESS", + }, { State: request.FailureWaiterState, Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus", @@ -196,7 +201,7 @@ func (c *CloudFormation) WaitUntilStackDeleteCompleteWithContext(ctx aws.Context { State: request.FailureWaiterState, Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus", - Expected: "UPDATE_ROLLBACK_IN_PROGRESS", + Expected: "UPDATE_ROLLBACK_COMPLETE", }, }, Logger: c.Config.Logger, @@ -268,6 +273,82 @@ func (c *CloudFormation) WaitUntilStackExistsWithContext(ctx aws.Context, input return w.WaitWithContext(ctx) } +// WaitUntilStackImportComplete uses the AWS CloudFormation API operation +// DescribeStacks to wait for a condition to be met before returning. +// If the condition is not met within the max attempt window, an error will +// be returned. +func (c *CloudFormation) WaitUntilStackImportComplete(input *DescribeStacksInput) error { + return c.WaitUntilStackImportCompleteWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilStackImportCompleteWithContext is an extended version of WaitUntilStackImportComplete. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *CloudFormation) WaitUntilStackImportCompleteWithContext(ctx aws.Context, input *DescribeStacksInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilStackImportComplete", + MaxAttempts: 120, + Delay: request.ConstantWaiterDelay(30 * time.Second), + Acceptors: []request.WaiterAcceptor{ + { + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "Stacks[].StackStatus", + Expected: "IMPORT_COMPLETE", + }, + { + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus", + Expected: "ROLLBACK_COMPLETE", + }, + { + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus", + Expected: "ROLLBACK_FAILED", + }, + { + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus", + Expected: "IMPORT_ROLLBACK_IN_PROGRESS", + }, + { + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus", + Expected: "IMPORT_ROLLBACK_FAILED", + }, + { + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus", + Expected: "IMPORT_ROLLBACK_COMPLETE", + }, + { + State: request.FailureWaiterState, + Matcher: request.ErrorWaiterMatch, + Expected: "ValidationError", + }, + }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeStacksInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeStacksRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + w.ApplyOptions(opts...) + + return w.WaitWithContext(ctx) +} + // WaitUntilStackUpdateComplete uses the AWS CloudFormation API operation // DescribeStacks to wait for a condition to be met before returning. // If the condition is not met within the max attempt window, an error will diff --git a/service/costexplorer/api.go b/service/costexplorer/api.go index 6460b3fff8d..746ac9ab1d5 100644 --- a/service/costexplorer/api.go +++ b/service/costexplorer/api.go @@ -106,6 +106,110 @@ func (c *CostExplorer) GetCostAndUsageWithContext(ctx aws.Context, input *GetCos return out, req.Send() } +const opGetCostAndUsageWithResources = "GetCostAndUsageWithResources" + +// GetCostAndUsageWithResourcesRequest generates a "aws/request.Request" representing the +// client's request for the GetCostAndUsageWithResources operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetCostAndUsageWithResources for more information on using the GetCostAndUsageWithResources +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetCostAndUsageWithResourcesRequest method. +// req, resp := client.GetCostAndUsageWithResourcesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetCostAndUsageWithResources +func (c *CostExplorer) GetCostAndUsageWithResourcesRequest(input *GetCostAndUsageWithResourcesInput) (req *request.Request, output *GetCostAndUsageWithResourcesOutput) { + op := &request.Operation{ + Name: opGetCostAndUsageWithResources, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetCostAndUsageWithResourcesInput{} + } + + output = &GetCostAndUsageWithResourcesOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetCostAndUsageWithResources API operation for AWS Cost Explorer Service. +// +// Retrieves cost and usage metrics with resources for your account. You can +// specify which cost and usage-related metric, such as BlendedCosts or UsageQuantity, +// that you want the request to return. You can also filter and group your data +// by various dimensions, such as SERVICE or AZ, in a specific time range. For +// a complete list of valid dimensions, see the GetDimensionValues (http://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_GetDimensionValues.html) +// operation. Master accounts in an organization in AWS Organizations have access +// to all member accounts. This API is currently available for the Amazon Elastic +// Compute Cloud – Compute service only. +// +// This is an opt-in only feature. You can enable this feature from the Cost +// Explorer Settings page. For information on how to access the Settings page, +// see Controlling Access for Cost Explorer (https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/ce-access.html) +// in the AWS Billing and Cost Management User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Cost Explorer Service's +// API operation GetCostAndUsageWithResources for usage and error information. +// +// Returned Error Codes: +// * ErrCodeDataUnavailableException "DataUnavailableException" +// The requested data is unavailable. +// +// * ErrCodeLimitExceededException "LimitExceededException" +// You made too many calls in a short period of time. Try again later. +// +// * ErrCodeBillExpirationException "BillExpirationException" +// The requested report expired. Update the date interval and try again. +// +// * ErrCodeInvalidNextTokenException "InvalidNextTokenException" +// The pagination token is invalid. Try again without a pagination token. +// +// * ErrCodeRequestChangedException "RequestChangedException" +// Your request parameters changed between pages. Try again with the old parameters +// or without a pagination token. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetCostAndUsageWithResources +func (c *CostExplorer) GetCostAndUsageWithResources(input *GetCostAndUsageWithResourcesInput) (*GetCostAndUsageWithResourcesOutput, error) { + req, out := c.GetCostAndUsageWithResourcesRequest(input) + return out, req.Send() +} + +// GetCostAndUsageWithResourcesWithContext is the same as GetCostAndUsageWithResources with the addition of +// the ability to pass a context and additional request options. +// +// See GetCostAndUsageWithResources for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *CostExplorer) GetCostAndUsageWithResourcesWithContext(ctx aws.Context, input *GetCostAndUsageWithResourcesInput, opts ...request.Option) (*GetCostAndUsageWithResourcesOutput, error) { + req, out := c.GetCostAndUsageWithResourcesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opGetCostForecast = "GetCostForecast" // GetCostForecastRequest generates a "aws/request.Request" representing the @@ -959,8 +1063,8 @@ func (c *CostExplorer) GetSavingsPlansUtilizationRequest(input *GetSavingsPlansU // // Retrieves the Savings Plans utilization for your account across date ranges // with daily or monthly granularity. Master accounts in an organization have -// access to member accounts. You can use GetDimensionValues to determine the -// possible dimension values. +// access to member accounts. You can use GetDimensionValues in SAVINGS_PLANS +// to determine the possible dimension values. // // You cannot group by any dimension values for GetSavingsPlansUtilization. // @@ -1050,12 +1154,15 @@ func (c *CostExplorer) GetSavingsPlansUtilizationDetailsRequest(input *GetSaving // GetSavingsPlansUtilizationDetails API operation for AWS Cost Explorer Service. // -// Retrieves a single daily or monthly Savings Plans utilization rate and details -// for your account. Master accounts in an organization have access to member -// accounts. You can use GetDimensionValues to determine the possible dimension +// Retrieves attribute data along with aggregate utilization and savings data +// for a given time period. This doesn't support granular or grouped data (daily/monthly) +// in response. You can't retrieve data by dates in a single response similar +// to GetSavingsPlanUtilization, but you have the option to make multiple calls +// to GetSavingsPlanUtilizationDetails by providing individual dates. You can +// use GetDimensionValues in SAVINGS_PLANS to determine the possible dimension // values. // -// You can't group by any dimension values for GetSavingsPlansUtilizationDetails. +// GetSavingsPlanUtilizationDetails internally groups data by SavingsPlansArn. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -2316,8 +2423,9 @@ type GetCostAndUsageInput struct { // of dimension filters. For more information, see Expression (http://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html). Filter *Expression `type:"structure"` - // Sets the AWS cost granularity to MONTHLY or DAILY. If Granularity isn't set, - // the response object doesn't include the Granularity, either MONTHLY or DAILY. + // Sets the AWS cost granularity to MONTHLY or DAILY, or HOURLY. If Granularity + // isn't set, the response object doesn't include the Granularity, either MONTHLY + // or DAILY, or HOURLY. // // The GetCostAndUsageRequest operation supports only DAILY and MONTHLY granularities. Granularity *string `type:"string" enum:"Granularity"` @@ -2470,6 +2578,169 @@ func (s *GetCostAndUsageOutput) SetResultsByTime(v []*ResultByTime) *GetCostAndU return s } +type GetCostAndUsageWithResourcesInput struct { + _ struct{} `type:"structure"` + + // Filters Amazon Web Services costs by different dimensions. For example, you + // can specify SERVICE and LINKED_ACCOUNT and get the costs that are associated + // with that account's usage of that service. You can nest Expression objects + // to define any combination of dimension filters. For more information, see + // Expression (http://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html). + // + // The GetCostAndUsageWithResources operation requires that you either group + // by or filter by a ResourceId. + Filter *Expression `type:"structure"` + + // Sets the AWS cost granularity to MONTHLY, DAILY, or HOURLY. If Granularity + // isn't set, the response object doesn't include the Granularity, MONTHLY, + // DAILY, or HOURLY. + Granularity *string `type:"string" enum:"Granularity"` + + // You can group Amazon Web Services costs using up to two different groups: + // either dimensions, tag keys, or both. + GroupBy []*GroupDefinition `type:"list"` + + // Which metrics are returned in the query. For more information about blended + // and unblended rates, see Why does the "blended" annotation appear on some + // line items in my bill? (https://aws.amazon.com/premiumsupport/knowledge-center/blended-rates-intro/). + // + // Valid values are AmortizedCost, BlendedCost, NetAmortizedCost, NetUnblendedCost, + // NormalizedUsageAmount, UnblendedCost, and UsageQuantity. + // + // If you return the UsageQuantity metric, the service aggregates all usage + // numbers without taking the units into account. For example, if you aggregate + // usageQuantity across all of Amazon EC2, the results aren't meaningful because + // Amazon EC2 compute hours and data transfer are measured in different units + // (for example, hours vs. GB). To get more meaningful UsageQuantity metrics, + // filter by UsageType or UsageTypeGroups. + // + // Metrics is required for GetCostAndUsageWithResources requests. + Metrics []*string `type:"list"` + + // The token to retrieve the next set of results. AWS provides the token when + // the response from a previous call has more results than the maximum page + // size. + NextPageToken *string `type:"string"` + + // Sets the start and end dates for retrieving Amazon Web Services costs. The + // range must be within the last 14 days (the start date cannot be earlier than + // 14 days ago). The start date is inclusive, but the end date is exclusive. + // For example, if start is 2017-01-01 and end is 2017-05-01, then the cost + // and usage data is retrieved from 2017-01-01 up to and including 2017-04-30 + // but not including 2017-05-01. + // + // TimePeriod is a required field + TimePeriod *DateInterval `type:"structure" required:"true"` +} + +// String returns the string representation +func (s GetCostAndUsageWithResourcesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetCostAndUsageWithResourcesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetCostAndUsageWithResourcesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetCostAndUsageWithResourcesInput"} + if s.TimePeriod == nil { + invalidParams.Add(request.NewErrParamRequired("TimePeriod")) + } + if s.TimePeriod != nil { + if err := s.TimePeriod.Validate(); err != nil { + invalidParams.AddNested("TimePeriod", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFilter sets the Filter field's value. +func (s *GetCostAndUsageWithResourcesInput) SetFilter(v *Expression) *GetCostAndUsageWithResourcesInput { + s.Filter = v + return s +} + +// SetGranularity sets the Granularity field's value. +func (s *GetCostAndUsageWithResourcesInput) SetGranularity(v string) *GetCostAndUsageWithResourcesInput { + s.Granularity = &v + return s +} + +// SetGroupBy sets the GroupBy field's value. +func (s *GetCostAndUsageWithResourcesInput) SetGroupBy(v []*GroupDefinition) *GetCostAndUsageWithResourcesInput { + s.GroupBy = v + return s +} + +// SetMetrics sets the Metrics field's value. +func (s *GetCostAndUsageWithResourcesInput) SetMetrics(v []*string) *GetCostAndUsageWithResourcesInput { + s.Metrics = v + return s +} + +// SetNextPageToken sets the NextPageToken field's value. +func (s *GetCostAndUsageWithResourcesInput) SetNextPageToken(v string) *GetCostAndUsageWithResourcesInput { + s.NextPageToken = &v + return s +} + +// SetTimePeriod sets the TimePeriod field's value. +func (s *GetCostAndUsageWithResourcesInput) SetTimePeriod(v *DateInterval) *GetCostAndUsageWithResourcesInput { + s.TimePeriod = v + return s +} + +type GetCostAndUsageWithResourcesOutput struct { + _ struct{} `type:"structure"` + + // The groups that are specified by the Filter or GroupBy parameters in the + // request. + GroupDefinitions []*GroupDefinition `type:"list"` + + // The token for the next set of retrievable results. AWS provides the token + // when the response from a previous call has more results than the maximum + // page size. + NextPageToken *string `type:"string"` + + // The time period that is covered by the results in the response. + ResultsByTime []*ResultByTime `type:"list"` +} + +// String returns the string representation +func (s GetCostAndUsageWithResourcesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetCostAndUsageWithResourcesOutput) GoString() string { + return s.String() +} + +// SetGroupDefinitions sets the GroupDefinitions field's value. +func (s *GetCostAndUsageWithResourcesOutput) SetGroupDefinitions(v []*GroupDefinition) *GetCostAndUsageWithResourcesOutput { + s.GroupDefinitions = v + return s +} + +// SetNextPageToken sets the NextPageToken field's value. +func (s *GetCostAndUsageWithResourcesOutput) SetNextPageToken(v string) *GetCostAndUsageWithResourcesOutput { + s.NextPageToken = &v + return s +} + +// SetResultsByTime sets the ResultsByTime field's value. +func (s *GetCostAndUsageWithResourcesOutput) SetResultsByTime(v []*ResultByTime) *GetCostAndUsageWithResourcesOutput { + s.ResultsByTime = v + return s +} + type GetCostForecastInput struct { _ struct{} `type:"structure"` @@ -2667,6 +2938,9 @@ type GetDimensionValuesInput struct { // * RECORD_TYPE - The different types of charges such as RI fees, usage // costs, tax refunds, and credits. // + // * RESOURCE_ID - The unique identifier of the resource. ResourceId is an + // opt-in feature only available for last 14 days for EC2-Compute Service. + // // If you set the context to RESERVATIONS, you can use the following dimensions // for searching: // @@ -2847,6 +3121,9 @@ type GetDimensionValuesOutput struct { // * RECORD_TYPE - The different types of charges such as RI fees, usage // costs, tax refunds, and credits. // + // * RESOURCE_ID - The unique identifier of the resource. ResourceId is an + // opt-in feature only available for last 14 days for EC2-Compute Service. + // // If you set the context to RESERVATIONS, you can use the following dimensions // for searching: // @@ -3639,6 +3916,8 @@ type GetSavingsPlansCoverageInput struct { // The granularity of the Amazon Web Services cost data for your Savings Plans. // Granularity can't be set if GroupBy is set. + // + // The GetSavingsPlansCoverage operation supports only DAILY and MONTHLY granularities. Granularity *string `type:"string" enum:"Granularity"` // You can group the data using the attributes INSTANCE_FAMILY, REGION, or SERVICE. @@ -3649,7 +3928,7 @@ type GetSavingsPlansCoverageInput struct { MaxResults *int64 `min:"1" type:"integer"` // The measurement that you want your Savings Plans coverage reported in. The - // only valid value is spendCoveredBySavingsPlans. + // only valid value is SpendCoveredBySavingsPlans. Metrics []*string `type:"list"` // The token to retrieve the next set of results. Amazon Web Services provides @@ -3878,7 +4157,7 @@ func (s *GetSavingsPlansPurchaseRecommendationInput) SetTermInYears(v string) *G type GetSavingsPlansPurchaseRecommendationOutput struct { _ struct{} `type:"structure"` - // The accountIDs these recommendations are generated for. + // Information regarding this specific recommendation set. Metadata *SavingsPlansPurchaseRecommendationMetadata `type:"structure"` // The token for the next set of retrievable results. AWS provides the token @@ -3931,13 +4210,12 @@ type GetSavingsPlansUtilizationDetailsInput struct { // // * REGION // - // * PAYMENT_OPTIONS + // * PAYMENT_OPTION // // * INSTANCE_TYPE_FAMILY // // GetSavingsPlansUtilizationDetails uses the same Expression (http://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html) // object as the other operations, but only AND is supported among each dimension. - // If there are multiple values for a dimension, they are OR'd together. Filter *Expression `type:"structure"` // The number of items to be returned in a response. The default is 20, with @@ -4083,17 +4361,19 @@ type GetSavingsPlansUtilizationInput struct { // // * REGION // - // * PAYMENT_OPTIONS + // * PAYMENT_OPTION // // * INSTANCE_TYPE_FAMILY // // GetSavingsPlansUtilization uses the same Expression (http://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html) // object as the other operations, but only AND is supported among each dimension. - // If there are multiple values for a dimension, they are OR'd together. Filter *Expression `type:"structure"` // The granularity of the Amazon Web Services utillization data for your Savings // Plans. + // + // The GetSavingsPlansUtilization operation supports only DAILY and MONTHLY + // granularities. Granularity *string `type:"string" enum:"Granularity"` // The time period that you want the usage and costs for. The Start date must @@ -4153,12 +4433,12 @@ func (s *GetSavingsPlansUtilizationInput) SetTimePeriod(v *DateInterval) *GetSav type GetSavingsPlansUtilizationOutput struct { _ struct{} `type:"structure"` - // The amount of time (in hours) ou used your Savings Plans. This allows you + // The amount of cost/commitment you used your Savings Plans. This allows you // to specify date ranges. SavingsPlansUtilizationsByTime []*SavingsPlansUtilizationByTime `type:"list"` - // The total amount of time that you used your Savings Plans, regardless of - // date ranges. + // The total amount of cost/commitment that you used your Savings Plans, regardless + // of date ranges. // // Total is a required field Total *SavingsPlansUtilizationAggregates `type:"structure" required:"true"` @@ -5808,7 +6088,8 @@ type SavingsPlansDetails struct { // The unique ID used to distinguish Savings Plans from one another. OfferingId *string `type:"string"` - // A geographic location where the Savings Plans is hosted. + // A collection of AWS resources in a geographic area. Each AWS Region is isolated + // and independent of the other Regions. Region *string `type:"string"` } @@ -6268,7 +6549,7 @@ type SavingsPlansUtilization struct { // Plans eligible usage in a specific period. UnusedCommitment *string `type:"string"` - // The amount of your Savings Plans commitment that was not consumed from Savings + // The amount of your Savings Plans commitment that was consumed from Savings // Plans eligible usage in a specific period. UsedCommitment *string `type:"string"` @@ -6775,6 +7056,9 @@ const ( // DimensionReservationId is a Dimension enum value DimensionReservationId = "RESERVATION_ID" + // DimensionResourceId is a Dimension enum value + DimensionResourceId = "RESOURCE_ID" + // DimensionRightsizingType is a Dimension enum value DimensionRightsizingType = "RIGHTSIZING_TYPE" diff --git a/service/costexplorer/costexploreriface/interface.go b/service/costexplorer/costexploreriface/interface.go index 7db904d9341..0572d8829db 100644 --- a/service/costexplorer/costexploreriface/interface.go +++ b/service/costexplorer/costexploreriface/interface.go @@ -64,6 +64,10 @@ type CostExplorerAPI interface { GetCostAndUsageWithContext(aws.Context, *costexplorer.GetCostAndUsageInput, ...request.Option) (*costexplorer.GetCostAndUsageOutput, error) GetCostAndUsageRequest(*costexplorer.GetCostAndUsageInput) (*request.Request, *costexplorer.GetCostAndUsageOutput) + GetCostAndUsageWithResources(*costexplorer.GetCostAndUsageWithResourcesInput) (*costexplorer.GetCostAndUsageWithResourcesOutput, error) + GetCostAndUsageWithResourcesWithContext(aws.Context, *costexplorer.GetCostAndUsageWithResourcesInput, ...request.Option) (*costexplorer.GetCostAndUsageWithResourcesOutput, error) + GetCostAndUsageWithResourcesRequest(*costexplorer.GetCostAndUsageWithResourcesInput) (*request.Request, *costexplorer.GetCostAndUsageWithResourcesOutput) + GetCostForecast(*costexplorer.GetCostForecastInput) (*costexplorer.GetCostForecastOutput, error) GetCostForecastWithContext(aws.Context, *costexplorer.GetCostForecastInput, ...request.Option) (*costexplorer.GetCostForecastOutput, error) GetCostForecastRequest(*costexplorer.GetCostForecastInput) (*request.Request, *costexplorer.GetCostForecastOutput)