Terraform を使用して WorkSpacesを作成してみた。
概要
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 の詳細については、次の記事を参照してください。