15
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Terraform入門

Terraformとは

  • HashicorpによりリリースされているIaC(Inflastructure as Code)ツールの1つ
  • インフラ構築の設定をコードで記述できる
  • AWS、Azure等、複数のプロバイダに対応

インストール

  • 実行環境:AWS Cloud9

作業環境を作成

$ mkdir terraform

作業環境に移動

$ cd terraform

ダウンロードサイトで最新のバージョンを確認
現時点(2018/7/12)での最新バージョンは0.11.7
インストール

$ wget https://releases.hashicorp.com/terraform/0.11.7/terraform_0.11.7_linux_amd64.zip

zipを解凍

$ unzip terraform_0.11.7_linux_amd64.zip

binに移動してパスを通す

$ mv terraform /usr/bin/

バージョンが表示されればOK

$ terraform --version
Terraform v0.11.7

使い方

  • まずはファイル(拡張子:tf)を作成する
  • 以下はAWSのLambdaを設定する場合のサンプルコード抜粋

lambda.tf
※ファイル名は何でもよい

provider "aws" {
    region = "${var.region}"
    access_key="${var.aws_access_key}"
    secret_key="${var.aws_secret_key}"
    version = "~> 1.0"
}

resource "aws_lambda_function" "Test" {
    filename = "test.zip"
    function_name = "TestFunction"
    role = "${var.role_arn}"
    handler = "lambda_function.lambda_handler"
    runtime = "python3.6"
    timeout = 300
    description = "test function to study  terraform"
}

data "archive_file" "lambda_zip" {
    type = "zip"
    source_dir  = "test"
    output_path = "test.zip"
}

variables.tf
※tfファイルで使用する変数はこちらで定義する

variable "aws_access_key" {}
variable "aws_secret_key" {}
variable "region"{}
variable "role_arn"{}

terraform.tfvars
※変数の中身はこちらで記載
※IDに紐づく情報もあるためリポジトリにアップしてはいけない
※今回の使用するpythonファイルにでS3にアクセスを想定しているためrole_arnにS3へのアクセス権を指定(IAMの画面で確認可)

aws_access_key="xxxxxxxxxxxxx"
aws_secret_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
region="ap-northeast-1"
role_arn="arn:aws:iam::xxxxxx:role/S3FullAccess"
  • tfファイル解説

    • 1段目でプロバイダ(今回はAWS)を指定。認証に必要なsecret_key、access_keyはここで定義する。実際の記載は別ファイルで記載することにする。そうすることで、コード本体はバージョン管理し、各々の開発者の認証に関する情報はローカルで管理するといった住み分けができる。認証に必要な属性はプロバイダ毎に異なるので適宜書き換えが必要になる。例えばAzureの場合はsubscription_id という属性名で記述する。
    • 2段目はAWSのLambdaに関する設定が記載されている。通常のブラウザでのセットアップ時に画面で設定する項目を全てコードに落とし込むイメージ。
    • 3段目ではアップロードするファイルの形式を指定。今回はローカルからzipファイルをアップロードする場合を想定。pythonでコードを書いている場合はpyファイルをzipに含めておけばよい。
    • その他、必要に応じて追加するべき設定項目があると思います。属性名の一覧はHashicorpのページに記載されている。
  • ファイル階層

    • 作成したterraformフォルダに上記の3ファイルと、アップロードするzipファイルを置いておく。
  • 実行
    tfファイルのディレクトリに移動し、下記の3コマンドで構築完了

$ terraform init
初期化。初回のみ実行する。
$ terraform plan
設定内容が画面に表示される。同時にスクリプトエラーも確認してくれる。 
このコマンドが通らないと次のコマンドを実行できない。
設定変更のためコードを修正した場合はこのコマンドから再実行すればよい。
$ terraform apply
実際の構築がされる。
  • メリット
    • コードで記述されているためバージョン管理ができる
    • 同じ環境を複数作る場合、同様の作業を何度もする必要がなくなる
    • ヒューマンエラーがなくなる
  • 追記
    • 実際に運用するときは、terrraform init、terraform plan、terraform applyをまとめて記載したシェルスクリプトを用意しておき、そのスクリプトを実行すると楽。
    • 構築した環境を削除する際には、terraform destoryというコマンドを実行する。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
15
Help us understand the problem. What are the problem?