尝试使用Terraform

以下给出一个中文版本的指南:

 

这是官方网页。因为是英文,所以一开始没有兴趣去看。我们先用日文页面来了解概要。

 

这是什么呢?

https://blog.dcs.co.jp/aws/20210401-terraformaws.html 看起来很容易理解。

 

记不住git push。

以下是两个链接:

1. GitHub的个人资料设置:https://github.com/settings/profile
2. Qiita上的一篇文章:https://qiita.com/shiro01/items/e886aa1e4beb404f9038

总结

尝试用Teraform将在AWS CloudFormation中所做的事情再做一遍。

在Terraform中,通过名为TFConfig的配置文件来定义基础架构。
当将TFConfig应用到现实世界时,有三个主要步骤。

更新
根據現實世界的定義進行更新(類似於git pull)

計劃
根據現實世界的內容計劃進行哪些變更(類似於提出PR)

應用
根據計劃內容將計劃應用到現實世界中(類似於合併)

    • パラメタを与える

 

    vpc作成、設定

 

    • インスタンス作成

 

    ansible連携できるかな?できるみたい

 

工作目录

mkdir terraform_sample
cd terraform_sample

执行方式

# tfファイルが揃った時点で必要と思われる。追加したときなど。
terraform init  

# rfファイルの検証コマンド
terraform validate

# テスト実行
terraform plan

# 環境作成コマンド
terraform apply -auto-approve

# 環境削除コマンド
terraform destroy -auto-approve

# 設定確認
terraform show

File

文件

写入rf文件中

注释

在Terraform的配置文件中,可以使用/* 〜 */來表示註釋(亦可使用#、//表示單行註釋)。

文件分割

 

听起来只要在同一个目录下就可以了。

命令选项

 

是否应该使用git进行管理

.terraform.lock.hcl文件在git中似乎是必需的。还有gitignore和terraform的用途。在以下链接有更多信息:https://qiita.com/asdasda/items/b8becb672ad572897c25

变量

 

常规模式

提供者.tf

# これは固定で良いと思う
terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}

# 自分の.awsを見ればわかる。東京ならこの設定で固定で良いと思う
provider "aws" {
  profile = "default"
  region = "ap-northeast-1"
}

例子.tf

 

# ここはインスタンスの設定。自分の好みの設定に変える。
# aws_instanceは固定
# 他にも設定可能
resource "aws_instance" "PrometheusEC2" {
  ami = "ami-08a8688fb7eacb171"
  instance_type = "t2.micro"
  tags = {
    "Name" = "prometheus.host"
  }
}

我们在这里进行一次操作确认吧

vpc.tf 的含义在中国人的日常使用中是什么?

# VPC
# https://www.terraform.io/docs/providers/aws/r/vpc.html
resource "aws_vpc" "terraformVpc" {
  cidr_block = "10.0.0.0/16"

  tags = {
    "Name" = "terraformVpc"
  }
}

# Subnet
# https://www.terraform.io/docs/providers/aws/r/subnet.html
resource "aws_subnet" "PublicSubnetA" {
  # 先程作成したVPCを参照し、そのVPC内にSubnetを立てる
  vpc_id = "${aws_vpc.terraformVpc.id}"

  # Subnetを作成するAZ
  availability_zone = "ap-northeast-1a"

  cidr_block        = "10.1.10.0/24"

  tags = {
    "Name" = "PublicSubnetA"
  }
}

resource "aws_subnet" "PublicSubnetCCIDR" {
  vpc_id = "${aws_vpc.terraformVpc.id}"

  availability_zone = "ap-northeast-1c"

  cidr_block        = "10.1.20.0/24"

  tags = {
    "Name" = "PublicSubnetCCIDR"
  }
}

# Private Subnets
resource "aws_subnet" "PrivateSubnetACIDR" {
  vpc_id = "${aws_vpc.terraformVpc.id}"

  availability_zone = "ap-northeast-1a"
  cidr_block        = "10.1.100.0/24"

  tags = {
    "Name" = "PrivateSubnetACIDR"
  }
}

resource "aws_subnet" "PrivateSubnetCCIDR" {
  vpc_id = "${aws_vpc.terraformVpc.id}"

  availability_zone = "ap-northeast-1c"
  cidr_block        = "10.1.200.0/24"

  tags = {
    "Name" = "PrivateSubnetCCIDR"
  }
}


# ここまでで一度動作確認しよう


# Internet Gateway
# https://www.terraform.io/docs/providers/aws/r/internet_gateway.html
resource "aws_internet_gateway" "terraformInternetGateway" {
  vpc_id = "${aws_vpc.terraformVpc.id}"

  tags = {
    "Name" = "terraformInternetGateway"
  }
}

# Route Table
# https://www.terraform.io/docs/providers/aws/r/route_table.html
resource "aws_route_table" "public" {
  vpc_id = "${aws_vpc.terraformVpc.id}"

  tags = {
    "Name" = "terraformPublicRouteTable"
  }
}

# Route routeテーブルとVPCの関連付け
# https://www.terraform.io/docs/providers/aws/r/route.html
resource "aws_route" "public" {
  destination_cidr_block = "0.0.0.0/0"
  route_table_id         = "${aws_route_table.public.id}"
  gateway_id             = "${aws_internet_gateway.main.id}"
}

# Association routeテーブルとサブネットの関連付け
# https://www.terraform.io/docs/providers/aws/r/route_table_association.html
resource "aws_route_table_association" "PublicRouteA" {
  subnet_id      = "${aws_subnet.PublicSubnetA.id}"
  route_table_id = "${aws_route_table.public.id}"
}

resource "aws_route_table_association" "PublicRouteC" {
  subnet_id      = "${aws_subnet.PublicSubnetC.id}"
  route_table_id = "${aws_route_table.public.id}"
}

安全组

 

无法执行yum update。

    • アウトバウンドのルールがない -> コードに追加

 

    • アウトバウンドルール追加するだけでよかった。s3を許可するエンドポイントがなかった。以下は未実施

 

    https://go-journey.club/archives/14364
[ec2-user@ip-10-1-10-100 ~]$ sudo yum install git
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
Could not retrieve mirrorlist https://amazonlinux-2-repos-ap-northeast-1.s3.dualstack.ap-northeast-1.amazonaws.com/2/core/latest/x86_64/mirror.list error was
12: Timeout on https://amazonlinux-2-repos-ap-northeast-1.s3.dualstack.ap-northeast-1.amazonaws.com/2/core/latest/x86_64/mirror.list: (28, 'Failed to connect to amazonlinux-2-repos-ap-northeast-1.s3.dualstack.ap-northeast-1.amazonaws.com port 443 after 2702 ms: Connection timed out')

使用环境变量的模式

bannerAds