如何使用Terraform将Docker容器部署到AWS集群中?

392 阅读6分钟

各位读者大家好!我希望你过得很好。因此,我在这里的新文章,我们将学习基本的docker,AWS,docker容器,Terraform和如何使用Terraform将Docker容器部署到AWS集群。请继续关注,并坚持到最后,和我一起执行任务,做到这一点。

让我们开始吧

简介

这是一个关于使用Terraform在AWS EC2集群中设置docker区域的愉快但有规模的漫步。但是,在我们进入原则性事件之前,我们有一些房屋责任对象,我们应该首先了解一下。

基础设施即代码

正如这个名字所暗示的那样,将你的基础设施作为代码进行部署。更准确地说,是可读的代码。它现在不再是一种编程语言,而是一种固定的、易于观察的、关于如何安装和维护基础设施的命令。

DOCKER

Docker是一个软件程序平台,用于构建完全基于bins的程序--小而轻的执行环境,它可以共享运行中的机器内核,但在任何其他情况下都是相互隔离运行的。

虽然Bins在Linux和Unix结构中已经使用了一段时间,但Docker,一个在2013年发布的开放性挑战,通过使建设者捆绑他们的软件程序以 "尽快构建并在任何地方运行 "的方式,帮助普及了这一代。

docker容器

Docker是一个用于开发、运输和行走程序的开放平台。它允许你把你的程序从你的基础设施中分离出来,以便你能快速提供软件程序。有了Docker,你可以用控制程序的相同方法来控制你的基础设施。

通过利用Docker的方法来快速运输、测试和部署代码,你可以广泛地减少编写代码和在生产中运行之间的延迟。

AWS

亚马逊网络服务(AWS)是一个完整的云计算平台,包括基础设施即服务(IaaS)和平台即服务(PaaS)产品。AWS的产品为计算、存储、数据库、分析等提供可扩展的答案。

Terraform

Terraform是一个基础设施作为代码的设备,它可以帮助你在人类可读的配置文件中勾勒出每个云和内部资源的轮廓,你可以对其进行版本、重复使用和共享。然后,你可以使用一个恒定的工作流程来配置和控制你所有的基础设施,贯穿其生命周期。Terraform可以控制低阶段的组件。

前提条件

你选择的IDE。

2.一个AWS账户。

3.已经安装和配置的Terraform。

使用Terraform将Docker容器部署到AWS集群的步骤

以下是执行该任务的各个步骤。这些步骤如下。

步骤1: 创建一个目录

为了保持组织性,必须创建一个新的文件夹或目录。你可以创建文件夹并以CD的形式进入其中。

mkdir <folder_name>

cd <folder_name>

第2步:创建伴随文件

一旦文件夹或目录被创建,在所述目录内创建以下文件。

  • providers.tf
  • variables.tf
  • vpc.tf
  • subnets.tf
  • main.tf
  • terraform.tfvars
  • .gitignore
touch providers.tf 
                                                                                                 touch variables.tf  
                                                                                                  touch vpc.tf  
                                                                                                       touch subnets.tf 
                                                                                                     touch main.tf 
                                                                                                      touch terraform.tfvars.tf  
                                                                                           touch .gitignore 

第3步:Providers.tf

根据Terraform.io的说法,提供商是允许Terraform与服务、云提供商和其他API互动的插件。就把它看作是Terraform和其他服务之间的桥梁吧。由于我们要从Docker中提取一个镜像并将其部署到AWS集群中,我们需要确保这两个服务都列为我们的提供者。我们的访问密钥和秘密密钥被作为变量输入,有一个特殊的原因,我们将在后面介绍。

terraform {

  required_providers {

    docker = {

      source  = "kreuzwerker/docker"

      version = "2.15.0"

    }

    aws = {

      source  = "hashicorp/aws"

      version = "~> 3.0"

    }

  }

}


provider "docker" {}


provider "aws" {

  region = var.region

  access_key = var.aws_access_key

  secret_key = var.aws_secret_key

}

第4步 : 让我们来理解Variables.tf文件

变量是一种可以被分配或传递的值。这个文件包含了关于我们的区域、CIDR块以及访问和密匙的信息。因为variables.tf将被存储在我们的repo中,并将被其他人访问,我们的访问和秘密的值将不会被分配到这个文件中。这些值将被保存在terraform.tfvars中。

variable "region" {

  description = "The region where environment is going to be deployed"

  type        = string

  default     = "us-east-1"

}

variable "aws_access_key" {

  type      = string

  sensitive = true

}


variable "aws_secret_key" {

  type      = string

  sensitive = true

}

# VPC variables


variable "vpc_cidr" {

  description = "CIDR range for VPC"

  type        = string

  default     = "10.0.0.0/16"

}
第五步:vpc.tf和subnets.tf文件

当使用ECS部署一个容器时,强烈建议在vpc.tf文件中进行部署。

vpc.tf文件

resource "aws_vpc" "ecs_vpc" {

  cidr_block = var.vpc_cidr


  tags = {

    Name = "my_vpc"

  }

}

subnets.tf文件

resource "aws_subnet" "private_subnet_1" {

  vpc_id            = aws_vpc.ecs_vpc.id

  cidr_block        = "10.0.2.0/24"

  availability_zone = "us-east-1a"


  tags = {

    Name = "my_subnet_1"

  }

}



resource "aws_subnet" "private_subnet_2" {

  vpc_id            = aws_vpc.ecs_vpc.id

  cidr_block        = "10.0.3.0/24"

  availability_zone = "us-east-1a"


  tags = {

    Name = "my_subnet_2"

  }

}

第6步:让我们了解main.tf

要创建你的main.tf文件,请点击以下链接,并将其作为参考。

resource "aws_ecs_cluster" "cluster" {

  name = "my_ecs_cluster"


  capacity_providers = ["FARGATE_SPOT", "FARGATE"]


  default_capacity_provider_strategy {

    capacity_provider = "FARGATE_SPOT"

  }

  setting {

    name  = "containerInsights"

    value = "disabled"

  }

}


module "ecs-fargate" {

  source  = "umotif-public/ecs-fargate/aws"

  version = "~> 6.1.0"


  name_prefix        = "ecs-fargate-example"

  vpc_id             = aws_vpc.ecs_vpc.id

  private_subnet_ids = [aws_subnet.private_subnet_1.id, 

aws_subnet.private_subnet_2.id]


  cluster_id = aws_ecs_cluster.cluster.id


  task_container_image   = "centos"

  task_definition_cpu    = 256

  task_definition_memory = 512


  task_container_port             = 80

  task_container_assign_public_ip = true


  load_balanced = false


  target_groups = [

    {

      target_group_name = "tg-fargate-example"

      container_port    = 80

    }

  ]


  health_check = {

    port = "traffic-port"

    path = "/"

  }


  tags = {

    Environment = "test"

    Project     = "Test"

  }

}

第七步:terraform.tfvars和.gitignore

.gitignore是一个文件文本,它告诉Git在将项目提交到Github时要忽略哪些文件或目录。我们的terraform.tfvars文件将是被忽略的文件,因为它包含我们的秘密和访问密钥。

# Local .terraform directories

**/.terraform/*

**/.terraform.*


# .tfstate files

*.tfstate

*.tfstate.*


# Crash log files

crash.log


# Exclude all .tfvars files, which are likely to contain sentitive data, such 
as

# password, private keys, and other secrets. These should not be part of
 
version 

# control as they are data points which are potentially sensitive and subject 

# to change depending on the environment.

#

*.tfvars

# Ignore override files as they are usually used to override resources
 
locally and so

# are not checked in

override.tf

override.tf.json

*_override.tf

*_override.tf.json


# Include override files you do wish to add to version control using negated

 pattern

#

# !example_override.tf

# Include tfplan files to ignore the plan output of command: terraform plan -

out=tfplan

# example: *tfplan*


# Ignore CLI configuration files

.terraformrc

terraform.rc

第8步:命令

一旦我们所有的文件都创建完毕,请从终端运行以下命令。

Terraform init  - In order to initialise our working directory containing our
 
terraform code

Terraform plan -  It is used to preview our infrastructure prior to executing

 our terraform code.

Terraform apply -  It is used to apply all the changes specified in the plan

 into motion.

 

第9步:在控制台中仔细检查

现在让我们前往管理控制台,以确保我们所有的资源都已创建。在搜索栏中,输入ECS,一旦ECS仪表板显示出来,点击集群来检查你的集群是否被创建。

搜索集群为 。

点击你创建的集群,在我的例子中,我将点击 my_ecs_cluster,它将显示为 。

第10步:销毁

一旦你确认资源被成功创建,为了避免不必要的费用,确保所有资源被销毁。这可以通过在终端输入Terraform destroy命令来实现。

Terraform destroy 

结论

如果你已经走到了这一步,并按照上面的步骤,你已经成功地知道如何使用Terraform将Docker容器部署到AWS ECS集群中。谢谢您的关注。

谢谢你

学习愉快!!