AWS 上的專案

建立現代 Web 應用程式

部署 Web 應用程式、連接資料庫,以及分析使用者行為

單元 2:在 Web 伺服器上託管應用程式

在此單元中,您將建立使用 AWS Fargate 託管的新微型服務。 

概觀

在此單元中,您將建立使用 AWS Fargate 託管的新微型服務,以便 Mysical Mysfits 網站可以與應用程式後端整合。

AWS FargateAmazon Elastic Container Service (ECS) 中的部署選項,可讓部署容器而無須管理任何叢集或伺服器。對於 Mysical Mysfits 後端,我們將使用 Python 並在 Network Load Balancer 後的 Docker 容器中建立 Flask 應用程式。這些將構成前端網站的微型服務後端。

為何選擇 Fargate?

我們之所以選擇 Fargate,是因為它是建置長期執行程序的絕佳選擇,例如針對 Web 和行動平台以及 PaaS 平台的微型服務後端。藉助 Fargate,您可以控制容器並在執行時靈活選擇容器,而不必擔心佈建或擴展伺服器。它提供對網路、安全性及服務間通訊的完全控制,並且與 AWS 服務進行本機整合,以實現安全性、聯網、存取控制、開發人員工具設置、監控和日誌記錄。

除了 Fargate,客戶還可以選擇使用 AWS Lambda 來滿足他們的運算需求。雖然 Lambda 具有與 Fargate 相同的無伺服器優勢,但 Lambda 非常適合需要即時回應資料變更、系統狀態變化或使用者操作的資料驅動型應用程式。我們將在單元 5 中更詳盡地討論 Lambda,屆時我們將使用 Lambda 來分析網站上的客戶行為。

實作說明

請遵循下方的逐步指示來建立 AWS Fargate 服務。由於這是一個大型單元,因此我們將其分為 3 個子單元。在單元 2a 中,您將設定核心基礎架構,以便為服務部署做準備。在單元 2b 中,您將使用 AWS Fargate 來部署服務。最後,在單元 2c 中,您將使用 AWS Code Services 設定自動部署。

單元 2A:設定核心基礎架構

在建立服務之前,我們需要建立服務將使用的核心基礎架構環境,包括 Amazon VPC 中的網路基礎架構,以及 AWS Identity and Access Management 角色,這將定義 ECS 和我們的容器將在 AWS 之上擁有的許可。

我們將使用 AWS CloudFormation 來完成此操作。AWS CloudFormation 是一項服務,能夠以程式設計方式佈建您在稱為 CloudFormation 範本的 JSON 或 YAML 檔案中宣告的 AWS 資源,從而啟用基礎架構即程式碼的常用最佳實務。 

  • 我們提供了 CloudFormation 範本,用於在 /module-2/cfn/core.yml 中建立所有必要的網路和安全資源。此範本將建立以下資源:

    • Amazon VPC - 一種網路環境,在 10.0.0.0/16 私有 IP 空間中包含四個子網路 (兩個公用和兩個專用),以及所有必要的路由資料表組態。在單獨的 AWS 可用區域 (AZ) 中建立此網路的子網路,以實現 AWS 區域中多個實體設施的高可用性。進一步了解可用區域如何協助您實現高可用性
    • 兩個 NAT 閘道 (每個公用子網路一個) – 允許我們最終將其部署至我們的專用子網路中的容器與網際網路通訊,以下載必要的套件等。
    • DynamoDB VPC 端點 - 我們的微型服務後端將最終與 Amazon DynamoDB 整合以實現持久性 (請參閱單元 3 的部份內容)。
    • 安全群組 - 允許您的 Docker 容器透過 Network Load Balancer 從網際網路接收連接埠 8080 上的流量。
    • IAM 角色 - 建立 Identity and Access Management 角色。這些會在整個講習班中使用,以便您建立的 AWS 服務或資源能夠存取其他 AWS 服務 (例如 DynamoDB、S3 等)。

    若要建立這些資源,請在 Cloud9 終端機中執行以下命令 (建立堆疊需要約 10 分鐘):

    aws cloudformation create-stack --stack-name MythicalMysfitsCoreStack --capabilities CAPABILITY_NAMED_IAM --template-body file://~/environment/aws-modern-application-workshop/module-2/cfn/core.yml

    您可以透過 AWS 主控台或透過執行以下命令來查看堆疊建立的狀態:

    aws cloudformation describe-stacks --stack-name MythicalMysfitsCoreStack

    執行 describe-stacks 命令,直至看到 "StackStatus": "CREATE_COMPLETE" 狀態

    描述堆疊

    (按一下以縮放)

    收到此回應時,CloudFormation 已完成佈建上述所有核心網路和安全資源,您可以繼續操作。等待上述堆疊顯示 CREATE_COMPLETE,然後繼續。

    在整個講習班的其餘部份,您都將使用此命令輸出的值。您可以執行以下命令,將上述 describe-stacks 命令直接輸出至 IDE 中的新檔案,其將存放為 cloudformation-core-output.json:

    aws cloudformation describe-stacks --stack-name MythicalMysfitsCoreStack > ~/environment/cloudformation-core-output.json

單元 2B:使用 AWS Fargate 部署服務

接著,您將建立一個 Docker 容器映像,其中包含執行 Mysicals Mysfits 後端作為使用 Flask 建立的微型服務 API 所需的所有程式碼和組態。我們將在 Cloud9 中建置 Docker 容器映像,然後將其推送至 Amazon Elastic Container Registry,當我們使用 Fargate 建立服務時,可在其中提取該映像。

架構圖

瀏覽器將負載平衡器載入 Fargate
  • A:建置 Docker 映像

    執行我們的服務後端所需的所有程式碼都存放於您已複製到 Cloud9 IDE 儲存庫的 /module-2/app/ 目錄中。如果您想檢閱使用 Flask 建立服務 API 的 Python 程式碼,請檢視 /module-2/app/service/mythicalMysfitsService.py 檔案。

    Docker 已經安裝於您建立的 Cloud9 IDE 上,因此,若要在本機建置 Docker 映像,我們只需在 Cloud9 終端機中執行以下兩個命令:  

    首先將目錄變更為 ~/environment/module-2/app

    cd ~/environment/aws-modern-application-workshop/module-2/app

    您可以從之前的 CloudFormation **describe-stacks 輸出中獲取帳戶 ID 和預設區域

    在以下命令中,將 REPLACE_ME_ACCOUNT_ID 取代為您的帳戶 ID,將 REPLACE_ME_REGION 取代為您的預設區域,以使用包含 Docker 指令的檔案 Dockerfile 來建置 Docker 映像。該命令使用 -t 選項以特定標籤格式標記 Docker 映像,以便稍後可以將該映像推送至 Amazon Elastic Container Registry 服務。

    獲得帳戶 ID 後,即可建置 docker 映像:

    docker build . -t REPLACE_ME_AWS_ACCOUNT_ID.dkr.ecr.REPLACE_ME_REGION.amazonaws.com/mythicalmysfits/service:latest

    您會看到 docker 下載並安裝我們的應用程式需要的所有必要相依套件,並輸出用於建置映像的標籤。複製映像標籤以供後續參考在顯示的範例標籤下為:111111111111.dkr.ecr.us-east-1.amazonaws.com/mythicalmysfits/service:latest

    Successfully built 8bxxxxxxxxab
    Successfully tagged 111111111111.dkr.ecr.us-east-1.amazonaws.com/mythicalmysfits/service:latest
    B:在本機測試服務

    讓我們在 Cloud9 中於本機測試映像,確保一切都按預期執行。複製上一條命令產生的映像標籤,然後執行以下命令於「本機」部署容器 (實際上是在 AWS 內的 Cloud9 IDE 中!):

    docker run -p 8080:8080 REPLACE_ME_WITH_DOCKER_IMAGE_TAG

    因此,您將看到 Docker 報告您的容器已在本機啟動並執行:

     * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)

    若要使用本機請求測試我們的服務,我們將開啟 Cloud9 IDE 中的內建 Web 瀏覽器,該瀏覽器可用於預覽在 IDE 執行個體上執行的應用程式。

    若要開啟預覽 Web 瀏覽器,請在 Cloud9 功能表欄選取預覽 > 預覽執行中應用程式:

    preview-menu

     

    這將在 IDE 中開啟另一個面板,其中可以使用 Web 瀏覽器。在預覽瀏覽器的地址欄中將 /mysfits 附加至 URI 的末尾,然後點擊 ENTER:

    address-bar

    如果成功,您將看到該服務的回應,並應傳回存放在 `/aws-modern-application-workshop/module-2/app/service/mysfits-response.json` 中的 JSON 檔案

    服務測試完畢後,您可以在 PC 或 Mac 上按 CTRL-c 將其停止。

    C:將 Docker 映像推送至 Amazon ECR

    在本機成功測試我們的服務之後,我們可隨時在 Amazon Elastic Container Registry (Amazon ECR) 中建立容器映像儲存庫,並將映像推送至其中。若要建立登錄檔,請執行以下命令,這會在為您的帳戶建立的預設 AWS ECR 登錄檔中建立一個新的儲存庫。

    aws ecr create-repository --repository-name mythicalmysfits/service

    此命令的回應將包含有關建立儲存庫的其他中繼資料。若要將容器映像推送至我們的新儲存庫中,我們需要為該儲存庫的 Docker 用戶端獲取身份驗證登入資料。

    執行以下命令,這將傳回登入命令以擷取我們的 Docker 用戶端登入資料,然後自動執行 (包括以下 $ 在內的完整命令)。如果命令執行成功,將報告「登入成功」。

    $(aws ecr get-login --no-include-email)

    接著,使用上面複製的標籤將建立的映像推送至 ECR 儲存庫。使用此命令,Docker 會將您的映像及其相依的所有映像推送至 Amazon ECR:

    docker push REPLACE_ME_WITH_DOCKER_IMAGE_TAG

    執行以下命令,以查看存放在 ECR 儲存庫中新推送的 Docker 映像:

    aws ecr describe-images --repository-name mythicalmysfits/service
  • A︰建立 AWS Fargate 叢集

    現在,我們在 ECR 中有一個可用的映像,我們可以使用 AWS Fargate 將其部署至 Amazon ECS 上託管的服務。在最後一個單元的部份內容中,您透過 Cloud9 中的終端機在本機測試的同一服務將部署在雲端中,並在 Network Load Balancer 後公開可用。

    首先,我們將在 Amazon Elastic Container Service (ECS) 中建立叢集。這表示將要部署服務容器的目標「伺服器」叢集。「引用」中包含伺服器,因為您將使用 AWS Fargate 。Fargate 可讓您指定將容器部署至叢集,而無須自己實際佈建或管理任何伺服器。

    若要在 ECS 中建立新叢集,請執行以下命令

    aws ecs create-cluster --cluster-name MythicalMysfits-Cluster
    B:建立 AWS CloudWatch Logs 群組

    接著,我們將在 AWS CloudWatch Logs 中建立一個新的日誌群組。AWS CloudWatch Logs 是用於日誌收集和分析的服務。容器產生的日誌將作為該特定群組的一部份,自動推送至 AWS CloudWatch logs。這在使用 AWS Fargate 時尤其重要,因為您將無法存取執行容器的伺服器基礎架構。

    若要在 CloudWatch logs 中建立新的日誌群組,請執行以下命令

    aws logs create-log-group --log-group-name mythicalmysfits-logs
    C:註冊 ECS 任務定義

    現在,我們已經建立了叢集,並定義了將日誌推送至其中容器的日誌群組,我們準備註冊 ECS 任務定義。ECS 中的任務是應當一起排程的一組容器映像。任務定義宣告該容器集以及這些容器所需的資源和組態。您將使用 AWS CLI 建立新的任務定義,以了解如何將新的容器映像排程至剛建立的 ECS 叢集。

    提供了一個 JSON 檔案,它將用作 CLI 命令的輸入。

    在 IDE 中開啟 ~/environment/aws-modern-application-workshop/module-2/aws-cli/task-definition.json。

    使用您所建立資源中的相應值取代指示的值

    這些值將從之前複製的 CloudFormation 回應以及之前向 ECR 推送的 docker 映像標籤中提取,例如:REPLACE_ME_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/mythicalmysfits/service:latest

    取代 task-defintion.json 中的值並將其儲存後,執行以下命令,在 ECS 中註冊新的任務定義:

    aws ecs register-task-definition --cli-input-json file://~/environment/aws-modern-application-workshop/module-2/aws-cli/task-definition.json
  • A:建立 Network Load Balancer

    註冊新的任務定義後,我們即可在服務堆疊中佈建所需的基礎架構。我們將佈建 Network Load Balancer (NLB),使其位於我們的服務層之前,而不是直接向網際網路公開我們的服務。這會讓我們的前端網站程式碼能夠與單一 DNS 名稱通訊,而我們的後端服務則可以根據需求,或者發生故障以及需要佈建新的容器時,能夠隨時進行彈性地向內擴展和向外擴展。

    若要佈建新的 NLB,在 Cloud9 終端機中執行以下 CLI 命令 (從您儲存的 CloudFormation 輸出中擷取 subnetIds):

    aws elbv2 create-load-balancer --name mysfits-nlb --scheme internet-facing --type network --subnets REPLACE_ME_PUBLIC_SUBNET_ONE REPLACE_ME_PUBLIC_SUBNET_TWO > ~/environment/nlb-output.json

    成功執行此命令後,將會在您的 IDE 中建立一個名稱為 nlb-output.json 的新檔案。在後續步驟中,將會使用 DNSName、VpcId 和 LoadBalancerArn。

    B:建立負載平衡器目標群組

    接著,使用 CLI 建立 NLB 目標群組。目標群組允許 AWS 資源將自身註冊為負載平衡器接收以進行轉寄的請求目標。我們的服務容器會自動註冊至此目標,以便在佈建它們時可以接收來自 NLB 的流量。此命令包括一個需要取代的值,即 vpc-id,可以在 CloudFormation 傳回的之前儲存的 MythicalMysfitsCoreStack 輸出中找到該值。

    aws elbv2 create-target-group --name MythicalMysfits-TargetGroup --port 8080 --protocol TCP --target-type ip --vpc-id REPLACE_ME_VPC_ID --health-check-interval-seconds 10 --health-check-path / --health-check-protocol HTTP --healthy-threshold-count 3 --unhealthy-threshold-count 3 > ~/environment/target-group-output.json

    執行該命令後,其輸出將儲存至 IDE 中的 target-group-output.json。您將在後續步驟中引用 TargetGroupArn 值。

    C:建立負載平衡器偵聽程式

    接著,使用 CLI 為 NLB 建立負載平衡器偵聽程式。這會通知負載平衡器,對於在特定連接埠上收到的請求,應將其轉寄至已註冊到上述目標群組的目標。請確保將兩個指示值取代為您從之前步驟中儲存的 TargetGroup 和 NLB 中的相應 ARN:

    aws elbv2 create-listener --default-actions TargetGroupArn=REPLACE_ME_NLB_TARGET_GROUP_ARN,Type=forward --load-balancer-arn REPLACE_ME_NLB_ARN --port 80 --protocol TCP
  • A:為 ECS 建立服務連結角色

    如果您過去曾使用過 ECS,則可以略過此步驟,然後繼續下一步。如果您之前從未使用過 ECS,則需要在 IAM 中建立“服務連結角色”,以授予 ECS 服務自身的許可,以便在您的帳戶中發出 ECS API 請求。這是必要的,因為當您在 ECS 中建立服務時,該服務將叫用您帳戶內的 API 來執行提取 Docker 映像、建立新任務等操作。

    若不建立此角色,則不會授予 ECS 服務執行所需操作的許可。若要建立角色,請在終端機中執行以下命令:  

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

    如果上述操作傳回有關已存在角色的錯誤,則可以略過,因為這表明該角色過去在您的帳戶中已自動建立。

    B:建立服務

    建立並設定 NLB,並為 ECS 服務授予適當的許可之後,即可建立實際的 ECS **服務**,容器將在其中執行並向負載平衡器註冊以接收流量。我們為 CLI 輸入提供了一個 JSON 檔案,該檔案位於:`~/environment/aws-modern-application-workshop/module-2/aws-cli/service-definition.json`。此檔案包含待建立服務的所有組態詳細資訊,包括指示應使用 **AWS Fargate** 啟動該服務,這意味著您不必在目標叢集中佈建任何伺服器。這些容器將作為此服務所用任務的一部份進行排程,將在由 AWS 完全管理的叢集之上執行。

    在 IDE 中開啟 ~/environment/aws-modern-application-workshop/module-2/aws-cli/service-definition.json in the IDE 並取代 REPLACE_ME 的指示值。將其儲存,然後執行以下命令來建立服務:

    aws ecs create-service --cli-input-json file://~/environment/aws-modern-application-workshop/module-2/aws-cli/service-definition.json
    C:測試服務

    複製在建立 NLB 時儲存的 DNS 名稱,並使用 Cloud9 中的預覽瀏覽器 (或僅透過任何 Web 瀏覽器向其傳送請求),因為此時我們的服務在網際網路上可用。嘗試向 mysfits 資源傳送請求:

    http://mysfits-nlb-123456789-abc123456.elb.us-east-1.amazonaws.com/mysfits

    顯示與我們之前在 Cloud9 中於本機測試 Docker 容器時收到的相同 JSON 回應,意味著您的 Flask API 已啟動並在 AWS Fargate 上執行。

    注意:由於 Network Load Balancer 上沒有安裝 SSL/TLS 憑證,因此其僅支持 HTTP (http://) 請求。在本教學中,請確保僅使用 http:// 提交請求,https:// 請求將無法正常工作。

  • A︰更換 API 端點

    接著,我們需要將網站與您的新 API 後端整合在一起,而不是使用之前上傳至 S3 的硬編碼資料。您需要更新以下檔案,以使用相同的 NLB URL 進行 API 叫用 (不包括 /mysfits 路徑)︰/module-2/web/index.html

    在 Cloud9 中開啟檔案,並用 NLB URL 將下方引號間的反白顯示區域取代為:

    before-replace

    貼上後,該行應類似於以下內容:

    after-replace
    B:上傳至 S3

    若要將檔案上傳至您的 S3 託管網站,再次使用在單元 1 中建立的儲存貯體名稱,然後執行以下命令

    aws s3 cp ~/environment/aws-modern-application-workshop/module-2/web/index.html s3://INSERT-YOUR-BUCKET-NAME/index.html

    使用單元 1 結束時所用的相同 URL 開啟您的網站,以查看新的 Mysical Mysfits 網站,該網站將從 Flask API 中擷取 JSON 資料,執行已部署至 AWS Fargate 的 Docker 容器!

單元 2C:使用 AWS Code Services 自動執行部署

現在已經啟動服務並開始執行,您可能會想到要對 Flask 服務進行的程式碼變更。如果每次要對服務部署新功能時都必須執行上述所有相同步驟,則會成為開發速度的瓶頸。這正是持續整合與持續交付或 CI/CD 發揮作用之處!

在此單元中,您將建立全受管 CI/CD 堆疊,該堆疊自動將您對程式碼庫做出的所有程式碼變更傳遞至在上一個單元中建立的服務。

架構圖

建立動態的網站架構 - cloud9、程式碼工具、fargate
  • A:針對管道成品建立 S3 儲存貯體

    我們將需要建立另一個 S3 儲存貯體,用於存放在 CI/CD 管道執行過程中建立的臨時成品。針對這些成品選擇新的儲存貯體名稱,並使用以下 CLI 命令建立一個儲存貯體:

    aws s3 mb s3://REPLACE_ME_CHOOSE_ARTIFACTS_BUCKET_NAME

    接著,此儲存貯體需要儲存貯體政策,以定義對其中存放資料的許可。但是與我們允許任何人存取的網站儲存貯體不同,只有我們的 CI/CD 管道才可以存取該儲存貯體。我們在 ~/environment/aws-modern-application-workshop/module-2/aws-cli/artifacts-bucket-policy.json 中提供此政策所需的 JSON 檔案。

    開啟此檔案,在其中需要取代幾個字串以包括作為之前 MythicalMysfitsCoreStack 一部份建立的 ARN,以及您為 CI/CD 成品新選擇的儲存貯體名稱。

    修改並儲存此檔案後,執行以下命令,以將對此儲存貯體的存取權授予 CI/CD 管道:

    aws s3api put-bucket-policy --bucket REPLACE_ME_ARTIFACTS_BUCKET_NAME --policy file://~/environment/aws-modern-application-workshop/module-2/aws-cli/artifacts-bucket-policy.json
    B:建立 CodeCommit 儲存庫

    您將需要一個位置來推送和存放程式碼。為此,使用 CLI 建立 **AWS CodeCommit 儲存庫**:

    aws codecommit create-repository --repository-name MythicalMysfitsService-Repository
    C:建立 CodeBuild 專案

    有了用於存放我們程式碼的儲存庫,以及一個將用於我們的 CI/CD 成品的 S3 儲存貯體,我們可以將其新增至 CI/CD 堆疊中,從而進行服務建置。這將透過建立 AWS CodeBuild 專案來完成。每當觸發建置執行時,AWS CodeBuild 都會自動為我們的組態佈建建置伺服器,執行建置 Docker 映像並將其新版本推送至我們建立的 ECR 儲存庫所需的步驟 (然後在建置完成後降低伺服器的速度)。

    ~/environment/aws-modern-application-workshop/module-2/app/buildspec.yml 檔案中包含建置步驟 (封裝 Python 程式碼並建置/推送 Docker 容器)。您可以建立 buildspec.yml 檔案來指示 CodeBuild 在 CodeBuild 專案中執行建置需要哪些步驟。

    若要建立 CodeBuild 專案,需要使用您的資源特定參數來更新另一個 CLI 輸入檔案。它位於 ~/environment/aws-modern-application-workshop/module-2/aws-cli/code-build-project.json。同樣,就像之前透過 MythicalMysfitsCoreStackOutput 所執行的操作,取代此檔案中的值。儲存後,使用 CLI 執行以下操作以建立專案:

    aws codebuild create-project --cli-input-json file://~/environment/aws-modern-application-workshop/module-2/aws-cli/code-build-project.json
    D:建立 CodePipeline 管道

    最後,我們需要一種將 CodeCommit 儲存庫與 CodeBuild 專案持續整合的方法,以便在將程式碼變更推送至儲存庫時,建置會自動進行。然後,我們需要一種方法,將這些新建的成品持續交付至我們在 ECS 中的服務。AWS CodePipeline 是將這些操作黏附至下一步要建立的管道中所用的服務。

    您在 CodePipeline 中的管道將執行上述操作。每當將程式碼變更推送至您的 CodeCommit 儲存庫中時,CodePipeline 都會將最新程式碼傳遞至您的 AWS CodeBuild 專案中,以便進行建置。CodeBuild 成功建置後,CodePipeline 將使用 CodeBuild 執行推送至 ECR 中所用的最新容器映像將部署執行至 ECS​​。

    所有這些步驟都在 JSON 檔案中定義,前提是您將其用作 AWS CLI 的輸入來建立管道。該檔案位於 ~/environment/aws-modern-application-workshop/module-2/aws-cli/code-pipeline.json 中,將其開啟並取代其中所需的屬性,然後儲存該檔案。

    儲存後,使用以下命令在 CodePipeline 中建立管道

    aws codepipeline create-pipeline --cli-input-json file://~/environment/aws-modern-application-workshop/module-2/aws-cli/code-pipeline.json
    E:啟用對 ECR 映像儲存庫的自動存取

    在 CI/CD 管道可以成功執行端對端之前,我們還有最後一步。設置 CI/CD 管道後,您將不再需要手動將容器映像推送至 ECR。CodeBuild 會立即推送新映像。

    我們需要授予 CodeBuild 許可,以使用 ECR 儲存庫政策*對映像儲存庫執行操作。需要使用 MythicalMysfitsCoreStack 建立 CodeBuild 角色的特定 ARN 來更新政策文件,並且政策文件位於 ~/environment/aws-modern-application-workshop/module-2/aws-cli/ecr-policy.json

    更新並儲存此檔案,然後執行以下命令以建立政策

    aws ecr set-repository-policy --repository-name mythicalmysfits/service --policy-text file://~/environment/aws-modern-application-workshop/module-2/aws-cli/ecr-policy.json

    成功建立後,您將擁有一個有效的端對端 CI/CD 管道,以便將程式碼變更自動交付至 ECS 中的服務。

  • A:將 Git 與 AWS CodeCommit 結合使用

    若要測試新管道,我們需要在 Cloud9 IDE 中設定 git 並將其與 CodeCommit 儲存庫整合。

    AWS CodeCommit 針對 git 提供了登入資料協助程式,我們將用於簡化整合。

    在終端機上依次執行以下命令,以設定要與 AWS CodeCommit 一起使用的 git (如果成功,則兩者均不會報告任何回應):

    git config --global user.name "REPLACE_ME_WITH_YOUR_NAME"
    git config --global user.email REPLACE_ME_WITH_YOUR_EMAIL@example.com
    git config --global credential.helper '!aws codecommit credential-helper $@'
    git config --global credential.UseHttpPath true

    接著,使用終端機將 IDE 中的目錄變更為環境目錄:

    cd ~/environment/

    現在,我們準備使用以下終端機命令來複製儲存庫

    git clone https://git-codecommit.REPLACE_REGION.amazonaws.com/v1/repos/MythicalMysfitsService-Repository

    這會告訴我們儲存庫是空的! 透過使用以下命令將應用程式檔案複製到我們的儲存庫目錄中可以解決該問題:

    cp -r ~/environment/aws-modern-application-workshop/module-2/app/* ~/environment/MythicalMysfitsService-Repository/
    B:推送程式碼變更

    現在,我們用於在單元 2 中建立 Fargate 服務的完整服務程式碼,將存放在我們剛從 AWS CodeCommit 複製的本機儲存庫中。在提交變更之前,我們來對 Flask 服務做出變更,以證明我們建立的 CI/CD 管道可以正常工作。在 Cloud9 中,開啟存放在 ~/environment/MythicalMysfitsService-Repository/service/mysfits-response.json 中的檔案,並將其中一個 mysfits 的存留期變更為另一個值並儲存該檔案。

    儲存檔案後,將目錄變更為新的儲存庫目錄:

    cd ~/environment/MythicalMysfitsService-Repository/

    然後,執行以下 git 命令以推送您的程式碼變更。

    git add .
    git commit -m "I changed the age of one of the mysfits."
    git push

    將變更推送至儲存庫後,您可以在 AWS 主控台中開啟 CodePipeline 服務,以在透過 CI/CD 管道執行時檢視變更。提交程式碼變更後,大約需要 5 至 10 分鐘才能將變更部署至在 Fargate 中執行的即時服務中。

    在此期間,當將變更簽入 CodeCommit 儲存庫後,AWS CodePipeline 將調整觸發管道執行,觸發 CodeBuild 專案以啟動新的建置,擷取 CodeBuild 推送至 ECR 的 docker 映像並執行自動 ECS 更新服務動作,以連線耗盡服務中正在執行的現有容器,並用新建置的映像取代它們。在瀏覽器中重新整理您的 Mysical Mysfits 網站,以查看變更是否已生效。

    您可以在此處透過 CodePipeline 主控台檢視程式碼變更的進度 (無需執行任何操作,只需觀察實際的操作即可!):AWS CodePipeline

    單元 2 到此結束。

接下來,存放 mysfit 資料。