🔖

[API構築10] terraformでECSの構成管理

2023/10/15に公開

概要

前回までの記事でECSへデプロイしHTTPSで公開することもできた。
だが、全部作ってあるためコードの更新を反映するのが毎回作り直しとなり超だるい。
CDできるようにする。
その前段階としてterraformで構成を管理する。

前回の記事
https://zenn.dev/tofucode/articles/c07cea0be768b3

Terraformについて
https://zenn.dev/tofucode/articles/0c4c94c64e0b28

Terraform導入

以下を参考にterraformの導入を行う。
https://www.terraform.io/

インストール

brew tap hashicorp/tap
brew install hach​​icorp/tap/terraform
terraform -install-autocomplete

terraformでのAWS ECS構成管理

以下の記事に沿ってterraformの設定を行う。
https://zenn.dev/streamwest1629/articles/terraform_import-for_beginner

初期設定

まず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

https://zenn.dev/tofucode/articles/c30bf6fbfcfe8a

以下コマンドを実行し設定済みの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ファイルの言語仕様
https://developer.hashicorp.com/terraform/language

AWS ECSの設定例
https://qiita.com/Shoma0210/items/b998a260c5d18839fb7a

https://zenn.dev/streamwest1629/articles/terraform_import-for_beginner

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ecs_service

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ecs_task_definition#import

AWS用の設定
https://developer.hashicorp.com/terraform/tutorials/aws-get-started/aws-build

GitHubで編集を提案

Discussion