让我们在Docker环境中启动Terraform
首先
我叫Naritomo。
我从事基础设施工程师的工作。最近我想分享一下关于我使用的terraform工具来搭建开发环境的方法。
如果你能给我一些建议,我会很高兴的。
项目概要
在使用Windows 11上创建WSL2 + Ubuntu + VSCode + Git环境,并使用Docker Compose进行部署上去。
以下是必要的来源的总结。
Docker源代码
请提供相关的网址。
请提供一个可以参考的链接。
提供个URL作为参考。
尝试在docker环境中启动Elixir。
使用Docker构建Terraform环境,并在AWS上创建VPC。
使用Terraform,尝试构建Azure的基础设施。
我尝试在OCI上使用Terraform建立了一个虚拟服务器。
为什么要选择Docker?
作为一名基础架构工程师,我建议在开发环境构建中使用Docker,因为Docker更易于操作,并且我感受到以下的好处。
-
- OS問わず同じ開発環境での開発が可能
- terraformのバージョン違いによるソース変更などが抑えられる。
事前准备
我正在搭建一个使用Windows 11、WSL2、Ubuntu 22、Docker Compose、vscode和Git的开发环境。
建立开发环境的方法
获取Docker源文件
git clone https://github.com/naritomo08/terraform_docker_public.git terraform
cd terraform
使用以下命令在创建的文件夹中进行文件编辑等操作后,如果觉得git通知很烦人。
rm -rf .git
创建源文件夹
mkdir source
→本ファイル内にmain.tfなどのソースファイルを置く。
创建环境变量文件
vi .env
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
→AWSの場合、操作ユーザに対応した
上記の情報を入れる。
ARM_SUBSCRIPTION_ID=
ARM_CLIENT_ID=
ARM_CLIENT_SECRET=
ARM_TENANT_ID=
→AWSの場合、操作ユーザに対応した
上記の情報を入れる。
gcp管理画面からアクセスjsonキー(gcp.json)を入手して、ソースファイルと同じ場所に置く
请参考以下方法以获取环境变量。
创建OCI API密钥(使用OCI)
使用以下命令创建OCI API密钥。
cd source
mkdir apikey
cd apikey
openssl genrsa -out id_rsa
openssl rsa -in id_rsa -pubout -out id_rsa.pem
ls
→id_rsa,id_rsa.pemファイルが存在していることを確認する。
收集OCID信息(使用OCI)。
请您参考以下网站的“3.OCID信息收集”部分,并收集以下信息。
在创建时,确保预先创建资源放置的隔间。
-
- テナンシのOCID
-
- ユーザーのOCID
-
- フィンガープリント
-
- コンパートメントのOCID
-
- 使用しているリージョンの識別子(例:ap-osaka-1)
- テナンシのオブジェクト・ストレージ・ネームスペース
仅需要一种选项:
参考网站:
我试着在OCI上使用Terraform创建虚拟服务器。
操作開發環境
启动开发环境容器/重新加载设置。
docker-compose up -d
停止开发环境容器。
docker-compose stop
销毁开发环境容器
docker-compose down
通过terraform容器登录
docker-compose exec terraform ash
如何使用Terraform操作
在Terraform容器内执行以下操作。
在创建main.tf的文件夹内执行。
工作区初始化
terraform init
确认执行计划
terraform plan
资源创造
terraform apply
→yesを入力する。
确认结果
terraform state list
→作成されたモジュール一覧
terraform state show <モジュール名>
→作成したモジュールの参照
terraform state pull > tmp.tfstate
→一覧参照
删除已创建的模块
请务必使用该命令删除通过Terraform创建的模块。
terraform destroy
→yesを入力する。
创建一个例子。
在进行环境变量设置之前,我已经完成以下工作。
对于GCP(Google Cloud Platform),我将已下载的JSON文件命名为gcp.json,并放置在与源代码相同的位置。
创建源头
在source文件夹中创建一个包含以下内容的文件。
cd source
vi main.tf
vi varidate.tf
→ OCIの場合のみ
AWS(虚拟私有云/子网创建)
#AWSを今回は使いますという宣言
provider "aws" {
region = "ap-northeast-1"
}
#VPCのCIDERを記載します。
variable "vpc_cidr" {
default = "192.168.0.0/23"
}
#下記のresourceで使うタグ用の変数を定義
variable "app_name" {
default = "awsvpc"
}
#resourceでVPCを作成します。
resource "aws_vpc" "main" {
cidr_block = var.vpc_cidr
tags = {
Name = var.app_name
}
}
#上記のVPCにサブネットを追加します。
resource "aws_subnet" "public_1a" {
# 上記で作成したVPCを参照し、そのVPC内にSubnetを作成します。
vpc_id = "${aws_vpc.main.id}"
# Subnetを作成するAZ
availability_zone = "ap-northeast-1a"
cidr_block = "192.168.0.0/25"
tags = {
Name = "awsvpc-prod"
}
}
创建Azure资源组
provider azurerm {
features {}
}
variable "resource_group_name" {
type = string
default = "AzureResource"
description = ""
}
variable "location" {
type = string
default = "japaneast"
description = ""
}
resource "azurerm_resource_group" "resource_group" {
name = var.resource_group_name
location = var.location
}
谷歌云平台(创建虚拟专用网络)
provider "google" {
credentials = file("gcp.json")
project = "<GCPプロジェクトID>"
region = "asia-northeast1"
zone = "asia-northeast1-a"
}
resource "google_compute_network" "vpc_network" {
name = "gcpvpc"
auto_create_subnetworks = false
routing_mode = "REGIONAL"
mtu = 1460
}
OCI(对象存储桶创建)
验证.tf
variable "tenancy_ocid" {
default = "テナンシのOCID"
}
variable "user_ocid" {
default = "ユーザーのOCID"
}
variable "fingerprint" {
default = "フィンガープリント"
}
variable "private_key_path" {
default = "apikey/id_rsa"
}
variable "region" {
default = "使用しているリージョンの識別子"
}
variable "compartment_ocid" {
default = "コンパートメントのOCID"
}
variable "tenancy_namespace" {
default = "テナンシのオブジェクト・ストレージ・ネームスペース"
}
主要的.tf
provider "oci" {
tenancy_ocid = "${var.tenancy_ocid}"
user_ocid = "${var.user_ocid}"
fingerprint = "${var.fingerprint}"
private_key_path = "${var.private_key_path}"
region = "${var.region}"
}
resource "oci_objectstorage_bucket" "example_bucket" {
namespace = "${var.tenancy_namespace}"
compartment_id = "${var.compartment_ocid}"
name = "tfstate_bucket"
access_type = "NoPublicAccess"
}
创建资源
docker-compose up -d
docker-compose exec terraform ash
terraform init
terraform plan
terraform apply
ctrl+c
→コンソールで作成されていることを確認。
删除资源
通过terraform创建的东西不是手动创建的,而是通过terraform进行删除。
docker-compose exec terraform ash
terraform destroy
ctrl+c
→コンソールで削除されていることを確認。
收拾殘局
docker-compose down
sudo rm -rf terraform
最后
希望这篇文章能对使用Terraform的人提供帮助。
在下面的文章中,我们进一步公开了在每个云环境下创建虚拟机的源代码。
如果可以的话,请参考一下。