Closed9

TerraformでEFS+ECS(Fargate)を試す

not75743not75743

前提

  • EFS用意済み
  • EFSで共有するファイルも準備済み
not75743not75743

EFS

## EFS
resource "aws_security_group" "efs_sg" {
  name   = "${var.system_name}_${var.environment}_efs-sg"
  vpc_id = var.vpcid

  ingress {
    from_port = 2049
    to_port   = 2049
    protocol  = "tcp"
    cidr_blocks = [
      "${var.public1_cidr}",
      "${var.public2_cidr}"
    ]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "${var.system_name}_${var.environment}_efs-sg"
  }
}

resource "aws_efs_file_system" "efs" {
  tags = {
    Name = "test-efs"
  }
}

resource "aws_efs_mount_target" "efs_public1" {
  file_system_id  = aws_efs_file_system.efs.id
  subnet_id       = var.public1
  security_groups = [aws_security_group.efs_sg.id]
}

resource "aws_efs_mount_target" "efs_public2" {
  file_system_id  = aws_efs_file_system.efs.id
  subnet_id       = var.public2
  security_groups = [aws_security_group.efs_sg.id]
}
not75743not75743

TaskDefinition(追加箇所のみ)

タスクにEFSを使わせるようにします。
今回はEFSの/nginx/index.htmlを使わせるため、このような指定にしています

resource "aws_ecs_task_definition" "app" {
  volume {
    name = "fargate-efs"
 
    efs_volume_configuration {
      file_system_id = var.efs_id
      root_directory = "/nginx"
    }
  }
}
not75743not75743

ContainerDefinition

コンテナ内のEFSマウントするパスを指定します。
nginx:latestusr/share/nginx/htmlにドキュメントルートがあるため、そこを指定
sourceVolumeaws_ecs_task_definitionで定義したボリューム名をつけます

[
    {
      "mountPoints": [
        {
            "containerPath": "/usr/share/nginx/html",
            "sourceVolume": "fargate-efs"
        }
      ],
not75743not75743

index.html

<h1>test</h1>
<h2>nginx</h2>

デフォルトではないことが確認できればOK

not75743not75743

apply

$ terraform plan
$ terraform apply

動作確認

OK!
複数タスクがある場合は、それぞれALBでアクセス出来ているはずなので
個別にログを確認する

このスクラップは2023/06/01にクローズされました