AWS Distro for OpenTelemetryの検証環境をTerraformとecspressoで手軽に構築する

AWS Distro for OpenTelemetryの検証環境をTerraformとecspressoで手軽に構築する

AWS Distro for OpenTelemetryの検証環境をTerraformとecspressoで手軽に構築する
Clock Icon2025.04.02

お疲れさまです。とーちです。

最近、OpenTelemetryの検証をする機会があり、AWS Distro for OpenTelemetry(ADOT)のサンプルコードを動かすための環境が必要になりました。検証用途なので、サクッと環境を用意して、使わないときはコスト最小化できる構成が理想的です。

そこで今回は、TerraformとecspressoでADOTのサンプルアプリケーションを動かすための環境を構築してみました。この記事では、その構築方法と使い方について解説します。

構築する環境の要件

今回構築する環境には、以下の要件を満たしたいと考えました:

  • ALB + ECS Fargate構成でOpenTelemetryサンプルアプリケーションを動かせること
  • 必要に応じてサンプルアプリケーションを変更し、デプロイできること
  • 使わないときは最小限の課金にできること
  • Observability バックエンドとしてはとりあえずAWS X-Rayを使用すること

構築する環境のアーキテクチャ

今回構築する環境のアーキテクチャは以下のようになります:

アーキテクチャ図

基本的なALB + ECS Fargateの構成で、ECS上でADOTのサンプルアプリケーションを動かします。パブリックサブネットにALBを配置し、プライベートサブネットにECS Fargateを配置する一般的なアーキテクチャです。

サンプルアプリケーションは、AWS Distro for OpenTelemetryが提供するGo言語のサンプルコードを使用します。このサンプルアプリケーションは、OpenTelemetry SDKを使用してトレース情報を生成し、サイドカーとして動作するADOT Collectorを経由してAWS X-Rayにトレース情報を送信します。

なお、コードは以下のリポジトリに公開していますので、ぜひご活用ください:

https://github.com/ice1203/blog-otel-ecs

コードの説明

リポジトリの主要なファイルとディレクトリ構成について説明します。

envs/dev/main.tf

このファイルでは、VPCとNATインスタンス、ALBとECSクラスター、およびECSで使用する関連リソースを作成するコードが含まれています。main.tfから各種モジュールを呼び出して必要なリソースを作成する形になっています。

通常はNAT Gatewayをプライベートサブネットのインターネットアクセス用に使うことが多いですが、今回はNATインスタンスを使用しています。これは検証用途なので、使わないときに気軽にインスタンスを停止できるようにするためです

appディレクトリ

このディレクトリにはecspresso関連のファイルが入っています。ecspressoは、ECSのデプロイを簡単に行うためのツールで、タスク定義やサービス定義をYAMLで管理し、ECSへのデプロイを自動化できます。

envs/dev/main.tfで作成したtfstateファイルを読み込むことで、Terraform側で作成したリソースのARNなどの情報を取得する仕組みになっています。これにより、Terraformで作成したリソースとecspressoで管理するECSリソースを連携させることができます。

環境構築の手順

それでは実際に環境を構築していきましょう。

1. リポジトリのクローン

まず、GitHubリポジトリをクローンします。サブモジュールも一緒に取得するために、--recurse-submodulesオプションを使用します。

git clone --recurse-submodules https://github.com/ice1203/blog-otel-ecs.git
cd blog-otel-ecs

2. 必要なツールのインストール

必要なツールをインストールします。リポジトリではaquaを使用していますので、以下のコマンドでインストールできます。aquaはツールバージョン管理ツールで、aqua iコマンドを実行することで、リポジトリで定義されている必要なツール(Terraformやecspressoなど)を自動的にインストールします。

aqua i

3. Terraformによるインフラ構築

まず、Terraformの設定ファイルがあるディレクトリに移動します。

cd envs/dev

環境変数の設定

Terraformで使用する環境変数を設定します。direnvなどを使うと便利です。

export TF_VAR_env="dev"
export TF_VAR_system="test"
export TF_VAR_ec2_key_pair_name="<適当なEC2キーペア名>"

backend.tfの修正

backend.tfのバケット名の部分を自分の環境に合わせて修正します。このS3バケットはTerraformの状態ファイルを保存するために使用します。

terraform {
  backend "s3" {
    bucket = "<s3バケット名>"
    key    = "blog-otel-ecs/environments/dev/terraform.tfstate"
    region = "ap-northeast-1"
  }
}

Terraformの実行

Terraformを実行してインフラを構築します。

terraform plan
terraform apply -auto-approve

4. コンテナイメージのビルドとECSへのデプロイ

次に、サンプルアプリケーションがあるディレクトリに移動します。

cd ../../app/aws-otel-community/sample-apps/go-sample-app/

ECRへのコンテナイメージのプッシュ

ECRにコンテナイメージをプッシュします。以下のコマンドでは、AWS Distro for OpenTelemetryのサンプルアプリケーションをビルドし、Amazon ECRにプッシュしています。

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin <AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com
docker build -t test-dev-repo ./
docker tag test-dev-repo:latest <AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/test-dev-repo:latest
docker push <AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/test-dev-repo:latest

環境変数の設定

ecspressoで使用する環境変数を設定します。これらの環境変数は、ecspressoがTerraform状態ファイルから情報を取得するために必要です。

export TFSTATE_BUCKET=<tfstateを保存しているS3バケット名>
export TFSTATE_BUCKET_PATH=blog-otel-ecs/environments/dev
export IMAGE_TAG=latest

ecspressoによるECSへのデプロイ

ecspressoを使用してECSにデプロイします。verifyコマンドでデプロイ前の検証を行い、問題がなければdeployコマンドでデプロイを実行します。

ecspresso verify
ecspresso deploy

動作確認

サービスがデプロイできたら、以下のURLからアクセスできます。

http://<ALBのDNS名>/

何度かアクセスすると、マネジメントコンソールの「CloudWatch」→「X-Rayトレース」→「トレース」から、以下のようなトレース情報が確認できます。

X-Rayトレース画面

これにより、OpenTelemetryを使ったトレース情報がAWS X-Rayに正常に送信され、可視化されていることが確認できます。

環境の削除手順

検証が終わったら、以下の手順で環境を削除できます。

1. ECSサービスの削除

まず、サンプルアプリのディレクトリに移動していることを確認します。移動していない場合は以下のコマンドで移動します。

cd /path/to/blog-otel-ecs/app

先ほど設定した環境変数が有効な状態で、以下のコマンドを実行します。まずタスク数を0にスケールダウンしてから、サービスを削除します。

ecspresso scale --tasks 0 && ecspresso delete --force

2. Terraformリソースの削除

次に、Terraformのディレクトリに移動します。

cd ../envs/dev

Terraform用の環境変数が有効な状態で以下のコマンドを実行します。これにより、作成したすべてのAWSリソースが削除されます。

terraform destroy --auto-approve

まとめ

今回は、AWS Distro for OpenTelemetryのサンプルコードを動かすための環境をTerraformとecspressoで構築する方法を紹介しました。この環境を使えば、OpenTelemetryの検証をサクッと始めることができます。

OpenTelemetryを使った可観測性基盤の検証をしたいけど、環境構築に時間をかけたくないという方は、ぜひこのリポジトリを活用してみてください。

以上、とーちでした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.