AWS_VPC-LAB2 By Terraform
本篇使用Terraform 工具重新部署 AWS_VPC-LAB2內容。如下示意圖
以下步驟與 AWS_VPC-LAB2一樣, 只是換成Terraform 工具操作,延續此篇的內容AWS_VPC-LAB1_By-Terraform,本篇只是增加以下步驟,若要完整使用本篇Terraform HCL code 來建構Lab2 ,建議先使用 AWS_VPC-LAB1_By-Terraform建構好Lab1。
- 建立Private Subnet
- 建立Routing Table
- 將Routing Table與Private Subnet建立關聯
- 建立Security Group
- 建立EC2
- 測試
- 清理Lab所建立的所有元件
開始部署之前
本篇不是Terraform 基礎教學,若不清楚Terraform可以看參考資料。
安裝Terraform 很簡單可以看官網-Install Terraform
使用AWS API之前都需要先到IAM 設定申請一組key及SECRET_ACCESS_KEY
因為只是LAB,為了方便執行通常都會將申請好的key放置在shell script
myauth_key.sh
1
2
3
export AWS_ACCESS_KEY_ID='your key id'
export AWS_SECRET_ACCESS_KEY='your secret key'在執行任何AWS API或Terraform之前先執行 myauth_key.sh
1
source ./myhome-auth_key.sh
完整Terraform Hcl code 在此88gocode/AWS-LAB-Terraform
1
2
3git clone https://github.com/88gocode/AWS-LAB-Terraform.git
cd AWS-LAB-Terraform
git checkout lab2先宣告變數
以下開始是Terraform hcl 語法。此節將VPC , subnet 等需要網段及登入 EC2 需要Key的名稱等參數, 用變數方式載入便於其他資源物件利用。
vars.tf
1 | variable "AWS_REGION" { |
佈建雲端 IaaS 使用Terraform 好處是它提供多樣Provider : 像是 AWS,GCP,Azure,aliyun,DigitalOcean等等
以下是宣告是使用AWS Provider
provider.tf
1 | provider "aws" { |
建立Private Subnet
- 選擇VPC : VPC-LAB1
- Subnet 名稱: AZ1-Private-Subnet
- 選定AZ區域: 選擇日本大阪一個AZ(ap-northeast-3a)
- 分配網段: 10.1.2.0/24
subnet.tf
1 | # Create Private Subnet |
建立Routing Table
route.tf
1 | # Create Private Route Table |
建立Security Group(SG)
建立SG 名為 AZ1_Private_sg1,新增兩筆傳入規則
任何來源 10.1.1.0/24 ,tcp port 22 都允許
任何來源 0.0.0.0/0 ,ICMP-IPv4
sg.tf
1 | resource "aws_security_group" "sg2" { |
AWS的 SG 是屬於StateFul,都是綁定在ENI(Elastic Network Interface: 網卡)上(相當於Linux Iptable角色);NACL 屬於 Stateless,都是綁定上 Subnet
建立EC2
這邊EC2簡單建立, Tag Name為 AZ1-Private-EC2_1 , Subnet: AZ1-Private-Subnet ,security group: AZ1_Private_sg1,ssh-key: my-test,AMI: 透過data source 獲取AMI ID (可以看上篇 AWS_VPC-LAB1_By-Terraform 獲取AMI的部分),其他預設即可
**ec2.tf **
1 | # For Private Subnet |
執行 Terraform
完整目錄架構如下:
1 | . |
第一次執行Terraform,需要初始化先下載對應的Provider (本篇是 AWS),完成後,於所在目錄底下有一個隱藏檔 .terraform
1 | terraform init |
可以查看剛寫的 terraform 語法是否正確
1 | terraform validate |
執行測試計畫,可以看所列的參數
1 | terraform plan |
開始部署
1 | terraform apply -auto-approve |
建立好 EC2, 查看分配Private IP,及EC2 Public IP
測試
透過public ip 使用 ssh 加上 key 的方式連進來
1
2ssh-add my-test.pem
ssh -A [email protected]AZ1-Pub-EC2_1 上 ping AZ1-Private-EC2_1 (Public Subnet 是否可以與 Private Subnet 相連接)
測試 於 AZ1-Pub-EC2_1 上 ssh Login AZ1-Private-EC2_1
於AZ1-Private-EC2_1, 測試是否能聯外
清理
AWS 的價值貴於方便與彈性,使用多少算多少錢,因此這個只是個LAB ,不用時記得將他清理刪除。
使用Terraform 只要下以下指令即可清理完成。
1 | terraform destroy |