【AWS】Windows環境でTerraformをインストールしEC2を起動するまでの手順を検証してみた

AWS code

この記事では、Windows環境でTerraformをインストールしAWS環境でEC2を起動するまでの手順を検証したメモを記載します。

この記事で分かる事

  • Windows環境でTerraformをインストールする方法
  • Windows環境でTerraformを快適に動作させるための環境設定方法
  • AWS破産しないための設定手順
  • TerraformからAWS環境にEC2を構築する(インフラをコードで管理する)ための基礎手順

注意点

  • 作業は自己責任でお願いいたします。本手順をお試しされる場合は開発環境で実施されることをおすすめします。
  • 本作業はAWSの無料枠内で実施可能な認識ですが、EC2を構築したままにすると料金が発生する場合がありますので、自己責任でご注意ください。
  • 本作業手順で作成したアカウントのアクセスキー、シークレットキーをGitなどに公開したままにすると、悪意の第三者によってアカウントが不正利用され、多額の請求がかかる場合があります。
  • アクセスキーとシークレットキーの取り扱いには十分ご注意ください。

Windows環境でTerraformをインストールする方法

概要

概要は以下の通りです。「開発環境構築」はWindows環境でTerraformを快適に動かすための手順となります。また「EC2の起動→削除まで」では、AWSをTerraformを通してコード管理で開発するためのざっくりとした手順を検証します。

  • その1 開発環境構築
  • その2 EC2の起動→削除まで

また、Macも基本的には同じ流れで環境構築が可能ですが、Macの場合はZshがデフォルトで利用可能ですので、Windows環境のようにGitBashをインストールする必要がないため、Windowsと比較して開発環境構築の手間は少なくなります。

なお、AWSマネジメントコンソールから手動でEC2を立ち上げるまでの手順を確認したいかたはこちらの記事をご参考にしてみてください。
>> 【AWS】EC2インスタンス開始方法/EC2の立て方/構築方法

その1 開発環境構築

環境構築の作業ステップは以下の通りです。

  1. AWS CLIのインストール
  2. AWS CLIの初期化
  3. GitBashのインストール
  4. Terraformインストール
  5. Git-secretのインストール

注意点

・GitBash(ギットバッシュ)はWindows環境のみインストールが必要です。MacではデフォルトでZsh(ゼットシェル)が利用可能ですので、インストール不要です。
・Git-SecretはAWS破産を防ぐために使います。詳しくは後述します。


検証環境と前提知識

  • 使用マシン:Windows 10 pro(core i5 メモリ8G)/特にハイスペックなマシンでなくてもOK
  • 事前にAWSを利用可能にしておく
  • VSCodeなどの開発用エディタをインストールしておく。AtomでもOK
  • AWSについての基礎的な理解(EC2を立てて、Apacheを起動して、インターネット経由で「Hello World!」が確認出来ればOK)
  • Linuxコマンドについての基礎的な理解(ls、cat、PATHの概念とか)
  • Windowsでコマンドプロンプト・PowerShellが操作可能(cd、pwd、lsとか)

AWS CLIのインストール

ダウンロードとインストール

ブラウザを起動し、AWS CLIをダウンロードします。
>> 【公式】AWS CLIのダウンロード先

手順
> 画面左側「AWS CLIのインストール」をクリックする
> 「AWS CLI バージョン 2」を選択する
> インストーラをダウンロードする
> ダウンロードしたインストーラーを起動する

動作確認

手順
・Windowsツールバー > 虫眼鏡アイコン > 「cmd」と入力
・以下のコマンドを入力する
aws --version
※コマンドの結果にバージョンが表示されていれば、AWS CLIが問題なくインストールされています

2. AWS CLIの初期化

AWS CLIを使ってAWSを操作する時に使う認証情報を生成します。

手順

  • ステップ1 AWSマネジメントコンソールでユーザーを作成
  • ステップ2 コマンドプロンプトで認証情報を初期化(credentialファイルの作成)
  • ステップ3 AWS CLIのインストールを確認する

ステップ1 AWSマネジメントコンソールでユーザーを作成

手順
> rootアカウントまたは、管理者権限を持つアカウントで、AWS マネジメントコンソールに接続する
> IAMのダッシュボードを開く
> 以下の2つのIAMユーザーを作成する

作成する認証情報

AWS CLI用
※権限:すべてのリソースに対するFullAccessを付与
ユーザー名の例:Admin_USER
※既に、管理者権限を持つアカウントが存在する場合は、作成不要
Terraform用
※権限:すべてのリソースに対するFullAccessを付与
ユーザー名の例:terraform

ステップ2 PowerShellで認証情報を初期化(credentialファイルの作成)

つづいて、AWSマネジメントコンソールで作成したユーザーをコマンドで初期化します。この操作でcredential(クリデンシャル)ファイルが生成されます。まず、例にしたがい、defaultユーザーの認証情報を初期化します。

手順
> PowerShellを起動する
> プロンプトから以下を入力
aws configure
> エラーがなくプロンプトがかえることを確認する
> 同様にterraform用ユーザーの初期化
> PowerShellのプロンプトから以下のコマンドを入力
aws configure --profile terraform
> エラーがなくプロンプトがかえることを確認する

ステップ3 AWS CLIのインストールを確認する

Profileが作成されていることを確認します。

認証情報が格納される場所
C:/Users/[USER NAME]/.aws/credentials
> 上記のパスに格納されたcredentialファイルをメモ帳などで開く
> 中身を確認し、以下のような記載となっていればOK

credentialファイルの中身例
[default]
aws_access_key_id = *****
aws_secret_access_key = *****
[terraform]
aws_access_key_id = *****
aws_secret_access_key = *****

※それぞれアクセスキーとシークレットキーが記載されていることが分かる
※実際は「*****」箇所には任意の文字列が記載される
※このプロファイルを切り替えながら操作することで、アカウントを切り替えながらterraformを操作することが可能になる

Gitなどを通してアクセスキーとシークレットの組み合わせが流出することで発生するリスク

・本人のaws環境にadmin権限で好きな操作が可能になる
・悪意の第三者にマイニング用のEC2を構築され、本人宛に数十万~数百万の支払いが来た事例もある
・注意して管理すること

GitBashのインストール(Windowsのみ)

つづいて、GitBashをインストールしていきます。

GitBashとは
Git(分散型のバージョン管理システム)が提供するBash(バッシュ/シェルのひとつ)です。

Windows環境にGitBashをインストールする理由
TerraformをWindowsで動かす場合、GitBashが推奨されているからです。インストールすることで、TerraformがWindows環境で快適に動作します。

手順概要

  • ステップ1 Gitダウンロード
  • ステップ2 Gitインストール
  • ステップ3 初期化

ステップ1 Gitダウンロード

以下のURLより、ダウンロードします。
>> Downloading Git
※任意のバージョンを選択し、ダウンロードします。
※自動判別でインストールスタートする場合があります。

ステップ2 Gitインストール

ダウンロードしたインストーラーを起動し、以下のオプションでインストールします。
※以下のオプション以外はデフォルトのままでOKです。

変更するオプション

エディタ 好きなエディタを選択(今回はVSCODEを選択)
改行コード
(line ending conversions)
Checkout as-is, commit as-is
(現状そのまま)を選択

※改行コードについては、上記設定によりコントールを自分でやる宣言となる
※変な変換処理が入らないためおすすめ


ステップ3 初期化の実施

最後にGitの動作確認を実施します。

手順
> コマンドプロンプトを起動
> 以下のコマンドを打ち込む

git config --global user.email "[自分のEmailアドレス]"
git config --global user.name "[自分の名前]"
git config --global --list

> 結果に登録したEmailアドレスと自分の名前が表示されればOK
結果例
C:>git config --global --list
core.editor="C:\Users\***\AppData\Local\Programs\Microsoft VS Code\bin\code" --wait
user.email=test@test.jp
user.name=test test
secrets.providers=git secrets --aws-provider
:
:
:

Terraformのインストール

以下のコマンドを利用してインストールしていきます。

利用するコマンド
tfenv install
Terraform install
test

ステップ1 GitBashを起動してtfenv installを実施する

まず、GitHubのリポジトリをクローンします。

1-1. GitHub リポジトリクローン
以下のURLを開き、URLをコピーします。
https://github.com/tfutils/tfenv

手順
> 「c/Users/[USER NAME]/」の直下に「.tfenv」を作成します。
> エクスプローラで「c/Users/[USER NAME]」を開き、右クリックで「Git Bash here」をクリックします。
> 以下のコマンドを打ち込みます
git clone https://github.com/tfutils/tfenv.git .tfenv

1-2. .bashre 追加(GitBash)
つづいて、tfenvに対してパスの設定を行います。

手順
> エクスプローラでファイル「c/Users/[USER NAME]/.tfenb/bin/tfenv」が存在することを確認します。
> 「tfenv」をShiftを押しながら右クリックします。
> メニュー→「パスのコピー」をクリックします。
> 「c/Users/[USER NAME]/」の直下に「.bashrc」という空ファイルを作成します。
> 「.bashrc」をメモ帳などで開き、以下の記載をします。
export PATH=$PATH:/c//Users/[USER NAME]/.tfenv/bin
※「$PATH:」以降は前の手順でコピーした「tfenv」のパスを貼り付け、「\(バックスラッシュ)」を「/(スラッシュ)」に置き換えて記載します。
貼り付けたままだとこんな感じ→パスが読み込まれず、エラーになります。
export PATH=$PATH:\c\Users\[USER NAME]\.tfenv\bin

「\(バックスラッシュ)」を「/(スラッシュ)」に置き換えて記載します。
export PATH=$PATH:/c//Users/[USER NAME]/.tfenv/bin

ステップ2 Terraform install

つづいて、GitBashで以下のコマンドを実行し、Terraformをインストールします。

実行するコマンド
tfenv list-remote ←現在インストール可能なバージョンが分かる
tfenv installll  ←最新かつalpha以外をインストールする
tfenv use

※ここでエラーとなった場合は、「tfenv」のパスが読み込まれていない可能性があります。
※GitBashで以下のコマンドを打ち込み、パスが読み込まれているか確認しましょう。
echo $PATH

ステップ3 test

> 以下のコマンドを入力
terraform version
> 以下のようにバージョン情報がでてくればOK
Terraform v1.1.0-beta1
on windows_amd64

Git-secretのインストール

ユーザーの鍵(アクセスキーとシークレットキー)を誤って世間一般に公開されているリポジトリへコミットすると、アクセスキーをクローリング(巡回)している悪意の第三者に見つかって、EC2作成→マイニングされたりすることで、身に覚えのない高額な請求が発生する危険があります。

この手順によって、アクセスキーとシークレットキーの流出(いわばAWS破産のリスク)を防ぐことができます。

Git Hubなどの公開されているリポジトリに誤ったコミットを防いでくれるツール
git-secrets(ギットシークレッツ)

Windows環境でgit-secretsを動かすためのポイント

「Set-ExcutionPolicy」を設定しないとPowerShellで動作しないため、設定する

インストール手順

1 git-secrets install (PowerShellで実施)

事前準備
> 以下、git-secretsのURLに遷移する
>> git-secretsのリポジトリのパス
> 画面中ほどの「CODE」ボタンをクリック
> パスをコピーする(参考 図A)

図A

> つづいてPowerShellを起動する
> 次に任意のフォルダに移動(今回はダウンロードフォルダで実行)
cd C:Users\[USER NAME]\Downloads
> 以下のコマンドを入力し、PowerShellの実行ポリシーを変更する
Set-ExecutionPolicy RemoteSigned
メッセージがでてきたら、「Y」をタイプ

参考
>> 【公式】Set-ExecutionPolicyについて


> つづいて、以下のコマンドを実行してGitのリポジトリを複製する
git clone https://github.com/awslabs/git-secrets.git

2 git-secrets初期化(PowerShellを利用)

> つづいて、「git-secrets」フォルダに移動する
cd .git-secrets
> 「git-secrets」をインストールする
.\install.ps1
> つづいて初期化を実施

git secrets --register-aws --global
git secrets --install $env:userprofile/.git-templates/git-secrets -f
git config --global init.templatedir $env:userprofile/.git-templates/git-secrets

3 動作確認 (GitBashで実施)
最後に動作確認をしていきます。
このステップはGitBashで作業をするので、GitBashを起動します。

をインストールする。

> エクスプローラで「Dowload」フォルダを表示
> 右クリック
> 「GitBash here」をクリック
> つづいて、テスト用のフォルダを作成します
mkdir test
cd test
touch credentials
vi credentials
【credentials ファイルに記載するサンプル内容】
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

>> 【公式】サンプルcredentialファイル
> つづいて以下のコマンドを入力

cd test
ls 「credential」が出来ていることを確認
git init
git add .
git commit -m "test"

commitされずエラーとなればOK


VSCodeプラグインインストール

HashiCorpのプラグインをインストールすることにより、VSCode上でコマンドが補完され、開発効率がアップします。

手順
> VSCodeの画面左側→拡張機能のアイコンをクリック
> 「HashiCorp」と入力し検索
> 「HashiCorp Terraform」を選択してインストール

VSCodeデフォルトターミナルの変更

VSCode上でデフォルトターミナルの設定を「GitBash」にすることで、わざわざGitBashを起動しなくても、VSCodeのターミナル上でGitBashのコマンドが実行できるようになるため、開発効率がアップします。

手順
> VSCodeの設定ファイル(settings.json)に以下の文字列を記載する
"terminal.integrated.shell.windows": "C:/Program Files/Git/bin/bash.exe"
> VSCode→ファイル→設定→ユーザー設定
> 「terminal.integrated.shell.windows」と入力
> 「json」をクリック
> 以下を記載
"terminal.integrated.shell.windows": "C:/Program Files/Git/bin/bash.exe"

設定する際の注意点

"terminal.integrated.shell.windows": "C:/Program Files/Git/bin/bash.exe"
C:/Program Files/Git/bin/bash.exeの部分はご自身の環境に応じてbash.exeがインストールされている場所(パス)を記載すること。

「bash.exe」のパスをコピーする方法

> 「虫眼鏡アイコン」→「bash.exe」と入力
> 検索結果で「ファイルの場所」をクリック
> 「bash.exe」をアクティブにして、「Shift」を押しながら右クリック
> パスをコピー をクリック

その2 EC2の起動→削除まで

その1でWindows環境でTerraformを利用してAWSのインフラ開発をする環境が整いましたので、その2では実際に開発していきます。

概要は以下の通りです。

  • Terraformを利用してAWSのインフラ開発をする際の流れを確認
  • tfstateについて確認
  • EC2の変更
  • EC2の削除

Terraformを利用してAWSのインフラ開発をする際の流れを確認

流れは以下の通りです。

  • ソースコードの作成
  • Terraformのコマンド実行
  • EC2の確認

ソースコードの作成

まず、ソースコードを書く前に事前準備として、プロジェクト用のフォルダを作成し、開発したコードやキーペアなどを格納していきます。

アクセス権の問題などで、エラーとならないように今回は[USER NAME]配下のドキュメントフォルダにプロジェクト用のフォルダ「terraform」を作成します。

手順
> 以下にプロジェクト用のフォルダを作成
"C:\Users\[USER NAME]\Documents\terraform"
> VSCode→フォルダを開く→「terraform(上記で作成)」をクリック
> フォルダ「terraform」の直下にソースコードを書くためのファイルとして「main.tf」を作成する
> 以下サンプルを参考にソースコードを書く

サンプル

provider "aws" {
profile = "terraform"
region = "ap-northeast-1"
}

resource "aws_instance" "hello-world" {
ami = "ami-*****************"
instance_type = "t2.micro"

tags = {
Name = "TEST-EC2"
}
}

サンプルコードの注意点

amiのIDはAWSマネジメントコンソールで確認します。

手順
> AWSマネジメントコンソール→EC2→「起動」をクリック
> マシンイメージの画面
> ここでイメージのIDをコピーする

EC2の起動

手順
> AWSマネジメントコンソールでEC2が起動されていないことを確認
> VSCodeのターミナル(GitBash)で以下のコマンドを打ちこむ
terraform init (初期化処理)
terraform apply

>「yes」と入力
> AWSマネジメントコンソールでEC2が起動されていることを確認

以上で、EC2の起動が確認できました。

tfstateの確認

tfstateとは?

以下の通り。

  • ローカルに保存される、Terraformのログ情報
  • Terraformを使って構築されたクラウドの状態が記録される

以下の手順でtfstateの記載内容を確認していきます。

tfstateの中身確認手順
> VSCodeでプロジェクト用のフォルダを作成(terraform)のフォルダを開く
> フォルダ「terraform」の直下にterraform.tfstateが存在することを確認
> tfstateに記載されているamiのIDとAWSマネジメントコンソールで確認したamiのIDが一致することを確認

以上で確認完了となります。


EC2の削除

最後にEC2を削除していきます。作成したクラウドの環境を削除可能です。

手順
> GitBashで以下のコマンドを実施
terraform destroy
> AWSマネジメントコンソールで削除されたことを確認

以上で検証が完了となります。
お疲れさまでした。