こんにちは、技術4課の城です。
先日、Directory APIがついにやってきました。
例えば、Amazon WorkSpacesをAWS CLIで構築しようとした際、Directory Serviceを構築した後にWorkSpacesに利用するDirectory Serviceの登録をする必要があるのですが、これまではAPIが提供されていなかったため、どうしてもマネジメントコンソールで対応する必要がありました。
今後はこの作業もAWS CLIで対応できるようになったわけです。
というわけでAmazon WorkSpacesをAWS CLIで作ってみましょう!
1.前提条件
WorkSpaces用のVPC及び、サブネット2つ(異なるAvailability Zone)は作成済みであること。
今回は10.0.0.0/16のVPC、10.0.0.0/24、10.0.1.0/24のサブネットを用意しました。
クライアントはWSLのUbuntu18.04を使っています。
2.今回のゴール
Simple ADを使ったWorkSpacesを1台作成します。
では手順に入っていきます。
3.AWS CLIのアップグレード
AWS CLIの最新バージョンへアップグレードします。
pip3 install awscli --upgrade --user
まだインストールされてないよー、という方については下記リンク先ドキュメントをご参考ください。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html
4.プロファイルの設定
利用するアカウントのプロファイルを環境変数に設定します。
【コマンド】
export AWS_DEFAULT_PROFILE=********
AWS CLIの名前付きプロファイルの設定については下記をご覧ください。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-profiles.html
5.Simple ADの作成
5.1 変数の設定
パラメータを変数として設定します。
【コマンド】
# Active Directoryのドメイン名(Directory DNS) SIMPLE_AD_NAME='corp.example.local' # NetBIOS名 SIMPLE_AD_SHORTNAME='CORP' # ドメインAdministrator パスワード SIMPLE_AD_PASSWORD='********' # Description SIMPLE_AD_DESC='for test' # Directory Size SIMPLE_AD_SIZE='Small' # VPCのCIDR VPC_CIDR='10.0.0.0/16' # サブネットのCIDR SUBNET1_CIDR='10.0.0.0/24' SUBNET2_CIDR='10.0.1.0/24'
5.2 VPC IDの取得
【コマンド】
VPC_ID=$( \ aws ec2 describe-vpcs \ --filters --filters Name=cidrBlock,Values=${VPC_CIDR} \ --query 'Vpcs[].VpcId' \ --output text \ ) \ && echo ${VPC_ID}
【結果例】
vpc-*****************
5.3 サブネットIDの取得
【コマンド】
SUBNET1_ID=$( \ aws ec2 describe-subnets \ --filters --filters Name=cidrBlock,Values=${SUBNET1_CIDR} \ --query 'Subnets[].SubnetId' \ --output text \ ) \ && echo ${SUBNET1_ID}
【結果例】
subnet-*****************
【コマンド】
SUBNET2_ID=$( \ aws ec2 describe-subnets \ --filters --filters Name=cidrBlock,Values=${SUBNET2_CIDR} \ --query 'Subnets[].SubnetId' \ --output text \ ) \ && echo ${SUBNET2_ID}
【結果例】
subnet-*****************
5.4 変数の確認
【コマンド】
cat << ETX AWS_DEFAULT_PROFILE: ${AWS_DEFAULT_PROFILE} SIMPLE_AD_NAME: ${SIMPLE_AD_NAME} SIMPLE_AD_SHORTNAME: ${SIMPLE_AD_SHORTNAME} SIMPLE_AD_PASSWORD: ${SIMPLE_AD_PASSWORD} SIMPLE_AD_DESC: ${SIMPLE_AD_DESC} SIMPLE_AD_SIZE: ${SIMPLE_AD_SIZE} VPC_ID: ${VPC_ID} SUBNET1_ID: ${SUBNET1_ID} SUBNET2_ID: ${SUBNET2_ID} ETX
【結果例】
AWS_DEFAULT_PROFILE: ******** SIMPLE_AD_NAME: corp.example.local SIMPLE_AD_SHORTNAME: CORP SIMPLE_AD_PASSWORD: ******** SIMPLE_AD_DESC: for test SIMPLE_AD_SIZE: Small VPC_ID: vpc-***************** SUBNET1_ID: subnet-***************** SUBNET2_ID: subnet-*****************
5.5 Simple ADの構築
【コマンド】
aws ds create-directory \ --name ${SIMPLE_AD_NAME} \ --short-name ${SIMPLE_AD_SHORTNAME} \ --password ${SIMPLE_AD_PASSWORD} \ --description "${SIMPLE_AD_DESC}" \ --size ${SIMPLE_AD_SIZE} \ --vpc-settings "VpcId=${VPC_ID},SubnetIds=${SUBNET1_ID},${SUBNET2_ID}" \ | tee simple-ad.json
※出力を事項のDirectory IDの取得に使いたいため、teeコマンドへパイプしています。
【結果例】
{ "DirectoryId": "d-**********" }
5.6 Directory IDの取得
【コマンド】
DIRECTORY_ID=$( \ cat simple-ad.json | jq -r '.DirectoryId' \ ) \ && echo ${DIRECTORY_ID}
【結果例】
d-**********
5.7 Directoryのステータス確認
Activeが返ってくればOKです。
Creatingの場合は少し待ちましょう。
【コマンド】
aws ds describe-directories \ --directory-ids ${DIRECTORY_ID} \ --query 'DirectoryDescriptions[].Stage' \ --output text
6.Directoryの登録
お待ちかねのDirectoryの登録になります。
下記リファレンスを参考にコマンド実行してみます。
https://docs.aws.amazon.com/cli/latest/reference/workspaces/register-workspace-directory.html
今回はWorkDocsは無効、セルフサービス管理機能は有効にしてみました。
【コマンド】
aws workspaces register-workspace-directory \ --directory-id ${DIRECTORY_ID} \ --no-enable-work-docs \ --enable-self-service
【結果】
戻り値無し
サクッと登録されました。
7.WorkSpacesの構築
それではWorkSpacesを構築していきます。
7.1 変数の設定
必要なパラメータを変数として設定します。
【コマンド】
# ユーザー名 USER_NAME='jo' # Cドライブの暗号化 ROOTVOL_ENCRYPTION='false' # Dドライブの暗号化 USERVOL_ENCRYPTION='false' # 実行モード RUNNING_MODE='AUTO_STOP' # 実行モードがAutoStopの場合に自動停止する時間(単位は分) AUTO_STOP_TIMEOUT_MINUITES='60' # Cドライブのサイズ(GB) ROOTVOL_SIZE='80' # Dドライブのサイズ(GB) USERVOL_SIZE='10' # コンピュータータイプ COMPUTER_TYPE='STANDARD' # タグ TAG_KEY1='Name' TAG_VALUE1='jo' # バンドルID ※事前にマネジメントコンソールで適切なものを検索、用意してください BUNDLE_ID='wsb-7dmn3zpyr' # WorkSpace設定出力ファイル FILE_PARAMATER=workspaces-${USER_NAME}.json
7.2 変数の確認
【コマンド】
cat << ETX AWS_DEFAULT_PROFILE: ${AWS_DEFAULT_PROFILE} USER_NAME: ${USER_NAME} ROOTVOL_ENCRYPTION: ${ROOTVOL_ENCRYPTION} USERVOL_ENCRYPTION: ${USERVOL_ENCRYPTION} RUNNING_MODE: ${RUNNING_MODE} AUTO_STOP_TIMEOUT_MINUITES: ${AUTO_STOP_TIMEOUT_MINUITES} ROOTVOL_SIZE: ${ROOTVOL_SIZE} USERVOL_SIZE: ${USERVOL_SIZE} COMPUTER_TYPE: ${COMPUTER_TYPE} TAG_KEY1: ${TAG_KEY1} TAG_VALUE1: ${TAG_VALUE1} FILE_PARAMATER: ${FILE_PARAMATER} DIRECTORY_ID: ${DIRECTORY_ID} BUNDLE_ID: ${BUNDLE_ID} ETX
【結果例】
AWS_DEFAULT_PROFILE: ******** USER_NAME: jo ROOTVOL_ENCRYPTION: false USERVOL_ENCRYPTION: false RUNNING_MODE: AUTO_STOP AUTO_STOP_TIMEOUT_MINUITES: 60 ROOTVOL_SIZE: 80 USERVOL_SIZE: 10 COMPUTER_TYPE: STANDARD TAG_KEY1: Name TAG_VALUE1: jo FILE_PARAMATER: workspaces-jo.json DIRECTORY_ID: d-********** BUNDLE_ID: wsb-7dmn3zpyr
7.3 WorkSpace設定出力ファイルの作成
【コマンド】
cat << ETX > ${FILE_PARAMATER} { "Workspaces": [ { "DirectoryId": "${DIRECTORY_ID}", "UserName": "${USER_NAME}", "BundleId": "${BUNDLE_ID}", "UserVolumeEncryptionEnabled": ${ROOTVOL_ENCRYPTION}, "RootVolumeEncryptionEnabled": ${USERVOL_ENCRYPTION}, "WorkspaceProperties": { "RunningMode": "${RUNNING_MODE}", "RunningModeAutoStopTimeoutInMinutes": ${AUTO_STOP_TIMEOUT_MINUITES}, "RootVolumeSizeGib": ${ROOTVOL_SIZE}, "UserVolumeSizeGib": ${USERVOL_SIZE}, "ComputeTypeName": "${COMPUTER_TYPE}" }, "Tags": [ { "Key": "${TAG_KEY1}", "Value": "${TAG_VALUE1}" } ] } ] } ETX cat ${FILE_PARAMATER}
【結果例】
{ "Workspaces": [ { "DirectoryId": "d-*********", "UserName": "jo", "BundleId": "wsb-7dmn3zpyr", "UserVolumeEncryptionEnabled": false, "RootVolumeEncryptionEnabled": false, "WorkspaceProperties": { "RunningMode": "AUTO_STOP", "RunningModeAutoStopTimeoutInMinutes": 60, "RootVolumeSizeGib": 80, "UserVolumeSizeGib": 10, "ComputeTypeName": "STANDARD" }, "Tags": [ { "Key": "Name", "Value": "jo" } ] } ] }
7.4 WorkSpaceの作成
残念ながらSimpleADでは現時点(2019/11/28)にてAWS CLIでユーザーを作成することはできないので、マネジメントコンソールにて作成した後に下記コマンドを実行します。
【コマンド】
aws workspaces create-workspaces \ --cli-input-json file://${FILE_PARAMATER}
【結果例】
{ "FailedRequests": [], "PendingRequests": [ { "WorkspaceId": "ws-*********", "DirectoryId": "d-**********", "UserName": "jo", "State": "PENDING", "BundleId": "wsb-7dmn3zpyr", "UserVolumeEncryptionEnabled": false, "RootVolumeEncryptionEnabled": false } ] }
7.5 WorkSpaceのステータス確認
下記コマンドを実行し、ActiveになればOKです。
※PendingからActiveになるのに経験則ではありますが、20分~30分程度かかります。
【コマンド】
aws workspaces describe-workspaces \ --directory-id ${DIRECTORY_ID} \ --user-name ${USER_NAME} \ --query 'Workspaces[].State' \ --output text
できました!
最後に
一部、マネジメントコンソールで実行する必要はあるものの、Directory APIがサポートされたことでオペレーションする方にとっては嬉しいアップデートだったのではないでしょうか。
どなたかの助けになれば、幸いです。
城 航太 (記事一覧)
営業部カスタマーサクセス課・課長
AWSへの移行、AWSアカウントセキュリティ、ネットワーク広く浅くといった感じです。最近はAmazon WorkSpacesやAmazon AppStream2.0が好きです。APN Ambassador 2019,2020