教學課程:在 AWS CodeStar 中建立和管理無伺服器專案 - AWS CodeStar

2024 年 7 月 31 日,Amazon Web Services (AWS) 將停止建立和檢視AWS CodeStar專案的支援。2024 年 7 月 31 日之後,您將無法再存取AWS CodeStar主控台或建立新專案。但是AWS CodeStar,由建立的AWS資源 (包括您的來源儲存庫、管道和組建) 將不受此變更的影響,並將繼續運作。 AWS CodeStar連線和AWS CodeStar通知不會受到此停止的影響。

 

如果您想要追蹤工作、開發程式碼以及建置、測試和部署應用程式,Amazon CodeCatalyst 提供簡化的入門程序和其他功能來管理軟體專案。進一步了解 Amazon 的功能定價 CodeCatalyst。

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

教學課程:在 AWS CodeStar 中建立和管理無伺服器專案

在此教學課程中,您使用 AWS CodeStar 來建立使用 AWS 無伺服器應用程式模型 (AWS SAM) 的專案,以建立和管理 AWS Lambda 中託管的 Web 服務的 AWS 資源。

AWS CodeStar使用依賴AWS CloudFormation的 AWS SAM 提供簡化的方式來建立和管理支援的AWS資源,包括 Amazon API Gateway、AWS Lambda函數和 Amazon DynamoDB 表格。(此專案不使用任何 Amazon DynamoDB 資料表。)

如需詳細資訊,請參閱上 GitHub的AWS無伺服器應用程式模型 (AWSSAM)

必要條件: 完成設定 AWS CodeStar中的步驟。

注意

您的 AWS 帳戶可能需要支付與此教學課程相關的成本,包括 AWS CodeStar 使用的 AWS 服務的成本。如需詳細資訊,請參閱 AWS CodeStar 定價

概要

您在此教學課程中:

  1. 使用 AWS CodeStar 建立專案,而該專案使用 AWS SAM 來建置和部署 Python 為基礎的 Web 服務。此 Web 服務託管於其中AWS Lambda,可透過 Amazon API Gateway 存取。

  2. 探索專案的主要資源,包括:

    • 存放專案原始碼的 AWS CodeCommit 儲存庫。這原始碼包括 Web 服務的邏輯,和定義相關的 AWS 資源。

    • AWS CodePipeline 管道會將原始碼的建置自動化。此管道使用 AWS SAM 建立和部署函數AWS Lambda,以便在 Amazon API 閘道中建立相關 API,以及將 API 連接至該函數。

    • 部署到 AWS Lambda 的函數。

    • 在 Amazon API Gateway 中建立的 API。

  3. 測試 Web 服務以確認 AWS CodeStar 如預期建置和部署 Web 服務。

  4. 設定您的本機工作站以使用專案的原始碼。

  5. 利用您的本機工作站變更專案的原始碼。當您新增函數到專案時,然後推送您的變更至原始碼時,AWS CodeStar 會重建和重新部署 Web 服務。

  6. 再次測試 Web 服務以確認 AWS CodeStar 如預期重建和重新部署。

  7. 使用本機工作站編寫單元測試,將一些手動測試取代為自動化測試。當您推送單元測試,AWS CodeStar 會重建和重新部署 Web 服務,並執行單元測試。

  8. 檢視單元測試的結果。

  9. 清理專案。此步驟可避免讓您的 AWS 帳戶產生與此教學課程相關的費用。

步驟 1:建立專案

在此步驟中,您使用 AWS CodeStar 主控台來建立專案。

  1. 請登入AWS Management Console並開啟AWS CodeStar主控台,網址為 https://console.aws.amazon.com/codestar/

    注意

    您必須使用與您在中建立或識別的 IAM AWS Management Console 使用者相關聯的登入資料登入設定 AWS CodeStar。這個使用者必須連接 AWSCodeStarFullAccess 受管政策。

  2. 選擇您想要建立專案及其資源的 AWS 區域。

    如需有關可用AWS區域AWS CodeStar的資訊,請參閱AWS一般參考中的區域和端點

  3. 選擇 Create project (建立專案)

  4. Choose a project template (選擇專案範本) 頁面:

    • 針對應用程式類型,選取 Web 服務

    • 對於程式設計語言,請選取 Python

    • 對於AWS服務,請選擇AWS Lambda

  5. 選擇包含您的選取項目的方塊。選擇下一步

  6. Project name (專案名稱) 中,輸入專案的名稱 (如 My SAM Project)。如果您使用不同於範例的名稱,請務必在本教學課程中加以使用。

    針對「專案 ID」,AWS CodeStar選擇此專案的相關識別碼 (例如,my-sam-project)。如果您看到不同的專案 ID,請在此教學課程中都使用此名稱。

    保留所選的 AWS CodeCommit,不要變更儲存庫名稱值。

  7. 選擇下一步

  8. 檢閱您的設定,然後選擇 [建立專案]。

    如果這是您第一次AWS CodeStar在此AWS區域中使用,請在「顯示名稱」和「電子郵件」中輸入要AWS CodeStar用於 IAM 使用者的顯示名稱和電子郵件地址。選擇下一步

  9. 請等待 AWS CodeStar 建立專案。這可能需要幾分鐘的時間。在重新整理時看到專案佈建橫幅之前,請勿繼續。

步驟 2:探索專案資源

在此步驟中,您探索四個專案的 AWS 資源,以了解專案的運作方式:

  • 儲存專案原始程式碼的儲存AWS CodeCommit庫。 AWS CodeStar為存儲庫提供名稱 my-sam-project,其中my-sam-project是項目的名稱。

  • 使用 CodeBuild 和 AWS SAM 在 API Gateway 中自動建置和部署 Web 服務的 Lambda 函數和 API 的AWS CodePipeline管道。 AWS CodeStar給管道的名稱 my-sam-project--Pipeline,其中my-sam-project是項目的 ID。

  • 包含 Web 服務邏輯的 Lambda 函數。 AWS CodeStar給該函數的名稱為 awscodestar-my-sam-project-lambda-HelloWorld-隨機 ID,其中:

    • my-sam-project是專案的識別碼。

    • HelloWorld是AWS CodeCommit儲存庫template.yaml檔案中指定的函數 ID。您稍後會探索這個檔案。

    • RANDOM_ID 是 AWS SAM 指派給函數以協助確保唯一性的隨機 ID。

  • API Gateway 中的 API 可讓您更輕鬆地呼叫 Lambda 函數。 AWS CodeStar給 API 的名稱 awscodestar-my-sam-project--lambda,其中my-sam-project是項目的 ID。

若要探索中的原始程式碼儲存庫 CodeCommit
  1. 在AWS CodeStar主控台中開啟專案的情況下,在導覽列上選擇 [存放庫]。

  2. 在「儲存庫詳細資料」中選擇存放 CodeCommit 庫 (My-SAM-Project) 的連結。

  3. 在 CodeCommit 主控台的 [程式碼] 頁面上,會顯示專案的原始程式碼檔案:

    • buildspec.yml它 CodePipeline 指示 CodeBuild 在構建階段使用,使用 AWS SAM 打包 Web 服務。

    • index.py,其中包含 Lambda 函數的邏輯。此函數只會以 ISO 格式輸出字串 Hello World 和時間戳記。

    • README.md,其中包含有關儲存庫的一般資訊。

    • template-configuration.json,其中包含的專案 ARN,內含標記具有專案 ID 之資源所用的佔位符

    • template.yml,AWSSAM 用來封裝 Web 服務,並在 API Gateway 中建立 API。

    
                        項目源代碼文件  CodeCommit

    若要檢視檔案的內容,從清單中選擇檔案。

    如需有關使用 CodeCommit 主控台的詳細資訊,請參閱《使AWS CodeCommit用指南》

要探索管道 CodePipeline
  1. 要查看有關管道的信息,請在AWS CodeStar控制台中打開項目的情況下,在導航欄上選擇 Pipeline,您會看到管道包含:

    • Source (來源) 階段用於取得 CodeCommit 的原始碼。

    • Build (建置) 階段用於建置 CodeBuild 的原始碼。

    • Deploy (部署) 階段用於部署含 AWS SAM 之內建原始碼和 AWS 資源。

  2. 若要檢視有關管道的詳細資訊,請在 Pipeline 詳細資訊中選擇要在 CodePipeline 主控台中開啟管線的管道。

如需有關使用 CodePipeline 主控台的資訊,請參閱《使AWS CodePipeline用指南》

若要在 [概觀] 頁面上瀏專案活動和AWS服務資源
  1. 在AWS CodeStar主控台中開啟您的專案,然後從導覽列選擇 [概觀]。

  2. 審核「專案」活動和「專案」資源清單。

若要探索 Lambda 中的函數
  1. 在AWS CodeStar主控台中開啟專案後,在側邊導覽列上選擇 [概觀]。

  2. 專案資源ARN 欄中,選擇 Lambda 函數的連結。

    函數的程式碼會顯示在 Lambda 主控台中。

如需使用 Lambda 主控台的相關資訊,請參閱開AWS Lambda發人員指南

若要在 API Gateway 中探索 API
  1. 在AWS CodeStar主控台中開啟專案後,在側邊導覽列上選擇 [概觀]。

  2. 專案資源ARN 欄中,選擇 Amazon API Gateway 的連結。

    API 的資源會顯示在 API Gateway 主控台中。

如需使用 API Gateway 主控台的詳細資訊,請參閱 API Gateway 開發人員指南

步驟 3:測試 Web 服務

在此步驟中,您測試 AWS CodeStar 剛建置和部署的 Web 服務。

  1. 在上一個步驟仍然開啟專案的情況下,在導覽列上選擇 Pipeline

  2. 在繼續之前,請確定針對 [來]、[建置] 和 [部署] 階段顯示 [成功]。這可能需要幾分鐘的時間。

    注意

    如果任何階段均顯示失敗,請參閱以下的故障診斷說明:

    • 如需「來」階段,請參閱AWS CodeCommit使用指南AWS CodeCommit中的「疑難排解」。

    • 如需「建置」階段,請參閱AWS CodeBuild使用指南AWS CodeBuild中的「疑難排解」。

    • 如需「部」階段,請參閱AWS CloudFormation使用指南AWS CloudFormation中的「疑難排解」。

  3. 選擇檢視應用程式

在 Web 瀏覽器中開啟的新標籤上面,Web 服務會顯示以下回應輸出:

{"output": "Hello World", "timestamp": "2017-08-30T15:53:42.682839"}

步驟 4:設定您的本機工作站以編輯專案程式碼

在此步驟中,您設定本機工作站以在 AWS CodeStar 專案中編輯原始碼。您的本機工作站可以是執行 macOS、Windows 或 Linux 的實體或虛擬電腦。

  1. 在專案仍在之前的步驟中開啟的情況下:

    • 在導覽列中,選擇 [IDE],然後展開 [存取您的專案程式碼]。

    • 選擇命令行界面下的查看說明

      如果您已安裝 Visual Studio 或 Eclipse,請選擇下方的 [指示] 或 [Eclipse],請依照指示執行,然後跳至步驟 5:新增邏輯到 Web 服務

  2. 遵循指示完成以下任務:

    1. 在您的本機工作站設定 Git。

    2. 使用 IAM 主控台為您的 IAM 使用者產生 Git 登入資料。

    3. 將專案的 CodeCommit 儲存庫複製到本機工作站上。

  3. 在左側導覽中,選擇 [專案] 以返回專案概述。

步驟 5:新增邏輯到 Web 服務

在此步驟中,您使用本機工作站新增邏輯到 Web 服務。具體來說,您可以新增 Lambda 函數,然後將其連接至 API Gateway 中的 API。

  1. 在本機工作站上,移至包含複製原始碼儲存庫的目錄。

  2. 在該目錄中,建立名為 hello.py 的檔案。新增下列程式碼,然後儲存檔案:

    import json def handler(event, context): data = { 'output': 'Hello ' + event["pathParameters"]["name"] } return { 'statusCode': 200, 'body': json.dumps(data), 'headers': {'Content-Type': 'application/json'} }

    前述程式碼會輸出字串 Hello 以及發起人傳送到函數的字串。

  3. 在相同目錄中,開啟 template.yml 檔案。將下列程式碼新增至檔案結尾,然後儲存檔案:

    Hello: Type: AWS::Serverless::Function Properties: FunctionName: !Sub 'awscodestar-${ProjectId}-lambda-Hello' Handler: hello.handler Runtime: python3.7 Role: Fn::GetAtt: - LambdaExecutionRole - Arn Events: GetEvent: Type: Api Properties: Path: /hello/{name} Method: get

    AWSSAM 使用此程式碼在 Lambda 中建立函數,在 API Gateway 中新增 API 的新方法和路徑,然後將此方法和路徑連接至新函數。

    注意

    前述程式碼的縮排是很重要的。如果您不將程式碼如實完全顯示,專案可能無法正確建置。

  4. 執行 git add . 以將您的檔案變更加入到模擬儲存庫之暫存區域。不要忘記期間 (.),它會新增所有已變更的檔案。

    注意

    如果您使用 Visual Studio 或 Eclipse,而不是命令列,使用 Git 的說明可能會不同。請參閱 Visual Studio 或 Eclipse 文件。

  5. 執行 git commit -m "Added hello.py and updated template.yaml." 以遞交複製儲存庫中的暫存檔案

  6. 執行 git push 以將您的遞交推送到遠端儲存庫。

    注意

    系統可能會提示您輸入先前為您產生的登入認證。為了避免您每次與遠端儲存庫互動時系統都出現提示,請考慮安裝和設定 Git 登入資料管理工具。例如,在 macOS 或 Linux 上,您可以在終端機執行 git config credential.helper 'cache --timeout 900',提示的間隔不短於 15 分鐘。或者,您可以執行 git config credential.helper 'store --file ~/.git-credentials',系統不會提示您再輸入一次。Git 將您的登入資料以明文存放在主目錄中的純文字檔案。如需詳細資訊,請參閱 Git 網站上的 Git Tools - Credential Storage

AWS CodeStar偵測到推送之後,它會指示 CodePipeline 使用 CodeBuild 和 AWS SAM 重建並重新部署 Web 服務。您可以在「管道」頁面上查看部署進度。

AWSSAM 給新函數的名稱 awscodestar-my-sam-project-蘭布達-你好-隨機 ID,其中:

  • my-sam-project是專案的識別碼。

  • Hello 是函數 ID,如 template.yaml 檔案之指定。

  • RANDOM_ID 是 AWS SAM 指派給函數以確保唯一性的隨機 ID。

步驟 6:測試增強的 Web 服務

在此步驟中,根據您在上一個步驟新增的邏輯測試 AWS CodeStar 建置和部署之增強的 Web 服務。

  1. 在AWS CodeStar主控台中仍然開啟您的專案時,在導覽列上選擇 Pipeline

  2. 在繼續之前,請確定管線已再次執行,且已針對 [來源]、[建置] 和 [部署] 階段顯示 [功]。這可能需要幾分鐘的時間。

    注意

    如果任何階段均顯示失敗,請參閱以下的故障診斷說明:

    • 如需「來」階段,請參閱AWS CodeCommit使用指南AWS CodeCommit中的「疑難排解」。

    • 如需「建置」階段,請參閱AWS CodeBuild使用指南AWS CodeBuild中的「疑難排解」。

    • 如需「部」階段,請參閱AWS CloudFormation使用指南AWS CloudFormation中的「疑難排解」。

  3. 選擇檢視應用程式

    在 Web 瀏覽器中開啟的新標籤上面,Web 服務會顯示以下回應輸出:

    {"output": "Hello World", "timestamp": "2017-08-30T15:53:42.682839"}
  4. 在標籤的地址方塊,新增路徑 /hello/ 和您的名字至 URL 的尾端 (例如,https://API_ID.execute-api.REGION_ID.amazonaws.com/Prod/hello/YOUR_FIRST_NAME),然後按 Enter

如果您的名字是 Mary,Web 服務會顯示下列回應輸出:

{"output": "Hello Mary"}

步驟 7:新增單元測試到 Web 服務

在此步驟中,您使用本機工作站新增 AWS CodeStar 在 Web 服務上執行的測試。此測試會取代您稍早所做的手動測試。

  1. 在本機工作站上,移至包含複製原始碼儲存庫的目錄。

  2. 在該目錄中,建立名為 hello_test.py 的檔案。新增下列程式碼,然後儲存檔案。

    from hello import handler def test_hello_handler(): event = { 'pathParameters': { 'name': 'testname' } } context = {} expected = { 'body': '{"output": "Hello testname"}', 'headers': { 'Content-Type': 'application/json' }, 'statusCode': 200 } assert handler(event, context) == expected

    此測試會檢查 Lambda 函數的輸出是否為預期的格式。若是,則測試成功。否則,測試失敗。

  3. 在相同目錄中,開啟 buildspec.yml 檔案。將檔案的內容取代為下列程式碼,然後儲存檔案。

    version: 0.2 phases: install: runtime-versions: python: 3.7 commands: - pip install pytest # Upgrade AWS CLI to the latest version - pip install --upgrade awscli pre_build: commands: - pytest build: commands: # Use AWS SAM to package the application by using AWS CloudFormation - aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.yml # Do not remove this statement. This command is required for AWS CodeStar projects. # Update the AWS Partition, AWS Region, account ID and project ID in the project ARN on template-configuration.json file so AWS CloudFormation can tag project resources. - sed -i.bak 's/\$PARTITION\$/'${PARTITION}'/g;s/\$AWS_REGION\$/'${AWS_REGION}'/g;s/\$ACCOUNT_ID\$/'${ACCOUNT_ID}'/g;s/\$PROJECT_ID\$/'${PROJECT_ID}'/g' template-configuration.json artifacts: type: zip files: - template-export.yml - template-configuration.json

    此構建規範指示 CodeBuild 將 pytest(Python 測試框架)安裝到其構建環境中。 CodeBuild 使用 pytest 來運行單元測試。建置規格的其他部分同前。

  4. 使用 Git 將這些變更推送到遠端儲存庫。

    git add . git commit -m "Added hello_test.py and updated buildspec.yml." git push

步驟 8:檢視單元測試結果

在此步驟中,您查看單元測試是否成功或失敗。

  1. 在AWS CodeStar主控台中仍然開啟您的專案時,在導覽列上選擇 Pipeline

  2. 在繼續之前,請確定管線已再次執行。這可能需要幾分鐘的時間。

    如果單元測試成,則會針對「建置」階段顯示「成功」。

  3. 若要檢視單元測試結果詳細資料,請在「建置」階段中選擇CodeBuild連結。

  4. 在 CodeBuild 主控台的 [Build Project: my-sam-project] 頁面的 [組建歷程記錄] 中,選擇資料表之 [Build run] 資料行中的連結。

  5. my-sam-project:BUILD_ID 頁面的 [組建記錄] 中,選擇 [檢視整個記錄檔] 連結。

  6. 在 Amazon Lo CloudWatch gs 主控台中,查看日誌輸出中的測試結果類似下列內容。在以下測試結果中,測試已通過:

    ... ============================= test session starts ============================== platform linux2 -- Python 2.7.12, pytest-3.2.1, py-1.4.34, pluggy-0.4.0 rootdir: /codebuild/output/src123456789/src, inifile: collected 1 item hello_test.py . =========================== 1 passed in 0.01 seconds =========================== ...

    如果測試失敗,日誌輸出中應有詳細資訊來協助您排除障礙。

步驟 9:清除

在此步驟中,您清除專案,以避免此專案持續產生費用。

如果您想要繼續使用此專案,您可以略過此步驟,但您的 AWS 帳戶可能會繼續產生費用。

  1. 在AWS CodeStar主控台中仍開啟專案的情況下,在導覽列上選擇 [設定]

  2. 專案詳細資訊中,選擇刪除專案

  3. 輸入delete,保持選取 [刪除資源] 方塊,然後選擇 [刪除]。

    重要

    如果您清除此方塊,專案記錄會從 AWS CodeStar 刪除,但許多專案的 AWS 資源會保留。您的 AWS 帳戶可能會繼續產生費用。

如果仍有針對此專案AWS CodeStar建立的 Amazon S3 儲存貯體,請按照下列步驟將其刪除。 :

  1. 打開 Amazon S3 控制台,位於 https://console.aws.amazon.com/s3/

  2. 在存儲桶列表中,選擇旁邊的圖標 AWS 代碼星-區域 ID-帳戶 ID--管道,其中:my-sam-project

    • REGION_ID 是您剛刪除的專案的 AWS 區域 ID。

    • ACCOUNT_ID 是您的 AWS 帳戶 ID。

    • my-sam-project是您剛才刪除的專案 ID。

  3. 選擇清空儲存貯體。輸入儲存貯體的名稱,然後選擇確認

  4. 選擇 Delete Bucket (刪除儲存貯體)。輸入儲存貯體的名稱,然後選擇確認

後續步驟

現在您已完成這個教學課程,我們建議您檢閱下列資源: