让我们在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的人提供帮助。

在下面的文章中,我们进一步公开了在每个云环境下创建虚拟机的源代码。

如果可以的话,请参考一下。

 

广告
将在 10 秒后关闭
bannerAds