-
Notifications
You must be signed in to change notification settings - Fork 41
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WI #634: Commitment Flexibility Appendix #535
Open
cnharris10
wants to merge
26
commits into
working_draft
Choose a base branch
from
size-flexibility-appendix
base: working_draft
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
26 commits
Select commit
Hold shift + click to select a range
d751750
Initial draft
cnharris10 943efd7
Update commitment_discounts.md
cnharris10 f21c015
Incorporated a few suggestions from Shawn Alpay
cnharris10 e864bb5
Ignore MD031: Fenced code blocks should be surrounded by blank lines …
cnharris10 3fec018
Grammar fixes, calling out when Consumed{Quantity,Unit} are null, and…
cnharris10 788c90c
Update specification/appendix/commitment_discounts.md
cnharris10 93199b7
Specify that 1 resource is being modeled
cnharris10 f43ee82
Size flexibility Appendix
cnharris10 e4bd744
Update commitment_discounts.md
cnharris10 167f67a
Fix DateTime format
cnharris10 d50cbbd
Merge branch 'commitment-discount-appendix' of github.com:FinOps-Open…
cnharris10 8af4400
Fix DateTime format
cnharris10 4b2ebb0
Adding editorial changes from Michael
cnharris10 e7eff95
Merge branch 'commitment-discount-appendix' into size-flexibility-app…
cnharris10 a0d27bc
Small term/wording updates based on the evolution of pr: https://gith…
cnharris10 8b4d8bb
Merge branch 'commitment-discount-appendix' into size-flexibility-app…
cnharris10 10d065c
Small term/wording updates based on the evolution of pr: https://gith…
cnharris10 821d926
Rearrange property in JSON block
cnharris10 4e57192
Minor fixes
cnharris10 d5ab0a9
Merge branch 'commitment-discount-appendix' into size-flexibility-app…
cnharris10 7be3840
Adding 'Commitment Discount Visibility' to v1.1 Release Planning
cnharris10 6c9b254
Merge branch 'working_draft' of github.com:FinOps-Open-Cost-and-Usage…
cnharris10 86f0149
Merge branch 'working_draft' into size-flexibility-appendix
cnharris10 9fc11ab
Rebasing against working_draft
cnharris10 74fe05d
Bug fix: '{Billing,Charge}Period{Start,End}Date' should be '{Billing,…
cnharris10 bf48236
Update commitment_flexibility.md
cnharris10 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
202 changes: 202 additions & 0 deletions
202
specification/appendix/commitment_discounts/commitment_flexibility.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,202 @@ | ||
# Commitment Flexibility | ||
|
||
A usage-based commitment discount obligates a customer to a usage amount for one or more related SKUs in return for reduced rates. For example, a usage-based commitment discount is purchased to cover a specific database SKU, this commitment will cover every hour over the term where at least one instance of this SKU is running. It can also cover eligible resources wholly, where 1 hour is covered by 1 resource, or partially, where 1 committed hour can be split across multiple resources or 1 resource can be fully covered with unused commitment discount costs. These latter two examples are commonly known as *commitment flexibility*. | ||
|
||
When mixing usage-based commitment discounts with and without commitment flexibility with `CommitmentDiscountQuantity` measured by time, it is important to differentiate the `CommitmentDiscountUnit` for each type of commitment discount. In each scenario below, commitment discounts *without* commitment flexibility applied use "Hour" as a `CommitmentDiscountUnit`, and conversely commitment discounts *with* commitment flexibility use "Normalized Hour" as a `CommitmentDiscountUnit`. | ||
|
||
Since providers have different rules for when commitment flexibility is or is not enabled, the following, fictitious SKU pricing attributes will be used in each example below, and each example will be categorized under commitment flexibility enabled or disabled sections. | ||
|
||
## SKUs & Rates | ||
|
||
| ProviderName | Service | SkuId | ListUnitPrice | x_CommitmentDiscountUnitPrice | x_NormalizationFactor | | ||
| ------------ | ------- | --------- | -------------- | ------------------------------| --------------------- | | ||
| TinyCloud | Compute | VM_Small | $0.50 | $0.25 | 1 | | ||
| TinyCloud | Compute | VM_Medium | $1.00 | $0.50 | 2 | | ||
| TinyCloud | Compute | VM_Large | $2.00 | $1.00 | 4 | | ||
| TinyCloud | Compute | VM_XLarge | $4.00 | $2.00 | 8 | | ||
|
||
The above, fictitious SKU pricing attributes show that this provider, *TinyCloud*, only has 1 service that offers 4 virtual machine SKUs with various list rates, committed rates, and normalization factors. Each SKU's normalization factor classifies its relative size to its committed rate. Usage-based commitment discounts with commitment flexibility can fully cover any combination of 1 or more SKUs where the sum of their normalization factor equals the normalization factor of the commitment discount. | ||
|
||
### Scenarios *without* commitment flexibility | ||
|
||
#### Scenario #1: 100% utilization with matching resources | ||
|
||
Purchase: 1 commitment discount purchased for 1 year (2023) for 1 VM_Large. | ||
Usage: 1 VM_Large resource runs from 2023-01-01T00:00:00 to 2023-01-01T01:00:00. | ||
|
||
The commitment discount covers the first charge period for 1 VM_Large resource (i.e. <my-vm-id>) resulting in a $1 amortized cost. | ||
|
||
```json | ||
[ | ||
{ | ||
"BillingPeriodStart": "2023-01-01T00:00:00Z", | ||
"BillingPeriodEnd": "2023-02-01T00:00:00Z", | ||
"ChargePeriodStart": "2023-01-01T00:00:00Z", | ||
"ChargePeriodEnd": "2023-01-01T01:00:00Z", | ||
"ChargeCategory": "Usage", | ||
"ChargeFrequency": "Usage-Based", | ||
"PricingCategory": "Committed", | ||
"ResourceId": "<my-large-vm-id>", | ||
"PricingQuantity": 1.00, | ||
"BilledCost": 0.00, | ||
"EffectiveCost": 1.00, | ||
"ConsumedQuantity": 1.00, | ||
"ConsumedUnit": "Hour", | ||
"SkuId": "VM_Large", | ||
"CommitmentDiscountId": "<commitment-discount-id>", | ||
"CommitmentDiscountQuantity": 1.00, | ||
"CommitmentDiscountStatus": "Used", | ||
"CommitmentDiscountUnit": "Hour" | ||
} | ||
] | ||
``` | ||
|
||
#### Scenario #2: 0% utilization with a non-matching resource | ||
|
||
Purchase: 1 commitment discount purchased for 1 year (2023) for 1 VM_Large. | ||
Usage: 1 VM_Medium resource runs from 2023-01-01T00:00:00 to 2023-01-01T01:00:00. | ||
|
||
The VM_Large commitment discount is unused because no VM_Large resources are running. Additionally, 1 hour of on-demand usage was incurred by the running VM_Medium resource. These charges result in a $2 amortized cost. | ||
|
||
```json | ||
[ | ||
{ | ||
"BillingPeriodStart": "2023-01-01T00:00:00Z", | ||
"BillingPeriodEnd": "2023-02-01T00:00:00Z", | ||
"ChargePeriodStart": "2023-01-01T00:00:00Z", | ||
"ChargePeriodEnd": "2023-01-01T01:00:00Z", | ||
"ChargeCategory": "Usage", | ||
"ChargeFrequency": "Usage-Based", | ||
"PricingCategory": "Committed", | ||
"ResourceId": "<my-large-vm-id>", | ||
"PricingQuantity": 1.00, | ||
"BilledCost": 0.00, | ||
"EffectiveCost": 1.00, | ||
"ConsumedQuantity": 1.00, | ||
"ConsumedUnit": "Hour", | ||
"SkuId": "VM_Large", | ||
"CommitmentDiscountId": "<commitment-discount-id>", | ||
"CommitmentDiscountQuantity": 1.00, | ||
"CommitmentDiscountStatus": "Unused", | ||
"CommitmentDiscountUnit": "Hour" | ||
}, | ||
{ | ||
"BillingPeriodStart": "2023-01-01T00:00:00Z", | ||
"BillingPeriodEnd": "2023-02-01T00:00:00Z", | ||
"ChargePeriodStart": "2023-01-01T00:00:00Z", | ||
"ChargePeriodEnd": "2023-01-01T01:00:00Z", | ||
"ChargeCategory": "Usage", | ||
"ChargeFrequency": "Usage-Based", | ||
"PricingCategory": "Standard", | ||
"ResourceId": "<my-medium-vm-id>", | ||
"PricingQuantity": 1.00, | ||
"BilledCost": 1.00, | ||
"EffectiveCost": 1.00, | ||
"ConsumedQuantity": 1.00, | ||
"ConsumedUnit": "Hour", | ||
"SkuId": "VM_Medium" | ||
} | ||
] | ||
``` | ||
|
||
### Scenarios *with* commitment flexibility | ||
|
||
#### Scenario #1: 100% utilization with 2 VM_medium resources | ||
|
||
Purchase: 1 commitment discount purchased for 1 year (2023) for 1 VM_XLarge with a normalization factor of 8. | ||
Usage: 2 VM_Medium resources run from 2023-01-01T00:00:00 to 2023-01-01T01:00:00 with a normalization factor of 4 for each resource. | ||
|
||
1 commitment discount for a VM_XLarge has a normalization factor of 8, and 2 VM_Medium resources have a normalization factor of 4, each. With commitment flexibility, 1 VM_XLarge commitment discount can fully cover 2 VM_Medium resources resulting in a $2 amortized cost. | ||
|
||
```json | ||
[ | ||
{ | ||
"BillingPeriodStart": "2023-01-01T00:00:00Z", | ||
"BillingPeriodEnd": "2023-02-01T00:00:00Z", | ||
"ChargePeriodStart": "2023-01-01T00:00:00Z", | ||
"ChargePeriodEnd": "2023-01-01T01:00:00Z", | ||
"ChargeCategory": "Usage", | ||
"ChargeFrequency": "Usage-Based", | ||
"PricingCategory": "Committed", | ||
"ResourceId": "<my-medium-vm-id>", | ||
"PricingQuantity": 1.00, | ||
"BilledCost": 0.00, | ||
"EffectiveCost": 1.00, | ||
"ConsumedQuantity": 1.00, | ||
"ConsumedUnit": "Hour", | ||
"SkuId": "VM_Medium", | ||
"CommitmentDiscountId": "<commitment-discount-id>", | ||
"CommitmentDiscountQuantity": 1.00, | ||
"CommitmentDiscountStatus": "Used", | ||
"CommitmentDiscountUnit": "Normalized Hour" | ||
}, | ||
{ | ||
"BillingPeriodStart": "2023-01-01T00:00:00Z", | ||
"BillingPeriodEnd": "2023-02-01T00:00:00Z", | ||
"ChargePeriodStart": "2023-01-01T00:00:00Z", | ||
"ChargePeriodEnd": "2023-01-01T01:00:00Z", | ||
"ChargeCategory": "Usage", | ||
"ChargeFrequency": "Usage-Based", | ||
"PricingCategory": "Committed", | ||
"ResourceId": "<my-medium-vm-id>", | ||
"PricingQuantity": 1.00, | ||
"BilledCost": 0.00, | ||
"EffectiveCost": 1.00, | ||
"ConsumedQuantity": 1.00, | ||
"ConsumedUnit": "Hour", | ||
"SkuId": "VM_Medium", | ||
"CommitmentDiscountId": "<commitment-discount-id>", | ||
"CommitmentDiscountQuantity": 1.00, | ||
"CommitmentDiscountStatus": "Used", | ||
"CommitmentDiscountUnit": "Normalized Hour" | ||
} | ||
] | ||
``` | ||
|
||
#### Scenario #2: 100% utilization with 1 VM_Large resource | ||
|
||
Purchase: 1 commitment discount purchased for 1 year (2023) for 1 VM_Small with a normalization factor of 1. | ||
Usage: 1 VM_Large resource runs from 2023-01-01T00:00:00 to 2023-01-01T01:00:00 with a normalization factor of 4. | ||
|
||
The VM_Small commitment discount was fully utilized but still only covered 25% of the VM_Large resource, so the rest of the VM incurred an on-demand cost of $1.50, and the amortized cost for this resource is $1.75. | ||
|
||
```json | ||
[ | ||
{ | ||
"BillingPeriodStart": "2023-01-01T00:00:00Z", | ||
"BillingPeriodEnd": "2023-02-01T00:00:00Z", | ||
"ChargePeriodStart": "2023-01-01T00:00:00Z", | ||
"ChargePeriodEnd": "2023-01-01T01:00:00Z", | ||
"ChargeCategory": "Usage", | ||
"ChargeFrequency": "Usage-Based", | ||
"PricingCategory": "Committed", | ||
"ResourceId": "<my-large-vm-id>", | ||
"PricingQuantity": 0.25, | ||
"BilledCost": 0.00, | ||
"EffectiveCost": 0.25, | ||
"ConsumedQuantity": 1.00, | ||
"ConsumedUnit": "Hour", | ||
"SkuId": "VM_Large", | ||
"CommitmentDiscountId": "<commitment-discount-id>", | ||
"CommitmentDiscountQuantity": 1.00, | ||
"CommitmentDiscountStatus": "Used", | ||
"CommitmentDiscountUnit": "Normalized Hour" | ||
}, | ||
{ | ||
"BillingPeriodStart": "2023-01-01T00:00:00Z", | ||
"BillingPeriodEnd": "2023-02-01T00:00:00Z", | ||
"ChargePeriodStart": "2023-01-01T00:00:00Z", | ||
"ChargePeriodEnd": "2023-01-01T01:00:00Z", | ||
"ChargeCategory": "Usage", | ||
"ChargeFrequency": "Usage-Based", | ||
"PricingCategory": "Standard", | ||
"ResourceId": "<my-large-vm-id>", | ||
"PricingQuantity": 0.75, | ||
"BilledCost": 1.50, | ||
"EffectiveCost": 1.50, | ||
"ConsumedQuantity": 1.00, | ||
"ConsumedUnit": "Hour", | ||
"SkuId": "VM_Large" | ||
} | ||
] | ||
``` |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This paragraph was added to highlight the importance of using different units for commitment discounts with/without commitment flexibility