11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MetapsAdvent Calendar 2024

Day 7

Fargate接続ツール(MP社製)のご紹介

Last updated at Posted at 2024-12-07

概要

メタップスペイメントのフロントチーム(以下、当チーム)では、Fargate (ECS on Fargate) へ接続する際に、以下の当社作成のツールを利用しています。
当記事はそのご紹介になります。

なぜ作ったのか?

AWS CLI コマンド等を用いて、Fargate に接続する際には 32 桁のタスク名を指定する必要があります。
タスク名を毎回調べるのは少し手間がかかり、特に開発中でデプロイを日に何回も行う場合はその影響が大きくなってしまいます。
その負荷を減らす目的で作成してみました。
また、コンテナ内部でどのような操作をしたか、ログで残せるようにしたかったため、その機能も追加しています。

具体的な導入の流れ

実行環境の構築

まず、Session Manager プラグインをインストールします。

次に pyenv を利用して python の実行環境を構築します。
以下は Windows 11, WSL 2 で構築した例になります。

curl https://pyenv.run | bash
cat <<'EOF' >> ~/.bashrc
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
EOF
source ~/.bashrc
pyenv --version

当手順では以下のバージョンがインストールされたものと仮定します。

$ pyenv --version
pyenv 2.4.20

次に git clone して python やライブラリをインストールします。

git clone https://github.com/metaps/connect_to_fargate
cd connect_to_fargate
pyenv install 3.11.9
pyenv local 3.11.9
pip install -r requirements.txt

すると以下の状態になるかと思います。
※ライブラリのバージョンは変更される場合があります。

$ pyenv versions
  system
* 3.11.9 (set by <ディレクトリ>/connect_to_fargate/.python-version)
$ python --version
Python 3.11.9
$ pip freeze
blessed==1.20.0
boto3==1.35.76
botocore==1.35.76
editor==1.6.6
inquirer==3.4.0
jmespath==1.0.1
python-dateutil==2.9.0.post0
readchar==4.2.1
runs==1.2.2
s3transfer==0.10.4
six==1.17.0
urllib3==2.2.3
wcwidth==0.2.13
xmod==1.8.1

Fargate にログインしてみる

これでツールが使える環境が整いましたため、以下のコマンドで実際に Fargate へ接続できるか試してみます。

python connect_to_fargate.py

実行例としては以下になります。

$ python connect_to_fargate.py
処理を開始します
[?] 接続先が存在するクラスター名を選択してください:
   default
 ❯ project-a

クラスター名: project-a

[?] 接続先が存在するサービス名を選択してください:
 ❯ project-a-1-development
   project-a-2-development

サービス名: project-a-1-development

[?] 接続先が存在するタスク名を選択してください:
 ❯ 0123456789abcdefghijklmnopqrstuv

タスク名: 0123456789abcdefghijklmnopqrstuv

[?] 接続先のコンテナ名を選択してください:
   app
 ❯ web

コンテナ名: web

以下のFargateに接続します
----------------------------------------
クラスター名: project-a
サービス名: project-a-1-development
タスク名: 0123456789abcdefghijklmnopqrstuv
コンテナ名: web
----------------------------------------

[?] こちらに接続してよろしいですか:
 ❯ yes
   no

Fargateにログインします

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.


Starting session with SessionId: ecs-execute-command-zyxwvutsrqponmlkjihgfedcba
root@ip-172-31-10-10:/var/www/html#

成功すると上記のようにコンテナに接続できます。

試しに、ll コマンド(ls -l コマンド)を実行してから、exit コマンドで切断してみます。

root@ip-172-31-10-10:/var/www/html# ll
total 1116
drwxrwxrwt 15 www-data www-data   4096 Dec  4 21:07 .
drwxr-xr-x  1 root     root       4096 Dec  4 03:09 ..
-rw-r--r--  1 root     root       1231 Dec  4 03:09 .env.example
drwxr-xr-x  8 root     root       4096 Dec  4 21:06 .git
-rw-r--r--  1 root     root        204 Jul 12 05:12 .gitignore
drwxr-xr-x 14 root     root       4096 Dec  4 21:06 app
(省略)
root@ip-172-31-10-10:/var/www/html# exit
exit


Exiting session with sessionId: ecs-execute-command-zyxwvutsrqponmlkjihgfedcba.

CompletedProcess(args='/usr/local/bin/aws ecs execute-command --cluster project-a --task 0123456789abcdefghijklmnopqrstuv --container web --interactive --command /bin/bash | tee ./connect_to_fargate.py_20241205173230737710.log', returncode=0)
Fargateからログアウトしました

すると無事切断がされ、ログも出力されました。

操作ログを確認する

操作ログが出力されたので確認してみます。

$ cat ./connect_to_fargate.py_20241205173230737710.log

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.


Starting session with SessionId: ecs-execute-command-zyxwvutsrqponmlkjihgfedcba
root@ip-172-31-10-10:/var/www/html# ll
total 1116
drwxrwxrwt 15 www-data www-data   4096 Dec  4 21:07 .
drwxr-xr-x  1 root     root       4096 Dec  4 03:09 ..
-rw-r--r--  1 root     root       1231 Dec  4 03:09 .env.example
drwxr-xr-x  8 root     root       4096 Dec  4 21:06 .git
-rw-r--r--  1 root     root        204 Jul 12 05:12 .gitignore
drwxr-xr-x 14 root     root       4096 Dec  4 21:06 app
(省略)
root@ip-172-31-10-10:/var/www/html# exit
exit


Exiting session with sessionId: ecs-execute-command-zyxwvutsrqponmlkjihgfedcba.

2024-12-05 17:33:12,206:connect_to_fargate.py:INFO:CompletedProcess(args='/usr/local/bin/aws ecs execute-command --cluster project-a --task 0123456789abcdefghijklmnopqrstuv --container web --interactive --command /bin/bash | tee ./connect_to_fargate.py_20241205173230737710.log', returncode=0)
2024-12-05 17:33:12,207:connect_to_fargate.py:INFO:Fargateからログアウトしました

こちらも操作内容と同じ内容が出力されておりました。

まとめ

今回は当チームで利用している Fargate接続ツール についてご紹介させていただきました。
当ツールは公開リポジトリで配布していますので、もしご興味がございましたらお使いいただけますと幸いです。

以上になります。

11
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?