• 投稿者:
  • 投稿コメント:0件のコメント
  • 投稿カテゴリー:AWS
  • 投稿の最終変更日:2024年8月1日

AWS CloudShell は、AWS Management Console 内で提供されるブラウザベースのシェルで、AWS CLI と必要なツールが事前にインストールされており、すぐに使い始めることができます。このガイドでは、AWS CloudShell を使用して、ECS クラスター内のすべてのサービスとタスク定義の環境変数を取得する手順を説明します。


1. AWS CloudShell にアクセス

  1. AWS Management Console にサインイン:
  2. CloudShell を起動:
    • コンソールの右上にある CloudShell アイコン(通常はターミナルのアイコン)をクリックします。
    • CloudShell が起動し、ブラウザ内にターミナルが表示されます。

2. スクリプトの準備

次に、ECS クラスター内のサービスとタスク定義の環境変数を取得するためのスクリプトを作成します。

  1. CloudShell にスクリプトファイルを作成:
    • CloudShell のターミナルで、nano などのエディタを使用して新しいスクリプトファイルを作成します。

    nano get-ecs-env-vars.sh
  2. スクリプト内容のコピー:
    • 以下のスクリプトをコピーし、CloudShell のエディタに貼り付けます。
  3. スクリプトファイルを保存:
    • Ctrl + X を押してファイルを保存するかどうか確認されたら、Y を押して保存し、Enter を押してファイル名を確定します。
スポンサーリンク

実行スクリプト内容

#!/bin/bash

# すべてのクラスターをリスト
cluster_arns=$(aws ecs list-clusters --query 'clusterArns' --output text)

if [ -z "$cluster_arns" ]; then
  echo "No clusters found."
  exit 1
fi

for cluster_arn in $cluster_arns; do
  # クラスター名を抽出
  cluster_name=$(basename $cluster_arn)
  
  echo "Cluster: $cluster_name"
  
  # クラスター内のサービスをリスト
  service_arns=$(aws ecs list-services --cluster $cluster_name --query 'serviceArns' --output text)
  
  if [ -z "$service_arns" ]; then
    echo "  No services found in cluster $cluster_name."
    continue
  fi
  
  for service_arn in $service_arns; do
    # サービス名を抽出
    service_name=$(basename $service_arn)
    
    echo "  Service: $service_name"
    
    # サービスの詳細を取得し、タスク定義を取得
    task_definition_arn=$(aws ecs describe-services --cluster $cluster_name --services $service_name --query 'services[0].taskDefinition' --output text)
    
    if [ -z "$task_definition_arn" ]; then
      echo "    No task definition found for service $service_name."
      continue
    fi
    
    echo "    Task Definition: $task_definition_arn"
    
    # タスク定義の詳細を取得し、環境変数を表示
    aws ecs describe-task-definition --task-definition $task_definition_arn | jq '.taskDefinition.containerDefinitions[].environment'
    
    echo ""
  done
done

3. スクリプトに実行権限を付与

スクリプトファイルに実行権限を付与します。

chmod +x get-ecs-env-vars.sh

スポンサーリンク

4. スクリプトの実行

スクリプトを実行して、ECS クラスターのサービスとタスク定義の環境変数を取得します。

./get-ecs-env-vars.sh

5. 結果の確認

スクリプトが実行されると、CloudShell ターミナルに各クラスター、サービス、タスク定義、およびそのタスク定義の環境変数が表示されます。結果は、クラスター名、サービス名、タスク定義名、そしてタスク定義内の環境変数として表示されます。

スポンサーリンク

6. トラブルシューティング

  • AWS CLI の認証エラー: CloudShell では、デフォルトで適切な IAM 権限が設定されているはずですが、認証エラーが発生した場合は、AWS CLI の設定を確認してください。
  • jq コマンドが未インストール: CloudShell に jq がインストールされていない場合は、sudo yum install jq などのコマンドでインストールしてください。

スクリプトの出力をファイルに保存する手順

  1. スクリプトの作成
    • まず、スクリプトを作成し、CloudShell で実行可能にします。前述の手順に従って、スクリプトファイルを作成し、実行権限を付与します。
  2. スクリプトの出力をファイルにリダイレクトスクリプトの実行結果をファイルに保存するには、コマンドの出力をファイルにリダイレクトします。以下のコマンドを使って、スクリプトの出力をファイルに保存します。shコードをコピーする./get-ecs-env-vars.sh > ecs-env-vars-output.txt ここで、ecs-env-vars-output.txt は出力結果を保存するファイル名です。このコマンドを実行すると、スクリプトの出力が ecs-env-vars-output.txt ファイルに保存されます。
  3. 出力ファイルの確認保存されたファイルの内容を確認するには、cat コマンドを使ってファイルを表示することができます。shコードをコピーするcat ecs-env-vars-output.txt または、CloudShell のエディタを使用してファイルを開くこともできます。ファイル名をクリックすると、エディタ内で内容を確認できます。
  4. ファイルのダウンロード(オプション)CloudShell で作成したファイルをローカルにダウンロードするには、CloudShell のファイルブラウザを使用します。
    • CloudShell の画面の左側にある「ファイル」アイコンをクリックします。
    • ecs-env-vars-output.txt ファイルを探し、右クリックして「ダウンロード」を選択します。

まとめ

  • スクリプト実行: ./get-ecs-env-vars.sh > ecs-env-vars-output.txt
  • ファイル確認: cat ecs-env-vars-output.txt
  • ファイルダウンロード: CloudShell のファイルブラウザからダウンロード

これで、スクリプトの結果をテキストファイルとして保存し、後で確認したりダウンロードしてローカルで利用することができます。

スポンサーリンク

ECSクラスターごとにファイルへ環境変数を保存するスクリプト

#!/bin/bash

# すべてのクラスターをリスト
cluster_arns=$(aws ecs list-clusters --query 'clusterArns' --output text)

if [ -z "$cluster_arns" ]; then
  echo "No clusters found."
  exit 1
fi

for cluster_arn in $cluster_arns; do
  # クラスター名を抽出
  cluster_name=$(basename $cluster_arn)
  
  # クラスターごとのファイル名を作成
  output_file="${cluster_name}-env-vars.txt"
  
  # 出力ファイルを開く(追記モード)
  exec > >(tee -a "$output_file") 2>&1
  
  echo "Cluster: $cluster_name"
  
  # クラスター内のサービスをリスト
  service_arns=$(aws ecs list-services --cluster $cluster_name --query 'serviceArns' --output text)
  
  if [ -z "$service_arns" ]; then
    echo "  No services found in cluster $cluster_name."
    continue
  fi
  
  for service_arn in $service_arns; do
    # サービス名を抽出
    service_name=$(basename $service_arn)
    
    echo "  Service: $service_name"
    
    # サービスの詳細を取得し、タスク定義を取得
    task_definition_arn=$(aws ecs describe-services --cluster $cluster_name --services $service_name --query 'services[0].taskDefinition' --output text)
    
    if [ -z "$task_definition_arn" ]; then
      echo "    No task definition found for service $service_name."
      continue
    fi
    
    echo "    Task Definition: $task_definition_arn"
    
    # タスク定義の詳細を取得し、環境変数を表示
    aws ecs describe-task-definition --task-definition $task_definition_arn | jq '.taskDefinition.containerDefinitions[].environment'
    
    echo ""
  done
  
  # ファイルの保存が終わったら標準出力に戻す
  exec > /dev/tty 2>&1
done

コメントを残す