iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
tags: 鐵人賽 AWS Outposts EC2 Terraform

前情提要

  • 昨天已經完成 EC2 on Outposts 上的部署
  • 今天來嘗試如何使用 Terraform 配置 Outposts 上的資源

概述

為什麼要用 Terraform ?

  • 架構即程式碼 (IaC)
  • 對於維運人員較為友善的部署方式;使一套心法,貫穿百家武學,如同九陰真經。

基本語法

參考文件

參考 Registry

  • 在 HashiCorp 的網站上,找到 Registry 頁面,即可直接參考各家廠商所提供的範本

安裝與設定 terraform

  • 考量透過 terraform 進行維運的人員,應該都具備觀看文件安裝的能力,這邊我暫時先附上連結
  • 而為了要整合 AWS 的緣故,所以要先安裝 aws cli,並且在 IAM console 中,產生 key 和 secret、在運作指令的環境中,將 key 和 secret 填入 ~/.aws/credentials

分析 與 撰寫HCL

  • 先參考 aws 所提供的 run instance HCL
  • 看到大部分的資料,都是起在 region 上的,暫時還找不到起在 outpost 上的範例;所以,要仔細研究文件囉。

撰寫 main.tf

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.27"
    }
  }

  required_version = ">= 0.14.9"
}

provider "aws" {
  profile = "default"  # 這邊要注意,看你的 ~/.aws/credentials 的設置是哪一組,見下方備註
  region  = "ap-northeast-1"
}

resource "aws_instance" "terraform_start_app_server" {
  ami           = "${var.ami_id}" # Ubuntu
  instance_type = "m5.large"
  subnet_id     = "${var.subnet_outposts_1}"

  tags = {
    Name = "${var.instance_name}"
  }
}

output "instance_id" {
  description = "ID of the EC2 instance"
  value       = aws_instance.terraform_start_app_server.id
}

output "instance_public_ip" {
  description = "Public IP address of the EC2 instance"
  value       = aws_instance.terraform_start_app_server.public_ip
}

  • 備註:本機開發環境上可能會有多組金鑰

撰寫 variables.tf

  • 將非關規格的 “變數” 抽取出來,因為我這裡面有些像是 aws_id 之類的資訊,不想公布給全世界知道,所以千萬不要隨便將此檔案加進版控喔

運作!!

  • 初始化環境
terraform init
  • 整理格式與排版
terraform fmt
  • 驗證語法正確性
terraform validate
  • 跑起來
terraform apply
  • 記得要輸入 yes
  • 執行結果
  • 測試完之後記得要刪除資源⋯⋯痾,資源都刪掉了,resource id 就不碼了
    terraform destroy
    

結論

  • 歡樂的時光總是過得特別快,當我發現寫文件比寫架構還花時間的時候,就代表我成功了
  • 稍後再整理整理,把這串內容加到 git repo 裡面吧

上一篇
【Day 18】混合雲 x AWS Outposts EC2 設置
下一篇
【Day 20】ECS on Outposts 的限制
系列文
運用皮毛技術與 AWS 平台、打造雲端蘿蔔服務三十天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言