TerraformでAmazon WorkSpacesを立ち上げてみた。

2020.09.30

どうも。コンサルティング部の後藤です。

結構前になりますが、今年の5月15日のTerraformのAWS ProviderアップデートによりTerraformでAmazon WorkSpaces(以下WorkSpaces)が立ち上げられるようなりましたので、そちらを試してみました。

(ずっと試そうと思っていたのですが、WorkSpacesは月初に立ち上げると高いので月末にやろう!と思っていたのに月日は流れて今日まで来てしまいました…。

Terraformバージョン

WorkSpacesが対応したのは v2.62.0 からになります。今となっては結構前のバージョンとなりますので、今から試す方はTerraform initで最新のバージョンを取得頂ければ試せるかと思います。

また、今回検証で使用したバージョンは以下の通りです。 $ terraform --version Terraform v0.12.29 + provider.aws v3.8.0

TerraformでWorkSpacesを立ち上げる

今回、TerraformでWorkSpacesを立ち上げるにあたって以下のコードを使用しています。

resource "aws_vpc" "vpc" {
        cidr_block ="10.1.0.0/16"
        tags = {
                Name = "workspace-test-vpc"
        }
}
resource "aws_subnet" "private_a" {
        vpc_id = aws_vpc.vpc.id
        cidr_block = "10.1.1.0/24"
        availability_zone = "ap-northeast-1a"
        tags = {
                Name = "workspace-test-subnet-a"
        }
}
resource "aws_subnet" "private_c" {
        vpc_id = aws_vpc.vpc.id
        cidr_block = "10.1.2.0/24"
        availability_zone = "ap-northeast-1c"
        tags = {
                Name = "workspace-test-subnet-c"
        }
}
resource "aws_directory_service_directory" "simple_ad" {
        type = "SimpleAD"
        size = "Small"
        name = "corp.example.com"
        password = "Perfect_password"
        vpc_settings {
                vpc_id = aws_vpc.vpc.id
                subnet_ids = [
                        aws_subnet.private_a.id,
                        aws_subnet.private_c.id
                ]
        }
        tags = {
                Name = "workspace-test-ad"
        }
}
resource "aws_workspaces_directory" "test" {
        directory_id = aws_directory_service_directory.simple_ad.id
}
resource "aws_workspaces_workspace" "test" {
        directory_id = aws_workspaces_directory.test.id
        bundle_id = "wsb-5sbs0y26m"
        user_name = "n-goto"
        tags = {
                Name = "workspace-test"
        }
}

resource "aws_directory_service_directory"

WorkSpacesで使用するディレクトリをSimpleADで作成しています。password部分は英小文字、英大文字、数字、特殊文字の中から3つ含める必要があります。

resource "aws_workspaces_directory"

リソース情報の詳細はこちらからご確認頂けます。 今回は一先ず立ち上げということで、必須要件だけ設定しています。

directory_id 作成したディレクトリサービスを指定して、WorkSpacesで使用出来るようにしています。

WorkSpacesのディレクトリにはユーザがWorkSpacesの設定を変更できるセルフサービス機能があります。この機能はself_service_permissionsで設定が出来るようです。こちらはオプション要件のため、今回は設定していません。

resource "aws_workspaces_workspace"

リソース情報の詳細はこちらからご確認頂けます。 こちらも今回は一先ず立ち上げということで、必須要件だけ設定しています。

directory_id WorkSpacesで使用するディレクトリを指定しています。

bundle_id WorkSpacesを立ち上げるバンドルを指定しています。バンドルのIDはコンソールからご確認頂けます。

user_name WorkSpacesのユーザ名を指定します。ここで指定するユーザはディレクトリに存在している必要があり、かつユーザに紐づくメールアドレスと名前が設定されている必要があります。 WorkSpacesをコンソールで作成する場合、以下でディレクトリにユーザを登録することが出来ますが、Terraformで作成する際は既に存在している必要があるようです。今回は既に作成したユーザ名を指定しています。

その他にも、WorkSpacesにはユーザがログオフした際に自動停止する機能や、その時間を設定する事が出来ます。それらはworkspace_propertiesで設定することが出来るようです。こちらはオプション要件のため、今回は設定していません。

公式のリソース情報にはworkspace_propertiesのデフォルト値が記載されていなかったため調べてみたところ、今回使用したバンドル(wsb-5sbs0y26m)では以下のように設定されていました。
・compute_type_name : VALUE
・root_volume_size_gib : 80
・user_volume_size_gib : 10
・running_mode : ALWAYS_ON
・running_mode_auto_stop_timeout_in_minutes : 0

上記設定でTerraformを実行したところ、WorkSpacesは約17分程で立ち上がりました。

WorkSpacesに接続してみる

接続にはAmazon WorkSpacesクライアントを使用します。

TerraformでWorkSpaces作成後、ユーザに登録したメールアドレス宛に以下のようなメールが届きます。

クライアントダウンロード用のURLをクリックすると、パスワード設定画面が表示されます。パスワード設定完了後、クライアントがダウンロードできます。 クライアントを起動し、登録コード、ユーザ名、パスワードを入力して接続をしてみたところ、

無事接続することが出来ました。

最後に

TerraformによるAmazon WorkSpaces作成でした。今後もテレワークの需要でWorkSpacesも需要があると思いますので、Terraformで管理できるようになったのはありがたいですね。ただWorkSpacesで使用するユーザは事前に作成が必要になりますので、すぐに使用したい場合はコンソールのが簡単そうですね。 この記事が何方かのお役立てば幸いです。