AWS CloudShell は、AWS Management Console 内で提供されるブラウザベースのシェルで、AWS CLI と必要なツールが事前にインストールされており、すぐに使い始めることができます。このガイドでは、AWS CloudShell を使用して、ECS クラスター内のすべてのサービスとタスク定義の環境変数を取得する手順を説明します。
この記事の概要
1. AWS CloudShell にアクセス
- AWS Management Console にサインイン:
- AWS アカウントで AWS Management Console にサインインします。
- CloudShell を起動:
- コンソールの右上にある CloudShell アイコン(通常はターミナルのアイコン)をクリックします。
- CloudShell が起動し、ブラウザ内にターミナルが表示されます。
2. スクリプトの準備
次に、ECS クラスター内のサービスとタスク定義の環境変数を取得するためのスクリプトを作成します。
- CloudShell にスクリプトファイルを作成:
- CloudShell のターミナルで、
nano
などのエディタを使用して新しいスクリプトファイルを作成します。
nano get-ecs-env-vars.sh
- CloudShell のターミナルで、
- スクリプト内容のコピー:
- 以下のスクリプトをコピーし、CloudShell のエディタに貼り付けます。
- スクリプトファイルを保存:
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
などのコマンドでインストールしてください。
スクリプトの出力をファイルに保存する手順
- スクリプトの作成
- まず、スクリプトを作成し、CloudShell で実行可能にします。前述の手順に従って、スクリプトファイルを作成し、実行権限を付与します。
- スクリプトの出力をファイルにリダイレクトスクリプトの実行結果をファイルに保存するには、コマンドの出力をファイルにリダイレクトします。以下のコマンドを使って、スクリプトの出力をファイルに保存します。shコードをコピーする
./get-ecs-env-vars.sh > ecs-env-vars-output.txt
ここで、ecs-env-vars-output.txt
は出力結果を保存するファイル名です。このコマンドを実行すると、スクリプトの出力がecs-env-vars-output.txt
ファイルに保存されます。 - 出力ファイルの確認保存されたファイルの内容を確認するには、
cat
コマンドを使ってファイルを表示することができます。shコードをコピーするcat ecs-env-vars-output.txt
または、CloudShell のエディタを使用してファイルを開くこともできます。ファイル名をクリックすると、エディタ内で内容を確認できます。 - ファイルのダウンロード(オプション)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