この記事のゴール
この記事ではTerraformを使って、AWS上にVPCリソースの作成します。
この記事の想定読者
- インフラのコード化(Infrastructure as Code)がどんなものか体験したい方
- Terraformをはじめて触る方
- AWSを触ったことがある方
- コンソールの操作ができる方
Terraformってなに?
HashiCorp社が提供するTerraformは、クラウド上のインフラの構築を自動化します。
Terraformを使うと、いままで画面上で人力でポチポチ行っていたクラウドのインフラ構築作業を、コードで記述することができます。
またTerraformは特定のクラウドベンダーの製品ではないので、複数のクラウドサービスで利用することが可能です。
メリットは?
Terraformを使うことで、以下のようなメリットがあります。
- インフラの構築作業が自動化され、効率的に行うことができる。
- インフラ構築手順書の作成・更新作業が低減される。
- Gitを利用することでインフラ構成のバージョン管理が行えるようになる。
環境
- macOS: v11.2.3
- Python: v3.9.5
- terraform: v1.0.0
- aws-cli: v2.2.16
セットアップ
AWS IAM
ユーザグループ作成
aws iamにアクセスし、グループを作成します。
グループ名をhello_terraform_group
と入力し、アクセス権にAmazonEC2FullAccess
とAmazonS3FullAccess
を追加し、グループを作成
をクリックします。
ユーザ作成
ユーザ名にhello_terraform_user
と入力し、プログラムによるアクセス
にチェックを入れて下さい。
先程の作成したグループ名にチェックをいれて、次のステップ
をクリックします。
次のステップ
をクリックします。
ユーザが作成されました。
画面に表示されたアクセスIDとシークレットアクセスキーの値は、次項のAWS CLIの設定で使用するので控えておいて下さい。
AWS CLI
AWS CLIのインストール
以下のコマンドでAWS CLIをインストールします。
$ pip3 install awscli --upgrade
インストールが完了したら以下のコマンドでバージョンを確認します。
$ aws --version
AWS CLIにアクセスIDとシークレットアクセスキーの設定
下記のコマンドを実行し、先程入手したIAMユーザのアクセスIDとシークレットアクセスキーを追加します。
$ aws configure
AWS Access Key ID [None]: # AWSのアクセスIDを入力
AWS Secret Access Key [None]: # AWSのシークレットアクセスキーを入力
Default region name [None]: ap-northeast-1
Default output format [None]: json
AWS CLIの設定内容を確認する場合は、aws configure list
コマンドを実行して下さい。実行すると設定値が表示されます。
$ aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ******************** shared-credentials-file
secret_key ******************** shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
git-secrets
AWSのキー情報流出防止のため、git-secrest
をインストールします。
$ brew install git-secrets
gitに設定を追加します。
$ git secrets --register-aws --global
$ git secrets --install - /.git-templates/git-secrets
$ git config --global init.templatedir '~/.git-templates/git-secrets'
Terraform
tfenv
tfenvは、terraformのバージョン管理ソフトです。
tfenvを導入することで、複数のバージョンの切り替えが可能になります。
以下のコマンドを実行し、インストールを実行して下さい。
$brew install tfenv
$ tfenv --version
tfenv 2.2.2
Terraform
Terraformのインストールを行います。
list-remote
コマンドを実行し、インストールが可能なTerrafromのバージョンを確認します。
$ tfenv list-remote
1.1.0-alpha20210630
1.1.0-alpha20210616
1.0.2
1.0.1
1.0.0
0.15.5
#...
リストから導入したいバージョンを指定し、インストールを行います。
$ tfenv install 1.0.2
使用するバージョンの切り替えは、use
コマンドを使用します。
$ tfenv use 1.0.2
現在選択しているバージョンは、list
コマンドを使用し確認できます。
$ tfenv list
* 1.0.0 (set by /tfenv/2.2.2/version)
以上でセットアップ作業は完了です。
リソースの作成
tfファイルの作成
適当な作業フォルダを作成し、フォルダ下にmain.tf
ファイルを作成して下さい。
resource "aws_vpc" "hello" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
tags = {
Name = "hello"
}
}
Terraformは、HCL(HashiCorp Configuration Language)という言語で記述します。
上記のコードは、hello
という名前で10.0.0.0/16
のレンジのVPCネットワークを作成します、という内容を示しています。
init
tfファイルが作成できたら、init
コマンドで初期化を行います。
successfully initialized!
と表示されれば初期化は成功です。
$ terraform init
Initializing the backend...
Initializing provider plugins...
# ...
Terraform has been successfully initialized!
plan
続いてplan
コマンドを実行します。
plan
コマンドを実行することで、AWSにリソースを追加する前に内容を確認することが出来ます。
$ terraform plan
Enter a value: ap-northeast-1
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
# ...
出力内容に問題がないか確認して下さい。
apply
apply
コマンドを実行し、リソースの追加を行います。
コマンドを実行すると、AWS上でリソースの追加処理が開始されます。
$ terraform apply
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
# ...
aws_vpc.hello: Creating...
aws_vpc.hello: Creation complete after 3s [id=vpc-***********************]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Apply complete!
と表示されればリソースの追加は成功です。
確認
指定したVPCリソースが追加されているかAWSのサイトで確認してみましょう。
ブラウザでAWSのVPCの項目を開いて下さい。
画面上にhello
という名前のVPCリソースが追加されていることが確認できます。
リソースの削除
destroy
最後に追加したVPCリソースを削除してみます。
リソースを削除する場合は、destroy
コマンドを実行します。
$ terraform destroy
# ...
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
# ...
aws_s3_bucket.test: Destroying... [id=test-dtakkiy]
aws_s3_bucket.test: Destruction complete after 0s
aws_vpc.hello: Destruction complete after 0s
Destroy complete! Resources: 2 destroyed.
Destroy complete!
と表示されれば削除は成功です。
awsのコンソール上でVPCリソースが削除されているか確認してみて下さい。
さいごに
お疲れさまでした。
Terraformをより詳しく知りたい方は、terraformのドキュメントを参照下さい。