برنامه نویسی

Standup Serverless Jenkins on Fargate with Terraform – Part 1: Networking

Summarize this content to 400 words in Persian Lang
ابتدا ایجاد کنید متغیرها.tf. این فایل به ما اجازه می دهد تا متغیرهای مورد نیاز خود را تعریف کنیم – یک بلوک VPC CIDR، زیرشبکه های خصوصی و زیرشبکه های عمومی.

variable “vpc_cidr_block” {
description = “CIDR of vpc”
type = string
}

variable “public_subnets” {
description = “Map of public subnets that should be created”
type = map(object({
cidr_block = string
availability_zone = string
}))
}

variable “private_subnets” {
description = “Map of private subnets that should be created”
type = map(object({
cidr_block = string
availability_zone = string
}))
}

variable “application_name” {
description = “Name of the application”
type = string
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مرحله بعد، تعاریف متغیر را ارائه خواهیم داد terraform.tfvars.

vpc_cidr_block = “10.0.0.0/24”

public_subnets = {
subnet_1 = {
cidr_block = “10.0.0.0/26”
availability_zone = “us-east-1a”
}
subnet_2 = {
cidr_block = “10.0.0.64/26”
availability_zone = “us-east-1b”
}
}

private_subnets = {
subnet_1 = {
cidr_block = “10.0.0.128/26”
availability_zone = “us-east-1a”
}
subnet_2 = {
cidr_block = “10.0.0.192/26”
availability_zone = “us-east-1b”
}
}

application_name = “serverless-jenkins-on-ecs”

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون، ایجاد کنید vpc.tf و ابتدا VPC را ایجاد کنید. یک AWS VPC (Virtual Private Cloud) یک شبکه مجازی است که به طور منطقی از سایر شبکه‌های مجازی در AWS Cloud جدا شده است و کنترل آدرس‌های IP، زیرشبکه‌ها، جدول‌های مسیر و دروازه‌های شبکه را در اختیار شما قرار می‌دهد.

# VPC
resource “aws_vpc” “this” {
cidr_block = var.vpc_cidr_block
enable_dns_hostnames = true
tags = {
Name = var.application_name
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زیرشبکه های عمومی ایجاد کنید چیزی که این زیرشبکه ها را عمومی می کند این است که مسیری به یک دروازه اینترنتی (IGW) خواهند داشت که به منابع درون زیرشبکه اجازه می دهد مستقیماً با اینترنت ارتباط برقرار کنند.

# Public Subnets
resource “aws_subnet” “public” {
for_each = var.public_subnets
vpc_id = aws_vpc.this.id
cidr_block = each.value.cidr_block
availability_zone = each.value.availability_zone
map_public_ip_on_launch = true
tags = {
Name = format(“public-%s-%s”, var.application_name, each.value.availability_zone)
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

IGW را ایجاد کنید و آن را با VPC مرتبط کنید. بعداً در جدول مسیر خود به آن اشاره خواهیم کرد و به زیرشبکه های عمومی خود متصل خواهیم کرد.

# IGW
resource “aws_internet_gateway” “this” {
vpc_id = aws_vpc.this.id
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک جدول مسیر برای زیرشبکه عمومی خود ایجاد کنید و یک مسیر به ترافیک قیفی از طریق IGW اضافه کنید. پس از آن، ارتباط جدول مسیر را ایجاد کنید تا IGW با زیرشبکه های عمومی سیم کشی شود.

# Public Route Table
resource “aws_route_table” “public” {
vpc_id = aws_vpc.this.id
tags = {
Name = “public”
}
}
# Add IGW Route
resource “aws_route” “public” {
route_table_id = aws_route_table.public.id
destination_cidr_block = “0.0.0.0/0”
gateway_id = aws_internet_gateway.this.id
}
# Associate Route Table with Subnet
resource “aws_route_table_association” “public” {
for_each = aws_subnet.public

subnet_id = each.value.id
route_table_id = aws_route_table.public.id
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بعد، زیرشبکه های خصوصی را ایجاد کنید. همانطور که از نام آن پیداست، این زیرشبکه ها از دنیای خارج غیرقابل دسترسی هستند.

# Private Subnets
resource “aws_subnet” “private” {
for_each = var.private_subnets

vpc_id = aws_vpc.this.id

cidr_block = each.value.cidr_block
availability_zone = each.value.availability_zone

tags = {
Name = format(“private-%s-%s”, var.application_name, each.value.availability_zone)
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا بیایید یک IP الاستیک (EIP) و یک دروازه NAT ایجاد کنیم. ما به EIP نیاز داریم، زیرا AWS به عنوان بخشی از ایجاد NAT Gateway به یکی نیاز دارد. NAT Gateway ضروری است زیرا به این ترتیب زیرشبکه های خصوصی می توانند با شبکه ارتباط برقرار کنند. تصور کنید که RHEL EC2 دارید که باید به‌روزرسانی‌های yum را دریافت کنند. شما به یک NAT Gateway نیاز دارید.

# EIP for NAT Gateway
resource “aws_eip” “this” {
for_each = aws_subnet.private
}

# NAT Gateway
resource “aws_nat_gateway” “this” {
for_each = aws_subnet.private

subnet_id = aws_subnet.public[each.key].id
allocation_id = aws_eip.this[each.key].id

tags = {
Name = format(“private-%s-%s”, var.application_name, each.value.availability_zone)
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مرحله بعد، جدول مسیر، مسیر ارتباط NAT Gateway به زیرشبکه های خصوصی و ارتباط جدول مسیر را ایجاد می کنیم.

# Private Route Table
resource “aws_route_table” “private” {
for_each = aws_subnet.private

vpc_id = aws_vpc.this.id

tags = {
Name = format(“private-%s-%s”, var.application_name, each.value.availability_zone)
}
}
# Add Route – Private Subnets to NAT Gateway
resource “aws_route” “private” {
for_each = aws_subnet.private

route_table_id = aws_route_table.private[each.key].id
destination_cidr_block = “0.0.0.0/0”
nat_gateway_id = aws_nat_gateway.this[each.key].id
}
# Associate Private RT with Private Subnets
resource “aws_route_table_association” “private” {
for_each = aws_subnet.private

subnet_id = each.value.id
route_table_id = aws_route_table.private[each.key].id
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما آماده اید. دستورات زیر را اجرا کنید.

# Initialize Terraform
terraform init
# Check and see what will be created
terraform plan
# Let’s do this!
terraform apply

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون به کنسول AWS بروید و VPC را جستجو کنید. به سمت پایین به نقشه منبع VPC بروید. روی subnets next کلیک کنید.همچنین، جدول های مسیر، دروازه های اینترنتی، دروازه های NAT و IP های الاستیک خود را بررسی کنید.

فین

ابتدا ایجاد کنید متغیرها.tf. این فایل به ما اجازه می دهد تا متغیرهای مورد نیاز خود را تعریف کنیم – یک بلوک VPC CIDR، زیرشبکه های خصوصی و زیرشبکه های عمومی.

variable "vpc_cidr_block" {
  description = "CIDR of vpc"
  type        = string
}

variable "public_subnets" {
  description = "Map of public subnets that should be created"
  type = map(object({
    cidr_block        = string
    availability_zone = string
  }))
}

variable "private_subnets" {
  description = "Map of private subnets that should be created"
  type = map(object({
    cidr_block        = string
    availability_zone = string
  }))
}

variable "application_name" {
  description = "Name of the application"
  type        = string
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مرحله بعد، تعاریف متغیر را ارائه خواهیم داد terraform.tfvars.

vpc_cidr_block = "10.0.0.0/24"

public_subnets = {
  subnet_1 = {
    cidr_block        = "10.0.0.0/26"
    availability_zone = "us-east-1a"
  }
  subnet_2 = {
    cidr_block        = "10.0.0.64/26"
    availability_zone = "us-east-1b"
  }
}

private_subnets = {
  subnet_1 = {
    cidr_block        = "10.0.0.128/26"
    availability_zone = "us-east-1a"
  }
  subnet_2 = {
    cidr_block        = "10.0.0.192/26"
    availability_zone = "us-east-1b"
  }
}

application_name = "serverless-jenkins-on-ecs"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون، ایجاد کنید vpc.tf و ابتدا VPC را ایجاد کنید. یک AWS VPC (Virtual Private Cloud) یک شبکه مجازی است که به طور منطقی از سایر شبکه‌های مجازی در AWS Cloud جدا شده است و کنترل آدرس‌های IP، زیرشبکه‌ها، جدول‌های مسیر و دروازه‌های شبکه را در اختیار شما قرار می‌دهد.

# VPC
resource "aws_vpc" "this" {
  cidr_block           = var.vpc_cidr_block
  enable_dns_hostnames = true
  tags = {
    Name = var.application_name
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زیرشبکه های عمومی ایجاد کنید چیزی که این زیرشبکه ها را عمومی می کند این است که مسیری به یک دروازه اینترنتی (IGW) خواهند داشت که به منابع درون زیرشبکه اجازه می دهد مستقیماً با اینترنت ارتباط برقرار کنند.

# Public Subnets
resource "aws_subnet" "public" {
  for_each = var.public_subnets
  vpc_id = aws_vpc.this.id
  cidr_block              = each.value.cidr_block
  availability_zone       = each.value.availability_zone
  map_public_ip_on_launch = true
  tags = {
    Name = format("public-%s-%s", var.application_name, each.value.availability_zone)
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

IGW را ایجاد کنید و آن را با VPC مرتبط کنید. بعداً در جدول مسیر خود به آن اشاره خواهیم کرد و به زیرشبکه های عمومی خود متصل خواهیم کرد.

# IGW 
resource "aws_internet_gateway" "this" {
  vpc_id = aws_vpc.this.id
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک جدول مسیر برای زیرشبکه عمومی خود ایجاد کنید و یک مسیر به ترافیک قیفی از طریق IGW اضافه کنید. پس از آن، ارتباط جدول مسیر را ایجاد کنید تا IGW با زیرشبکه های عمومی سیم کشی شود.

# Public Route Table
resource "aws_route_table" "public" {
  vpc_id = aws_vpc.this.id
  tags = {
    Name = "public"
  }
}
# Add IGW Route 
resource "aws_route" "public" {
  route_table_id         = aws_route_table.public.id
  destination_cidr_block = "0.0.0.0/0"
  gateway_id             = aws_internet_gateway.this.id
}
# Associate Route Table with Subnet 
resource "aws_route_table_association" "public" {
  for_each = aws_subnet.public

  subnet_id      = each.value.id
  route_table_id = aws_route_table.public.id
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بعد، زیرشبکه های خصوصی را ایجاد کنید. همانطور که از نام آن پیداست، این زیرشبکه ها از دنیای خارج غیرقابل دسترسی هستند.

# Private Subnets
resource "aws_subnet" "private" {
  for_each = var.private_subnets

  vpc_id = aws_vpc.this.id

  cidr_block        = each.value.cidr_block
  availability_zone = each.value.availability_zone

  tags = {
    Name = format("private-%s-%s", var.application_name, each.value.availability_zone)
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا بیایید یک IP الاستیک (EIP) و یک دروازه NAT ایجاد کنیم. ما به EIP نیاز داریم، زیرا AWS به عنوان بخشی از ایجاد NAT Gateway به یکی نیاز دارد. NAT Gateway ضروری است زیرا به این ترتیب زیرشبکه های خصوصی می توانند با شبکه ارتباط برقرار کنند. تصور کنید که RHEL EC2 دارید که باید به‌روزرسانی‌های yum را دریافت کنند. شما به یک NAT Gateway نیاز دارید.

# EIP for NAT Gateway
resource "aws_eip" "this" {
  for_each = aws_subnet.private
}

# NAT Gateway 
resource "aws_nat_gateway" "this" {
  for_each = aws_subnet.private

  subnet_id     = aws_subnet.public[each.key].id
  allocation_id = aws_eip.this[each.key].id

  tags = {
    Name = format("private-%s-%s", var.application_name, each.value.availability_zone)
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مرحله بعد، جدول مسیر، مسیر ارتباط NAT Gateway به زیرشبکه های خصوصی و ارتباط جدول مسیر را ایجاد می کنیم.

# Private Route Table 
resource "aws_route_table" "private" {
  for_each = aws_subnet.private

  vpc_id = aws_vpc.this.id

  tags = {
    Name = format("private-%s-%s", var.application_name, each.value.availability_zone)
  }
}
# Add Route - Private Subnets to NAT Gateway
resource "aws_route" "private" {
  for_each = aws_subnet.private

  route_table_id         = aws_route_table.private[each.key].id
  destination_cidr_block = "0.0.0.0/0"
  nat_gateway_id         = aws_nat_gateway.this[each.key].id
}
# Associate Private RT with Private Subnets
resource "aws_route_table_association" "private" {
  for_each = aws_subnet.private

  subnet_id      = each.value.id
  route_table_id = aws_route_table.private[each.key].id
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما آماده اید. دستورات زیر را اجرا کنید.

# Initialize Terraform
terraform init
# Check and see what will be created
terraform plan
# Let's do this!
terraform apply
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون به کنسول AWS بروید و VPC را جستجو کنید.
AWS VPC
به سمت پایین به نقشه منبع VPC بروید.
نقشه منابع VPC
روی subnets next کلیک کنید.
زیرشبکه های AWS
همچنین، جدول های مسیر، دروازه های اینترنتی، دروازه های NAT و IP های الاستیک خود را بررسی کنید.

فین

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا