[Terraform/AWS] 導入編
概念 |インストール方法 | 管理コマンド | 認証情報の設定
◾️はじめに
初めまして、2023年10月に入社した田中と申します。
ネクストビート(以下、NB)ではSREチームに所属しています。
今回の記事では、Terraformでコードを書く前段階として導入編に
あたる内容を記述していきます。
私がNBに入社して初めてTerraformを触っている経緯から
本記事が私と同じような初学者又は未経験でTerraformを触ってみたい方の一助になれたら幸いです。
◾️本記事を読み終わった時のゴール
Terraformを扱うための前段階として、以下3点をざっくり理解,
実行できる状態。
- Linux/Macの何れかの環境にTerraformをインストール出来る事。
(本記事ではWindowsは対象外としています。Windowsユーザーの方すみません、、) - Terraformの主要な管理コマンドをざっくり把握した状態。
- CLI,プログラム経由でAWSアカウントへアクセス出来るよう
認証情報を設定できる事。
◾️目次
- Terraformの概念
- 実際にTerraformをインストールする(Mac/Linux)
- Terraformの主要な管理コマンド
- AWSアカウントへCLI,プログラムによるアクセスを可能にするための
認証情報の設定
◾️本編
1.Terraformの概念
1–1.Terraformとは?
米企業の Hashicorp 社が開発したIaCを実現するためのツールです。
HCL (Hashicorp Configuration Language)という独自の言語を用いて
インフラ環境を構築します。
尚、IaCとはInfrastracture as codeの略で、サーバ等のシステムの基盤に
おける領域をコードで管理,構築する手法の事です。
(Iacの詳細は本記事の趣旨から逸れるため割愛します。)
Terraformを利用する事で手動での管理と比較して
効率化、人為的なミスの削減、属人化の防止等の効果が望めます。
1–2.Terraformの特徴
メリデメ形式でTerraformの特徴を記述します。
<メリット>
・マルチプロバイダのサポート(AWS,Azure,GCP,オンプレミス等)
・可読性が高い。(AWS CloudFormationより比較的読みやすい。)
・バージョン管理が容易。
・コードを用いて管理する事で操作方法の属人化を解消出来る。(Iac全般)
<デメリット>
・経験者が少ない為、エンジニア市場での経験者の採用に苦戦しやすい。
・細かいリソースの操作をサポートしていない。
(例:EC2,RDSでは、作成or 削除しか出来ず停止をサポートしていない。)
2.実際にTerraformをインストールする(Mac/Linux)
2–1.前提
今回は Mac並びにLinux(AmazonLinux2)の環境下でインストールします。
terraformコマンドを直接インストールする方法もありますが、
実際の実務では複数人で開発する事を想定してtfenvをインストールして
terraformを扱います。
2–2.tfenvとは?
Terraformのバージョンの切り替えを容易に行えるツールです。
実務ではチームで開発する事から、各個人が異なるバージョンを使用していると互換性の面で予期しないエラーが発生する可能性が高いです。
バージョンを統一するためにもtfenvでの管理が必要です。
2–3.Terraformのインストール実践
Mac/Linuxの環境に分けてインストール手順を記述しています。
tfenvのインストールでterraformコマンドを扱えるよう設定します。
<MacOSの場合>①HomeBrewのインストール
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
% echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
% eval "$(/opt/homebrew/bin/brew shellenv)"
% brew -v②HomebrewでMacOSへtfenvをインストールする。
% brew install tfenv③バージョンが表示されていればインストール成功。
% tfenv -v④インストール可能なterraformコマンドのバージョン一覧を表示。
% tfenv list-remote⑤list-remoteで表示された内、特定バージョンのterraformコマンドをインストール。
% tfenv install 1.6.1⑥インストールしたバージョンを使用するよう適用。
% tfenv use 1.6.1⑦現在適用しているterraformコマンドのバージョン確認。
% terraform version⑧ローカルにインストールされているterraformコマンドのバージョン確認。
% tfenv list
<LinuxOS(AmazonLinux2)の場合> ※EC2インスタンスにログイン済みの状態が前提。
①パッケージ管理ツールのyumでgitをインストール。
$ sudo yum install git
②gitがインストール出来た事の確認。
$ git -v
③Githubのリポジトリのコードやファイルを複製し、ユーザーのホームディレクトリに.tfenvファイルを作成する。
$ git clone https://github.com/tfutils/tfenv.git ~/.tfenv
④tfenv及びterraformコマンドが使用できるようにシンボリックリンクで/usr/local/binにパスを通す。
$ echo $PATH
$ sudo ln -s ~/.tfenv/bin/* /usr/local/bin
⑤コマンドが使用できるか確認。
$ tfenv -v
⑥インストール可能なterraformコマンドのバージョン一覧を表示。
$ tfenv list-remote
⑦list-remoteで表示された内、特定バージョンのterraformコマンドをインストール。
$ tfenv install 1.6.1
⑧インストールしたバージョンを使用するよう適用。
$ tfenv use 1.6.1
⑨現在適用しているterraformコマンドのバージョン確認。
$ terraform version
⑩ローカルにインストールされているterraformコマンドのバージョン確認。
$ tfenv list
3.Terraformの主要な管理コマンド
今回は使用頻度の高いコマンドを記述します。
他にも使用するコマンドはありますが、追々別の記事で解説したいと
思います。
尚、管理コマンドを実行する際はTerraformのコードが記述されている
ファイル(xx.tf)のカレントディレクトリで行います。
% terraform init
・terraformプロジェクトを初期化します。
Providerを追加,更新,削除した際には逐一実行する必要があります。
具体的な挙動としては、コマンド実行後にカレントディレクトリに.terraformディレクトリが作成されます。
この.terraformディレクトリ以下には TerraformがProviderに対して操作を実行するためにプラグイン等の必要な情報が保持されます。
% terraform plan
・リソースをデプロイ(apply)する前に使用するコマンドです。
印刷機で例えると、用紙を印刷する直前に画面上で実際のイメージを写してくれるようなイメージです。
% terraform apply
・実際にリソースをデプロイ又は変更します。
特に複数人で開発している際は、誤って他の人が作成したリソースに変更を加えないよう細心の注意を払う必要があります。
% terraform destroy
・applyでデプロイしたリソースを削除します。
サービスを停止してしまう可能性があるため、実行する際は細心の注意を払う必要があります。
% terraform fmt
・terraformのコードを記述するファイル(xx.tf)の記述を整形します。
4.CLI,プログラムによるAWSアカウントへのアクセス設定
CLI及びプログラムでAWSアカウント内にアクセスするために
認証情報を取得し、teraformをインストールした環境へ
適用する必要があります。
今回は下記3つのパターンに分けて解説していきます。
尚、AWS CLIが既にインストールされている事を前提とします。
- IAMユーザー経由のアクセス
- IAMロールを付与したEC2インスタンスからのアクセス
- OrganizationsのメンバーアカウントがIAM Identity Centerで
管理されている場合のアクセス
4–1.IAMユーザー経由でのアクセス
①検索:IAM > 「IAM」を押下
②ユーザーの作成 > ユーザー名の入力 > 「次へ」を押下。
※CLIでのアクセス専用ユーザーのため、マネジメントコンソールの
アクセスは有効化しない。
③ポリシーを直接アタッチする > 要件に適した許可ポリシー >
「次へ」を押下。
※画像内では、便宜上AdministratorAccessを付与していますが、
許可ポリシーの内容は要件に応じて選択して下さい。
④入力内容の確認 > 「ユーザーの作成」を押下。
⑤作成したIAMユーザーの「Access Key/Secret Access Key」を作成する。
IAM > IAMユーザーの選択 > 「アクセスキーを作成」を押下。
⑥コマンドラインインターフェイス(CLI)を選択 > 「次へ」を押下。
⑦必要に応じて説明タグ値を入力 > 「アクセスキーを作成」 を押下。
⑧認証情報の取得 > 「完了」を押下。
※Copy or CSVファイルをダウンロードして認証情報を保管する。
⑨ターミナルのコマンド入力がAWSアカウントに認証されるよう設定
% aws configure --profile <IAMユーザー名/例:terraform>
AWS Access Key ID [None]:<IAMユーザーのaccess keyを入力>
AWS Secret Access Key [None]:<IAMユーザーのsecret access keyを入力>
Default region name [None]:<リソースを作成するデフォルトリージョンを入力/例:ap-northeast-1>
Default output format [None]:<コマンドの実行結果の出力形式 /例:json>
<aws configureコマンドの留意事項>
※パラメータは対話形式で入力し、「~/.aws/credentials」,「~/.aws/config」に
自動的に反映されます。
※認証情報の漏洩,誤用防止の観点で、--profileオプションを用いて設定する事が
推奨されています。(オプションを用いない場合は、defaultとして設定)
⑩ご自身の環境からCLI経由でAWSアカウントにアクセスが確認出来れば完了。
4–2.EC2インスタンス(Linux)経由でのアクセス
①IAM > ロールを作成 > AWSのサービス > EC2を選択 > 「次へ」を押下。
②要件に適した許可ポリシー(例:AdministratorAccess) > 「次へ」を押下。
③IAMロール名の設定 > 設定内容の確認 > 「ロールを作成」を押下。
④作成済みのEC2インスタンスへ作成したIAMロールを付与。
対象のEC2を選択 > アクション▲ > セキュリティ > IAMロールを変更 >
IAMロールを選択 > 「IAMロールの更新」を押下。
⑤EC2インスタンスへログインし、CLIでAWSアカウントにアクセスが
出来れば設定完了。
4–3.IAM Identity Center/Organizationsでユーザ管理を行っている場合
複数のAWSアカウントを持つ組織の場合に用いられる管理方法です。
ユーザ管理を中央集権的に行う事で人為的なミスを回避してセキュリティの向上等が見込めます。
他にもOrganizationsで管理する事によるメリットもありますが、
本記事では割愛します。
①「Command line or programmatic access」を押下。
②ポップアップで一時的な認証情報が表示されるため、環境変数として
設定する。
③ ご自身のローカル環境又はEC2等のLinux環境からCLI経由で
AWSアカウントにアクセスが出来る事を確認出来れば設定完了。
最後までご覧いただきありがとうございます。
次回は実際にTerraformのコードに触れていきます。
We are hiring!
本記事をご覧いただき、ネクストビートの技術や組織についてもっと話を聞いてみたいと思われた方、カジュアルにお話しませんか?
・今後のキャリアについて悩んでいる
・記事だけでなく、より詳しい内容について知りたい
・実際に働いている人の声を聴いてみたい
など、まだ転職を決められていない方でも、ネクストビートに少しでもご興味をお持ちいただけましたら、ぜひカジュアルにお話しましょう!
🔽申し込みはこちら
https://hrmos.co/pages/nextbeat/jobs/1000008
また、ネクストビートについてはこちらもご覧ください。
🔽エントランスブック
https://note.nextbeat.co.jp/n/nd6f64ba9b8dc