terraformの環境構築 for Windows (Docker+Ubuntu+VScode+AWS)

概要

1.terraform実行環境構築(doker未使用)。

2.Docker上でもterraformを実行できるようにする

3.terraformでAWS上にEC2インスタンスを作成まで。

環境

Windows 10 home 1909

Visual Studio Code

Docker Desktop on Windows

Ubuntu

terraform

Windowsアップデート~Ubuntuインストール

※必要に応じて再起動。

Windows機能の有効化または無効化からLinux用Windowsサブシステム、仮想マシンプラットフォームにチェックを入れる。

 

Docker Desktop on WindowsはWindowsのバージョンが2004以上でなければ使えないの手動でバージョンを上げてください。

Windows 10 のダウンロード

WSL2のカーネルを更新する。

以前のバージョンの WSL の手動インストール手順
wsl install コマンドを使用するのではなく、古いバージョンの Windows に WSL を手動でインストールする手順について段階的に説明します。

コマンドプロンプトからWSL2をデフォルト設定します。

$wsl –set-default-version 2

 

マイクロソフトストアからUbuntuをとってきてインストールして初期設定。

ここで念のためコマンドプロンプトに戻りバージョンを確認してみましょう。2の表示があればOKです。

$wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2

Docker Desktop on Windowsインストール

下記サイトからwindows stable版をとってきてインストールします。

すべてデフォルトでOK。

Docker Desktop for Mac and Windows | Docker
Learn why Docker Desktop is the preferred choice for millions of developers building containerized applications. Download for Mac or Windows.

Docker Desktopを起動して、設定画面を開きます。

Expose daemon on tcp://localhost:2375 without TLSにチェックを入れます。

クジラのマーク可愛いですね。

Enable integration with my default WSL distroにチェックを入れて適用します。

 

AWSコンソールからIAMユーザ作成

※AWSアカウントは事前に作っておく

マネジメントコンソールからIAMにいきユーザを作成する。

ユーザ名、プログラムによるアクセス、Administrator権限を設定する。

後でアクセスキー、シークレットアクセスキーは使います。

 

Ubuntu設定

VSCodeからUbuntuを設定していきます。

初期設定

パッケージリストの更新

$sudo apt-get update
インストールパッケージの更新
$sudo apt-get upgrade

AWSCLIインストール~設定

AWSCLIをダウンロードするためのパッケージマネージャ

$sudo apt install python3-pip
AWSCLIインストール
$sudo apt install awscli
インストール確認
$sudo apt install awscli
aws-cli/1.18.69 Python/3.8.2 Linux/4.19.104-microsoft-standard botocore/1.17.38
AWSCLIの設定
ap-northeast-1は東京リージョンです。
$ aws configure
AWS Access Key ID [None]: 自分が設定したもの
AWS Secret Access Key [None]: 自分が設定したもの
Default region name [None]: ap-northeast-1
Default output format [None]: text

terraform実行環境構築(Docker使用しない版)

Linuxbrewのインストール

sh -c “$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)”
パスの追加
$ test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv)
$ test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
terraformバージョン管理マネージャインストール、確認
$brew install tfenv
$ tfenv –version
tfenv 2.0.17.38
インストールできるterraformのバージョン確認。
いっぱい出てくる。
$tfenv list-remote
0.13.0-rc1
0.13.0-beta3
0.13.0-beta2
0.13.0-beta1
0.12.29
0.12.28
2つのバージョンのterraformをインストールしてみる。(バージョン簡単に切り替えれるよって話)
$tfenv install 0.13.0-rc1
$tfenv install 0.13.0-rc1
使うバージョンを指定。以下の様に切り替えることができる。
$ tfenv use 0.13.0-rc1
Switching default version to v0.13.0-rc1
Switching completed
$ tfenv list
* 0.13.0-rc1 (set by /home/linuxbrew/.linuxbrew/Cellar/tfenv/2.0.0/version)
0.12.29
$ 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 /home/linuxbrew/.linuxbrew/Cellar/tfenv/2.0.0/version)

terraform実行環境構築(Docker上)

teraformのDockerイメージを持ってくる。バージョンはお好きなのをどうぞ

$docker pull hashicorp/terraform:0.13.0-rc1
Dockerイメージの確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hashicorp/terraform 0.13.0-rc1 ffea5b3eacf5 2 weeks ago 114MB
DockerコンテナにAWS資格情報を持っていく。
※上のaws configureで設定した物です
色々方法はありますが今回はaws configure getを使用します。
$AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id)
$AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)
$AWS_DEFAULT_REGION=$(aws configure get region)
ローカルの作業ディレクトリを作成
$ cd ~
$ mkdir terraform_study
上記で定義した環境変数を明示的に渡し、ローカルの作業ディレクトリをマウントしてコンテナを作成。
-vで/home/miya/terraform_studyをコンテナのterraform_studyとしてマウントしている。
$ docker run -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY -e AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION -v /home/miya/terraform_study:/terraform_study -it –entrypoint=ash hashicorp/terraform:0.13.0-rc1
これでコンテナの中に入れた。sshでつないだ後のようなイメージかな?
マウント出来ている確認。
# ls
bin home mnt root srv tmp
dev lib opt run sys usr
etc media proc sbin terraform_study var
試しに環境変数が設定されているか確認できたらOK。
echo $AWS_ACCESS_KEY_ID

terafformでEC2構築

ここまで長かったですがあともう少し。

以降はいつ前でマウントしたterraform_study中での作業になります。

VSCodeからフォルダを開くを選択。

フォルダに\\wsl$\Ubuntu\home\miya\の

terraform_studyを選択。

これでVSCodeでファイル編集できるようになりました。

terraform_studyの下にterraformファイルを作成して保存(.tfでterraformファイルになります)

※保存時に権限がないとか言われたら強引にchmod 777 ec2.tfで逃げよう(笑)

ec2.tf

# resource “インスタンスの作成” “名前”
resource “aws_instance” “terraform_study” {
    ami = “ami-04b2d1589ab1d972c”
    instance_type = “t2.micro”
}
terraform初期化
下記のコマンドでディレクトリ構成を読み込んでくれる。
$terraform init
実行計画の確認
以下の様に作成されるものを表示してくれる。
+が新しく作られるもの
$terraform plan/terraform_study # terraform plan
Refreshing Terraform state in-memory prior to plan…
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.————————————————————————An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ createTerraform will perform the following actions:# aws_instance.terraform_study will be created
+ resource “aws_instance” “terraform_study” {
+ ami = “ami-04b2d1589ab1d972c”
+ arn = (known after apply)
+ associate_public_ip_address = (known after apply)
+ availability_zone = (known after apply)
+ cpu_core_count = (known after apply)
+ cpu_threads_per_core = (known after apply)
+ get_password_data = false
+ host_id = (known after apply)
+ id = (known after apply)
+ instance_state = (known after apply)
terraform planで問題なければ実際にAWS上にEC2を作る。実行の再確認がされるのでYESを入力
1addedとなりEC2が作成されたはず!

$terraform applyPlan: 1 to add, 0 to change, 0 to destroy.

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_instance.terraform_study: Creating…
aws_instance.terraform_study: Still creating… [10s elapsed]
aws_instance.terraform_study: Still creating… [20s elapsed]
aws_instance.terraform_study: Creation complete after 23s [id=i-0cd99ec37ef38cec5]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

マネジメントコンソールで確認
無事にEC2が作成されてます。
作ったEC2を消すときはterraform destoroy

$terraform destoroyPlan: 0 to add, 0 to change, 1 to 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_instance.terraform_study: Destroying… [id=i-0cd99ec37ef38cec5]
aws_instance.terraform_study: Still destroying… [id=i-0cd99ec37ef38cec5, 10s elapsed]
aws_instance.terraform_study: Still destroying… [id=i-0cd99ec37ef38cec5, 20s elapsed]
aws_instance.terraform_study: Still destroying… [id=i-0cd99ec37ef38cec5, 30s elapsed]
aws_instance.terraform_study: Still destroying… [id=i-0cd99ec37ef38cec5, 40s elapsed]
aws_instance.terraform_study: Destruction complete after 40s

Destroy complete! Resources: 1 destroyed.

まとめ

terraform、Docker、AWSと実際に触ることができるのでなんとなく各サービスが分かるようになると思います。私もDockerはほとんど理解してませんでしたが、雰囲気つかめました(笑)

Dockerコンテナ実行するときのコマンド長いの何とかしてほしい!!

まだ記事内ではEC2しか作ってませんが他にもたくさんできることがあって実に奥が深い。

久しぶりにブログ書いたら何時間書いているんだ!?アウトプット苦手なのでいい練習になりました。ぜひterraform触ってみてください!

コメント

タイトルとURLをコピーしました