【AWS】【IaC】Terraformでコード化されたEC2インスタンスのdeploy手順を実行
はじめに
友人のエンジニアと話している中で、「インフラならやっぱIaCだよね。terraformなんかでコード化できるといいよね。」といったお話になり、実際にその設定を行い、検証したいと思います。
対象の方
IaC(Infrastrudture as Code:インフラのコード化)に興味がある方
環境
AWS
AmazonLinux2023
macbookpro2019
内容
terraformをローカルのmacbookpro2019へインストールし、ローカルからAWSへIaCを行い、
・EC2の初期設定
をサンプルコードをchatGPT4から取得し、ローカルからAWSの自身の環境へコマンドラインからdeployすることを目標とします。
本題
1 terraformをローカルへインストール
ターミナルを開き、ローカルで
mkdir terraform
cd terraform
などでterraform用ディレクトリを作成、移動し、terraformをインストールします。
下記の
【初心者向け】MacにTerraform環境を導入してみた(inomaso様著) の
を参照し、下記を実行
brew install tfenv
※brewがinstallできていなければ、homebrewのインストールが必要です。過去にinstallしたかどうか、忘れてしまった場合、
brew --version
から確認可能です!
tfenv --version
で、バージョン情報が確認できればインストール完了です。
tfenvはyumやdnfのようなパッケージマネージャーなので、
tfenv install
tfenf list
などで、一度パッケージをinstallした後、listで利用可能なパッケージを確認します。
tfenv use 1.9.8
でterraformの使用するversionを選択し、
terraform --version
でバージョン表示がなされれば、terraformコマンドは今後利用可能です。
2 awscliを利用できるように、ローカルに設定
上記を行うために、ローカルでawsコマンドが利用できる状態にします。
aws ec2 describe-instances
でec2インスタンスのインスタンス情報が表示されるよう設定します。
最初、利用できないと思います。
brew install awscli
で、awscliをインストールし、再度上記を行うと、利用できないと思います。
そのため、下記で~/.awsの中のconfigを設定するコマンドを実行します。
aws configure
すると、アカウントIDを聞かれます。
今わからない場合、Enterを連打し、コマンドを終えます。
アクセスキー
シークレットアクセスキー
が必要となるため、IAMでユーザー作成(権限はなるべく最小限がベスト)し、aws_cliの権限許可用のユーザー作成をします。
・1、2つ目の入力欄 → アクセスキー/シークレットアクセスキー
A IAM > ユーザー > username
でユーザー作成後、
B アクセスキーの作成
でアクセスキー/シークレットアクセスキーを取得。
・3つ目の入力欄 → ap-northeast-1
その後、regionをap-northeast-1(東京の場合)など、取得したregion名を入力する。AWSのURLからもコピペ可。
・4つ目の入力欄 → json
最後にjsonで出力するファイル形式を入力する。デフォルトですでにjsonとなっており、空白+EnterでもOK。(指定しておいた方が確実)
上記の流れでaws configure用の設定を終え、再度
aws ec2 describe-instances
を行うと、情報が表示されるはずです。
3 chatGPT4で生成されたテンプレートファイルを、AWSへterraform経由でdeploy
chatGPT4様から得た下記のコードをテンプレートとして、main.tfを作成します。
vi main.tf
から、iでinsert(挿入)モードにして、下記のコードを貼り付け、
:wqで保存し、quit(やめる)します。
# Terraformのバージョン指定
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
required_version = ">= 1.0.0"
}
# AWSプロバイダーの設定
provider "aws" {
region = "ap-northeast-1" # 東京リージョン
}
# セキュリティグループの作成
resource "aws_security_group" "example_sg" {
name_prefix = "example-sg-"
# SSHの許可(ポート22)
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# 全てのアウトバウンドトラフィックを許可
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
# EC2インスタンスの作成
resource "aws_instance" "example" {
ami = "[ami]" # Amazon Linux 2のAMI ID(東京リージョン用)
instance_type = "t2.micro"
# セキュリティグループをアタッチ
security_groups = [aws_security_group.example_sg.name]
tags = {
Name = "ExampleInstance"
}
}
この保存後、下記を実行すると terraform apply で失敗します。
terraform init
terraform plan
terraform apply
上記のmain.tfファイル内の「ami」が違ったようです。
上記のEC2インスタンス、サイドバー内のAMIカタログ、クイックスタート(45)から、
Amazon Linux 2のAMIをコピーし、上記コードの[ami]を修正します。
その後、
terraform apply
で、下記の Enter a value を yes と入力します。
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
下記の表示で、「Resources: 1 added」。成功です!!
aws_instance.example: Creating...
aws_instance.example: Still creating... [10s elapsed]
aws_instance.example: Creation complete after 13s [id=i-0fd5092a1ca716c23]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
下記のように、EC2インスタンスができていて、
セキュリティグループも設定されています。
デフォルトVPCに紐づいていることも確認できます。
ということで、
terraformをローカルのmacbookpro2019へインストールし、ローカルからAWSへIaCを行い、
・EC2の初期設定
をサンプルコードをchatGPT4から取得し、ローカルからAWSの自身の環境へコマンドラインからdeployすることを目標とします。
が達成できました。
次は、ECSのfargateの初期設定を、上記と同じ手順でコード化、deployできるといいと思います。
その後、CI/CDを手がける段階に少し触れられれば、良い順序かと思っています。
更新順序が若干アトランダムですが、宣言したトピックは少しずつ進めていますので、暖かく見守っていただけますと幸いです。
引き続き、よろしくお願いいたします。
ちなみに、githubへあげておけば、
laprasというエンジニア向けの転職サイトでアピールもできます。以上、junのIaCへの第一歩でした!
Discussion