Terraformとは
まず、この記事をご覧の方でTerraformをご存知でない方数時間前の私はこちらをご覧ください。
https://www.terraform.io/
まぁ一次記事を理解できるなら私のQiitaなんか見ないですよね、
初学者なりに理解したTerraformを説明させていただきます。
しっかりとした知見は得ていないので、間違っているならコメントしていただけるとありがたいです。
Terraformとは、インフラ構築をコードで行うツールであり
そのことをInfrastructure as Codeと言います。
メリットしては、同一環境が容易に構築できるという点や
gitでの管理が可能であるため以前の環境に戻すことが簡単である、などたくさんあります。
モダンですね、モダン、もダン、ジダン
それでは以下に私がTerraformでAWSを構築していった経緯を記述していきます。
記事を更新していくつもりなので、更新が遅いとか言わないでください。
参考のURL
こちらに参考にさせていただいたURLを記述していきます。
https://dev.classmethod.jp/articles/terraform-getting-started-with-aws/
(2020/06/15)
https://qiita.com/aromanokarisu/items/42e48c2fc6379517c031
(2020/06/16)
環境
私はmacOSのCatalinaを使用しております。
主にターミナルを利用するつもりです。
インストール
$ brew update
$ brew install terraform
Homebrewをインストールしていない場合はインストールしてからお願いします。
set up等は本記事よりも前に投稿されていて、質が良い記事があるのでそちらを参照お願いします。
AWS IAMについての記事も貼っておきます。
AWS IAM
(ぜひ公式ドキュメントから読んで理解できなかった人はアクセスしてください。)
つまづき点 1st IAMユーザーの作成とaws cliのダウンロード
私はルートユーザーでしかAWSにアクセスしたことがなく、
今回は複数ユーザーからのアクセスを仮定しているためIAMユーザーを作成しました。
aws_access_key_id
とaws_secret_access_key
は作成時しか確認できなさそうだったので、
csvを保存することをお忘れなく!!!!!!
また、AWS CLIのダウンロードもしていない人はしましょう。
バージョン管理
今回はgitにてtfファイルのバージョン管理を行うのでgitを引っ張ってきましょう。
gitのレポジトリをクローンしかしたことがない!という人はこちらを参照ください
つまづき点 2nd git管理下でのterraformコマンド
gitのレポジトリの管理下にある場所で
$ terraform init
$ terraform plan
$ terraform apply
行うとプラグインなどが自動で追加された際に、そのプラグインまで
gitの変更点として追加されます。当たり前
なので僕はgit管理下とは異なるdirにcpして上記のコマンドを実行しました。
もっといい方法をご存知でしたら教えてください。
.gitignoreにtfstateなどを無視する記述をすればいいと気づいたので
レポジトリ内に
# Local .terraform directories
**/.terraform/*
# .tfstate files
*.tfstate
*.tfstate.*
# .tfvars files
*.tfvars
コメントアウトは消していただいても大丈夫です。(2020/06/18追記)
destroy
今回でterraformにて簡単ではありますが、AWSのインスタンス作成ができました。
仮で作成したインスタンスで不要であればdestroyしたい、と思いましたが
$ terraform destroy
で破壊されるインスタンスが何であるか確認したい
(消すと成果物が見れなくなるので)と思い確認するコマンドと特定のインスタンスをdestroyする
コマンドを拾ってきましたので下記に記述しておきます。
$ terraform plan -destroy // EC2に紐づいているインスタンスのリソース名を取得
$ terraform destroy -target=[インスタンス名] -target=[インスタンス名] // 複数も可能
region
基本的にproviderはAWSを利用しております。そこでこれはなんだろう?と初学者ながら感じたので記述しておきます。
provider "aws" { //
//バージョンを固定
version = "2.23.0"
region = "ap-northeast-1"
}
はい、regionですね。わからないものは一つ一つ潰していきたいので調べました。
regionとは実際にサーバーがある地域を表すものですので上記のコードにはTokyoのregionが指定されております。
公式ドキュメント
(2020/06/18追記)
ここ違うよ、とか
ここもっとこうしたほうがいいよってことがあればコメントお願いします。