LoginSignup
0
0

More than 1 year has passed since last update.

はじめてみよう Terraformでインフラ構築

Posted at

 2021-07-08 11.17.29.png

この記事のゴール

この記事では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にアクセスし、グループを作成します。

 2021-07-08 16.37.09.jpg

グループ名をhello_terraform_groupと入力し、アクセス権にAmazonEC2FullAccessAmazonS3FullAccessを追加し、グループを作成をクリックします。

 2021-07-08 16.46.50.jpg

グループが作成されました。
 2021-07-08 16.47.10.jpg

ユーザ作成

次にユーザーを作成します。
 2021-07-08 16.40.19.jpg

ユーザ名にhello_terraform_userと入力し、プログラムによるアクセスにチェックを入れて下さい。
 2021-07-08 16.40.56.jpg

先程の作成したグループ名にチェックをいれて、次のステップをクリックします。
 2021-07-08 16.53.18.jpg

次のステップをクリックします。

 2021-07-08 16.41.31.jpg

ユーザーの作成をクリックします。
 2021-07-08 16.53.43.jpg

ユーザが作成されました。
画面に表示されたアクセスIDとシークレットアクセスキーの値は、次項のAWS CLIの設定で使用するので控えておいて下さい。

 2021-07-08 16.41.53.jpg

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ファイルを作成して下さい。

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リソースが追加されていることが確認できます。

 2021-07-08 10.45.12.jpg

リソースの削除

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のドキュメントを参照下さい。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0