Terraformというインフラをコード化して自動化出来るツールを使ってみました。
AWSを使ってEC2インスタンスの自動起動を行います。
今回はセキュリティグループなどを新たに作成することはなく、既存のものを使います。
Macでのやり方です。
IAMを作成
Terraform用にIAMを作成します。
IAMのコンソールから ユーザーの追加 をクリック
ユーザー名を適当に入れます
その後プログラムによるアクセスにチェックを入れます。
AWSマネジメントコンソールへのアクセスにはチェックをいれません。
このユーザーではコンソールにアクセスしないからです。
今回はAdminstratorAccess
をアタッチします。
必要に応じて、必要なアクセス権限にしてください。
その後アクセスキー
とシークレットキー
が出力されるので、メモしておきます。
AWS cliをインストール
IAMの認証情報をTerraformのファイルに書くのはGitHubにpushしたときなどは危険なので、configure
に書くためにaws cliをインストールします
macの方はこちらを見ながら入れてください
macOS での AWS CLI バージョン 2 のインストール
profile作成
aws configure
を使って設定します。
test-hacknote
は好きな名前でOKです。この名前は後ほど使います。
アクセスキーとシークレットキーは先程メモしたものを入力します。
$ aws configure --profile test-hacknote AWS Access Key ID [None]: XXXXXXXXXXXXX AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Default region name [None]: ap-northeast-1 Default output format [None]: json
tfenv
今回はtfenv
というものを使います。
homebrewを使ってTerraformをインストールしても良いのですが、頻繁に発生するバージョンアップを回避するために、tfenvを利用します。
他にもDockernized Terraform
を使う方法もあります。
tfenvインストール
インストールしていきます
$ brew install tfenv $ tfenv --version #インストールできたかどうか確認
バージョンが表示されれば、okです。
tfenvの使いかた
list-remote
コマンドでインストール出来るバージョンの一覧を取得出来ます。
$ tfenv list-temote 0.13.0-beta3 0.13.0-beta2 0.13.0-beta1 0.12.29 0.12.28 ~省略~
指定バージョンのインストール
$ tfenv install 0.13.0-rc1
切り替えられることを体験するために、もう1バージョンインストールしておきます。
$ rfenv install 0.12.29
このあとにtfenv list
コマンドでインストール済みのものを見ることが出来ます。
しかしエラーがでました。エラー文に習ってuse
コマンドを使って解決します。
$ tfenv list cat: /usr/local/Cellar/tfenv/2.0.0/version: No such file or directory Version could not be resolved (set by /usr/local/Cellar/tfenv/2.0.0/version or tfenv use <version>) tfenv-version-name failed $ tfenv use 0.13.0-rc1 Switching default version to v0.13.0-rc1 Switching completed $ tfenv list * 0.13.0-rc1 (set by /usr/local/Cellar/tfenv/2.0.0/version) 0.12.29
バージョンの切り替え
インストールしてあるものはuse
コマンドをを使ってバージョンを切り替えられます。
$ tfenv use 0.12.29 Switching default version to v0.12.29 Switching completed $ tfenv list 0.13.0-rc1 * 0.12.29 (set by /usr/local/Cellar/tfenv/2.0.0/version)
.terraform-version
.terraform-version
というファイルに指定のバージョンを書いておけば、一発でチームメンバーがコマンドを実行するだけで、バージョンを統一出来る
$ echo 0.12.29 > .terraform-version $ tfenv install
これで0.12.29がインストールされる。
terraform実行
適当にディレクトリを作ります
その中にmain.tf
というファイルを作成します。
$ mkdir terraform-test $ cd terraform-test $ touch main.tf
中身は以下のようにします。
コードの解説です
上記を入力すると、以下のようなものが作成されます。
種類 | 作成されるもの |
---|---|
AMI | AmazonLinux2 |
インスタンスタイプ | t2.micro |
セキュリティグループ | IDに対応したもの |
sshキー名 | キー名に対応したもの |
アベイラビリティゾーン | ap-northeast-1a |
Name | test-Terraform |
ここを適宣書き換えることで、環境に応じて書き換える事ができます。
他にも設定出来る項目があるので、必要に応じて追記してください。
公式ドキュメントをみると良いかと思います。
Resource: aws_instance
ファイルが作成出来たら、実行していきます。
$ terraform init #初回のみ $ terraform plan $ terraform apply
はじめに、init
で初期化します
plan
は確認用のコマンドです。
ファイルを書き換えた場合に、既存リソースをそのまま変更する場合と、リソースを作り直す場合があります。
そのため意図した動作になるのかどうかを確かめるためにも、plan
を実行したほうが良いです。
apply
で実行します。
いちよここでも変更点が確認できます。
その後yes
と入力することで、実行します。
EC2コンソールから確認すると、立ち上がっています!
セキュリティグループやキーペア名も任意のものになっていますね
環境を壊すときはdestroy
コマンドを使います
$ terraform destroy
おわりに
このように設定ファイルを書くことで、EC2を操作することが出来ます。
AWS CLIとは違い、.tf
ファイル内に、シェルスクリプトを書くことが出来るので、自動でApacheをインストールして、PHPもインストールして…と出来るので、サクッと環境を建てたい時なんかにはとても便利だと思います。
またコードで管理するので、gitを使えばどのようにシステムを変更したかなども履歴として追うことができますね。
その場合はアクセスキーの流出などには十分注意する必要があります。
ファイルに直接アクセスキーなどを書いてあるチュートリアルもありますが、オススメ出来ません。
git-secrets
などを利用すればコミットでエラーを出すことも出来ますが、万が一を考えると、profile名を書いて適用したほうが安全と言えます。