見出し画像

Infrastructure as Codeを実現するTerraformの使い方

こんにちは。
Airitechシステム開発グループのカイウェイ(Khine Wai)です。

「クラウド構築は初めてだけど、クラウドネイティブの考え方を知ってクラウド構築を実施したい方」向けにTerraformを使ったInfrastructure as Code (IaC)について記事を書いてみようと思います。

IaCを使った方が、マニュアルの繰り返しプロセスを減らし、インフラを効率的にスケールなどすることができます。

1. 本題に入る前に勉強方法について紹介

IaCについて説明する前に、自分がどのように勉強したかをご紹介します。
私はクラウド初心者だったので、Webサイトで調べようとしても、何から見ればよいのかわかりませんでした。

そこで私は、いつくかの学習サービスを比較し、最終的にUdacityという学習サービスを受講することに決めました。
受講したのはAWS Cloud Architectコースになりますが、Udacityを選んだ理由が3つあります。

    1. 私が調べた教育Webサイトの中では最もプラクティスが豊富でした。
        全部で50個ぐらいあります。
    2. ステップbyステップで細かく順序立てて教えてくれるため、とても
        内容がわかりやすく、覚えやすいです。
    3. 3つの主なテーマがありますが、それぞれのテーマの学習後に、
        実際にAWSを使ってテーマに沿った環境を構築し、講師にレビュー
        してもらえます。実際の仕事で利用する際に気を付ける点など
        イメージができるようになります。

具体的なコースの内容ですが、3つのトピックがあります。

    1. Design for Availability, Reliability, and Resiliency
    2. Design for Performance and Scalability
    3. Design for Security

3つのトピック全体を通してプラクティスの数が50件くらいあり、
講師に成果物を3回提出しないといけないので良い勉強になりました。

コースの詳細はこちらで確認できます。
https://www.udacity.com/course/aws-cloud-architect-nanodegree--nd063

では勉強方法の紹介はこれぐらいにして、IaCの詳細を紹介していきます。

2. Infrastructure as Code

2.1. Infrastructure as code(IaC)とは?

Infrastructure as code(IaC)はインフラの構成をコード化して管理することです。コンピューターリソースの作成やスケールアップなどの管理含めコードで記載し、インフラを構築する方法です。
以下は簡単な例になります。このようなコードを書くことで、クラウド上にインフラを構築することができます。

画像1

2.2. なぜ、IaCは必要か

まず、AWSでインフラの構成について考えてみましょう。
クラウド上ではアクセス数に従い、インフラのプロビジョニングをリアルタイムに実施しています。これが1つのシステムだけであれば、問題ありません。
しかし、複数のチームが多くのシステムを同時にプロビジョニングしているとしたらどうでしょうか?管理することが難しくなります。

さらに、インフラを作成したとしても、使用状況やとライフスパンを管理しなければ、昔のサーバールームのように目的のないサーバーが、誰かが気付くまで稼働させてしまいます。未使用のリソースを使い続けると、無駄なコストがどんどんかかってしまいますね。

上記の問題は、「Infrastructure As Code」を利用して簡単に管理できます。
関連するすべてのリソースをコードで管理すると、作成、変更、破棄を一度に行うことができます。
さらに監査や繰り返し作業も自動化できます。
結果、エラーが発生する可能性がある手動作業を減らすことができます。

続けてIaCを実現できるツールを共有したいと思います。

2.3. IaC ツール

IaCを使用するために、さまざまなツールがあります。
例えば、AWSのCloud Formation, Terraform, Ansibleなどです。
今回はその中から、クラウド環境のプロビジョニングに適しており、
複数のCloud プロバイダに使えるTerraformを紹介します。

2.4. Terraformとは?

インフラの構成をGo言語で記述し、自動的に構築できるOSSのツールです。
インフラのバージョン管理もできます。

2.5. EC2インスタンスの作成

AWSでTerraformを使用して、サンプルとして2つのEC2インスタンスを作成してみましょう。

main.tf ファイルを作成して、Cloud Providerの認証情報と作成したいEC2 インスタンスを定義します。
※前提として、Terraformをダウンロードして環境にインストールする必要があります。
https://www.terraform.io/downloads.html

## main.tf
# AWSの認証情報と操作したいリージョンを設定する。
provider "aws" {
 access_key = "<Your Access Key>"
 secret_key = "<Your Secret Key>"
 region = "ap-northeast-1"
}

# 2つのEC2インスタンスを定義する。
resource "aws_instance" "Airitech" {
 count = "2"
 ami = "ami-0cc75a8978fbbc969" ##使いたいAMI名
 instance_type = "t2.micro" ## インスタンスタイブ
 tags = {
    Name = "Airitech Terraform"
 }
}

下記の手順通り、Terraformファイルをプロビジョニングしましょう。

1. Terraformが正しくインストールされているかを確認します。

画像3

2.「terraform init」でディレクトリを初期化します。

画像4

3.「terraform plan」でtsファイルで定義した内容をチェックします。

画像5

4.「terraform apply」でプロビジョニングします。

画像6

5. AWS Consoleでインスタンスが起動していることを確認します。

画像7

2.6. EC2インスタンスの削除

1.  作成したインフラは「terraform destroy」で削除できます。

画像8

2. AWS Consoleでインスタンスが終了していることが確認できます。

画像9

Terraformコードについて、詳しくは以下のリンクをご参考ください。
https://learn.hashicorp.com/collections/terraform/aws-get-started

2.7. Terraformにおけるベストプラクティス

Terraform利用においてチームでの管理とセキュリティ向上を目的とする
2つのベストプラクティスがあるので紹介します。

 1. 個別の管理アカウントを使う
    Adminアカウントではなく、制限されたIAM privilegeで
    Terraform専用のアカウントを作成し、使うことを推奨しています。

   2. terraform.tfstateをリモートバックエンドに管理する
 チームで作業するときは、terraform.tfstateファイルを同期するため、
 バージョン管理をS3のようなサービスで実現します。
 続けて、Tips と Tricksも共有します。

2.8. Tips とTricks

1. organizationによるTerraformコード作成方法のガイドラインを決定します。

    例:- 変数はどのように定義するか / 変数の定義方法
           - 説明とコメントはどこに必要か / 説明とコメントの記述方法
        - コードのインデント
          また、TerraformコードをConsistentするためにTerraform syntaxアドイ            ン を使えます。

2. Deployする前にサンドボックス環境ですべてのコードをテストします。

3. モジュールを使う。モジュールは、Terraformコードの再利用、テスト、標準化をサポートできます。

4. デプロイされたインフラを修正したい場合は、AWSコンソールでインフラ構成を変更しないで、元のTerraformファイルを編集して再度デプロイします。

コンソールからインフラを修正すれば、バグが発生し、tfstateファイルが破損して、その他の問題も発生する可能性があります。

3. Cloud Architect Courseへ参加する方へのアドバイス

最後に勉強したUdacityのCloud Architect Courseについても共有します。

    - このコースでは、AWSサービスについての説明はありません。
      AWSサービスの基本的な知識を持っている人にお勧めします。

    - AWSサービスの料金について説明していない場合もあるので、サービス        を使用する前に価格を確認してから利用してください。
      また利用した後は、必ずサービスを停止してください。

 - コースは3カ月分のカリキュラムがありますが、AWSを少し触ったこと          があれば、2カ月くらいで完了できます。
      そのような方であれば、月額払いで利用することをお勧めします。
      3カ月払いのほうが月額料金は安いのですが、短期間で終わらせられる          なら、その方が安くなります。

    - 分かりにくい内容がある場合は、UdacityのナレッジSectionで たくさん          質問することをお勧めします。

4. まとめ

クラウドネイティブの考え方として、IaCの紹介と、IaCを実現するTerraformの使い方やベストプラクティスを共有させていただきました。
クラウド初心者として試行錯誤した内容を記載しています。ぜひ皆さんの参考になればと思います。

5. Airitechの社員スキルアップサポート

Airitechでは、社員が最高の学習を行えるようスキルアップサポートを行っています。

Airitechの採用情報はこちら
https://www.airitech.co.jp/recruit

ホームページ
https://www.airitech.co.jp/


この記事が気に入ったらサポートをしてみませんか?