5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Terraform初心者向け

Last updated at Posted at 2019-05-12

Terraform 導入のきっかけ

image.png

私が現在javaのバックエンド開発者として働いているZOYI Corporationにおいても、Channel Talkの機能拡張により、これまで使っていたCloud Formationよりもより手軽に、そして可読性高くインフラのプロビジョニング※ができるサービスの需要が高まっていました。

※プロビジョニングとは、必要に応じてネットワークやコンピューターの設備などのリソースを提供できるよう予測し、準備しておくことです。供給や設備等の意味を表すプロビジョン(provision)という単語がもととなって派生した言葉です。(出典:https://www.idcf.jp/words/provisioning.html)

先日参加したAWS SummitにてTerraformの説明を受けて以降、本格的な導入に向けて勉強会をスタートしました。


Terraformコマンド

Terraformで使用する基本コマンドは以下の三種類です

  • Init → Providerなどのpluginをダウンロードし、ワークスペースを整備
  • Plan → 実行計画・差分の確認(どのリソースが作成/修正/削除されるのか)
  • Apply → プロビジョン実行
    それぞれどのように活用するのか見ていきましょう

大まかな動作方法

image.png

  1. 拡張子が.tfのHCL codeを作成します。(json形式で記述したい場合の拡張子は.tf.json)こちらにプロビジョンの内容を記入します。
  2. 作成したHCL codeに利用したサービスのProvider※をダウンロードします。弊社ではAWSのプロビジョンのコード化を検討しているため、AWSのProviderをダウンロードします。
    3.AWSをProviderが実際にAWSが提供するインフラ構築用のAPIを叩き、プロビジョンを行います。

※Terraformに対応するProviderは以下の通りです。AWS以外にも様々なサービスをプロビジョンすることが可能です。
image.png
(出典:https://www.terraform.io/docs/providers/index.html)

#アーキテクチャー
もう少し詳しくアーキテクチャーを見ていきましょう
image.png

  1. 作成するHCL codeはTerraform Core上で動作します。
  2. HCL codeに従って、該当サービス用の(今回はAWS)PluginsとしてProvidersとProvisionersをダウンロードします。以降、Terraform coreとPluginsはRPCによって通信します。
  3. 共通の通信形式であるClient libraryを介し、Upstream APIsを叩くことでプロビジョニングを実現します。

チュートリアル

TerraformによりAWSのEC2インスタンスとRDSを作成していきましょう。

インストール

brew install terraform 

##バージョン確認

terraform --version

##Provider 設定
###HCL code作成
~/terraform/provider.tf(もしくはprovider.tf.json)というファイル名でコンフィグレーションファイルを作成していきます。
terraform formatもしくはjson形式で作成します。

provider "aws" {
 access_key = "your_aws_iam_access_key"
 secret_key = "your_secret_key"
 region = "ap-northeast-2" 
}

その他定義方法はこちらを参照

###initコマンド実行

$ terraform init

コマンド実行するとこのようにAWS用BのProviderがダウンロードされます。
image.png

##Resource 設定
###Key pairの作成
まずは一般的な方法で、EC2にSSH接続するためのkeyの生成します。
image.png

####HCL code作成
provider.tf

resource "aws_key_pair" "ec2_admin" {
 key_name = "ec2_admin"
 public_key = "${file(~/.ssh/ec2_admin.pub)}"
}

resource に続く "aws_key_pair"はリソースの種類でプレフィックスaws_*のようにあらかじめ決まっています。
"ec2_admin"はローカル変数(リソース名)で自由に命名でき、HCL codeから参照できます。

planコマンド実行

ではTerraformのplanコマンドを以下のように実行してみましょう。

$ terraform plan

以下のように実際にプロビジョンを行うapplyコマンドを実行する前に、AWSの実際の環境との差分を確認できます。
こうすることで慎重にプロビジョニングを実施できます。
image.png
image.png

applyコマンド実行

ではいよいよプロビジョンを実行します。
image.png
image.png

###Security groupの設定
ssh接続時のセキュリティグループを設定していきましょう(ファイヤーウォール/ポート設定)

HCL code作成

image.png

planコマンド実行

$ terraform plan

applyコマンド実行

$ terraform apply

###RDSの生成

HCL code作成

image.png

planコマンド実行

$ terraform plan

applyコマンド実行

$ terraform apply

data はどのように使うのか

これまで登場したproviderやresourceの他にも
dataがあります。
dataはすでに作成したインスタンスを検索し、情報を取得できるコマンドです。

image.png


#参考
https://events.linuxfoundation.org/wp-content/uploads/2017/12/Hashicorp-Terraform-Deep-Dive-with-no-Fear-Victor-Turbinsky-Texuna.pdf
https://www.44bits.io/ko/post/terraform_introduction_infrastrucute_as_code

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?