

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 教學課程：建立自訂 Linux 型 WorkSpaces 應用程式映像
<a name="tutorial-create-linux-image"></a>

本教學課程說明如何建立自訂 Linux 型 Amazon WorkSpaces 應用程式映像，其中包含您可以串流給使用者的應用程式。

**重要**  
請勿在映像建置器中建立名為 "as2-streaming-user" 的使用者。這是機群的預留使用者名稱。如果您在 WorkSpaces 應用程式工作流程之外建立此使用者名稱，您可能會在機群中遇到串流問題。

**Topics**
+ [

## 步驟 1：在映像建置器上安裝 Linux 應用程式
](#tutorial-linux-image-install)
+ [

## 步驟 2：產生應用程式最佳化清單檔案
](#tutorial-linux-image-manifest)
+ [

## 步驟 3：建立 WorkSpaces 應用程式應用程式目錄
](#tutorial-linux-image-catalog)
+ [

## 步驟 4：建立預設應用程式設定和環境變數
](#tutorial-linux-image-create-default-app-settings)
+ [

## 步驟 5：測試應用程式和設定
](#tutorial-linux-image-test-applications)
+ [

## 步驟 6：完成建立您的映像
](#tutorial-linux-image-finish-create-image)
+ [

## 步驟 7 (選用)：標記和複製映像
](#tutorial-linux-image-tag-copy)
+ [

## 步驟 8：清除
](#tutorial-linux-image-finish)

## 步驟 1：在映像建置器上安裝 Linux 應用程式
<a name="tutorial-linux-image-install"></a>

在此步驟中，您要連線 Linux 映像建置器並在映像建置器上安裝您的應用程式。

**在映像建置器上安裝應用程式**

1. 執行下列其中一項操作來連線至映像建置器：
   + [使用 WorkSpaces 應用程式主控台](managing-image-builders-connect-console.md) （僅適用於 Web 連線）
   + [建立串流 URL](managing-image-builders-connect-streaming-URL.md) （適用於 Web 或 WorkSpaces 應用程式用戶端連線）
**注意**  
您將以 ImageBuilderAdmin 使用者身分登入 Amazon Linux GNOME 桌面，並擁有根管理員權限。

1. 安裝您需要的應用程式。例如，若要從公有 yum repo 安裝 Chromium 瀏覽器，請先開啟終端機應用程式，然後執行下列命令：

   **[ImageBuilderAdmin]\$1 sudo yum update && sudo yum install chromium.x86\$164** 
**注意**  
只從您信任的網站下載並安裝應用程式。

## 步驟 2：產生應用程式最佳化清單檔案
<a name="tutorial-linux-image-manifest"></a>

在此步驟中，您會為步驟 1 中安裝的每個應用程式產生清單檔案。

**產生清單檔案以最佳化應用程式的啟動效能**

1. 請確定您嘗試最佳化的應用程式 (例如 Chromium) 已啟動並執行。

1. 在終端機視窗中，執行下列命令來列出與應用程式相關的處理程序：

   **[ImageBuilderAdmin]\$1 ps -ef \$1 grep chromium **

1. 從上面的命令輸出中尋找根父 PID。以下是輸出範例，根父 PID 為 16712：  
**Example**  

   ```
   [ImageBuilderAdmin]$ ps -ef | grep chromium
   
   ImageBu+ 16712 4128 0 Aug26 ? 00:00:44 /usr/lib64/chromium- browser/chromium-browser --enable-plugins --enable-extensions -- enable-user- scripts --enable-printing --enable-gpu-rasterization -- enable-sync --auto-ssl- client-auth
   
   ImageBu+ 16726 16712 0 Aug26 ? 00:00:00 /usr/lib64/chromium- browser/chromium-browser --type=zygote --no-zygote-sandbox ImageBu+ 16727 16712 0 Aug26 ? 00:00:00 /usr/lib64/chromium- browser/chromium- browser --type=zygote
   
   ImageBu+ 16731 16727 0 Aug26 ? 00:00:00 /usr/lib64/chromium- browser/chromium-browser --type=zygot
   ```

1. 讓應用程式保持執行，且務必使用您的使用者所需的初始元件。這樣可確保最佳化程序順利擷取這些元件。

1. 建立包含下列內容的指令碼檔案 (例如 `~/getfilestool.sh`)：

   ```
   #!/bin/bash
   ## usage getfilestool.sh $pid
   lsof -p $(pstree -p $1 | grep -o '([0-9]\+)' | grep -o '[0-9]\+' | tr '\012' ,)|grep REG | sed -n '1!p' | awk '{print $9}'|awk 'NF'
   ```

1. 執行下列命令以確認檔案可執行：

   **[ImageBuilderAdmin]\$1 chmod u\$1x \$1/getfilestool.sh** 

1. 執行下列命令，從上面步驟 3 中找到的根父處理程序擷取所有執行中檔案，並將其儲存到暫存清單檔案中：

   **[ImageBuilderAdmin]\$1 sudo \$1/getfilestool.sh 16712 > /tmp/chromium-manifest.txt **

1. 確認最佳化清單檔案的內容，這是每個應用程式的行分隔文字檔案。

## 步驟 3：建立 WorkSpaces 應用程式應用程式目錄
<a name="tutorial-linux-image-catalog"></a>

在此步驟中，您會使用映像建置器`AppStreamImageAssistant`上的 CLI 工具，透過指定映像的應用程式來建立 WorkSpaces 應用程式目錄。針對您計劃串流的每個應用程式，您可以指定名稱、顯示名稱、要啟動的可執行檔和要顯示的圖示。

**建立 WorkSpaces 應用程式目錄**

1. 在映像建置器桌面上，從側邊面板或開啟應用程式網格來開啟**終端機**。

1. 執行 **AppStreamImageAssistant --help** 以查看可用命令的清單。您將使用這些命令來新增應用程式並建立映像。

1. 執行下列命令，將已安裝的應用程式 （例如 Chromium) 新增至 WorkSpaces 應用程式使用者的應用程式清單：

   ```
   AppStreamImageAssistant add-application \
    --name Chromium \
    --absolute-app-path /usr/lib64/chromium-browser/chromium-browser \
    --display-name Chromium \
    --absolute-icon-path /usr/share/icons/hicolor/256x256/apps/chromium-browser.png \
    --absolute-manifest-path /tmp/chromium-manifest.txt
   ```

   或者，執行下列命令：

   ```
   AppStreamImageAssistant add-application \
    --name="Chromium" \
    --absolute-app-path="/usr/lib64/chromium-browser/chromium-browser" \
    --display-name="Chromium" \
    --absolute-icon-path="/usr/share/icons/hicolor/256x256/apps/chromium-browser.png" \
    --absolute-manifest-path="/tmp/chromium-manifest.txt"
   ```

1. 若要新增更多應用程式，請為每個額外的應用程式重複步驟 3。

1. 若要查看已新增至目錄中的應用程式清單，以及像是圖示路徑和啟動參數等中繼資料，請執行下列命令：

   **AppStreamImageAssistant list-applications**

1. 若要從目錄中移除應用程式，請執行下列命令：

   **AppStreamImageAssistant remove-application –-name *application\$1name***

## 步驟 4：建立預設應用程式設定和環境變數
<a name="tutorial-linux-image-create-default-app-settings"></a>

在此步驟中，您會為 WorkSpaces 應用程式使用者建立預設應用程式設定和環境變數。這樣做可讓您的使用者在 WorkSpaces 應用程式串流工作階段期間快速開始使用應用程式，而不需要自行建立或設定這些設定。

**為您的使用者建立預設應用程式和環境變數**

1. 啟動要建立預設設定的應用程式。例如，在「終端機」視窗中，執行下列命令以啟動 Chromium 瀏覽器：

    **[ImageBuilderAdmin]\$1 chromium-browser**

1. 設定應用程式的設定。例如，將 Chromium 瀏覽器的首頁設定為 **https://aws.amazon.com**。

1. 確定 Chromium 應用程式已關閉，然後執行下列命令，將 Chromium 的組態複製到 **/etc/skel**：

   **[ImageBuilderAdmin]\$1 sudo mkdir /etc/skel/.config**

   **[ImageBuilderAdmin]\$1 sudo cp -R \$1/.config/chromium /etc/skel/.config** 

1. 設定環境變數，然後將它新增至指令碼檔案。例如，執行下列命令：

   **[ImageBuilderAdmin]\$1 echo "export *FOO*=*BAR*" \$1 sudo tee -a /etc/profile.d/myenvvars.sh** 

   **[ImageBuilderAdmin]\$1 sudo chmod \$1x /etc/profile.d/myenvvars.sh** 

## 步驟 5：測試應用程式和設定
<a name="tutorial-linux-image-test-applications"></a>

在此步驟中，請確認您新增的應用程式正確執行，而且預設應用程式設定和環境變數如預期運作。

**在映像建置器上測試您的應用程式和預設設定**

1. 建立未具備根許可的測試使用者。例如，在**終端機**視窗中，執行下列命令以在映像建置器上建立 **test-user**：

   **[ImageBuilderAdmin]\$1 sudo useradd -m test-user**

   **[ImageBuilderAdmin]\$1 echo -e 'Pa55w0rdas2\$1\$1\$1\$1nPa55w0rdas2\$1\$1\$1\$1n' \$1 sudo passwd test-user** 

1. 切換到測試使用者。

   **[ImageBuilderAdmin]\$1 su - test-user**

1. 以測試使用者身分啟動應用程式 (例如 Chromium)：

   **[test-user]\$1 /usr/bin/chromium-browser** 

1. 確認預設設定可供測試使用者使用 (例如 Chromium 首頁為 https://aws.amazon.com/)。

1. 確認環境變數可供測試使用者使用。例如，執行下列命令：

   **[test-user]\$1 echo \$1*FOO***

   此命令應會在終端機中顯示輸出 ***BAR***。

1. 從此映像建置器建立映像之前，執行下列命令以刪除測試使用者：

   **\$1 logout test user**

   **[test-user]\$1 logout**

   **\$1 kill test user's running processes**

   **[ImageBuilderAdmin]\$1 sudo killall -u test-user**

   **\$1 delete user**

   **[ImageBuilderAdmin]\$1 sudo userdel -r test-user**

## 步驟 6：完成建立您的映像
<a name="tutorial-linux-image-finish-create-image"></a>

在此步驟中，選擇映像名稱以及完成建立您的映像。

**建立映像**

1. 在**終端機**視窗中，執行 **AppStreamImageAssistant create-image** 以從映像建置器建立映像。此映像包含您已安裝和註冊的應用程式，以及您已設定的任何工作階段指令碼和預設應用程式設定。

   若要查看可用選項的清單，執行 **AppStreamImageAssistant create-image --help**。如需詳細資訊，請參閱 [使用映像助理 CLI 操作，以程式設計方式建立 Amazon WorkSpaces 應用程式映像](programmatically-create-image.md) 中的 **create-image** 操作。

1. 遠端工作階段會在一小段時間後中斷連線。當 **Lost Connectivity (遺失連線)** 訊息出現時，請關閉瀏覽器標籤。雖然已建立映像，但映像建置器狀態顯示為 **Snapshotting (正在建立快照)**。在此程序完成前，您無法連線到映像建置器。

1. 請返回主控台並導覽至 **Images (映像)**、**Image Registry (映像登錄)**。確認您的新映像出現在清單中。

   建立映像時，主控台的映像登錄中所顯示的映像狀態為**待定**。您無法連線到處於**待定**狀態的映像。

1. 選擇**重新整理**圖示以更新狀態。映像建立之後，映像狀態會變更為 **Available (可用)**，然後映像建置器會自動停止。

   若要繼續建立映像，請啟動映像建置器並從主控台連線，或建立新的映像建置器。

## 步驟 7 (選用)：標記和複製映像
<a name="tutorial-linux-image-tag-copy"></a>

您可以在映像建立期間或建立映像之後，將一或多個標籤新增到映像。您也可以複製相同區域內的映像，或將映像複製到同一 Amazon Web Services 帳戶內的新區域。複製來源映像會產生相同但不同的目的地映像。 不過， AWS 不會複製任何使用者定義的標籤。此外，您只能複製您建立的自訂映像，不能複製 AWS提供的基礎映像。

**注意**  
一次最多只能將兩個映像複製到目標。如果映像複製目標達到映像限制，您會收到錯誤。若要在這種情況下複製映像，您必須先移除目標中的映像。當目標低於映像配額 (也稱為限制) 後，請從來源區域啟動映像複製。如需詳細資訊，請參閱[Amazon WorkSpaces 應用程式Service Quotas](limits.md)。

**將標籤新增至現有的映像**

1. 在導覽窗格中，選擇 **Images (映像)**、**Image Registry (映像登錄)**。

1. 在映像清單中，選取您要新增標籤的映像。

1. 選擇**標籤**、選擇**新增/編輯標籤**，然後選擇**新增標籤**。指定標籤的索引鍵和值，然後選擇**儲存**。

如需詳細資訊，請參閱[標記 Amazon WorkSpaces 應用程式資源](tagging-basic.md)。

**複製映像**

跨地理不同區域複製映像可讓您根據同一映像從多個區域串流應用程式。透過以更接近使用者的方式串流應用程式，您可以改善使用者使用 WorkSpaces 應用程式串流應用程式的體驗。

1. 在導覽窗格中，選擇 **Images (映像)**、**Image Registry (映像登錄)**。

1. 在映像清單中，選取您要複製的映像。

1. 選擇 **Actions (動作)**、**Copy (複製)**。

1. 在 **Copy Image (複製映像)** 對話方塊中，指定下列資訊，然後選擇 **Copy Image (複製映像)**：
   + 針對 **Destination region (目標區域)**，選擇要放入複製新映像的區域。
   + 針對 **Name (名稱)**，指定映像複製到目標時會有的名稱。
   + 針對 **Description (描述)** (選用)，指定映像複製到目標時會有的描述。

1. 若要查看複製操作的進度，請返回主控台並導覽至 **Images (映像)**、**Image Registry (映像登錄)**。使用導覽列切換到目標區域 (如果適用)，確認您的新映像出現在映像清單中。

   新映像一開始出現在您主控台映像登錄中的狀態為 **Copying (正在複製)**。成功建立映像之後，映像狀態會變更為 **Available (可用)**，這表示您可以使用此映像啟動堆疊以及串流應用程式。

## 步驟 8：清除
<a name="tutorial-linux-image-finish"></a>

最後，您可以停止執行中的映像建置器來釋出資源，以免您的帳戶不小心產生費用。建議停止任何未使用的執行中映像建置器。如需詳細資訊，請參閱 [WorkSpaces 應用程式定價](https://aws.amazon.com/appstream2/pricing/)。

**停止執行中的映像建置器**

1. 在導覽窗格中，選擇 **Images (映像)**、**Image Builders (映像建置器)**，然後選取執行中的映像建置器執行個體。

1. 選擇 **Actions (動作)**、**Stop (停止)**。