本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
CLI 教學課程:部署 Tier 和 Tie WordPress 網站
本節說明如何使用 AMS CLI 將高可用性 (HA) WordPress 網站部署至 AMS 環境。這組指示包含建立必要 WordPress CodeDeploy 相容套件 (例如 zip) 檔案的範例。
注意
此部署演練旨在與 AMZN Linux 環境搭配使用。
基本變數參數會標示為可取代;不過,您可能想要修改其他參數以符合您的情況。
任務和必要 RFCs的摘要:
建立基礎設施:
建立負載平衡器
建立 Auto Scaling 群組並將其與負載平衡器綁定
為 CodeDeploy 應用程式建立 S3 儲存貯體
建立 WordPress 應用程式套件 (不需要 RFC)
使用 CodeDeploy 部署 WordPress 應用程式套件:
建立 CodeDeploy 應用程式
建立 CodeDeploy 部署群組
將 WordPress 應用程式套件上傳至 S3 儲存貯體 (不需要 RFC)
部署 CodeDeploy 應用程式
驗證部署
向下拉動部署
遵循來自已驗證帳戶的命令列中的所有步驟。
使用 CLI 建立 RFC
如需建立 RFCs的詳細資訊,請參閱建立 RFCs;如需常見 RFC 參數的說明,請參閱 RFC 常見參數。
為 CodeDeploy 建立 WordPress 應用程式套件
本節提供建立應用程式部署套件的範例。
下載 WordPress、解壓縮檔案並建立 ./scripts 目錄。
Linux 命令:
wget https://github.com/WordPress/WordPress/archive/master.zipWindows:貼
https://github.com/WordPress/WordPress/archive/master.zip入瀏覽器視窗並下載 zip 檔案。建立要在其中組合套件的暫時目錄。
Linux︰
mkdir /tmp/WordPressWindows:建立「WordPress」目錄,稍後您將使用目錄路徑。
將 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 scriptsWindows:前往您建立的「WordPress」目錄,並在該處建立「scripts」目錄。
如果您在 Windows 環境中,請務必將指令碼檔案的中斷類型設定為 Unix (LF)。在記事本 ++ 中,這是視窗右下角的選項。
在 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-
在 WordPress ./scripts 目錄中建立 bash 檔案指令碼。
首先,
config_wordpress.sh使用下列內容建立 (如果您願意,可以直接編輯 wp-config.php 檔案)。注意
將
DBName取代為 HA 堆疊 RFC 中指定的值 (例如wordpress)。將
DB_MasterUsername取代為 HA 堆疊 RFC 中指定的MasterUsername值 (例如admin)。將
DB_MasterUserPassword取代為 HA 堆疊 RFC 中指定的MasterUserPassword值 (例如p4ssw0rd)。將
DB_ENDPOINT取代為 HA Stack RFC 執行輸出中的端點 DNS 名稱 (例如srt1cz23n45sfg.clgvd67uvydk.us-east-1.rds.amazonaws.com)。您可以使用 GetRfc 操作 (CLI:get-rfc --rfc-id RFC_ID) 或在先前提交的 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 在相同的目錄中
install_dependencies.sh,使用下列內容建立 :#!/bin/bash yum install -y php yum install -y php-mysql yum install -y mysql service httpd restart注意
HTTPS 會在啟動時安裝為使用者資料的一部分,以允許運作狀態檢查從頭開始。
在相同的目錄中
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
在相同的目錄中
stop_server.sh,使用下列內容建立 :#!/bin/bash service httpd stop建立 zip 套件。
Linux︰
$ cd /tmp/WordPress $ zip -r wordpress.zip .Windows:前往您的「WordPress」目錄,選取所有檔案並建立 zip 檔案,請務必將其命名為 wordpress.zip。
使用 CodeDeploy 部署 WordPress 應用程式套件
CodeDeploy 是一種 AWS 部署服務,可將應用程式部署自動化至 Amazon EC2 執行個體。此程序的這個部分涉及建立 CodeDeploy 應用程式、建立 CodeDeploy 部署群組,然後使用 CodeDeploy 部署應用程式。
建立 CodeDeploy 應用程式
CodeDeploy 應用程式只是 AWS CodeDeploy 使用的名稱或容器,以確保在部署期間參考正確的修訂、部署組態和部署群組。在此情況下,部署組態是您先前建立的 WordPress 套件。
必要資料:
VpcId:您正在使用的 VPC,這應該與先前使用的 VPC 相同。CodeDeployApplicationName:在帳戶中必須是唯一的。查看 CodeDeploy 主控台以檢查現有的應用程式名稱。ChangeTypeId和ChangeTypeVersion:此演練的變更類型 ID 為ct-0ah3gwb9seqk2,若要了解最新版本,請執行此命令:aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-0ah3gwb9seqk2
將 CodeDeploy 應用程式 CT 的執行參數 JSON 結構描述輸出到目前資料夾中的檔案;範例將其命名為 CreateCDAppParams.json.
aws amscm get-change-type-version --change-type-id "ct-0ah3gwb9seqk2" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > CreateCDAppParams.json修改並儲存 JSON 檔案,如下所示;您可以刪除並取代內容。
{ "Description": "Create WordPress CodeDeploy App", "VpcId": "VPC_ID", "StackTemplateId": "stm-sft6rv00000000000", "Name": "WordPressCDApp", "TimeoutInMinutes": 60, "Parameters": { "CodeDeployApplicationName": "WordPressCDApp" } }將 CreateRfc 的 JSON 範本輸出到目前資料夾中的檔案;範例將其命名為 CreateCDAppRfc.json.
aws amscm create-rfc --generate-cli-skeleton > CreateCDAppRfc.json修改並儲存 JSON 檔案,如下所示;您可以刪除並取代內容。請注意,
RequestedStartTime和 現在RequestedEndTime是選用的;排除它們會導致 RFC 在核准後立即執行 (通常會自動發生)。若要提交「排程」RFC,請新增這些值。{ "ChangeTypeVersion": "1.0", "ChangeTypeId": "ct-0ah3gwb9seqk2", "Title": "CD-App-For-WP-Stack-RFC" }建立 RFC,指定 CreateCDAppRfc 檔案和執行參數檔案:
aws amscm create-rfc --cli-input-json file://CreateCDAppRfc.json --execution-parameters file://CreateCDAppParams.json您會在回應中收到新 RFC 的 RFC ID。儲存後續步驟的 ID。
提交 RFC:
aws amscm submit-rfc --rfc-idRFC_ID如果 RFC 成功,您不會收到任何輸出。
提交 RFC:
aws amscm get-rfc --rfc-idRFC_ID
建立 CodeDeploy 部署群組
建立 CodeDeploy 部署群組。
CodeDeploy 部署群組會定義一組以部署為目標的個別執行個體。
必要資料:
VpcId:您正在使用的 VPC,這應該與先前使用的 VPC 相同。CodeDeployApplicationName:使用您先前建立的值。CodeDeployAutoScalingGroups:使用您先前建立的 Auto Scaling 群組名稱。CodeDeployDeploymentGroupName:部署群組的名稱。此名稱在與部署群組建立關聯的每個應用程式中都必須是獨一無二的。CodeDeployServiceRoleArn:使用範例中提供的公式。ChangeTypeId和ChangeTypeVersion:此演練的變更類型 ID 為ct-2gd0u847qd9d2,若要了解最新版本,請執行此命令:aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-2gd0u847qd9d2
將執行參數 JSON 結構描述輸出到目前資料夾中的檔案;範例將其命名為 CreateCDDepGroupParams.json.
aws amscm get-change-type-version --change-type-id "ct-2gd0u847qd9d2" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > CreateCDDepGroupParams.json修改並儲存 JSON 檔案,如下所示;您可以刪除並取代內容。
{ "Description": "CreateWPCDDeploymentGroup", "VpcId": "VPC_ID", "StackTemplateId": "stm-sp9lrk00000000000", "Name": "WordPressCDAppGroup", "TimeoutInMinutes": 60, "Parameters": { "CodeDeployApplicationName": "WordPressCDApp", "CodeDeployAutoScalingGroups": ["ASG_NAME"], "CodeDeployDeploymentConfigName": "CodeDeployDefault.HalfAtATime", "CodeDeployDeploymentGroupName": "UNIQUE_CDDepGroupNAME", "CodeDeployServiceRoleArn": "arn:aws:iam::ACCOUNT_ID:role/aws-codedeploy-role" } }將 CreateRfc 的 JSON 範本輸出至目前資料夾中的檔案;範例名稱為 CreateCDDepGroupRfc.json.
aws amscm create-rfc --generate-cli-skeleton > CreateCDDepGroupRfc.json修改並儲存 JSON 檔案,如下所示;您可以刪除並取代內容。請注意,
RequestedStartTime和 現在RequestedEndTime是選用的;排除它們會導致 RFC 在核准後立即執行 (通常會自動發生)。若要提交「排程」RFC,請新增這些值。{ "ChangeTypeVersion": "1.0", "ChangeTypeId": "ct-2gd0u847qd9d2", "Title": "CD-Dep-Group-For-WP-Stack-RFC" }建立 RFC,指定 CreateCDDepGroupRfc 檔案和執行參數檔案:
aws amscm create-rfc --cli-input-json file://CreateCDDepGroupRfc.json --execution-parameters file://CreateCDDepGroupParams.json您會在回應中收到新 RFC 的 RFC ID。儲存後續步驟的 ID。
提交 RFC:
aws amscm submit-rfc --rfc-idRFC_ID如果 RFC 成功,您不會收到任何輸出。
檢查 RFC 狀態:
aws amscm get-rfc --rfc-idRFC_ID
上傳 WordPress 應用程式
您會自動存取您建立的任何 S3 儲存貯體執行個體。您可以透過堡壘 (請參閱存取執行個體) 或透過 S3 主控台存取,然後上傳 CodeDeploy 套件。套件必須就位,才能繼續部署堆疊。此範例使用先前建立的儲存貯體名稱。
aws s3 cp wordpress/wordpress.zip s3://ACCOUNT_ID-codedeploy-bundles/
使用 CodeDeploy 部署 WordPress 應用程式
部署 CodeDeploy 應用程式。
一旦您擁有 CodeDeploy 應用程式套件和部署群組,請使用此 RFC 來部署應用程式。
必要資料:
VPC-ID:您正在使用的 VPC,這應該與先前使用的 VPC 相同。CodeDeployApplicationName:使用您先前建立之 CodeDeploy 應用程式的名稱。CodeDeployDeploymentGroupName:使用您先前建立的 CodeDeploy 部署群組名稱。S3Location(您上傳應用程式套件的位置)S3Bucket::您先前建立的 BucketName,S3BundleType以及S3Key:您放在 S3 存放區上套件的類型和名稱。ChangeTypeId和ChangeTypeVersion:此演練的變更類型 ID 為ct-2edc3sd1sqmrb,若要了解最新版本,請執行此命令:aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-2edc3sd1sqmrb
將 CodeDeploy 應用程式部署 CT 的執行參數 JSON 結構描述輸出至目前資料夾中的檔案;範例會將其命名為 DeployCDAppParams.json.
aws amscm get-change-type-version --change-type-id "ct-2edc3sd1sqmrb" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > DeployCDAppParams.json修改 JSON 檔案,如下所示;您可以刪除和取代內容。對於
S3Bucket,請使用您先前建立BucketName的 。{ "Description": "Deploy WordPress CodeDeploy Application", "VpcId": "VPC_ID", "Name": "WP CodeDeploy Deployment Group", "TimeoutInMinutes": 60, "Parameters": { "CodeDeployApplicationName": "WordPressCDApp", "CodeDeployDeploymentGroupName": "WordPressCDDepGroup", "CodeDeployIgnoreApplicationStopFailures":false, "CodeDeployRevision": { "RevisionType": "S3", "S3Location": { "S3Bucket": "ACCOUNT_ID.BUCKET_NAME", "S3BundleType": "zip", "S3Key": "wordpress.zip" } } } }將 CreateRfc 的 JSON 範本輸出至目前資料夾中的檔案;範例名稱為 DeployCDAppRfc.json:
aws amscm create-rfc --generate-cli-skeleton > DeployCDAppRfc.json修改並儲存 DeployCDAppRfc.json 檔案;您可以刪除和取代內容。
{ "ChangeTypeVersion": "1.0", "ChangeTypeId": "ct-2edc3sd1sqmrb", "Title": "CD-Deploy-For-WP-Stack-RFC", "RequestedStartTime": "2017-04-28T22:45:00Z", "RequestedEndTime": "2017-04-28T22:45:00Z" }建立 RFC,指定執行參數檔案和 DeployCDAppRfc 檔案:
aws amscm create-rfc --cli-input-json file://DeployCDAppRfc.json --execution-parameters file://DeployCDAppParams.json您會在回應中收到新 RFC 的 RfcId。儲存後續步驟的 ID。
提交 RFC:
aws amscm submit-rfc --rfc-idRFC_ID如果 RFC 成功,您不會收到任何輸出。
驗證應用程式部署
導覽至先前建立負載平衡器的端點 (ELB CName),並使用 WordPress 部署的路徑:/WordPress。例如:
http://stack-ID-FOR-ELB.us-east-1.elb.amazonaws.com/WordPress
向下傾斜應用程式部署
若要縮減部署,請針對 RDS 資料庫堆疊、應用程式負載平衡器、Auto Scaling 群組、S3 儲存貯體,以及 Code Deploy 應用程式和 group--ix RFCs提交 Delete Stack CT。此外,您可以為要刪除的 RDS 快照提交服務請求 (它們會在 10 天後自動刪除,但在那裡需要支付少量費用)。收集所有 的堆疊 IDs,然後遵循下列步驟。
此逐步解說提供使用 AMS 主控台刪除 S3 堆疊的範例;此程序適用於使用 AMS 主控台刪除任何堆疊。
注意
如果刪除 S3 儲存貯體,必須先清空物件。
必要資料:
StackId:要使用的堆疊。您可以查看 AMS 主控台堆疊頁面,透過左側導覽中的連結取得。使用 AMS SKMS API/CLI,執行 AMS SKMS API 參考,請參閱 AWS 成品主控台中的報告索引標籤。操作 (list-stack-summariesCLI 中的 )。此演練的變更類型 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-idRFC_ID監控 RFC 狀態並檢視執行輸出:
aws amscm get-rfc --rfc-idRFC_ID
範本建立:
將 RFC 範本輸出到目前資料夾中的檔案;範例將其命名為 DeleteStackRfc.json:
aws amscm create-rfc --generate-cli-skeleton > DeleteStackRfc.json修改並儲存 DeleteStackRfc.json 檔案。由於刪除堆疊只有一個執行參數,因此執行參數可以位於 DeleteStackRfc.json 檔案本身 (不需要使用執行參數建立單獨的 JSON 檔案)。
ExecutionParameters JSON 延伸中的內部引號必須以反斜線 (\) 逸出。沒有開始和結束時間的範例:
{ "ChangeTypeVersion": "1.0", "ChangeTypeId": "ct-0q0bic0ywqk6c", "Title": "Delete-My-Stack-RFC" "ExecutionParameters": "{ \"StackId\":\"STACK_ID\"}" }建立 RFC:
aws amscm create-rfc --cli-input-json file://DeleteStackRfc.json您會在回應中收到新 RFC 的 RfcId。例如:
{ "RfcId": "daaa1867-ffc5-1473-192a-842f6b326102" }儲存後續步驟的 ID。
提交 RFC:
aws amscm submit-rfc --rfc-idRFC_ID如果 RFC 成功,您在命令列不會收到確認。
若要監控請求的狀態和檢視執行輸出:
aws amscm get-rfc --rfc-idRFC_ID--query "Rfc.{Status:Status.Name,Exec:ExecutionOutput}" --output table