Connect Your AWS MSP Account

If more than one of your AWS accounts is managed by an MSP and you do not have access to the billing file, the MSP must complete the procedures in this article to retrieve the billing information. This procedure lets Cloud Commitment Management access your billing file and provide you with visibility into your cloud expenditures.

If you only have a single member account to connect, see Connect Your AWS Account.

Access to Cost and Usage Data

Cloud Commitment Management needs to access the Cost and Usage data in your AWS account:

Option 1: Cost and Usage Report Extraction uses native AWS tools to give Cloud Commitment Management access to Cost and Usage data for agreed-upon accounts.

Option 2: Alternative Cost and Usage Generator lets a partner use its own tools to give Cloud Commitment Management access to agreed-upon accounts. As long as the partner meets Flexera requirements. For example, a partner may use CloudHealth to generate the files in the manner required for Flexera.

Option 1: Cost and Usage Report Extraction

There are three major steps to configuring the CUR extraction:

1. Set up Cost and Usage Reports. This should be done from a root user account.
2. Link your Cost and Usage Report with Athena.
3. Set up the Cost and Usage Extractor.

Note: 

All actions in this procedure should be made in the US-East-1 (Northern Virginia) AWS region.
The IAM role should be the one of the end-customer management account.

Set up Cost and Usage Reports

1. Sign in to your root AWS account and create your cost and usage reports.
2. For the report name, enter spotinst-cur-report. You must use the same name for the S3 bucket name.
3. For Report additional content, select Include resource IDs.
4. Select Create a bucket and name it spotinst-cur-report. This name must be the same as the report name that you entered previously. Only change the bucket's region if necessary.
5. For Report path prefix, enter spotinst_eco.
6. For Time granularity, choose Hourly.
7. For Report data integration, select Athena.

Link Your Cost and Usage Report with Athena

It will take 24 hours for AWS to start dropping reports into your S3 bucket. Before proceeding with this step, click Cost and Usage Reports and make sure that Data last refreshed has a date and doesn't say N/A.

1. From S3 buckets, go to the S3 bucket you chose > spotinst_eco/spotinst-cur-report.
2. Select crawler-cfn.yml.
3. Download the file and contact your sales representative. If you do not have a sales representative, contact Support. Include this information:
The crawler file
AWS account number of MSP
Account ID of the customer's management account
CUR bucket name
Stack name
Prefix
The customer's Spot OrgIDs
4. Copy the Object URL.
5. In create stack, go to Amazon S3 URL and paste the object URL
6. Select Next.
7. Enter SpotEcoStack for the Stack Name and select Next > Next.
8. In Capabilities, select I acknowledge that AWS CloudFormation might create IAM resources.
9. Select Create Stack.
10. In AWS Glue Crawlers, find the crawler you just created: AWSCURCrawler-[name of your cur report].
11. Select on crawler to bring up its properties > Edit > Schedule.
12. In Frequency, select Daily.
13. For Start Hour (UTC), select 00.
14. For Start Minute, select 00 > Next > Next > Finish.

Once you have sent the crawler.yml file, it may take up to 48 hours before you receive the link you need for setting up your cost and usage extractor.

Set up Cost and Usage Extractor

1. Sign in to your AWS account, then select the link from Flexera.
2. In CloudFormation, select Next.
3. Some of the parameters have been filled in already. Do not change them. Fill in the following parameters:
Account List: You may leave this blank. If you want to send reports only for certain account numbers, enter them separated by commas (do not add spaces).
Stack Name: You can set this to a name you like.
CURBucketName: Set this to the name of the S3 bucket that you chose in the previous steps for Cost and Usage Reports to write to.
4. Select Next > Next.
5. In Capabilities, select I acknowledge that AWS CloudFormation might create IAM resources.

6. Select Create Stack.

Option 2: Alternative Cost and Usage Generator

Typically, this method requires coordination between the end-customer and the administrator of the tool creating their version of the Cost and Usage Report (CUR) as a CSV gzip export.

It is important to determine how you wish Cloud Commitment Management to operate. If reserved instance sharing is not turned on, Cloud Commitment Management needs one organization per linked account. So either one CUR per linked-account or one exported CSV gzip (defined below) per organization.

If the customer has reserved instance sharing turned on specifically for the group of linked accounts, and is okay with Cost Specialists managing it cross-account, then one exported CSV gzip (below) per organization is fine.

Responsibilities

The Partner (AWS MSP, Management Account Admin, or Admin of the CUR-generating tool) is responsible for generating the CUR in the correct format.
The End Customer and the Partner will agree on a target S3 bucket to locate their version of the CUR.
The End Customer and the Partner will agree on the method of providing the Partner access to the target bucket.
The Partner will deliver the export files to the target bucket.
The End Customer will provide Cloud Commitment Management an ARN with access to the exported CUR and generate a support ticket, requesting to hand off the following information to technical support:
1. The bucket name where the exported CUR is located.
2. The role ARN necessary to download the exported CUR.

Requirements

After a sync with the specified files, the following folders and files should exist under the target bucket:

cur_data in the format: [eco_s3_bucket]/RawCURReports/cur/[account]/yyyymmdd-yyyymmdd/[assembly_id]/[cur_data]

Ideally, the data should be organized according to the schema below.

A manifest file with the format: [eco_s3_bucket]/manifests/yyyymmdd-yyyymmdd/[report_id]-Manifest.json

Once the files exist in the correct format:

1. In your AWS account, go to the Cost and Usage Reports page > Delivery Options and copy the S3 bucket value.
2. Open CloudFormation with the Flexera template:
Run Default Template Onboarding
a. Select I acknowledge that AWS CloudFormation might create IAM resources and click Create stack.
b. When the stack is created, copy the Spot Role ARN from the CloudFormation stack Outputs tab.
Use Custom Template

You can use a custom CloudFormation template approved by our solutions architect.

a. In Flexera One, copy the external ID.
b. Open the AWS CloudFormation console.
c. Create a new resource standard.
d. Click Choose file, copy the template > Next. For additional information, see Create policy using CloudFormation.
e. Enter the stack name and select Next.
f. In Capabilities, select I acknowledge that AWS CloudFormation might change IAM resources > Submit.
g. You can see the stack creation process in the left panel. When the status changes to create_complete, go to the Resources tab, and select the Physical ID you want to view.
h. In Physical ID, go to the Trust Relationships tab and select Edit trust policy.
i. In Edit Trust Policy, enter the AWS Account ID in the arn:aws:iam line and the External ID in the sts:ExternalID line, then select Update policy.
3. After the policy is updated, copy the ARN from the Physical ID.

Note:Do not complete the enrollment process in the console. You should cancel out of it.

4. Create a support ticket and include this information:

I am requesting a manual onboarding of an account per the instructions in Connect Your AWS MSP Account:

S3 bucket name: _____
Role ARN: ______

Allow up to 24 business hours for us to complete this process and the standard 48 hours for the data to show in the console.

Ideal Cloud Commitment Management Schema

See the following sample schema.

Copy
{
  "columns": [
    { "column_name": "bill_bill_type", "data_type": "string" },
    { "column_name": "bill_billing_entity", "data_type": "string" },
    { "column_name": "bill_billing_period_end_date", "data_type": "timestamp" },
    {
      "column_name": "bill_billing_period_start_date",
      "data_type": "timestamp"
    },
    { "column_name": "bill_invoice_id", "data_type": "string" },
    { "column_name": "bill_payer_account_id", "data_type": "string" },
    { "column_name": "identity_time_interval", "data_type": "string" },
    { "column_name": "line_item_availability_zone", "data_type": "string" },
    { "column_name": "line_item_blended_cost", "data_type": "double" },
    { "column_name": "line_item_blended_rate", "data_type": "string" },
    { "column_name": "line_item_currency_code", "data_type": "string" },
    { "column_name": "line_item_legal_entity", "data_type": "string" },
    { "column_name": "line_item_line_item_description", "data_type": "string" },
    { "column_name": "line_item_line_item_type", "data_type": "string" },
    { "column_name": "line_item_normalization_factor", "data_type": "double" },
    {
      "column_name": "line_item_normalized_usage_amount",
      "data_type": "double"
    },
    { "column_name": "line_item_operation", "data_type": "string" },
    { "column_name": "line_item_product_code", "data_type": "string" },
    { "column_name": "line_item_resource_id", "data_type": "string" },
    { "column_name": "line_item_tax_type", "data_type": "string" },
    { "column_name": "line_item_unblended_cost", "data_type": "double" },
    { "column_name": "line_item_unblended_rate", "data_type": "string" },
    { "column_name": "line_item_usage_account_id", "data_type": "string" },
    { "column_name": "line_item_usage_amount", "data_type": "double" },
    { "column_name": "line_item_usage_end_date", "data_type": "timestamp" },
    { "column_name": "line_item_usage_start_date", "data_type": "timestamp" },
    { "column_name": "line_item_usage_type", "data_type": "string" },
    { "column_name": "pricing_lease_contract_length", "data_type": "string" },
    { "column_name": "pricing_offering_class", "data_type": "string" },
    { "column_name": "pricing_public_on_demand_cost", "data_type": "double" },
    { "column_name": "pricing_public_on_demand_rate", "data_type": "string" },
    { "column_name": "pricing_purchase_option", "data_type": "string" },
    { "column_name": "pricing_rate_id", "data_type": "string" },
    { "column_name": "pricing_term", "data_type": "string" },
    { "column_name": "pricing_unit", "data_type": "string" },
    { "column_name": "product_account_assistance", "data_type": "string" },
    { "column_name": "product_activity_type", "data_type": "string" },
    { "column_name": "product_alarm_type", "data_type": "string" },
    { "column_name": "product_architectural_review", "data_type": "string" },
    { "column_name": "product_architecture_support", "data_type": "string" },
    { "column_name": "product_attachment_type", "data_type": "string" },
    { "column_name": "product_availability_zone", "data_type": "string" },
    { "column_name": "product_availability", "data_type": "string" },
    { "column_name": "product_best_practices", "data_type": "string" },
    { "column_name": "product_broker_engine", "data_type": "string" },
    { "column_name": "product_bundle", "data_type": "string" },
    { "column_name": "product_cache_engine", "data_type": "string" },
    { "column_name": "product_cache_memory_size_gb", "data_type": "string" },
    { "column_name": "product_calling_type", "data_type": "string" },
    { "column_name": "product_capacitystatus", "data_type": "string" },
    {
      "column_name": "product_case_severityresponse_times",
      "data_type": "string"
    },
    { "column_name": "product_category", "data_type": "string" },
    { "column_name": "product_classification_type", "data_type": "string" },
    { "column_name": "product_clock_speed", "data_type": "string" },
    { "column_name": "product_comments", "data_type": "string" },
    { "column_name": "product_compute_family", "data_type": "string" },
    { "column_name": "product_compute_type", "data_type": "string" },
    { "column_name": "product_content_source", "data_type": "string" },
    { "column_name": "product_content_type", "data_type": "string" },
    { "column_name": "product_country", "data_type": "string" },
    { "column_name": "product_counts_against_quota", "data_type": "string" },
    { "column_name": "product_cputype", "data_type": "string" },
    { "column_name": "product_current_generation", "data_type": "string" },
    {
      "column_name": "product_customer_service_and_communities",
      "data_type": "string"
    },
    { "column_name": "product_data_transfer_quota", "data_type": "string" },
    { "column_name": "product_database_edition", "data_type": "string" },
    { "column_name": "product_database_engine", "data_type": "string" },
    {
      "column_name": "product_dedicated_ebs_throughput",
      "data_type": "string"
    },
    { "column_name": "product_deployment_option", "data_type": "string" },
    { "column_name": "product_description", "data_type": "string" },
    { "column_name": "product_direct_connect_location", "data_type": "string" },
    { "column_name": "product_directory_size", "data_type": "string" },
    {
      "column_name": "product_directory_type_description",
      "data_type": "string"
    },
    { "column_name": "product_directory_type", "data_type": "string" },
    { "column_name": "product_durability", "data_type": "string" },
    { "column_name": "product_ecu", "data_type": "string" },
    { "column_name": "product_edition", "data_type": "string" },
    { "column_name": "product_endpoint_type", "data_type": "string" },
    { "column_name": "product_engine_code", "data_type": "string" },
    {
      "column_name": "product_enhanced_networking_support",
      "data_type": "string"
    },
    {
      "column_name": "product_enhanced_networking_supported",
      "data_type": "string"
    },
    { "column_name": "product_event_type", "data_type": "string" },
    { "column_name": "product_execution_frequency", "data_type": "string" },
    { "column_name": "product_execution_location", "data_type": "string" },
    { "column_name": "product_fee_code", "data_type": "string" },
    { "column_name": "product_fee_description", "data_type": "string" },
    { "column_name": "product_free_overage", "data_type": "string" },
    { "column_name": "product_free_query_types", "data_type": "string" },
    { "column_name": "product_free_tier", "data_type": "string" },
    { "column_name": "product_free_trial", "data_type": "string" },
    { "column_name": "product_free_usage_included", "data_type": "string" },
    { "column_name": "product_frequency_mode", "data_type": "string" },
    { "column_name": "product_from_location_type", "data_type": "string" },
    { "column_name": "product_from_location", "data_type": "string" },
    { "column_name": "product_georegioncode", "data_type": "string" },
    { "column_name": "product_gpu_memory", "data_type": "string" },
    { "column_name": "product_gpu", "data_type": "string" },
    { "column_name": "product_graphqloperation", "data_type": "string" },
    { "column_name": "product_group_description", "data_type": "string" },
    { "column_name": "product_group", "data_type": "string" },
    { "column_name": "product_included_services", "data_type": "string" },
    { "column_name": "product_input_mode", "data_type": "string" },
    { "column_name": "product_instance_capacity_large", "data_type": "string" },
    {
      "column_name": "product_instance_capacity_xlarge",
      "data_type": "string"
    },
    {
      "column_name": "product_instance_capacity10xlarge",
      "data_type": "string"
    },
    {
      "column_name": "product_instance_capacity16xlarge",
      "data_type": "string"
    },
    {
      "column_name": "product_instance_capacity2xlarge",
      "data_type": "string"
    },
    {
      "column_name": "product_instance_capacity4xlarge",
      "data_type": "string"
    },
    {
      "column_name": "product_instance_capacity8xlarge",
      "data_type": "string"
    },
    { "column_name": "product_instance_family", "data_type": "string" },
    { "column_name": "product_instance_function", "data_type": "string" },
    { "column_name": "product_instance_type_family", "data_type": "string" },
    { "column_name": "product_instance_type", "data_type": "string" },
    { "column_name": "product_instance", "data_type": "string" },
    { "column_name": "product_intel_avx_available", "data_type": "string" },
    { "column_name": "product_intel_avx2_available", "data_type": "string" },
    { "column_name": "product_intel_turbo_available", "data_type": "string" },
    { "column_name": "product_io", "data_type": "string" },
    { "column_name": "product_jobnshipp", "data_type": "string" },
    { "column_name": "product_launch_support", "data_type": "string" },
    { "column_name": "product_license_model", "data_type": "string" },
    { "column_name": "product_license_type", "data_type": "string" },
    { "column_name": "product_license", "data_type": "string" },
    { "column_name": "product_line_type", "data_type": "string" },
    { "column_name": "product_location_type", "data_type": "string" },
    { "column_name": "product_location", "data_type": "string" },
    { "column_name": "product_logs_source", "data_type": "string" },
    { "column_name": "product_logs_type", "data_type": "string" },
    { "column_name": "product_mailbox_storage", "data_type": "string" },
    {
      "column_name": "product_max_iops_burst_performance",
      "data_type": "string"
    },
    { "column_name": "product_max_iopsvolume", "data_type": "string" },
    { "column_name": "product_max_throughputvolume", "data_type": "string" },
    { "column_name": "product_max_volume_size", "data_type": "string" },
    { "column_name": "product_maximum_capacity", "data_type": "string" },
    {
      "column_name": "product_maximum_extended_storage",
      "data_type": "string"
    },
    { "column_name": "product_maximum_storage_volume", "data_type": "string" },
    { "column_name": "product_memory_gib", "data_type": "string" },
    { "column_name": "product_memory", "data_type": "string" },
    { "column_name": "product_memorytype", "data_type": "string" },
    {
      "column_name": "product_message_delivery_frequency",
      "data_type": "string"
    },
    { "column_name": "product_message_delivery_order", "data_type": "string" },
    { "column_name": "product_min_volume_size", "data_type": "string" },
    { "column_name": "product_minimum_storage_volume", "data_type": "string" },
    { "column_name": "product_network_performance", "data_type": "string" },
    {
      "column_name": "product_normalization_size_factor",
      "data_type": "string"
    },
    { "column_name": "product_offer", "data_type": "string" },
    { "column_name": "product_operating_system", "data_type": "string" },
    { "column_name": "product_operation", "data_type": "string" },
    { "column_name": "product_operations_support", "data_type": "string" },
    { "column_name": "product_origin", "data_type": "string" },
    { "column_name": "product_os_license_model", "data_type": "string" },
    { "column_name": "product_output_mode", "data_type": "string" },
    { "column_name": "product_overage_type", "data_type": "string" },
    { "column_name": "product_physical_cores", "data_type": "string" },
    { "column_name": "product_physical_cpu", "data_type": "string" },
    { "column_name": "product_physical_gpu", "data_type": "string" },
    { "column_name": "product_physical_processor", "data_type": "string" },
    { "column_name": "product_plan_type", "data_type": "string" },
    { "column_name": "product_port_speed", "data_type": "string" },
    { "column_name": "product_pre_installed_sw", "data_type": "string" },
    { "column_name": "product_proactive_guidance", "data_type": "string" },
    { "column_name": "product_processor_architecture", "data_type": "string" },
    { "column_name": "product_processor_features", "data_type": "string" },
    { "column_name": "product_product_family", "data_type": "string" },
    { "column_name": "product_product_name", "data_type": "string" },
    {
      "column_name": "product_programmatic_case_management",
      "data_type": "string"
    },
    { "column_name": "product_protocol", "data_type": "string" },
    { "column_name": "product_provisioned", "data_type": "string" },
    { "column_name": "product_queue_type", "data_type": "string" },
    { "column_name": "product_recipient", "data_type": "string" },
    { "column_name": "product_region", "data_type": "string" },
    { "column_name": "product_release_type", "data_type": "string" },
    { "column_name": "product_request_description", "data_type": "string" },
    { "column_name": "product_request_type", "data_type": "string" },
    { "column_name": "product_resource_endpoint", "data_type": "string" },
    { "column_name": "product_resource_type", "data_type": "string" },
    { "column_name": "product_rootvolume", "data_type": "string" },
    { "column_name": "product_routing_target", "data_type": "string" },
    { "column_name": "product_routing_type", "data_type": "string" },
    { "column_name": "product_running_mode", "data_type": "string" },
    { "column_name": "product_servicecode", "data_type": "string" },
    { "column_name": "product_servicename", "data_type": "string" },
    { "column_name": "product_sku", "data_type": "string" },
    { "column_name": "product_snowball_type", "data_type": "string" },
    { "column_name": "product_software_included", "data_type": "string" },
    { "column_name": "product_software_type", "data_type": "string" },
    {
      "column_name": "product_standard_storage_retention_included",
      "data_type": "string"
    },
    { "column_name": "product_steps", "data_type": "string" },
    { "column_name": "product_storage_class", "data_type": "string" },
    { "column_name": "product_storage_description", "data_type": "string" },
    { "column_name": "product_storage_family", "data_type": "string" },
    { "column_name": "product_storage_media", "data_type": "string" },
    { "column_name": "product_storage_type", "data_type": "string" },
    { "column_name": "product_storage", "data_type": "string" },
    { "column_name": "product_subscription_type", "data_type": "string" },
    { "column_name": "product_supported_modes", "data_type": "string" },
    { "column_name": "product_technical_support", "data_type": "string" },
    { "column_name": "product_tenancy", "data_type": "string" },
    {
      "column_name": "product_thirdparty_software_support",
      "data_type": "string"
    },
    { "column_name": "product_throughput_class", "data_type": "string" },
    { "column_name": "product_tiertype", "data_type": "string" },
    { "column_name": "product_to_location_type", "data_type": "string" },
    { "column_name": "product_to_location", "data_type": "string" },
    { "column_name": "product_training", "data_type": "string" },
    { "column_name": "product_transcoding_result", "data_type": "string" },
    { "column_name": "product_transfer_type", "data_type": "string" },
    { "column_name": "product_type", "data_type": "string" },
    { "column_name": "product_usage_family", "data_type": "string" },
    { "column_name": "product_usagetype", "data_type": "string" },
    { "column_name": "product_uservolume", "data_type": "string" },
    { "column_name": "product_vcpu", "data_type": "string" },
    { "column_name": "product_version", "data_type": "string" },
    { "column_name": "product_video_memory_gib", "data_type": "string" },
    { "column_name": "product_video_resolution", "data_type": "string" },
    { "column_name": "product_virtual_interface_type", "data_type": "string" },
    { "column_name": "product_volume_type", "data_type": "string" },
    { "column_name": "product_who_can_open_cases", "data_type": "string" },
    { "column_name": "product_with_active_users", "data_type": "string" },
    {
      "column_name": "reservation_amortized_upfront_cost_for_usage",
      "data_type": "double"
    },
    {
      "column_name": "reservation_amortized_upfront_fee_for_billing_period",
      "data_type": "double"
    },
    { "column_name": "reservation_availability_zone", "data_type": "string" },
    { "column_name": "reservation_effective_cost", "data_type": "double" },
    { "column_name": "reservation_end_time", "data_type": "string" },
    { "column_name": "reservation_modification_status", "data_type": "string" },
    {
      "column_name": "reservation_normalized_units_per_reservation",
      "data_type": "string"
    },
    {
      "column_name": "reservation_number_of_reservations",
      "data_type": "string"
    },
    {
      "column_name": "reservation_recurring_fee_for_usage",
      "data_type": "double"
    },
    { "column_name": "reservation_reservation_a_r_n", "data_type": "string" },
    { "column_name": "reservation_start_time", "data_type": "string" },
    { "column_name": "reservation_subscription_id", "data_type": "string" },
    {
      "column_name": "reservation_total_reserved_normalized_units",
      "data_type": "string"
    },
    {
      "column_name": "reservation_total_reserved_units",
      "data_type": "string"
    },
    {
      "column_name": "reservation_units_per_reservation",
      "data_type": "string"
    },
    {
      "column_name": "reservation_unused_amortized_upfront_fee_for_billing_period",
      "data_type": "double"
    },
    {
      "column_name": "reservation_unused_normalized_unit_quantity",
      "data_type": "double"
    },
    { "column_name": "reservation_unused_quantity", "data_type": "double" },
    {
      "column_name": "reservation_unused_recurring_fee",
      "data_type": "double"
    },
    { "column_name": "reservation_upfront_value", "data_type": "double" },
    {
      "column_name": "resource_tags_aws_autoscaling_group_name",
      "data_type": "string"
    },
    {
      "column_name": "resource_tags_aws_cloudformation_logical_id",
      "data_type": "string"
    },
    {
      "column_name": "resource_tags_aws_cloudformation_stack_id",
      "data_type": "string"
    },
    {
      "column_name": "resource_tags_aws_cloudformation_stack_name",
      "data_type": "string"
    },
    { "column_name": "resource_tags_aws_created_by", "data_type": "string" },
    { "column_name": "identity_line_item_id", "data_type": "string" }
  ]
}