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

Attribute AWS integration

Install with Attribute Terraform

スムーズな実装を行うために、Attribute は請求情報の抽出とセンサー登録のセットアップを自動化する Terraform モジュールを提供しています。Terraform の詳細なドキュメントとサンプルは、Terraform モジュール内の [README] に記載されています。

AWS Account Types

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

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

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

Resources Created by This Module

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

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

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

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

Upgrading an Existing Attribute Terraform Module

注意

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

Appendix A: Detailed Installation Instructions

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

Step 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 バケット。

      us-east-1 の attribute-cur-us-east-1 バケットを含む、AWS の汎用バケット一覧

      AttributeCurExport がステータス Healthy・タイプ CUR 2.0 と表示されている AWS Data Exports ページ

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

      作成日・ARN・スイッチロールのリンクが表示された、AttributeLoaderV-us-east-1-861276102138 IAM ロールのサマリー画面

Step 2 — Sensor Implementation

センサーをデプロイする予定の各メンバーアカウント(サブアカウント)を構成します。これには 2 つのパートがあります。1 つ目は、事前要件を作成するために Terraform を実行すること(サブアカウントごとに 1 回のみ)、2 つ目は、各 EKS クラスタ上に Helm チャートを使用してセンサーをデプロイすることです。

Step 2.1 — Terraform Prerequisite Setup (Member Account)

以下のステップは、メンバーアカウント(サブアカウント)ごとに 1 回 実行してください。

  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 ロールが作成されていることを確認します。

Step 2.2 — Deploying the Sensor with Helm on EKS

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

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

  2. values ファイル内の Java インストルメンテーション設定を確認します。デフォルトで、ファイルには次のフラグが含まれています。

    # Java instrumentation settings
    sensorDisableAutoJavaInstrumentation: true
    javaAutoInject:
    enabled: true

    この構成は Kubernetes 1.28 以上 でサポートされます。インジェクションバックエンドは自動的に選択されるため、バージョン固有の調整は不要です。

    センサーのダイナミック Java インストルメンテーションを admission-time インジェクションの代わりに使用するには、javaAutoInject.enabledfalse に設定し、かつ sensorDisableAutoJavaInstrumentationfalse に設定してください。両方を同時に有効化してはいけません。両モードの詳細な説明については、Attribute Java Instrumentation Guide を参照してください。

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

    helm version
  4. Helm チャートをインストールします。

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

    initconfig:
    create_secret: false
    orgToken:
    secretName: external-secret-name
    secretKey: external-secret-key
  6. 検証。 次のコマンドを実行して、Helm リリースが作成され、operator とセンサーが稼働していることを確認します。

    helm list -n attribute
    kubectl get pods -n attribute

    期待される出力例:

    operator-chart でデプロイされた attribute リリースが表示された、helm list -n attribute のターミナル出力

    READY 1/1 で Running 状態の Attribute Pod が 5 つ表示されている、kubectl get pods -n attribute のターミナル出力

注意

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


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