

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# での AMI 製品のコスト配分タグ付け AWS Marketplace
<a name="cost-allocation-tagging-ami-marketplace"></a>

AWS Marketplace は、Amazon マシンイメージ (AMI) ベースのソフトウェア製品のコスト配分タグ付けをサポートしています。新規および既存の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスタグは、対応する AMI AWS Marketplace の使用に対して自動的に入力されます。アクティブ化されたコスト配分タグを使用して、、 AWS コストと使用状況レポート AWS Cost Explorer、 AWS 予算、またはその他のクラウド支出分析ツールを通じて AMI の使用状況を特定および追跡できます。

AMI を提供したベンダーでは、製品固有の情報に基づいて、AMI ベースの製品の計測に他のカスタムタグを記録する場合もあります。詳細については、[コスト配分タグを使用する](cost-allocation-tagging.md)を参照してください。

タグを使用してリソースを整理し、コスト配分タグを使用して AWS のコストを詳細レベルで追跡できます。コスト配分タグを有効にすると、 はコスト配分タグ AWS を使用してコスト配分レポートのリソースコストを整理し、 AWS コストの分類と追跡を容易にします。

コスト配分タグは、タグが Billing and Cost Management コンソールでアクティブ化された時点からのコストのみを追跡します。アカウントの請求情報とコスト管理コンソールにアクセスできるのは、 AWS アカウント 所有者、 AWS Organizations 管理アカウントの所有者、および適切なアクセス許可を持つユーザーのみです。コスト配分タグを使用するかどうかにかかわらず、請求額に変更はありません。コスト配分タグを使用するかどうかは、AMI ベースのソフトウェア製品の機能には影響しません。

## 複数のインスタンス間での 1 つの AMI のコスト配分タグの追跡
<a name="multi-instances-cost-allocation-tagging-marketplace"></a>

AMI サブスクリプション用に起動された各 Amazon EC2 AWS Marketplace インスタンスには、 AWS Marketplace AWS コストと使用状況レポートに対応するソフトウェア使用状況の明細項目があります。 AWS Marketplace 使用状況には、対応する Amazon EC2 インスタンスに適用される特定のタグが常に反映されます。これにより、割り当てられたさまざまなタグ値に基づいて、インスタンスレベルで AWS Marketplace 使用コストを区別できます。

タグベースの使用コストを合計して、Cost Explorer または AWS Cost and Usage レポートで請求書に反映された AMI ソフトウェアの使用料金と等しくすることもできます。

## コスト配分タグ付きインスタンスを使用した予算の検索
<a name="cost-allocation-tag-script-marketplace"></a>

Billing and Cost Management コンソールで、複数の Amazon EC2 インスタンスのコスト配分タグでフィルタリング済みの有効な予算が既にある場合、それらすべてを見つけるのは難しい場合があります。次の Python スクリプトは、現在の AWS リージョンの AWS Marketplace からの Amazon EC2 インスタンスを含む予算のリストを返します。

このスクリプトを使用して、予算への潜在的な影響、およびこの変更によってオーバーランが発生する可能性がある場所を認識することができます。請求額は変更されませんが、コスト配分はより正確に反映され、これが予算に影響する可能性があることに注意してください。

```
#! /usr/bin/python

import boto3

session = boto3.Session()
b3account=boto3.client('sts').get_caller_identity()['Account']
print("using account {} in region {}".format(b3account,session.region_name))


def getBudgetFilters(filtertype):
    ''' 
    Returns budgets nested within the filter values [filter value][budeget name].
    The filtertype is the CostFilter Key such as Region, Service, TagKeyValue.
    '''    
    budget_client = session.client('budgets')
    budgets_paginator = budget_client.get_paginator('describe_budgets')
    budget_result = budgets_paginator.paginate(
        AccountId=b3account
    ).build_full_result()    
    returnval = {}
    if 'Budgets' in budget_result:
        for budget in budget_result['Budgets']:
            for cftype in budget['CostFilters']:
                if filtertype == cftype:                          
                    for cfval in budget['CostFilters'][cftype]:
                        if cfval in returnval:
                            if not budget['BudgetName'] in returnval[cfval]:
                                returnval[cfval].append(budget['BudgetName'])
                        else:
                            returnval[cfval] = [ budget['BudgetName'] ]
    return returnval

def getMarketplaceInstances():
    '''
    Get all the Amazon EC2 instances which originated with AWS Marketplace.        
    '''
    ec2_client = session.client('ec2')
    paginator = ec2_client.get_paginator('describe_instances')
    returnval = paginator.paginate(
        Filters=[{
            'Name': 'product-code.type',
            'Values': ['marketplace']
        }]
    ).build_full_result()
    return returnval


def getInstances():
    mp_instances = getMarketplaceInstances()
    budget_tags = getBudgetFilters("TagKeyValue")
    cost_instance_budgets = []
    for instance in [inst for resrv in mp_instances['Reservations'] for inst in resrv['Instances'] if 'Tags' in inst.keys()]:    
        for tag in instance['Tags']:                
            # combine the tag and value to get the budget filter string
            str_full = "user:{}${}".format(tag['Key'], tag['Value'])
            if str_full in budget_tags:
                for budget in budget_tags[str_full]:
                    if not budget in cost_instance_budgets:
                        cost_instance_budgets.append(budget)    
    print("\r\nBudgets containing tagged Marketplace EC2 instances:")
    print( '\r\n'.join([budgetname for budgetname in cost_instance_budgets]) )


if __name__ == "__main__":
    getInstances()
```

**出力例**

```
Using account 123456789012 in region us-east-2

Budgets containing tagged Marketplace EC2 instances:
EC2 simple
MP-test-2
```

## 関連トピック
<a name="cost-allocation-tagging-related-topics"></a>

詳細については、以下の各トピックを参照してください。
+ 「*AWS Billing ユーザーガイド*」の「[コスト配分タグの使用](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)」。
+ 「*AWS Billing ユーザーガイド*」の「[AWS 生成コスト配分タグの有効化](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/activate-built-in-tags.html)」。
+ 「Amazon EC2 ユーザーガイド」の「[Amazon EC2 リソースにタグをつける](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)」