🔖
[API構築10] terraformでECSの構成管理
概要
前回までの記事でECSへデプロイしHTTPSで公開することもできた。
だが、全部作ってあるためコードの更新を反映するのが毎回作り直しとなり超だるい。
CDできるようにする。
その前段階としてterraformで構成を管理する。
前回の記事
Terraformについて
Terraform導入
以下を参考にterraformの導入を行う。
インストール
brew tap hashicorp/tap
brew install hachicorp/tap/terraform
terraform -install-autocomplete
terraformでのAWS ECS構成管理
以下の記事に沿ってterraformの設定を行う。
初期設定
まずmain.tfを書く
terraform {}
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_ecs_cluster" "test" {}
resource "aws_ecs_task_definition" "test" {}
resource "aws_ecs_service" "test" {}
ECS設定の読み込み(terraform import)
AWS CLIにログインする
aws configure sso
以下コマンドを実行し設定済みのECSの設定を取り込む(terraform import)
AWS_PROFILE=AdministratorAccess-588666138300 terraform import aws_ecs_task_definition.test arn:aws:ecs:ap-northeast-1:588666138300:task-definition/aichatbot-dockerhub-task-familly:1
AWS_PROFILE=AdministratorAccess-588666138300 terraform import aws_ecs_cluster.test aichatbot-cluster
AWS_PROFILE=AdministratorAccess-588666138300 terraform import aws_ecs_service.test aichatbot-cluster/aichatbot-service-https
ECS設定の差分確認と修正
以下コマンドを実行し変更差分の確認(terraform plan)
AWS_PROFILE=AdministratorAccess-588666138300 terraform plan
差分をなくすようmain.tfを修正する。
terraform {}
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_ecs_cluster" "test" {
name = "aichatbot-cluster"
}
resource "aws_ecs_service" "test" {
name = "aichatbot-service-https"
}
resource "aws_ecs_task_definition" "test" {
family = "aichatbot-dockerhub-task-familly"
container_definitions = jsonencode([
{
"name": "aichatbot-dockerhub-container",
"image": "kesasasaki/aichatbotrepository:latest",
"cpu": 0,
"portMappings": [
{
"name": "aichatbot-dockerhub-container-80-tcp",
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp",
"appProtocol": "http"
}
],
"essential": true,
"environment": [
{
"name": "LINE_CHANNEL_TOKEN",
"value": "xxxx"
},
{
"name": "LINE_CHANNEL_SECRET",
"value": "xxxx"
},
{
"name": "OPENAI_API_KEY",
"value": "xxxx"
},
{
"name": "PORT",
"value": "80"
},
{
"name": "DEBUG",
"value": "true"
}
],
"environmentFiles": [],
"mountPoints": [],
"volumesFrom": [],
"ulimits": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/aichatbot-dockerhub-task-familly",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "ecs"
},
"secretOptions": []
}
}
])
}
できた。次はgithub actionsの設定を行う。
感想
当初想定していた「全設定を1つずつ書いていく」よりは早く終わりそうだが、、importでエラーがあったりと難易度は想定より上がっている。
総じて当初の想定くらいの時間はかかった。
参考
Terraformの.tfファイルの言語仕様
AWS ECSの設定例
AWS用の設定
Discussion