Terraformとは?
Terraformは、クラウド上のインフラストラクチャをコードで定義するためのツール。
どのような機能があるのか?
1. プロバイダーの定義
AWS、Microsoft Azure、Google Cloud Platformなど、Terraformが対応するクラウドプロバイダーを指定出来る。
2. リソースの定義
EC2インスタンス、S3バケット、VPCなど、クラウドプロバイダーが提供するリソースをコードで定義出来る。
3. モジュールの使用
共通の機能を持つリソースを再利用可能なモジュールとして定義し、コードの重複を減らす事が出来る。
4. ステート管理
Terraformが管理するリソースの状態をファイルに保存し、次回のデプロイ時に状態を維持出来る。
5. デプロイ
Terraformが定義したリソースをクラウドプロバイダーにデプロイし、インフラストラクチャを構築。
コードによるインフラストラクチャの管理により、バージョン管理や変更履歴の管理が容易になる。
AWSを対象としたTerraformの環境構築手順
(Windows PC向け)
1. AWS CLIのインストール
Terraformを使用するためには、AWS CLIがインストールされている必要があります。
AWS CLIのインストール方法については、
AWS公式サイト(https://aws.amazon.com/cli/)を参照してください。
2. AWSアクセスキーの作成
AWSにログインし、IAMからアクセスキーを作成します。アクセスキーは、後でTerraformでAWSリソースにアクセスする際に使用します。
3. Terraformのダウンロード
Terraformの公式サイト(https://www.terraform.io/downloads.html)から、
Windows用のTerraformバイナリをダウンロードします。
4. バイナリのインストール
ダウンロードしたTerraformバイナリを展開し、インストール先となるディレクトリに移動します。例えば、C:\terraformというディレクトリを作成して、その中にTerraformバイナリを配置します。
5. Terraformの初期化
Terraformのコードが格納されたディレクトリで、terraform initコマンドを実行します。このコマンドにより、TerraformがAWSプロバイダを使用できるようになります。
6. AWSの認証情報の設定例
TerraformがAWSにアクセスするためには、AWSの認証情報を設定する必要があります。
次のようにコマンドプロンプトで環境変数を設定します。
set AWS_ACCESS_KEY_ID=<access-key>
set AWS_SECRET_ACCESS_KEY=<secret-key>
7. Terraformのコードの作成
Terraformで管理するAWSリソースをコードで定義します。
例えば、EC2インスタンスを作成する場合は、.tfファイルにaws_instanceリソースを定義します。
8. Terraformの実行
terraform applyコマンドを実行して、コードに従ってAWSリソースを作成します。
また、terraform planコマンドを実行することで、作成されるAWSリソースの変更点を確認することもできます。
9. Terraformのクリーンアップ
AWSリソースの変更を取り消す場合は、terraform destroyコマンドを実行してリソースを削除します。
手順
1. プロジェクトディレクトリの作成
Terraformを実行するためには、プロジェクトディレクトリを作成する必要があります。
mkdir myproject
cd myproject
2. AWS認証情報の設定
TerraformでAWSにアクセスするAWSアクセスキーとシークレットアクセスキーを設定する。
AWS CLIを使用してAWS認証情報を設定することができます。
$ aws configure AWS Access Key ID [None]:
************ AWS Secret Access Key [None]:
************ Default region name [None]:
ap-northeast-1 Default output format [None]: json
3.コード記載(サンプル)
AWSのAuto ScalingグループをALBに接続する方法
1.ALBリソースを作成します。
resource "aws_lb" "example" {
name = "example-lb"
internal = false
load_balancer_type = "application"
subnets = [aws_subnet.example1.id, aws_subnet.example2.id]
security_groups = [aws_security_group.example.id]
}
2.AMIイメージを指定するLaunch Configurationリソースを作成します。
resource "aws_launch_configuration" "example" {
name = "example-lc"
image_id = "ami-0123456789abcdef" # ここにAMIイメージIDを指定
instance_type = "t2.micro" # インスタンスタイプを指定
security_groups = [aws_security_group.example.id]
key_name = "example-keypair"
associate_public_ip_address = true
user_data = <<-EOF
# インスタンスの初期化スクリプトをここに指定
# 例えば、Apache Web Serverをインストールするシェルスクリプトをここに記述
# EOF
EOF
}
3.Auto Scalingグループリソースを作成します。
例として、最小数1、最大数3のAuto Scalingグループを作成
resource "aws_autoscaling_group" "example" {
name = "example-asg"
launch_configuration = aws_launch_configuration.example.id
min_size = 1
max_size = 3
target_group_arns = [aws_lb_target_group.example.arn]
vpc_zone_identifier = [aws_subnet.example1.id, aws_subnet.example2.id]
health_check_type = "EC2"
}
4.ALBターゲットグループを作成します。
resource "aws_lb_target_group" "example" {
name = "example-tg"
port = 80
protocol = "HTTP"
health_check {
path = "/"
}
}
Auto ScalingグループがALBに接続されます。
作成したコードを実行する
Terraformが管理するリソースの定義
main.tfには、Terraformが管理するリソースを定義するコードが含まれています。
AWSのEC2インスタンスやRDSなどのリソースです。上記サンプルコードが該当します。
Terraform初期化
Terraformプロジェクトを初期化します。
terraform init
terraform initコマンドを実行して、必要なプロバイダやモジュールの初期化を行います。このコマンドを実行することで、main.tfで指定されたプロバイダのバージョンを解決し、必要なモジュールをダウンロードすることができます。
Terraformの構文確認
Terraformコードの構文を確認します。
terraform validate
Terraformの実行計画の確認
Terraformの実行計画を確認します。
terraform plan
terraform planコマンドを実行して、変更内容を確認します。このコマンドを実行することで、Terraformがどのような変更を加えるかを表示することができます。
Terraformの実行
Terraformコードを実行します。
terraform apply
terraform applyコマンドを実行して、実際に変更を加えます。このコマンドを実行することで、main.tfに定義されたリソースが作成、更新、削除されます。
Terraformの削除
Terraformコードで作成されたリソースを削除します。
terraform destroy
terraform destroyコマンドを実行して、作成したリソースを削除することができます。このコマンドを実行することで、main.tfに定義されたリソースが削除されます。
AWSで、Terraformを利用する方法をまとめてみた(2/10)
https://qiita.com/kimuni-i/items/6298ed10adc6ad450488
AWSで、Terraformを利用する方法をまとめてみた(3/10)
https://qiita.com/kimuni-i/items/4d2f90506eb2dd4ee702
AWSで、Terraformを利用する方法をまとめてみた(4/10)
https://qiita.com/kimuni-i/items/b97089a820cc06ed2d9c
AWSで、Terraformを利用する方法をまとめてみた(5/10)
https://qiita.com/kimuni-i/items/11efb60b9a731d212211
AWSで、Terraformを利用する方法をまとめてみた(6/10)
https://qiita.com/kimuni-i/items/943daf8f4e80af12b70e
AWSで、Terraformを利用する方法をまとめてみた(7/10)
https://qiita.com/kimuni-i/items/b2cc6e1e4b5d5c1a92cb
AWSで、Terraformを利用する方法をまとめてみた(8/10)
https://qiita.com/kimuni-i/items/2934372c385ba0561425
AWSで、Terraformを利用する方法をまとめてみた(9/10)
https://qiita.com/kimuni-i/items/edbdc88f0bca9c0354d2
AWSで、Terraformを利用する方法をまとめてみた(10/10)
https://qiita.com/kimuni-i/items/2f900d792c38ad93979c