地球形成、等等
首先
我的名字是Naritomo。
在本文中,我想要提及以下关于Terraform的工作。
-
- サンプルソース(仮想マシン作成)を使用したTerraform立ち上げ
- ftstate外出し手順
项目概述
使用Windows 11创建WSL2+Ubuntu+VSCode+Git环境,并使用docker-compose进行启动。
以下是必需的资源总结。
Docker源代码
terraform源码示例
请提供参考链接。
我在Docker环境中尝试启动Terraform。
根据各种资源可以制作的物品。
亚马逊网络服务
-
- ftstate保管バケット(S3/dynamodb)
-
- VPC
-
- サブネット
-
- Internet Gateway
-
- Route table
-
- Security Group
- EC2
青色的
-
- ftstate保管バケット(ストレージコンテナ)
-
- リソースグループ
-
- サブネット
-
- Network_Security_Group
-
- Network_Security_rule
-
- 仮想マシン
ネットワークインターフェース
パブリックIP
仮想マシン
谷歌云平台
-
- ftstate保管バケット(storage_bucket)
-
- VPC
-
- サブネットワーク
-
- google_compute_firewall
- google_compute_instance
OCI是指”云原生计算、云原生应用”的简称。
-
- ftstate保管バケット
-
- VCN
-
- Subnet
-
- Internet gateway
-
- Route Table
-
- Compute
- Oracle Database
用法
获取docker源文件
git clone https://github.com/naritomo08/terraform_docker_public.git terraform
cd terraform
git clone https://github.com/naritomo08/terraform_source_public.git source
cd source
如果在之后进行文件编辑等操作时,Git通知变得很繁琐,
请在创建的文件夹中输入以下命令。
rm -rf .git
获取AWS/Azure访问密钥,获取GCP访问JSON文件
vi .env.example
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
→AWSの場合、操作ユーザに対応した
上記の情報を入れる。
ARM_SUBSCRIPTION_ID=
ARM_CLIENT_ID=
ARM_CLIENT_SECRET=
ARM_TENANT_ID=
→Azureの場合、操作ユーザに対応した
上記の情報を入れる。
gcp管理画面からアクセスjsonキー(gcp.json)を入手して、gcpフォルダ内に入れる。
请参考以下方法以获取环境变量。
让Ubuntu可使用AWS CLI。
我试用了 Terraform 工具,在 Azure 上构建了基础设施。
为了使用Terraform处理Google Cloud,需要在本地终端环境中进行配置。
复制共通变量文件
cp .env.example ../.env
创建OCI API密钥(使用OCI)
使用下面的命令来创建OCI API密钥。
cd source/oci/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)
下面是参考网站:
我使用Terraform在OCI上创建了一台虚拟服务器。
虚拟机密钥设置(使用OCI)
cd source/oci/apikey
ssh-keygen -t rsa -N "" -b 2048 -C "id_server_rsa" -f id_server_rsa
ls
→id_server_rsa,id_server_rsa.pubファイルが存在していることを確認する。
OCI账户设置(使用OCI)
vi source/oci/tfstate/varidate.tf
vi source/oci/default/varidate.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 "tenancy_namespace" {
default = "テナンシのオブジェクト・ストレージ・ネームスペース"
}
variable "compartment_ocid" {
default = "コンパートメントのOCID"
}
variable "ssh_public_server_key" {
default = "../apikey/id_server_rsa.pem"
}
创建OCI桶访问密钥(使用OCI)
请参考以下网站的”S3互換バックエンドの使用”的步骤1至3,并进行设置存储桶访问密钥。
在第三个步骤中,将[default]条目部分改为[oci_access]。
当您在Terraform环境中使用时,需要修改”.env”文件中的AWS配置。
以下是参考网站:
使用对象存储来存储状态文件。
terraform容器正在运行
cd ..
docker-compose up -d
Terraform的使用
在AWS的情况下,您可以在EC2菜单的密钥对中注册一个名为”serverkey”的SSH安全密钥。
在GCP中,需要在Compute Engine的设置-元数据中注册SSH安全密钥。
注册后,请记录下显示出来的用户名。
请同时进行以下元数据的注册。
-
- キー serial-enable
- 値 TRUE
docker-compose exec terraform ash
cd ソースフォルダ/default
terraform init
terraform plan
terraform apply
→yesを入力する。
→管理コンソールで作成されていることを確認する。
在第二次及以后,可以使用以下指令。
terraform plan
terraform apply
→yesを入力する。
→管理コンソールで作成されていることを確認する。
每个虚拟机登录
亚马逊网络服务 (AWS)
记录在执行apply命令后出现的IP地址,
使用用户名: ec2user 以及与安全密钥相匹配的私钥登录SSH。
蔚蓝
在执行apply命令后,记录下出现的IP地址,然后使用”resource.tf”文件中的以下参数进行RDP登录。
admin_username
admin_password
谷歌云平台
记录下应用apply命令后显示的IP地址,
用户:在安全密钥注册时记下的用户名,秘密密钥:使用与安全密钥对应的私钥来进行SSH登录。
中国的OCI
记录下执行 apply 命令后出现的 IP 地址,然后使用用户 “obc” 和相应的秘密鍵: 安全密鍵来进行 SSH 登录。
OracleDB建设(OCI)
事先NW/VM的建立已经完成。
将Oracle文件夹中的两个文件(database.tf、database-var.tf)移动到default文件夹中。
进行var文件编辑。
vi database-var.tf
以下の部分を書き換える
variable "db_system_ssh_public_keys" {
default = "../apikey/id_server_rsa.pubの内容に書き換える。"
}
在默认文件夹中执行terraform命令。
terraform plan
terraform apply
→1Hかかる。
Oracle数据库连接方法
通过SSH登录服务器,安装Oracle Instant Client。
sudo yum install oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm
登录OCI控制台,选择SB设置页面,选择DB连接,并记录DB连接子(可以使用两个中的任意一个)。
登录服务器并输入以下命令以确认能够通过SSH连接并成功建立数据库连接。
sqlplus system/"database-var.tf内のdb_system_db_home_database_admin_password値"@"前の手順で控えたDB接続子"
删除 Terraform 创建的资源
在源文件夹中进行操作
docker-compose exec terraform ash
cd ソースフォルダ/default
terraform destroy
→yesを入力する。
→管理コンソールで削除されていることを確認する。
如果只有一个资源,可以使用以下命令。
terraform destroy -target リソース名
→yesを入力する。
→管理コンソールで削除されていることを確認する。
将tfstate文件移出并进行适当的处理方法
如果是在团队中进行的话,只需要有人在初次执行即可。
如果是由多人共同管理的情况下需要进行的事项。
解除 backend.tf 文件中的 terraform 部分的注释,并输入以下命令。
创建外部存储桶
请将tfstate/main.tf中的<>部分的名称更改为适当的资源名称。
docker-compose exec terraform ash
cd ソースフォルダ/tfstate
terraform init
terraform plan
terraform apply
→yesを入力する。
→管理コンソールでバケットが作成されていることを確認する。
- Azureの場合
在管理控制台上记录存储名称。
同时使用以下命令获取存储密钥信息。
az login
*idが複数ある場合は、管理画面と確認して使用しているidを選択する。
az account set --subscription="id"
az storage account keys list --resource-group tfstate --account-name <ストレージアカウント名> --query '[0].value' -o tsv
→帰ってくる値を控える。
- OCIの場合
输入以下命令。
vi default/backend.tf
以下の行の<>となっている部分を現在使用している値に修正する。
endpoint = "https://<テナンシのオブジェクト・ストレージ・ネームスペース>.compat.objectstorage.<使用しているリージョンの識別子>.oraclecloud.com"
应用外部存储桶
请将每个源文件夹中的terraform.sh文件,
将<>部分的名称与之前的步骤中设置的名称匹配。
docker-compose exec terraform ash
cd ソースフォルダ
terraform init -migrate-state
→apply実施後各コンソールで外部バケット内にtfstateが保管されていることを確認する。
如果要恢复到本地的话
在源文件中,将terraform部分注释掉,然后输入以下命令。
请确认是否有其他人在使用。
docker-compose exec terraform ash
cd ソースフォルダ
terraform init -migrate-state
→apply実施後ローカルででtfstateが更新されていることを確認する。
删除存储桶资源
在删除存储桶之前,请首先删除其中的所有文件,并接着执行来自terraform的模块删除操作。(仅适用于AWS、OCI)
docker-compose exec terraform ash
cd ソースフォルダ/tfstate
terraform destroy
→yesを入力する。
→各コンソールでバケットが削除されていることを確認する。
最后
目前我在娱乐领域只能建立到这个程度,但是我希望能够逐渐将手动完成的部分用Terraform实现。
我希望本文能对使用Terraform的人有所帮助。