1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS ECS Execに必要なTask IDをコマンドラインから取得

Posted at

はじめに

最近AWSのインフラ構築にTerraformを使いはじめて少しずつではあるが使えるようになってきた。
当面はコンテナ環境を構築したいのでFargateを使うのだけどもやはりコンテナ内へのシェルログイン機能がほしい。

当方の環境

Linux環境で実施しているが同様の環境が作れるならOSは問わないと思う。

  • aws-cli/2.4.24 Python/3.8.8 Linux/4.15.0-189-generic
  • session-manager-plugin
  • GNU Make 4.1
  • GNU Awk 4.1.4
  • jq-1.6

aws-cliとsession-manager-pluginは絶対必要だけどもそれ以外は無くてもコマンドライン操作のコピペでなんとかなる。

実装

ECS Exec

そこでECS Execの出番となり、以下のサイトなどを参考にやってみた。

設定方法は上記を参考にしていただくとしてExecの実行は

aws ecs execute-command --cluster クラスター名 \
--task タスクID \
--container コンテナ名 \
--interactive --command OSコマンド

となり、必要な情報を与えればよいのだが、タスクID以外は事前に自分の設定値なので把握できる。
そしてそのタスクIDだがTerraformのoutputで取得できないかと調べたができなさそうだった。

Task IDの取得

同じようなことを苦労されているようだったので参考にしたかったが、もう少しすっきりやりたかった。

その結果

まあこれでいいんじゃないかなレベル。
細かくは検証していない。

# クラスタ名がmy-clusterの場合
aws ecs list-tasks --cluster my-cluster | jq -r '.taskArns[]' | awk -F'/' '{print $3}'

結果

x0123456789012345678901234567890123456789

出力した値を--taskに渡してやれば良い。

完成版

--profile--regionオプションは無くてもよいが自分の環境には必要なので書いておく。

MAKEFLAGS += --warn-undefined-variables
SHELL := /bin/bash
.SHELLFLAGS := -eu -o pipefail -c
.DEFAULT_GOAL := help

# all targets are phony
.PHONY: $(shell egrep -o ^[a-zA-Z_-]+: $(MAKEFILE_LIST) | sed 's/://')

# ここは各自の設定に書き換える
PROFILE=default
REGION=ap-northeast-1
CLUSTER=my-cluster
CONTAINER=nginx

get-task-id: ## Get Task ID
	$(eval TASK_ID := $(shell aws ecs list-tasks \
	--profile ${PROFILE} \
	--region ${REGION} \
	--cluster ${CLUSTER} | \
	jq -r '.taskArns[]' | awk -F'/' '{print $$3}'))

ecs-exec: get-task-id ## Ecs Exec
	@aws ecs execute-command \
	--cluster ${CLUSTER} \
	--profile ${PROFILE} \
	--region  ${REGION} \
	--task ${TASK_ID} \
	--container ${CONTAINER} \
	--interactive --command /bin/sh

help: ## Print this help
	@echo 'Usage: make [target]'
	@echo ''
	@echo 'Targets:'
	@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9_-]+:.*?## / {printf "\033[33m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)

使い方

make ecs-exec

結果(最後のところでプロンプトが表示されておりログインできている)

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

Starting session with SessionId: ecs-execute-command-xxxxxx
# 

解説

ecs-execを実行するだけだが、その実行前にget-task-idタスクが呼び出され環境変数TASK_IDがセットされる。

最後に

別にMakefileは使わなくてもよいけどタスクIDを取得する手間が省けてワンライナーでシェルアクセスできるので便利。
あと、今回の話に関してはTerraformまったく関係ないのでFargate+ECS Execの環境構築ができていれば使える。

リンク

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?