3
1

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 3 years have passed since last update.

はじめてのTerraform【セットアップ編】

Last updated at Posted at 2022-01-02

はじめに

AWSマネジメントコンソールでECS/Fargate構成でアプリをホストしていましたが
Terraformを使ってインフラをコード化できましたので
アプトプットとして、記事を投稿します。

当記事では、terraformのコードを書く前に行った
**セットアップ作業**をまとめています。

AWSリソース生成に関わるterraformコードは別の記事でまとめています。

使用技術

  • Terraform: 1.1.2
  • MacOS: Catalina 10.15.7

セットアップ手順

  1. IAMユーザーの作成
  2. AWS CLIに2つの認証情報を設定する
  3. terraformのインストール
  4. git secretsのインストール
  5. VScode拡張機能を導入
  6. ディレクトリ作成と基本コードの記述

1. IAMユーザーの作成

はじめに、AWSマネジメントコンソールで
以下2つのIAMユーザーを作成します。

  1. 管理者用ユーザー
  2. Terraform用ユーザー

注意点ですが、
どちらのユーザーにもAdministratorAccessの権限を付与します。

以降では、すでに管理者用ユーザーは作成されている事とし、
Terraform用ユーザーのみ
AWSマネジメントコンソールで新しく作成しています。

では、IAM画面に移り、サイドバーからユーザーを選択して
ユーザーを追加を押します。

スクリーンショット 2022-01-02 8.14.18.png

任意のユーザー名を入力して、認証情報タイプをアクセスキーとします。

スクリーンショット 2022-01-02 8.15.42.png

ユーザーには、AWS公式の権限を付与するため、既存のポリシーを直接アタッチを選び、
一番上に表示されているAdministratorAccesをチェックして
次に進めます。

スクリーンショット 2022-01-02 8.16.29.png

次の画面ではタグ名の設定がありますが、無視してそのまま次に進み
ユーザーの作成まで実行してください。

ユーザー作成完了後には、下記画面が表示されますので
アクセスキーID
シークレットアクセスキー
をテキストエディターなどに控えておきます。

スクリーンショット 2022-01-02 8.20.11.png

  1. AWS CLIに2つの認証情報を設定する

続いて、各ユーザーをAWS CLIに登録していきます。

私の場合は、管理者用ユーザーは登録済みでしたので
登録されているIDとKeyが表示されていました。

Terraform用ユーザーには、profileオプションを付けて
識別できるterraformという名称を入れています。

なお、各種の質問には下記のように答えていきます。

ターミナル

# 管理者用ユーザー
% aws configure

# 既に登録済みであれば、IDやKeyが表示されます。
AWS Access Key ID [****************AAAA]: 
AWS Secret Access Key [****************BBBB]: 
Default region name [ap-northeast-1]: 
Default output format [json]:


# Terraform用ユーザー
% aws configure --profile terraform

AWS Access Key ID [none]: アクセスキーIDをコピペ
AWS Secret Access Key [none]: シークレットアクセスキーをコピペ
Default region name [none]: ap-northeast-1
Default output format [none]: json

入力が完了したら、Finderから
/Users/ユーザー名/.aws/credentialsと辿っていき
登録できていることが確認します。

/Users/ユーザー名/.aws/credentials

[default]
aws_access_key_id = AKI***************
aws_secret_access_key = ***********************
[terraform]
aws_access_key_id = AKI***************
aws_secret_access_key = ***********************

3. terraformのインストール

まず、Terraformのパッケージマネージャーであるtfenvをインストールします。

その後にTerraformのバージョンを指定した上で、インストールする流れです。

では、ターミナルで実行していきましょう。

ターミナル

# tfenvのインストール
% brew install tfenv

# tfenvがインストールできているか確認する
% tfenv -v

# インストール可能なterraformバージョンを表示させる
% tfenv list-remote

# terraformのバージョン1.1.2を指定してインストール
% tfenv install 1.1.2

# インストール済みのterraformから指定バージョンを選ぶ
% tfenv use 1.1.2

# 現在使用しているバージョンを確認する
% tfenv list

# Terraform自体のバージョンも念のため確認する
% terraform -v

4. git secretsのインストール

次は、AWSのクレデンシャル情報が外部に漏れないように
git secretsをインストールします。

これを導入することで、GitHub上に
AWSシークレットアクセスキー等の秘匿情報が公開されないように
git commitコマンドを制限されます。

Macの場合は、Homebrew経由でインストールできます。

ターミナル

# git-secretsをインストール
% brew install git-secrets

# AWS秘匿情報の流失を阻止する設定
% git init
% git secrets --install
% git secrets --register-aws

検証として、
.gitが存在するリポジトリ内に
偽のcredencialファイルを入れてみます。

terraform/credentials

# git secretsが機能しそうな情報を入れてみる
[default]
aws_access_key_id = AKIAAAAAAAAAAAAAAAAA
aws_secret_access_key = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

検証ファイルを保存後に、コミットをしてみるとエラーが発生し、
git secretsがAWS秘匿情報を含んでいることを知らせてくれます。

ターミナル

# 検証としてコミットまでしてみる
% git add .
% git commit -m "AWS秘匿情報が含まれている為、commitできない"

[ERROR] Matched one or more prohibited patterns

Possible mitigations:
- Mark false positives as allowed using: git config --add secrets.allowed ...
- Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory
- List your configured patterns: git config --get-all secrets.patterns
- List your configured allowed patterns: git config --get-all secrets.allowed
- List your configured allowed patterns in .gitallowed at repository's root directory
- Use --no-verify if this is a one-time false positive

参考まで(任意)
Gitのinit時に、自動的にsecretをinstallさせる設定

ターミナル

# git initコマンドを実行すると、git secret --installコマンドも動作する
% git secrets --install ~/.git-templates/git-secrets
% git config --global init.templatedir '~/.git-templates/git-secrets'

5. VScode拡張機能を導入

テキストエディタのVScodeに、Hashicorp社公式の拡張機能を導入します。

スクリーンショット 2022-01-02 11.22.00.png

6. ディレクトリ/ファイル作成

あとは、terraformコードを記述する前に
各ディレクトリ/ファイルを整理しておきます。

1. main.tf: terraform/プロバイダ/変数の設定
2. terraform.tfvars: 変数に入れる値を設定
3. .gitignore: Git履歴を無視する対象ファイルを設定
4. modules/各ディレクトリ/main.tf: IAMロール等の一部リソースは、モジュールで作成しやすくする

上記ディレクトリとファイルをterraform用ディレクトリの中に作成します。

ディレクトリ構造を表すために
下記では、homebrew経由でtreeをインストールして
treeコマンドを実行しています。

ターミナル

# treeをインストール
% brew install tree

# 対象ディレクトリに対して、treeコマンドの実行
% tree terraform_directory

terraform_directory
├── main.tf
├── modules
│   ├── iam_role
│   │   └── main.tf
│   └── security_group
│       └── main.tf
└── terraform.tfvars

以上でterraformを実装する前の準備が完了です!

参考動画/書籍

終わりに

terraformでAWSリソース作っていると、削除する時もコマンドでまとめて削除できるし便利!

さすがに実務で自由に消したりはできないだろうけど、個人のポートフォリオには
無駄なAWSリソースを作らないためにも活用してる。

フロントにVue.jsを導入するなど、アプリ構成が複雑になると
terraformも編集が必要になるんだろうなー…

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?