

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

# CLI 教學課程：高可用性兩層堆疊 (Linux/RHEL)
<a name="tut-create-ha-stack"></a>

本節說明如何使用 AMS CLI 將高可用性 (HA) 雙層堆疊部署至 AMS 環境。

**注意**  
此部署演練已在 AMZN Linux 和 RHEL 環境中進行測試。

任務和所需 RFCs的摘要：

1. 建立基礎設施 (HA 雙層堆疊）

1. 為 CodeDeploy 應用程式建立 S3 儲存貯體

1. 建立 WordPress 應用程式套件並將其上傳至 S3 儲存貯體

1. 使用 CodeDeploy 部署應用程式

1. 存取 WordPress 網站並登入以驗證部署

# 開始之前
<a name="ha-stack-ex-before-begin"></a>

部署 \$1 進階堆疊元件 \$1 高可用性 兩層堆疊進階 \$1 建立 CT 會建立 Auto Scaling 群組、負載平衡器、資料庫，以及 CodeDeploy 應用程式名稱和部署群組 （與您提供應用程式的名稱相同）。如需 CodeDeploy 的資訊，請參閱[什麼是 CodeDeploy？](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)

本演練使用包含 UserData 的高可用性兩層堆疊 （進階） RFC，並說明如何建立 CodeDeploy 可以部署的 WordPress 套件。

範例中`UserData`顯示的 透過查詢位於 https：//http://169.254.169.254/latest/meta-data/ 的 EC2 執行個體中繼資料服務，從執行中的執行個體中取得執行個體 ID、區域等執行個體中繼資料。使用者資料指令碼中的此行：`REGION=$(curl 169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/[a-z]$//')`， 會將中繼資料服務的可用區域名稱擷取到支援區域的 \$1REGION 變數，並使用它來完成下載 CodeDeploy 代理程式的 S3 儲存貯體 URL。169.254.169.254 IP 只能在 VPC 內路由 （所有 VPCs都可以查詢服務）。如需 服務的資訊，請參閱[執行個體中繼資料和使用者資料](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)。另請注意，輸入為 UserData 的指令碼會以「根」使用者身分執行，不需要使用「sudo」命令。

此演練會將下列參數保留為預設值 （顯示）：
+ Auto Scaling 群組：`Cooldown=300, DesiredCapacity=2, EBSOptimized=false, HealthCheckGracePeriod=600, IAMInstanceProfile=customer-mc-ec2-instance-profile, InstanceDetailedMonitoring=true, InstanceRootVolumeIops=0, InstanceRootVolumeType=standard, InstanceType=m3.medium, MaxInstances=2, MinInstances=2, ScaleDownPolicyCooldown=300, ScaleDownPolicyEvaluationPeriods=4, ScaleDownPolicyPeriod=60, ScaleDownPolicyScalingAdjustment=-1, ScaleDownPolicyStatistic=Average, ScaleDownPolicyThreshold=35, ScaleMetricName=CPUUtilization, ScaleUpPolicyCooldown=60, ScaleUpPolicyEvaluationPeriods=2, ScaleUpPolicyPeriod=60, ScaleUpPolicyScalingAdjustment=2, ScaleUpPolicyStatistic=Average, ScaleUpPolicyThreshold=75`。
+ Load Balancer：`HealthCheckInterval=30, HealthCheckTimeout=5`。
+ 資料庫：`BackupRetentionPeriod=7, Backups=true, InstanceType=db.m3.medium, IOPS=0, MultiAZ=true, PreferredBackupWindow=22:00-23:00, PreferredMaintenanceWindow=wed:03:32-wed:04:02, StorageEncrypted=false, StorageEncryptionKey="", StorageType=gp2`。
+ 應用程式：`DeploymentConfigName=CodeDeployDefault.OneAtATime`。
+ S3 儲存貯體：`AccessControl=Private`。

其他設定：

`RequestedStartTime` `RequestedEndTime` 如果您想要排程 RFC：您可以使用 [Time.is](https://time.is/UTC) 來判斷正確的 UTC 時間。所提供的範例必須適當調整。如果已超過開始時間，RFC 將無法繼續。或者，您可以將這些值保留為關閉，以建立 ASAP RFC，在通過核准後立即執行。

**注意**  
您可以選擇以不同於所示的方式設定許多參數。範例中顯示的參數值已經過測試，但可能不適合您。

# 建立基礎設施
<a name="ex-create-ha-infra-deploy"></a>

在開始之前收集下列資料，可讓部署更快進行。

必要資料 HA 堆疊：
+ AutoScalingGroup：
  + `UserData`：此值在本教學課程中提供。它包含用於設定 CodeDeploy 資源並啟動 CodeDeploy 代理程式的命令。
  + `AMI-ID`：此值決定 Auto Scaling 群組 (ASG) 將啟動的 EC2 執行個體類型。請務必在您帳戶中選取以「customer-」開頭的 AMI，且為您想要的作業系統。使用 尋找 AMI IDs 如需 AMS SKMS API 參考，請參閱 AWS 成品主控台中的**報告**索引標籤。 操作 (CLI：list-amis) 或 AMS 主控台 VPCs VPCs詳細資訊頁面。此逐步解說適用於設定為使用 Linux AMI 的 ASGs。
+ 資料庫：
  + 這些參數 `DBEngine`、 和 `LicenseModel`應根據您的情況設定`EngineVersion`，但範例中顯示的值已經過測試。
  + 部署應用程式套件時，`MasterUserPassword`需要這些參數、`MasterUsername`、、 `RDSSubnetIds` `DBName`和 。對於 RDSSubnetIds請使用兩個私有子網路。
+ LoadBalancer：
  + 這些參數 `DBEngine`、 和 `LicenseModel`應根據您的情況設定`EngineVersion`，但範例中顯示的值已經過測試。
  + `ELBSubnetIds`：使用兩個公有子網路。
+ 應用程式： `ApplicationName`值會設定 CodeDeploy 應用程式名稱和 CodeDeploy 部署群組名稱。您可以使用它來部署應用程式。它在帳戶中必須是唯一的。若要檢查您的帳戶是否有 CodeDeploy 名稱，請參閱 CodeDeploy 主控台。此範例使用「WordPress」，但如果您將使用該值，請確定該值尚未在使用中。

此程序使用高可用性雙層堆疊 （進階） CT (ct-06mjngx5flwto) 和建立 S3 儲存 CT (ct-1a68ck03fn98r)。從您的已驗證帳戶，遵循命令列的這些步驟。

1. 啟動基礎設施堆疊。

   1. 將 HA 兩層堆疊 CT 的執行參數 JSON 結構描述輸出到名為 CreateStackParams.json.

      ```
      aws amscm get-change-type-version --change-type-id "ct-06mjngx5flwto" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > CreateStackParams.json
      ```

   1. 修改結構描述。視需要取代*變數*。例如，針對 ASG 將建立的 EC2 執行個體，使用您想要的作業系統。將 記錄`ApplicationName`為稍後用來部署應用程式的方式。請注意，您最多可以新增 50 個標籤。

      ```
      {
      "Description":      "HA two tier stack for WordPress",
      "Name":             "WordPressStack",
      "TimeoutInMinutes":  360,
      "Tags": [
              {
                  "Key": "ApplicationName",
                  "Value": "WordPress"
              }
          ],
      "AutoScalingGroup": {
                  "AmiId":    "AMI-ID",
                  "UserData": "#!/bin/bash \n
                  REGION=$(curl 169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/[a-z]$//') \n
                  yum -y install ruby httpd \n
                  chkconfig httpd on \n
                  service httpd start \n
                  touch /var/www/html/status \n
                  cd /tmp \n
                  curl -O https://aws-codedeploy-$REGION.s3.amazonaws.com/latest/install \n
                  chmod +x ./install \n
                  ./install auto \n
                  chkconfig codedeploy-agent on \n
                  service codedeploy-agent start"
          },
          "LoadBalancer": {
              "Public":               true,
              "HealthCheckTarget":    "HTTP:80/status"
          },
          "Database":     {
              "DBEngine":             "MySQL",
              "DBName":               "wordpress",
              "EngineVersion":        "8.0.16 ",
              "LicenseModel":         "general-public-license",
              "MasterUsername":       "admin",
              "MasterUserPassword":   "p4ssw0rd"
          },
          "Application":  {
          "ApplicationName":  "WordPress"
              }
      }
      ```

   1. 將 CreateRfc JSON 範本輸出到目前資料夾中名為 CreateStackRfc.json:

      ```
      aws amscm create-rfc --generate-cli-skeleton > CreateStackRfc.json
      ```

   1. 如下所示修改並儲存 RFC 範本，您可以刪除和取代內容。請注意， `RequestedStartTime`和 現在`RequestedEndTime`是選用的；排除它們會建立 ASAP RFC，在核准後立即執行 （通常會自動執行）。若要提交排定的 RFC，請新增這些值。

      ```
      {
      "ChangeTypeVersion":    "3.0",
      "ChangeTypeId":         "ct-06mjngx5flwto",
      "Title":                "HA-Stack-For-WP-RFC"
      }
      ```

   1. 建立 RFC，指定 CreateStackRfc.json 檔案和 CreateStackParams.json 執行參數檔案：

      ```
      aws amscm create-rfc --cli-input-json file://CreateStackRfc.json --execution-parameters file://CreateStackParams.json
      ```

      您會在回應中收到 RFC ID。儲存後續步驟的 ID。

   1. 提交 RFC：

      ```
      aws amscm submit-rfc --rfc-id  RFC_ID
      ```

      如果 RFC 成功，您不會收到任何輸出。

   1. 若要檢查 RFC 狀態，請執行 

      ```
      aws amscm get-rfc --rfc-id RFC_ID
      ```

   請記下 RFC ID。

1. 啟動 S3 儲存貯體

   在開始之前收集下列資料，可讓部署更快進行。

   必要資料 S3 儲存貯體：
   + `VPC-ID`：此值會決定 S3 儲存貯體的位置。使用您先前使用的相同 VPC ID。
   + `BucketName`：此值會設定 S3 儲存貯體名稱，您可以使用它來上傳應用程式套件。它在帳戶區域必須是唯一的，且不能包含大寫字母。將您的帳戶 ID 包含在 BucketName 中不是必要項目，但之後更容易識別儲存貯體。若要查看帳戶中存在哪些 S3 儲存貯體名稱，請前往您帳戶的 Amazon S3 主控台。

   1. 將 S3 儲存體的 JSON 結構描述輸出至名為 CreateS3StoreParams.json.

      ```
      aws amscm get-change-type-version --change-type-id "ct-1a68ck03fn98r" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > CreateS3StoreParams.json
      ```

   1. 如下所示修改結構描述，您可以刪除和取代內容。適當地取代 *VPC\$1ID*。範例中的值已經過測試，但可能不適合您。
**提示**  
`BucketName` 必須是帳戶區域中唯一的，且不能包含大寫字母。將您的帳戶 ID 包含在 BucketName 中不是必要項目，但之後更容易識別儲存貯體。若要查看帳戶中存在哪些 S3 儲存貯體名稱，請前往您帳戶的 Amazon S3 主控台。

      ```
      {
      "Description":      "S3BucketForWordPressBundle",
      "VpcId":            "VPC_ID",
      "StackTemplateId":  "stm-s2b72beb000000000",
      "Name":             "S3BucketForWP",
      "TimeoutInMinutes":  60,
      "Parameters":   {
          "AccessControl":    "Private",
          "BucketName":       "ACCOUNT_ID-BUCKET_NAME"
          }
      }
      ```

   1. 將 CreateRfc 的 JSON 範本輸出至目前資料夾中名為 CreateS3StoreRfc.json:

      ```
      aws amscm create-rfc --generate-cli-skeleton > CreateS3StoreRfc.json
      ```

   1. 修改並儲存 CreateS3StoreRfc.json 檔案，您可以刪除並取代內容。請注意， `RequestedStartTime`和 現在`RequestedEndTime`是選用的；排除它們會建立 ASAP RFC，在核准後立即執行 （通常會自動執行）。若要提交排定的 RFC，請新增這些值。

      ```
      {
      "ChangeTypeVersion":    "1.0",
      "ChangeTypeId":         "ct-1a68ck03fn98r",
      "Title":                "S3-Stack-For-WP-RFC"
      }
      ```

   1. 建立 RFC，指定 CreateS3StoreRfc.json 檔案和 CreateS3StoreParams.json 執行參數檔案：

      ```
      aws amscm create-rfc --cli-input-json file://CreateS3StoreRfc.json  --execution-parameters file://CreateS3StoreParams.json
      ```

      您會在回應中收到新 RFC 的 RfcId。儲存後續步驟的 ID。

   1. 提交 RFC：

      ```
      aws amscm submit-rfc --rfc-id RFC_ID
      ```

      如果 RFC 成功，您不會收到任何輸出。

   1. 若要檢查 RFC 狀態，請執行 

      ```
      aws amscm get-rfc --rfc-id RFC_ID
      ```

# 建立、上傳和部署應用程式
<a name="ex-create-app"></a>

首先，建立 WordPress 應用程式套件，然後使用 CodeDeploy CTs 來建立和部署應用程式。

1. 下載 WordPress、擷取檔案並建立 ./scripts 目錄。

   Linux 命令：

   ```
   wget https://github.com/WordPress/WordPress/archive/master.zip
   ```

   Windows：貼`https://github.com/WordPress/WordPress/archive/master.zip`到瀏覽器視窗並下載 zip 檔案。

   建立要在其中組合套件的暫時目錄。

   Linux︰

   ```
   mkdir /tmp/WordPress
   ```

   Windows：建立「WordPress」目錄，稍後您將使用目錄路徑。

1. 將 WordPress 來源解壓縮至「WordPress」目錄，並建立 ./scripts 目錄。

   Linux︰

   ```
   unzip master.zip -d /tmp/WordPress_Temp
   cp -paf /tmp/WordPress_Temp/WordPress-master/* /tmp/WordPress
   rm -rf /tmp/WordPress_Temp
   rm -f master
   cd /tmp/WordPress
   mkdir scripts
   ```

   Windows：前往您建立的「WordPress」目錄，並在該處建立「scripts」目錄。

   如果您在 Windows 環境中，請務必將指令碼檔案的中斷類型設定為 Unix (LF)。在記事本 \$1\$1 中，這是視窗右下角的選項。

1. 在 WordPress 目錄中建立 CodeDeploy **appspec.yml** 檔案 （如果複製範例，請檢查縮排，每個空間計數）。重要：確保「來源」路徑正確，可將 WordPress 檔案 （在本例中為 WordPress 目錄中） 複製到預期的目的地 (/var/www/html/WordPress)。在此範例中，appapppec.yml 檔案位於具有 WordPress 檔案的 目錄中，因此只需要 "/"。此外，即使您為 Auto Scaling 群組使用 RHEL AMI，也請保持原狀。Apppec.yml 檔案範例：

   ```
   version: 0.0
   os: linux
   files:
     - source: /
       destination: /var/www/html/WordPress
   hooks:
     BeforeInstall:
       - location: scripts/install_dependencies.sh
         timeout: 300
         runas: root
     AfterInstall:
       - location: scripts/config_wordpress.sh
         timeout: 300
         runas: root
     ApplicationStart:
       - location: scripts/start_server.sh
         timeout: 300
         runas: root
     ApplicationStop:
       - location: scripts/stop_server.sh
         timeout: 300
         runas: root
   ```

1. 在 WordPress ./scripts 目錄中建立 bash 檔案指令碼。

   首先，`config_wordpress.sh`使用下列內容建立 （如果您願意，可以直接編輯 wp-config.php 檔案）。
**注意**  
將 *DBName* 取代為 HA 堆疊 RFC 中指定的值 （例如 `wordpress`)。  
將 *DB\$1MasterUsername* 取代為 HA 堆疊 RFC 中指定的`MasterUsername`值 （例如 `admin`)。  
將 *DB\$1MasterUserPassword* 取代為 HA Stack RFC 中指定的`MasterUserPassword`值 （例如 `p4ssw0rd`)。  
將 *DB\$1ENDPOINT* 取代為 HA Stack RFC 執行輸出中的端點 DNS 名稱 （例如 `srt1cz23n45sfg.clgvd67uvydk.us-east-1.rds.amazonaws.com`)。您可以使用 [GetRfc](https://docs.aws.amazon.com/managedservices/latest/ApiReference-cm/API_GetRfc.html) 操作 (CLI：get-rfc --rfc-id RFC\$1ID) 或在先前提交的 HA Stack RFC 的 AMS 主控台 RFC 詳細資訊頁面中找到此項目。

   ```
   #!/bin/bash
   chmod -R 755 /var/www/html/WordPress
   cp /var/www/html/WordPress/wp-config-sample.php /var/www/html/WordPress/wp-config.php
   cd /var/www/html/WordPress
   sed -i "s/database_name_here/DBName/g" wp-config.php
   sed -i "s/username_here/DB_MasterUsername/g" wp-config.php
   sed -i "s/password_here/DB_MasterUserPassword/g" wp-config.php
   sed -i "s/localhost/DB_ENDPOINT/g" wp-config.php
   ```

1. 在相同的目錄中`install_dependencies.sh`，使用下列內容建立 ：

   ```
   #!/bin/bash
   yum install -y php
   yum install -y php-mysql
   yum install -y mysql
   service httpd restart
   ```
**注意**  
HTTPS 會在啟動時安裝為使用者資料的一部分，以允許運作狀態檢查從頭開始運作。

1. 在相同的目錄中`start_server.sh`，使用下列內容建立 ：
   + 對於 Amazon Linux 執行個體，請使用：

     ```
     #!/bin/bash
     service httpd start
     ```
   + 對於 RHEL 執行個體，請使用此 （額外的命令是允許 SELINUX 接受 WordPress 的政策）：

     ```
     #!/bin/bash
     setsebool -P  httpd_can_network_connect_db 1
     setsebool -P  httpd_can_network_connect 1
     chcon -t httpd_sys_rw_content_t /var/www/html/WordPress/wp-content -R
     restorecon -Rv /var/www/html
     service httpd start
     ```

1. 在相同的目錄中`stop_server.sh`，使用下列內容建立 ：

   ```
   #!/bin/bash
   service httpd stop
   ```

1. 建立 zip 套件。

   Linux︰

   ```
   $ cd /tmp/WordPress
   $ zip -r wordpress.zip .
   ```

   Windows：前往您的「WordPress」目錄，選取所有檔案並建立 zip 檔案，請務必將其命名為 wordpress.zip。

1. 將應用程式套件上傳至 S3 儲存貯體。

   套件必須備妥，才能繼續部署堆疊。

   您會自動存取您建立的任何 S3 儲存貯體執行個體。您可以透過堡壘或透過 S3 主控台存取，並使用drag-and-drop或瀏覽上傳 WordPress 套件至 ，然後選取 zip 檔案。

   您也可以在 shell 視窗中使用以下命令；請確定您有 zip 檔案的正確路徑：

   ```
   aws s3 cp wordpress.zip s3://BUCKET_NAME/
   ```

1. 部署 WordPress 應用程式套件。

   在開始之前收集下列資料，可讓部署更快進行。

   必要資料：
   + `VPC-ID`：此值會決定 S3 儲存貯體的位置。使用您先前使用的相同 VPC ID。
   + `CodeDeployApplicationName` 和 `CodeDeployApplicationName`：您在 HA 2-Tier堆疊 RFC 中使用的`ApplicationName`值會設定 CodeDeployApplicationName 和 CodeDeployDeploymentGroupName。此範例使用「WordPress」，但您可能已使用不同的值。
   + `S3Location`：對於 `S3Bucket`，請使用您先前建立`BucketName`的 。`S3BundleType` 和 `S3Key`來自您放在 S3 存放區的套件。

   1. 輸出 CodeDeploy 應用程式的執行參數 JSON 結構描述，將 CT 部署到名為 DeployCDAppParams.json.

      ```
      aws amscm get-change-type-version --change-type-id "ct-2edc3sd1sqmrb" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > DeployCDAppParams.json
      ```

   1. 如下所示修改結構描述並將其儲存為 ，您可以刪除並取代內容。

      ```
      {
      "Description":                       "DeployWPCDApp",
      "VpcId":                             "VPC_ID",
      "Name":                              "WordPressCDAppDeploy",
      "TimeoutInMinutes":                  60,
      "Parameters":   {
          "CodeDeployApplicationName":                "WordPress",
          "CodeDeployDeploymentGroupName":            "WordPress",
          "CodeDeployIgnoreApplicationStopFailures":   false,
          "CodeDeployRevision": {
            "RevisionType": "S3",
            "S3Location": {
              "S3Bucket":     "BUCKET_NAME",
              "S3BundleType": "zip",
              "S3Key":        "wordpress.zip" }
              }
          }
      }
      ```

   1. 將 CreateRfc 的 JSON 範本輸出至目前資料夾中名為 DeployCDAppRfc.json:

      ```
      aws amscm create-rfc --generate-cli-skeleton > DeployCDAppRfc.json
      ```

   1. 修改並儲存 DeployCDAppRfc.json 檔案，您可以刪除和取代內容。請注意， `RequestedStartTime`和 現在`RequestedEndTime`是選用的；排除它們會建立 ASAP RFC，在核准後立即執行 （通常會自動執行）。若要提交排定的 RFC，請新增這些值。

      ```
      {
      "ChangeTypeVersion":    "1.0",
      "ChangeTypeId":         "ct-2edc3sd1sqmrb",
      "Title":                "CD-Deploy-For-WP-RFC"
      }
      ```

   1. 建立 RFC，指定 DeployCDAppRfc 檔案和 DeployCDAppParams 執行參數檔案：

      ```
      aws amscm create-rfc --cli-input-json file://DeployCDAppRfc.json  --execution-parameters file://DeployCDAppParams.json
      ```

      您會在回應中收到新 RFC 的 RfcId。儲存後續步驟的 ID。

   1. 提交 RFC：

      ```
      aws amscm submit-rfc --rfc-id RFC_ID
      ```

      如果 RFC 成功，您不會收到任何輸出。

   1. 若要檢查 RFC 狀態，請執行

      ```
      aws amscm get-rfc --rfc-id RFC_ID
      ```

# 驗證應用程式部署
<a name="ex-validate-app-deploy"></a>

導覽至先前建立負載平衡器的端點 (ELB CName)，並使用 WordPress 部署的路徑：/WordPress。例如：

```
http://stack-ID-FOR-ELB.us-east-1.elb.amazonaws.com/WordPress
```

# 向下傾斜應用程式部署
<a name="ex-tear-down-app-deploy"></a>

完成教學課程後，您會想要拆解部署，才不會向您收取資源的費用。

以下是一般堆疊刪除操作。您會想要提交兩次，一次用於 HA 2-Tier堆疊，一次用於 S3 儲存貯體堆疊。最後，請提交服務請求，刪除 S3 儲存貯體的所有快照 （包括服務請求中的 S3 儲存貯體堆疊 ID)。它們會在 10 天後自動刪除，但提早刪除會節省一些成本。

本演練提供使用 AMS 主控台刪除 S3 堆疊的範例；此程序適用於使用 AMS 主控台刪除任何堆疊。
**注意**  
如果刪除 S3 儲存貯體，必須先清空物件。

必要資料：
+ `StackId`：要使用的堆疊。您可以查看 AMS 主控台**堆疊**頁面，透過左側導覽中的連結取得。使用 AMS SKMS API/CLI，執行 AMS SKMS API 參考，請參閱 AWS Artifact Console. 操作中的**報告**索引標籤 (`list-stack-summaries` CLI 中的 )。
+ 此演練的變更類型 ID 為 `ct-0q0bic0ywqk6c`，版本為 "1.0"，若要了解最新版本，請執行此命令：

  ```
  aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-0q0bic0ywqk6c
  ```

*內嵌建立*：
+ 使用內嵌提供的執行參數發出建立 RFC 命令 （在內嵌提供執行參數時逸出引號）。E

  ```
  aws amscm create-rfc --change-type-id "ct-0q0bic0ywqk6c" --change-type-version "1.0" --title "Delete My Stack" --execution-parameters "{\"StackId\":\"STACK_ID\"}"
  ```
+ 使用建立 RFC 操作中傳回的 RFC ID 提交 RFC。在提交之前，RFC 會保持 `Editing` 狀態，且不會採取任何動作。

  ```
  aws amscm submit-rfc --rfc-id RFC_ID
  ```
+ 監控 RFC 狀態並檢視執行輸出：

  ```
  aws amscm get-rfc --rfc-id RFC_ID
  ```

*範本建立*：

1. 將 RFC 範本輸出到目前資料夾中的檔案；範例將其命名為 DeleteStackRfc.json:

   ```
   aws amscm create-rfc --generate-cli-skeleton > DeleteStackRfc.json
   ```

1. 修改並儲存 DeleteStackRfc.json 檔案。由於刪除堆疊只有一個執行參數，因此執行參數可以位於 DeleteStackRfc.json 檔案本身 （不需要使用執行參數建立單獨的 JSON 檔案）。

   ExecutionParameters JSON 延伸中的內部引號必須以反斜線 (\$1) 逸出。沒有開始和結束時間的範例：

   ```
   {
   "ChangeTypeVersion":    "1.0",
   "ChangeTypeId":         "ct-0q0bic0ywqk6c",
   "Title":                "Delete-My-Stack-RFC"
   "ExecutionParameters":  "{
           \"StackId\":\"STACK_ID\"}"
   }
   ```

1. 建立 RFC：

   ```
   aws amscm create-rfc --cli-input-json file://DeleteStackRfc.json 
   ```

   您會在回應中收到新 RFC 的 RfcId。例如：

   ```
   {
   "RfcId": "daaa1867-ffc5-1473-192a-842f6b326102"
   }
   ```

   儲存後續步驟的 ID。

1. 提交 RFC：

   ```
   aws amscm submit-rfc --rfc-id RFC_ID
   ```

   如果 RFC 成功，您在命令列不會收到確認。

1. 若要監控請求的狀態和檢視執行輸出：

   ```
   aws amscm get-rfc --rfc-id RFC_ID --query "Rfc.{Status:Status.Name,Exec:ExecutionOutput}" --output table
   ```