MySQL操作用お手軽踏み台クライアント
-
AWS で MySQL DB を操作したい場合に、ガッ、と「プライベートサブネット」に置く Fargate を構築するための IaC コード一式
-
Terraform でこれ系の構築事例が見当たらなかったので Terragrunt 入門の手始めに良さそうで、やってみた
- macOS or Linux
- AWS CLI v2
- direnv (load and unload environment variables on current directory)
- ecspresso v2 (ECS deploy tool)
- Guide -> ecspresso handbook v2対応版 ※ ¥500
- tgenv (for terragrunt setup)
- tfenv (for terraform setup)
- Docker Desktop
自身の環境に合わせて設定しておくファイル
- /path/to/deploy/ecspresso/live/.envrc
.envrc.example
にある項目を適宜設定してください
- /path/to/deploy/.envrc
AWS_ACCOUNT_ID
を適切に設定してください
-
/path/to/terragrunt/live/manage/iam/role/task-exec
_variables.tf
- profile を適切に設定してください
- env_identifier を適切に設定してください (dev/stg/prdなど)
-
/path/to/terragrunt/live/resource/ecr
_variables.tf
- profile を適切に設定してください
-
/path/to/terragrunt/live/resource/ecs-cluster
_variables.tf
- profile を適切に設定してください
- env_identifier を適切に設定してください (dev/stg/prdなど)
_locals.tf
- ecs_cluster_name・ecs_exec_logs_name を適切に設定してください
- ${var.env_identifier} 利用可能
- container_insights_state を設定してください ("disabled"/"enabled")
- ecs_cluster_name・ecs_exec_logs_name を適切に設定してください
aws sts get-caller-identity
で妥当に UserId・Account・Arn が表示されている状態としてください
cd /path/to/deploy/ecspresso/live
direnv allow
make verify
cd /path/to/deploy/ecspresso/live
direnv allow
make run
ECS Task が起動します。
デフォルトで 900秒 (15分) ECS Exec での接続がなければ自動で Task が終了します。
cd /path/to/deploy/ecspresso/live
direnv allow
make exec
起動している ECS Task に接続して、mysql クライアントを利用することができます。
aws sts get-caller-identity
で妥当に UserId・Account・Arn が表示されている状態としてください
cd /path/to/terragrunt/live/resource/ecs-cluster
terragrunt run-all apply
Configuration が妥当に出来上がっていれば、
- ECR リポジトリ
- ECS Task 実行ロール(IAM)
- ECS クラスター
が作成されます。
cd /path/to/deploy
make ecr-pub-login
docker build 時に ECR Public を参照するので認証が必要です
make ecr-login
ECR の Private Registry に docker push するので認証が必要です
make build
FARGATE_SPOT を利用できるように、意図的に --platform linux/amd64
で docker build します
make tag
make push
latest
タグを付加して、ECR へ bastion:latest
イメージを push します
利用するときだけ ECS Task を run するように、desiredCount=0 で ecspresso deploy します
cd /path/to/deploy/ecspresso/live
direnv allow
make verify
make dry-deploy
make deploy
-
ECS Exec 時のログを CloudWatch Logs に書き出せてないので出したい
- check_login.sh が回っているので PID 1 が空いてなくて?
-
ポートフォワードで、ローカルからGUIでのクライアントツールでの MySQL 接続ができるはず(たぶん)
- ecspresso でも「開通」できそう。 https://github.com/kayac/ecspresso?tab=readme-ov-file#port-forwarding 見た感じでは
-
utern (Multi group and stream log tailing for AWS CloudWatch Logs) との合わせ技で tail しながらオペレーションできると良さそう
-
Terragrunt の CI
- live の下にもう1階層環境ごとのディレクトリを置くのが良いかも(階層調整は必要)
- ライセンスとか置く?