PR

AWS CloudShell で ECS クラスターのサービスとタスク定義に設定されている環境変数を取得する方法

AWS
スポンサーリンク

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
記事が参考になった方、サイト運営を応援してくれる方へ

下のリンクから楽天トラベルでホテル予約か、楽天市場で商品購入を願いします。応援よろしくお願いします。
リンクを表示すれば楽天トラベルで予約の検索ができます。

リンクを表示すれば、お好きな商品が検索できます。

スポンサーリンク
haruki

ITエンジニア × 副業 × 投資家
副業と投資で年間100万円以上の収益を達成
ブログ・YouTube・投資で複数の収益源を確立

私は、IT業界でクラウドエンジニアとして10年以上の経験を積みながら、副業と投資を実践し、資産を増やしてきました。
このブログでは、 「最短で副業、本業の収益を上げ、資産を最大化する方法」 をリアルな成功事例と失敗談を交えて解説します。

Youneedjp.com の目的

「個人が副業と投資で安定収益を得るための実践ガイド」 を提供

副業・投資・お得なライフハックを 「すぐに実践できるノウハウ」 に特化し、
読者が 「月5万円の副収入」 を最短で得られるようにサポートします。

harukiをフォローする

クラウドファンディングで資金を集めています。運営を応援してくださる方は下のリンクの欲しいものリストからプレゼントお願いします。もちろん、住所、氏名などは匿名で発送できます。

参考になたっらSNSシェア&フォローもよろしくお願いします!質問、お仕事相談など、「X」のDMで気軽にご相談ください。

スポンサーリンク
スポンサーリンク
スポンサーリンク
AWS
スポンサーリンク
参考になった情報は、ぜひシェアお願いします
harukiをフォローする

コメント

タイトルとURLをコピーしました