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

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

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

在此教學課程中,您會使用 AWS CodeStar 來建立使用AWSServerless Application RepositoryAWSSAM)來創建和管理AWS中託管的 Web 服務的資源AWS Lambda。

AWS CodeStar 使用AWSSAM,它依賴於AWS CloudFormation,以提供創建和管理受支持的簡化方法AWS資源,包括 Amazon API Gateway API、AWS Lambda函數和 Amazon DynamoDB 資料表。(此專案不使用任何 Amazon DynamoDB 資料表。)

如需詳細資訊,請參閱「」AWSServerless Application RepositoryAWSSAM (SAM)(在 GitHub 上)。

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

注意

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

概觀

您在此教學課程中:

  1. 使用 AWS CodeStar 創建一個使用AWSSAM 建立和部署 Python 為基礎的 Web 服務。此 Web 服務是在AWS Lambda,並且可以通過 Amazon API Gateway 進行訪問。

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

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

    • AWS CodePipeline 管道會將原始碼的建置自動化。此管道使用AWSSAM 創建一個函數並將函數部署到AWS Lambda,請在 Amazon API Gateway 中建立相關的 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/

    注意

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

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

    如需的相關資訊AWS提供 AWS CodeStar 的地區,請參閲區域與端點中的AWS一般參考

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

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

    • 適用於應用程式類型,選擇Web 服務

    • 適用於程式設計語言,選擇蟒蛇

    • 適用於AWS服務,選擇AWS Lambda

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

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

    適用於專案 ID,AWS CodeStar 會選擇專案的相關識別碼(例如,我的同一個項目。如果您看到不同的專案 ID,請在此教學課程中都使用此名稱。

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

  7. 選擇 Next (下一步)。

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

    如果您是第一次使用 AWS CodeStar,請參AWS區域,用於Display Name (顯示名稱)電子郵件中,輸入您想要 AWS CodeStar 用於您 IAM 使用者的顯示名稱與電子郵件地址。選擇 Next (下一步)。

  9. 在 AWS CodeStar 建立專案的同時,請等待。這可能需要幾分鐘的時間。在您看到佈建專案橫幅,當您刷新。

步驟 2:探索專案資源

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

  • 存放專案原始碼的 AWS CodeCommit 儲存庫。AWS CodeStar 為存儲庫提供名稱我的同一個項目其中,我的同一個項目是專案的名稱。

  • 所以此AWS CodePipeline管道,使用 CodeBuild 和AWSSAM 在 API Gateway 中自動構建和部署 Web 服務的 Lambda 函數和 API。AWS CodeStar 為管道提供名稱my-sam-project-管道其中,我的同一個項目是專案的 ID。

  • 包含 Web 服務邏輯的 Lambda 函數。AWS CodeStar 為函數提供名稱awscodestar-my-sam-項目-lambda-Hello世界/HelloWorld-隨機編號其中:

    • my-sam-project 是專案的 ID。

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

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

  • API Gateway 中的 API,使調用 Lambda 函數變得更加容易。AWS CodeStar 為 API 提供名稱awscodestar-my-sam-project (lambda)其中,我的同一個項目是專案的 ID。

探索 CodeCommit 中的原始碼儲存庫
  1. 若在 AWS CodeStar 主控台開啟專案,請在導覽列中選擇儲存庫

  2. 選擇指向 CodeCommit 存儲庫的鏈接(My-SAM-Project) 在存庫詳細資訊

  3. 在 CodeCommit 控制台中,在程式碼頁面中,會顯示專案的原始碼檔案:

    • buildspec.yml,其中 Codepipeline 指示編碼建置在建置階段使用,以使用AWSSAM。

    • 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 控台中開啟時,請在導覽列中選擇管道,您會看到管道包含:

    • 一個來源階段來獲取 CodeCommit 的原始碼。

    • 一個建置階段來建立使用 CodeBuild 來建置的原始碼。

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

  2. 如需管道的詳細資訊,請在管道詳細信息中,選擇您的管道以在 CodePipeline 控制台中打開管道。

如需使用 CodePipeline 主控台的相關資訊,請參AWS CodePipeline使用者指南

要探索項目活動和AWS服務資源概觀頁面
  1. 在 AWS CodeStar 主控台開啟專案,然後從導覽列選擇概觀

  2. 項目活動專案資源清單。

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

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

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

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

探索 API Gateway 中的 API
  1. 若在 AWS CodeStar 主控台開啟專案,請在側邊導覽列中選擇概觀

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

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

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

步驟 3:測試 Web 服務

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

  1. 若在專案仍在之前的步驟開啟的情況下,請在導覽列中選擇管道

  2. 確定Succeeded將顯示來源建置,以及部署階段,然後再繼續。這可能需要幾分鐘的時間。

    注意

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

  3. 選擇檢視應用程式

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

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

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

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

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

    • 在導覽列中,選擇IDE,然後展開訪問您的項目代碼

    • 選擇查看説明下面命令列界面

      如果您已經安裝 Visual Studio 或 Eclipse,請選擇查看説明下面Visual Studio或者日食,請依照説明操作,然後跳到步驟 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,然後將此方法和路徑連接到新的函數。

    注意

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

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

    注意

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

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

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

    注意

    系統可能會提示您輸入之前為您生成的 IAM 用户名稱和密碼。為了避免您每次與遠端儲存庫互動時系統都出現提示,請考慮安裝和設定 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 和AWSSAM 來重新建置和重新部署 Web 服務。您可以在管道(憑證已建立!) 頁面上的名稱有些許差異。

AWS SAM 會提供新的函數名稱 awscodestar-my-sam-project-lambda-Hello-RANDOM_ID,其中:

  • my-sam-project 是專案的 ID。

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

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

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

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

  1. 在您的專案於 AWS CodeStar 主控台仍然開啟的情況下,請在導覽列中選擇管道

  2. 請確定管道已再次執行,並且Succeeded將顯示來源建置,以及部署階段,然後再繼續。這可能需要幾分鐘的時間。

    注意

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

  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 主控台仍然開啟的情況下,請在導覽列中選擇管道

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

    如果單元測試成功,Succeeded將顯示建置階段。

  3. 要查看單元測試結果詳細信息,請在建置階段中,選擇CodeBuild鏈接。

  4. 在 CodeBuild 控制台中,在建置專案:my-sam-project頁面上的組建歷史記錄中,選擇建置運行列中的名稱有些許差異。

  5. my-sam-project:BUILD_ID 頁面,在 Build logs (建置日誌) 中選擇 View entire log (查看整個日誌) 連結。

  6. 在 Amazon CloudWatch Logs 主控台中,在類似下列項目之日誌輸出中查看測試結果。在以下測試結果中,測試已通過:

    ... ============================= 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. In項目詳細信息,選擇刪除專案

  3. Enterdelete,保留刪除資源框,然後選擇刪除

    重要

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

如果 AWS CodeStar 仍然為此專案建立的 Amazon S3 存儲段,請執行以下步驟來刪除它。 :

  1. 在 Amazon S3 主控台開啟 Amazon S3 主控台,請在https://console.aws.amazon.com/s3/

  2. 在儲存貯體清單中,選擇 aws-codestar-REGION_ID-ACCOUNT_ID-my-sam-project--pipe 旁的圖示,其中:

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

    • ACCOUNT_ID 是您的 AWS 帳戶 ID。

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

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

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

後續步驟

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