Terraform を使用して WorkSpacesを作成してみた。

2024.06.12

概要

Terraforrm

Terraform は、HashiCorp が提供した Infrastructure as Code(IaC) ツールです。Terraform を使用すると、複数のクラウド プラットフォームでのインフラストラクチャのプロビジョニングと管理が容易になります。Terraform を使用すると、デプロイメント全体でリソースの変更を追跡できます。TerraformでAWS インフラストラクチャを構築、変更、破棄できます。

WorkSpaces

Amazon WorkSpacesを使用すると、ユーザー向けに仮想のクラウドベースのMicrosoft WindowsまたはAmazon Linuxデスクトップをプロビジョニングできます。WorkSpaces を使用すると、ハードウェアのデプロイ、または複雑なソフトウェアのインストールの必要性はありません。各 WorkSpacesはVPCとディレクトリに関連付けられています。ディレクトリは、WorkSpacesとユーザーの情報を保存および管理するために使用されます。

この記事では、Terraform を使用して WorkSpacesを作成してみました。

やってみた

前提条件

  • Terraform と AWS CLI をインストールしておきます。
  • ディレクトリを作成し、そのディレクトリに移動します。
% mkdir terraform-aws
% cd terraform-aws
  • 作成したディレクトリに以下のファイルを作成しておきます。
    • main.tf
    • variables.tf

 

変数を定義する

  • 以下のように、[variables.tf] ファイルに使用する変数を定義しておきます。
variable "vpc_id" {
  type        = string
  default     = "vpc-0000000000000"
}
variable "subnet_id1" {
  type        = string
  default     = "subnet-0000000000000"
}

variable "subnet_id2" {
  type        = string
  default     = "subnet-0000000000000"
}

variable "directory_dns_name" {
  type        = string
  default     = "demo.com"
}

variable "admin_password" {
  type        = string
  default     = "xxxxxxxx"
}

variable "bundle_id" {
  type        = string
  default     = "wsb-00000000"
}

 

AWS Managed Microsoft ADを作成する

  • 次のコードを [main.tf] ファイルに追加しておきます。このコードにより、定義されたリージョンに「AWS Managed Microsoft AD」ディレクトリ サービスが作成されます。
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.16"
    }
  }
}

provider "aws" {
  region  = "us-east-1"
}

# Create Directory Service
resource "aws_directory_service_directory" "AD" {
  name     = var.directory_dns_name
  password = var.admin_password  
  edition     = "Standard"
  type        = "MicrosoftAD"

  vpc_settings {
    vpc_id     = var.vpc_id
    subnet_ids = [var.subnet_id1, var.subnet_id2]
  }
}
  • 次のコマンドを実行してリソースを作成しておきます。
    • terraform init: 構成ディレクトリを初期化すると、構成で定義されたプロバイダーがダウンロードおよびインストールされます。
    • terraform validate: 構成が構文的に有効で、一貫性があるかどうかをチェックします。
    • terraform apply: リソースを AWS に作成します。
% terraform init
% terraform validate
% terraform apply

 

AWS WorkSpaces Directoryを作成する

  •  [main.tf] ファイルに IAM ロールのコードを追加します。これにより、AWS WorkSpaces Service が WorkSpaces を起動できるようになります。
  • また、Amazon WorkSpaces とユーザーの情報を保存および管理するために使用される AWS WorkSpaces Directory を作成するコードも追加します。
  • [terraform apply]コマンドを実行して、以下のリソース[IAM ロール, AWS WorkSpaces Directory]を作成しておきます。
#Define IAM role
data "aws_iam_policy_document" "workspaces_iam_role" {
  statement {
    actions = ["sts:AssumeRole"]
    principals {
      type        = "Service"
      identifiers = ["workspaces.amazonaws.com"]
    }
  }
}

resource "aws_iam_role" "workspaces_default_role" {
  name               = "workspaces_DefaultRole"
  assume_role_policy = data.aws_iam_policy_document.workspaces_iam_role.json
}

resource "aws_iam_role_policy_attachment" "workspaces_default_service_access" {
  role       = aws_iam_role.workspaces_default_role.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonWorkSpacesServiceAccess"
}

resource "aws_iam_role_policy_attachment" "workspaces_default_self_service_access" {
  role       = aws_iam_role.workspaces_default_role.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonWorkSpacesSelfServiceAccess"
}

#AWS WorkSpaces Directory
resource "aws_workspaces_directory" "directory" {
  directory_id = aws_directory_service_directory.AD.id
  depends_on = [aws_iam_role.workspaces_default_role]
}

 

  • AWS WorkSpaces Directory を作成する前

 

  • AWS WorkSpaces Directoryを作成すると、そのディレクトリは WorkSpaces に登録されます。

  • ディレクトリにユーザー[Testuser]を作成しておきます。

 

Amazon WorkSpacesを作成する

  • 次のコードを main.tf ファイルに追加しておきます。次のコードは、WorkSpaces に必要な構成設定を定義します。
  • [terraform apply]コマンドを実行して、WorkSpaces を作成しておきます。
# Create WorkSpace
resource "aws_workspaces_workspace" "WorkSpaces" {
  directory_id = aws_workspaces_directory.directory.id
  bundle_id    = var.bundle_id
  user_name    = "Testuser" 

  root_volume_encryption_enabled = true
  user_volume_encryption_enabled = true
  volume_encryption_key          = "alias/aws/workspaces"

  workspace_properties {
    compute_type_name                         = "STANDARD"
    user_volume_size_gib                      = 10
    root_volume_size_gib                      = 80
    running_mode                              = "AUTO_STOP"
    running_mode_auto_stop_timeout_in_minutes = 60
  }
}

 

WorkSpacesに接続する

  • 招待メールから登録コードを入力して、新しく作成したパスワードとメールからのユーザー名でサインインしておきます。

 

  • サインインすると、ワークスペースが接続されて使用できるようになります。

 

まとめ

WorkSpaces と Terraform の詳細については、次の記事を参照してください。

WorkSpaces directory

WorkSpaces using AWS Managed Microsoft AD

Terraform