Terraform入門

はじめに

  • 僕は、Terraformを実務で触ったことがありませんでした。また個人的な学習でも何から触っていいかもわからんしまぁひとまずなんかインフラをコードでどうこうできるんしょくらいの認識でいました。

  • 本記事では、書籍に沿って行った学習過程で書籍に記載がない点と「ん?」ってなった点を取り上げたいと思います。

    • 書籍詳細に関しては、省きます。

教材

  • 同僚の方にお勧めいただいたこちらを使用して学習を始めることにしました。

amzn.to

学習方法

  • 基本的には、書籍の内容に沿ってハンズオンしながら理解を進めていけたらなと思ってます。

書籍の中身

  • 前提としてAWSを題材にした書籍になってます。また目次をみていただければ記載あるのでご覧ください。
  • 個人的にいいなって思っているのはサンプルコードが200以上ある点です。

Terraformとは?

  • 下記記事を参考にしてください。

10分で理解するTerraform - Qiita

AWSでTerraformに入門 | Developers.IO

今回ハンズオンで行ったこと

  • 上記に記載しているQiitaの記事と似通っていますが以下を学習しました。

  • AWS

    • AMI
    • IAM
    • EC2
  • Terraform

    • plan
    • apply
    • destroy

学習の流れ

  • 学習の流れは、EC2インスタンをTrraformで作成し、更新を行い、またmust be replacedと表示されるような変更を行い最後にリソースの削除を行いました。
    • コード、書籍の手順等は、割愛します。

学習の際に困った点

1. 書籍の第1章セットアップでは、いきなりIAMの作成から始まってますが指示通り作成します。

日を跨いで学習を行う場合やターミナルを別タブで行う場合があまり想定されていません、環境変数の設定で使用するシークレットアクセスキーに関しては、IAM作成時にコピーして控えておいた方がいいです。 もし忘れてしまったりメモし忘れてしまった場合、下記画像を参考に新たにシークレットアクセスキーの作成を行えば再度取得ができます。(僕はこの方法しかたどり着けなかったので他に方法があるなら知りたいです!!)

f:id:hironekosun:20200718192501p:plain

  • ターミナル上で入手したアクセスIDとシークレットアクセスキーを環境変数に設定します。これで書籍の指示通りにAWSアカウントIDが出力されます。
2. 書籍に記載ないけど.....
「第2章」でAMIの使用が前提になっており肝心のAMIの作成に関してが記載ありません。作成手順がないのでAWS初心者にとっては、なんのことよ!!!!ってなると思います。

*ここでAMIの詳細については、割愛させていただきます。

AWSが公開しているAMIを使用します

参考にした記事:CloudFormationで最新のAmazon Linux 2のAMI IDを取得してEC2を構築する | Developers.IO

  • 参考記事で紹介されているコマンドを使用したいと思います。

    • 今回は、amazon linuxのAMIの使用を想定しています。
  • コマンドを実行するとAMI IDが出力されますのでそれを使用しましょう。

$ aws ssm get-parameter \
        --name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-arm64-gp2 \
        --query "Parameter.Value" \
        --region ap-northeast-1 
 "ami-06ad9296e6cf1e3cf"

これで書籍のハンズオンが進められるようになります。

学習をしてみて

  • 大きな障害もなく終えれてよかったです。入門内容から触ってみて実際に実務で触った内容の理解が進んだり、自分の手でインスタンスが作成されたぜやっほいって気持ちとかを感じレたりしたのでハンズオン形式での学習は大事だなって改めて思いました。

  • 次は、第3章からですが内容を読むと第5章までは一気に進められる内容になっているので頑張ろうと思います。またこれを期にAWSに関しての知識も実践で使えるものに変換できていけたらならと個人的には思っています。

最後に

  • 今回、在籍する会社のCTOにAMIを作成しなくても学習できるとアドバイスをいただきました。当初公開した際の記事では、下記に示すように自分でAMIを作成する手順で書籍の内容を進めてましたがAWSが提供しているAMIを使用する手順へ変更しました。ご興味ある方は、下記手順でオリジナルのAMIを作成することが可能なので、tryしてみてください。

  • また今回記載している内容は、2020/07/21現在で動作確認が取れた内容となっています。

修正前の内容は以下です。

自身で作成する
  • AMIを作成する

    • 手順はすごく簡単です。適当に無料枠対象のEC2インスタンスを作成します。
    • 作成されたEC2インスタンスを元にAMIの作成を行います。
      f:id:hironekosun:20200718194120p:plain
      • 上記画像のように作成ができれば作成したインスタンスを選択して右クリックから イメージ > イメージの作成 を行います。名称がわかりやすいように適宜名称をつけておきましょう。
  • AMIのIDを取得

    • こちらは左にあるメニューからAMIを選択し上記で作成したAMIのIDをコピーします。
早速手順に従いterraform applyを行いインスタンスを作成するぞーって気持ちをいきなり砕きます
Error: Error launching source instance: InvalidAMIID.NotFound: The image id '[ami-id]' does not exist
    status code: 400, request id: request_id(英数字が並んでいる)
  • 何が原因か?
    • 環境変数AWS_DEFAULT_REGION東京リージョンに設定していたからです。
    • おまえ東京なんだからあってんだろって初心者の方なら思うかもしれませんが、AWSってそもそも何も考えず何も気にせずに上記のEC2インスタンスの作成を行うと、リージョンが東京ではありません。
    • なので環境変数の変更が必要です。適宜自分の環境にあった環境変数に変更しましょう。

オハイオに設定するなら下記をターミナル上で実行すればOKです。

$ export AWS_DEFAULT_REGION=us-east-2