ארגונים המאמצים תשתית כקוד (IaC) על AWS לעיתים קרובות מתקשים להבטיח שהתשתית שלהם לא רק מסופקת כראוי אלא גם מתפקדת כפי שהתכוונו לאחר שהועלתה. גם תקלות קונפיגורציה מינוריות יכולות להוביל להפסקות עלות, פגיעויות אבטחה או בעיות ביצועים.
שיטות בדיקה מסורתיות – כמו בדיקה ידנית של משאבים או הסתמכות רק על ניתוח קוד סטטי – אינן מספקות ביטחון מספיק עבור סביבות ייצור. יש צורך דחוף בדרך אוטומטית ואמינה לאמת את שינויים בתשתית AWS לפני שהם נכנסים לפעולה.
פתרון
Terratest מספקת מסגרת בדיקה אוטומטית שכתובה ב-Go, שנועדה במיוחד לבדוק קוד תשתית בסביבות ענן בעולם האמיתי כמו AWS. על ידי פריסה, אימות והרס של משאבים באופן תכנותי, Terratest מגשרת על הפער בין כתיבת IaC (למשל, Terraform) לבין שליחת שינויים בביטחון. הנה איך זה עובד:
להלן מדריך מפורט כיצד להשיג בדיקות תשתית AWS באמצעות Terratest עם Terraform, יחד עם קטעי קוד לדוגמה ב-Go. זרימת העבודה הזו תעזור לך לספק משאבי AWS, להריץ בדיקות נגדן כדי לוודא שהן פועלות כפי שהתכוונת, ולאחר מכן לפרק הכל אוטומטית.
דרישות מוקדמות
התקנת Terraform
הורד והתקן את Terraform מהאתר הרשמי.
התקנת Go
Terratest נכתבת ב-Go, לכן תצטרך להתקין את Go. הורד את Go מהאתר הרשמי.
הגדרת אישורי AWS
ודא שאישורי AWS שלך מוגדרים (למשל, דרך ~/.aws/credentials או משתני סביבה כמו AWS_ACCESS_KEY_ID
וAWS_SECRET_ACCESS_KEY
).
אתחול מודול Go
בתיקיית הפרויקט שלך, הרץ:
go mod init github.com/yourusername/yourproject
go mod tidy
הוסף את Terratest לgo.mod
בתיקיית הפרויקט/מאגר שלך, הרץ:
go get github.com/gruntwork-io/terratest/modules/terraform
go get github.com/stretchr/testify/assert
דוגמת קונפיגורציית Terraform
צור קונפיגורציית Terraform פשוטה שמשיקה מופע EC2 של AWS. שים את הקבצים הבאים בתיקייה בשם aws_ec2_example (או כל שם אחר שתרצה).
שמור את זה כmain.tf להפניה.
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
required_version = ">= 1.3.0"
}
provider "aws" {
region = var.aws_region
}
resource "aws_instance" "example" {
ami = var.ami_id
instance_type = "t2.micro"
tags = {
Name = "Terratest-Example"
}
}
output "instance_id" {
value = aws_instance.example.id
}
לאחר מכן, variables.tf:
variable "aws_region" {
type = string
default = "us-east-1"
}
variable "ami_id" {
type = string
default = "ami-0c55b159cbfafe1f0" # Example Amazon Linux AMI (update as needed)
}
קטע קוד Terratest
צור קובץ בדיקה ב-Go בתיקייה בשם test (או תוכל לקרוא לזה בכל שם, אבל test הוא שם מקובל). לדוגמה, aws_ec2_test.go:
package test
import (
"testing"
"github.com/gruntwork-io/terratest/modules/terraform"
"github.com/stretchr/testify/assert"
)
func TestAwsEC2Instance(t *testing.T) {
// Define Terraform options to point to the Terraform folder
terraformOptions := &terraform.Options{
TerraformDir: "../aws_ec2_example",
// Optional: pass variables if you want to override defaults
Vars: map[string]interface{}{
"aws_region": "us-east-1",
"ami_id": "ami-0c55b159cbfafe1f0",
},
}
// At the end of the test, destroy the resources
defer terraform.Destroy(t, terraformOptions)
// Init and apply the Terraform configuration
terraform.InitAndApply(t, terraformOptions)
// Fetch the output variable
instanceID := terraform.Output(t, terraformOptions, "instance_id")
// Run a simple assertion to ensure the instance ID is not empty
assert.NotEmpty(t, instanceID, "Instance ID should not be empty")
}
מה הבדיקה הזו עושה
- מאתחל ומיישם את קונפיגורציית Terraform ב
../aws_ec2_exampl
e. - מפרסם מופע EC2 עם ה-AMI שצוין באזור us-east-1.
- לוכד את הפלט
instance_id
של Terraform. - מאמת שה-ID של המופע אינו ריק באמצעות ספריית ההצהרות של Testify.
- הורס את המשאבים בסוף הבדיקה כדי למנוע עלויות מתמשכות.
הרצת הבדיקות
- נווט לתיקייה המכילה את קובץ הבדיקה של Go שלך (למשל, תיקיית הבדיקות).
- הרץ את הפקודה הבאה:
go test -v
- שמור על הפלט:
- תראה את Terraform מאתחל ומיישם את התשתית שלך ב-AWS.
- לאחר שההצהרות של הבדיקה מצליחות, Terraform יפרק את המשאבים.
סיכום
על ידי ביצוע הצעדים הללו, תוכל לשלב את Terratest בתהליך העבודה של AWS IaC שלך כדי:
- לספק משאבים ב-AWS באמצעות Terraform.
- לבדוק אותם בצורה תוכנתית עם בדיקות מבוססות Go.
- לאמת שהתשתית שלך מוגדרת כראוי ופועלת כפי שמצופה.
- פרוס אוטומטית כדי להבטיח שאינך סובל מעלויות AWS מיותרות ושאתה שומר על סביבה נקייה להרצת בדיקות חוזרות.