メインコンテンツへスキップ

Attribute AWS integration

Attribute Terraform によるインストール

スムーズな実装を行うために、Attribute では Terraform モジュールを提供しており、請求情報の抽出およびセンサー登録のセットアップを自動化します。Terraform の詳細なドキュメントおよびサンプルは、Terraform モジュール内の [README] で確認できます。

AWS アカウントタイプ

このモジュールは、AWS 組織の管理アカウントとメンバーアカウント(サブアカウントとも呼ばれます)の両方へのインストールをサポートします。Terraform は、CloudFormation を通じて Attribute ソリューションに必要なすべてのインフラストラクチャを作成します。

次の点に注意してください。

  • サポートされる Terraform バージョンは 1.9 以上 です。
  • センサーをデプロイする必要がある場合は、Terraform モジュールを各サブアカウントにデプロイする必要があります。さらに、請求アカウントまたは支払者アカウントを使用している場合、完全なコストの可視性を確保するために、モジュールを請求・支払者アカウントと関連するサブアカウントの両方にデプロイする必要があります。アカウントへのインストールは同じ Terraform state 内で管理し、一元的に管理することを推奨します。
  • このモジュールは、コンピュートインフラストラクチャ上に Attribute センサーをデプロイ しません。そのプロセスはコンピュートクラスタごとに異なるツールで実行します(Attribute のインストールガイドを参照してください)。
  • Terraform モジュールは、アカウントのリソースが別のリージョンにある場合でも、us-east-1 で実行する必要があります。
  • モジュールを実行する際は、account_type パラメータを使用して、AWS Organization の管理アカウントにデプロイしているのか、センサーをインストールするメンバー(サブ)アカウントにデプロイしているのかを指定してください。

このモジュールによって作成されるリソース

AWS 管理アカウントで実行した場合、次のリソースが作成されます。

  • CUR 2.0 レポートおよび請求データエクスポートリソースを格納するために使用される S3 バケットと ACL。
  • Attribute が AWS API にアクセスできるようにする IAM ロール。
  • データ取得を容易にする Data Export リソース。
  • Attribute センサー登録を自動化する CloudFormation スタック。
  • コストトラッキングをサポートするための EKS(および該当する場合は ECS)のコストアロケーションタグ。

AWS メンバーアカウントで実行した場合、次のリソースが作成されます。

  • Attribute が AWS API にアクセスできるようにする IAM ロール。
  • Attribute センサー登録を自動化する CloudFormation スタック。

既存の Attribute Terraform モジュールのアップグレード

注意

アップグレード時には、古い ZouzCURExport リソースを手動で削除してください。

付録 A: 詳細インストール手順

この付録では、管理アカウントの構成からメンバーアカウントへのセンサーのデプロイまで、セットアップ手順全体を順を追って説明します。

ステップ 1 — Billing Integration

次の手順は、管理(支払者)アカウントでのみ 実行してください。

  1. Terraform のバージョンが 1.9 以上であることを確認してください。

    terraform version
  2. デプロイ前に、us-east-1 リージョンで操作していることを確認してください。

  3. Attribute から受け取った main.tf ファイル内の次の変数を更新してください。

    1. 使用している Terraform プロファイルを更新し、正しい AWS アカウントを指すようにしてください。
    2. リージョンが us-east-1 に設定されていることを確認してください(別のリージョンに変更しないでください)。
    3. エイリアスが "management" に設定されていることを確認してください。
    4. アカウント名を "change-me" から実際のアカウント名に更新してください。
    5. organization_id は変更 しないでください。そのままにしておいてください。
    terraform {
    required_providers {
    aws = {
    source = "hashicorp/aws"
    version = "~> 5.0"
    }
    }
    }

    provider "aws" {
    region = "us-east-1"
    alias = "management"
    }

    # provider "aws" {
    # region = "us-east-1"
    # alias = "sub-1"
    # }

    resource "random_uuid" "external_id" {}

    module "attribute-sensor" {
    source = "ZouzIO/attribute-sensor/aws"
    version = "~> 2.1"

    account_type = "management"
    account_name = "change-me"
    organization_id = "XXXX-XXXX-XXX-XXXX-XXXXXXX"
    external_id = random_uuid.external_id.id

    providers = {
    aws = aws.management
    }
    }

    # module "attribute-sensor-sub" {
    # source = "ZouzIO/attribute-sensor/aws"
    # version = "~> 2.1"
    #
    # account_type = "sub"
    # account_name = "change-me-sub"
    # organization_id = "XXXX-XXXX-XXX-XXXX-XXXXXXX"
    # external_id = random_uuid.external_id.id
    #
    # providers = {
    # aws = aws.sub-1
    # }
    # }
  4. Terraform を適用してください。

    terraform init
    terraform apply
  5. 検証 管理アカウントの AWS Console にログインし、次のリソースが作成されていることを確認してください。

    1. CUR 2.0 レポートおよび Data Export を格納するための S3 バケット。

      AWS General purpose buckets list showing the attribute-cur-us-east-1 bucket in us-east-1

      AWS Data Exports page showing AttributeCurExport with status Healthy, type CUR 2.0

    2. Attribute が AWS API にアクセスできるようにする IAM ロール。

      AWS IAM role AttributeLoaderV-us-east-1-861276102138 summary showing creation date, ARN, and switch-role link

ステップ 2 — センサー実装

センサーをデプロイする予定の各メンバーアカウント(サブアカウント)を構成します。これは 2 つのパートで構成されます。まず Terraform を実行して前提条件を作成します(サブアカウントごとに 1 回)。その後、各 EKS クラスタに Helm チャートを使用してセンサーをデプロイします。

ステップ 2.1 — Terraform 前提条件セットアップ(メンバーアカウント)

次の手順は、メンバーアカウント(サブアカウント)ごとに一度だけ 実行してください。

  1. メンバーアカウントを反映するように、Attribute から受け取った main.tf ファイルを更新してください。

    1. Terraform プロファイルを更新し、正しい AWS アカウントを指すようにしてください。
    2. サブアカウントのエイリアスを持つ追加の provider のコメントアウトを解除してください(必要に応じて複数のサブアカウント provider を定義できます)。
    3. サブアカウントモジュールのコメントアウトを解除し、アカウント名を "change-me-sub" から実際のサブアカウント名に更新してください。
    4. organization_id は変更 しないでください。そのままにしておいてください。
    terraform {
    required_providers {
    aws = {
    source = "hashicorp/aws"
    version = "~> 5.0"
    }
    }
    }

    provider "aws" {
    region = "us-east-1"
    alias = "management"
    }

    provider "aws" {
    region = "us-east-1"
    alias = "sub-1"
    }

    resource "random_uuid" "external_id" {}

    module "attribute-sensor" {
    source = "ZouzIO/attribute-sensor/aws"
    version = "~> 2.1"

    account_type = "management"
    account_name = "change-me"
    organization_id = "XXXX-XXXX-XXX-XXXX-XXXXXXX"
    external_id = random_uuid.external_id.id

    providers = {
    aws = aws.management
    }
    }

    module "attribute-sensor-sub" {
    source = "ZouzIO/attribute-sensor/aws"
    version = "~> 2.1"

    account_type = "sub"
    account_name = "change-me-sub"
    organization_id = "XXXX-XXXX-XXX-XXXX-XXXXXXX"
    external_id = random_uuid.external_id.id

    providers = {
    aws = aws.sub-1
    }
    }
  2. Terraform を適用してください。

    terraform apply
  3. 検証 AWS Console でサブアカウントにログインし、Attribute が AWS API にアクセスできる IAM ロールが作成されていることを確認してください。

ステップ 2.2 — EKS 上で Helm を使用したセンサーのデプロイ

センサーをデプロイしたいすべての EKS クラスタで、次の手順を繰り返してください。

  1. Attribute から提供された values ファイル(values.yaml)を保存してください。このファイルには一意のエフェメラルトークンが含まれています。

  2. 使用している Helm のバージョンを確認してください。サポートされるバージョンは 3.8.0 以上です。

    helm version
  3. Helm チャートをインストールしてください。

    helm upgrade -i attribute \
    oci://quay.io/attribute/operator-chart \
    -f <values.yaml> \
    -n attribute \
    --create-namespace
  4. 任意 — トークンを secret として構成する。 外部シークレットマネージャーを使用してトークンを secret として保存したい場合は、次の設定を values ファイルに追加してください。

    initconfig:
    create_secret: false
    orgToken:
    secretName: external-secret-name
    secretKey: external-secret-key
  5. 検証 次を実行し、Helm リリースおよび operator とセンサーが稼働していることを確認してください。

    helm list -n attribute
    kubectl get pods -n attribute

    期待される出力例:

    Terminal output of helm list -n attribute showing the attribute release deployed with the operator-chart

    Terminal output of kubectl get pods -n attribute showing five attribute pods all in Running state with READY 1/1

注意

他のコンピュートリソースタイプ(standalone、Fargate など)にセンサーをデプロイしたい場合は、該当するセンサーデプロイメントのドキュメントを参照してください。


商標: AWS は Amazon.com, Inc. またはその関連会社の商標です。Terraform は HashiCorp, Inc. の登録商標です。Kubernetes は The Linux Foundation の登録商標です。その他すべての商標は、それぞれの所有者に帰属します。