尝试使用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')