AWS CLI、Terraformを試してみよう

今年、Terraformを実際に使い始めました。
その際、ローカル環境からTerraformをテストする方法に悩んでいました。
この記事は、AWS CLI、AWS用Terraformを始める初心者の方々の助けになればと思います。:sparkles::sparkles:😊

## AWS CLIとは？
AWS CLIとは、AWS Command Line Interfaceの略称であり、Amazon Web Services (AWS)が提供するコマンドラインインターフェイスです。これを使用すると、AWSのサービスと直接やり取りし、コマンドラインから様々な操作を行うことができます。
AWS CLIは、開発者やシステム管理者にとって強力なツールであり、AWSサービスとのやり取りを自動化するのに役立ちます。

以下はAWS CLIの例です。:arrow_down:
- S3バケットの一覧表示:
```ruby:Sh
aws s3 ls
```
- EC2インスタンスの詳細表示
```ruby:Sh
aws ec2 describe-instances
```
- Lambda関数の一覧表示:
```ruby:Sh
aws lambda list-functions
```
## AWS CLIインストール
AWS CLIをインストールするには、公式のインストールガイド（https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html）
を参照してください。

この記事ではLinux（Ubuntu）のインストールガイドを共有します。:sparkles:

- パッケージリストの更新
```
sudo apt-get update
```
- Pythonとpipのインストール（未インストールの場合）
インストールされていない場合は、次のコマンドでインストールします。
```
sudo apt-get install python3 python3-pip
```
- AWS CLI をインストール
```
pip3 install awscli
```
- インストールの確認
```
aws --version
aws-cli/2.18.6 Python/3.12.6 Linux/5.15.167.4-microsoft-standard-WSL2 exe/x86_64.ubuntu.20
```
## AWS CLI の設定
- AWS Consoleでアクセスキーの作成
https://console.aws.amazon.com/ に接続して
「IAM」>「アクセス管理」>「ユーザー」>「アクセスキーの作成」をクリックします。
作成された「アクセスキー ID」と「シークレットアクセスキー」を控えます。
![create.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624875/50cd7867-7a29-6ac3-d8d4-c5b301d24e25.png)
- Ubuntuでキーの設定
```
$ aws configure
AWS Access Key ID [None]: AKIAS**********
AWS Secret Access Key [None]: G+gd**********
Default region name [None]: ap-northeast-1
```
AWS CLIの設定が完了した後に、Terraformの部分についてやりましょう！！:footprints::footprints::footprints:
## Terraformとは？
AWS Terraformとは、HashiCorpが開発したインフラストラクチャコード(IaC)ツールであり、Amazon Web Services (AWS)のインフラをコードベースで管理することを可能にするものです。
AWSのリソース（例：EC2インスタンス、S3バケット、RDSデータベースなど）を一貫性のある方法で作成、更新、削除することができます。

## Terraformのインストール
公式のインストールガイド https://www.terraform.io/ を参照してください。

この記事ではLinux（Ubuntu）のインストールガイドを共有します。:sparkles:

```
// パッケージリストの更新
sudo apt-get update
// 必要な依存関係をインストール
sudo apt install -y gnupg software-properties-common

// HashiCorpの公式GPGキーを追加
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg

// Terraformリポジトリを追加
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com stable main" | sudo tee /etc/apt/sources.list.d/hashicorp.list

// Terraformをインストール
sudo apt update
sudo apt install terraform

// Terraformインストールの確認
terraform --version
```
## Terraformの基本構文
- プロバイダー (Provider)
Terraformがどのクラウドサービスやプラットフォームと連携するかを指定します。
```
provider "aws" {
  region = "ap-northeast-1"  # AWSリージョンを指定
}
```
- リソース (Resource)
Terraformが管理する具体的なインフラストラクチャの要素です。
```
resource "aws_iam_user" "example_user" { 
    name = "example_user" # ユーザー名を指定 
    
    tags = { 
        Name = "ExampleUser" 
    } 
}
```
- 変数 (Variable)
再利用可能な値を定義するために使われます。変数を定義し、それをリソース内で使用することができます。

- 出力 (Output)
実行結果から取得したい情報を定義します。

- データソース (Data Source)
既存のリソースからデータを取得するために使います。

- ローカル (locals)
ローカルは、Terraform内で使用される名前付きの式で、コードの重複を減らしてシンプルにするために使われます。変数に似ていますが、定義されたモジュール内でのみアクセス可能です。
- モジュール (module)
モジュールは、複数のリソースを一緒に使用するためのコンテナです。モジュールを使うことで、リソースの構成をパッケージ化し再利用することができます。
- 環境変数 (env)
環境変数は、開発、ステージング、プロダクションなど異なる環境間で変更される設定を管理するために使用されます。

## AWSとの接続設定
TerraformでAWSリソースを管理するために、AWS CLIで設定した認証情報を使用します。
以下は基本的な設定ファイルの例です。
```ruby:main.tf
provider "aws" {
  region = "ap-northeast-1"

  default_tags {
    tags = {
      Project = "my-terraform-project"
    }
  }
}
```
## Terraformの基本操作
Terraformで作成したコードを実行する。

- Terraform初期化
```
terraform init
```
- Terraformの構文確認
```
terraform validate
```
- Terraformの実行計画の確認
```
terraform plan
```
- Terraformの実行
```
terraform apply
```
- Terraformの削除
```
terraform destroy
```