本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:部署無伺服器應用程式
在本教學課程中,您將學習如何使用工作流程將無伺服器應用程式建置、測試和部署為 CloudFormation 堆疊。
本教程中的應用程序是一個簡單的 Web 應用程序,輸出一個「Hello World」消息。它由一個 AWS Lambda 函數和一個 Amazon API 網關組成,您可以使用 AWS Serverless Application Model (AWS SAM) 來構建它,這是 AWS CloudFormation.
主題
必要條件
開始之前:
-
您需要具有已連線 AWS 帳戶的 CodeCatalyst 空間。如需詳細資訊,請參閱 建立空間。
-
在您的空間中,您需要一個名為:
codecatalyst-cfn-project
使用「從頭開始」選項建立此專案。
如需詳細資訊,請參閱 在 Amazon CodeCatalyst 中建立空專案。
-
在你的項目中,你需要一 CodeCatalyst 個名為:
codecatalyst-cfn-environment
設定此環境的方式如下:
-
選擇任何類型,例如非生產。
-
將您的 AWS 帳戶 Connect 到它。
-
對於「預設」IAM 角色,請選擇任何角色。稍後您將指定不同的角色。
如需詳細資訊,請參閱 部署至 AWS 帳戶 和 VPCs。
-
步驟 1:建立來源儲存庫
在此步驟中,您可以在中建立來源儲存庫 CodeCatalyst。此儲存庫用於儲存教學課程的來源檔案,例如 Lambda 函數檔案。
如需來源儲存庫的詳細資訊,請參閱建立來源儲存庫。
若要建立來源儲存庫
-
在功能窗格中 CodeCatalyst,選擇 [程式碼],然後選擇 [原始碼儲存庫]。
-
選擇 [新增儲存庫],然後選擇 [建立儲存庫]
-
在存放庫名稱中,輸入:
codecatalyst-cfn-source-repository
-
選擇建立。
現在,您已經創建了一個名為codecatalyst-cfn-source-repository
.
步驟 2:建立 AWS 角色
在此步驟中,您會建立下列 AWS IAM角色:
-
部署角色 — 授與部 CodeCatalyst 署 AWS CloudFormation 堆疊動作權限,以存取您將在其中部署無伺 CloudFormation 服器應用程式的 AWS 帳戶和服務。「部署 AWS CloudFormation 堆疊」動作是工作流程的一部分。
-
建立角色 — 授與 CodeCatalyst 建立動作權限,以存取您的 AWS 帳戶並寫入存放無伺服器應用程式套件的 Amazon S3。建置動作是工作流程的一部分。
-
堆疊角色 — CloudFormation 授與讀取和修改您稍後將提供之 AWS SAM 範本中指定之資源的權限。也會授予權限 CloudWatch。
有關IAM角色的詳細資訊,請參閱《使用指南》中的AWS Identity and Access Management 〈IAM角色〉。
注意
為了節省時間,您可以建立一個稱為角色的單一CodeCatalystWorkflowDevelopmentRole-
角色,而不是先前列出的三個角色。如需詳細資訊,請參閱 為您的帳戶和空間建立CodeCatalystWorkflowDevelopmentRole-spaceName角色。瞭解spaceName
CodeCatalystWorkflowDevelopmentRole-
角色具有非常廣泛的權限,可能會造成安全性風險。我們建議您只在不太擔心安全性的教學課程和案例中使用此角色。本教學課程假設您正在建立先前列出的三個角色。spaceName
注意
Lambda 執行角色也是必要的,但您現在不需要建立它,因為當您在步驟 5 中執行工作流程時,sam-template.yml
檔案會為您建立角色。
若要建立部署角色
-
建立角色的策略,如下所示:
-
登入 AWS。
開啟位於 IAM 的 https://console.aws.amazon.com/iam/
主控台。 -
在導覽窗格中,選擇政策。
-
選擇 Create policy (建立政策)。
-
選擇 (JSON) 索引標籤。
-
刪除現有的代碼。
-
貼上以下程式碼:
{ "Version": "2012-10-17", "Statement": [{ "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:Describe*", "cloudformation:UpdateStack", "cloudformation:CreateChangeSet", "cloudformation:DeleteChangeSet", "cloudformation:ExecuteChangeSet", "cloudformation:SetStackPolicy", "cloudformation:ValidateTemplate", "cloudformation:List*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
注意
第一次使用角色執行工作流程動作時,請在資源策略陳述式中使用萬用字元,然後在策略可用之後使用資源名稱縮小策略的範圍。
"Resource": "*"
-
選擇下一步:標籤。
-
選擇下一步:檢閱。
-
在名稱中,輸入:
codecatalyst-deploy-policy
-
選擇建立政策。
您現在已建立權限原則。
-
-
建立部署角色,如下所示:
-
在導覽窗格中,選擇 Roles (角色),然後選擇 Create role (建立角色)。
-
選擇 [自訂信任原則]。
-
刪除現有的自訂信任原則。
-
新增下列自訂信任原則:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
選擇下一步。
-
在 [權限] 原則中,搜尋
codecatalyst-deploy-policy
並選取其核取方塊。 -
選擇下一步。
-
在「角色名稱」中,輸入:
codecatalyst-deploy-role
-
對於「角色」描述,請輸入:
CodeCatalyst deploy role
-
選擇建立角色。
您現在已建立具有信任原則和權限原則的部署角色。
-
-
取得部署角色ARN,如下所示:
-
在導覽窗格中,選擇角色。
-
在搜尋方塊中,輸入您剛建立的角色名稱 (
codecatalyst-deploy-role
)。 -
從清單中選擇角色。
此時會顯示角色的 [摘要] 頁面。
-
在頂部複製ARN值。
您現在已建立具有適當權限的部署角色,並取得該角色ARN。
-
若要建立建置角色
-
建立角色的策略,如下所示:
-
登入 AWS。
開啟位於 IAM 的 https://console.aws.amazon.com/iam/
主控台。 -
在導覽窗格中,選擇政策。
-
選擇 Create policy (建立政策)。
-
選擇 (JSON) 索引標籤。
-
刪除現有的代碼。
-
貼上以下程式碼:
{ "Version": "2012-10-17", "Statement": [{ "Action": [ "s3:PutObject", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
注意
第一次使用角色執行工作流程動作時,請在資源策略陳述式中使用萬用字元,然後在策略可用之後使用資源名稱縮小策略的範圍。
"Resource": "*"
-
選擇下一步:標籤。
-
選擇下一步:檢閱。
-
在名稱中,輸入:
codecatalyst-build-policy
-
選擇建立政策。
您現在已建立權限原則。
-
-
建立組建角色,如下所示:
-
在導覽窗格中,選擇 Roles (角色),然後選擇 Create role (建立角色)。
-
選擇 [自訂信任原則]。
-
刪除現有的自訂信任原則。
-
新增下列自訂信任原則:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
選擇下一步。
-
在 [權限] 原則中,搜尋
codecatalyst-build-policy
並選取其核取方塊。 -
選擇下一步。
-
在「角色名稱」中,輸入:
codecatalyst-build-role
-
對於「角色」描述,請輸入:
CodeCatalyst build role
-
選擇建立角色。
您現在已建立具有信任原則和權限原則的組建角色。
-
-
取得建置角色ARN,如下所示:
-
在導覽窗格中,選擇角色。
-
在搜尋方塊中,輸入您剛建立的角色名稱 (
codecatalyst-build-role
)。 -
從清單中選擇角色。
此時會顯示角色的 [摘要] 頁面。
-
在頂部複製ARN值。
您現在已建立具有適當權限的組建角色,並取得該角色ARN。
-
若要建立堆疊角色
-
AWS 使用您要部署堆疊的帳戶登入。
開啟位於 IAM 的 https://console.aws.amazon.com/iam/
主控台。 -
建立堆疊角色,如下所示:
-
在導覽窗格中,選擇 Roles (角色)。
-
選擇 Create Role (建立角色)。
-
選擇 AWS 服務。
-
在 [使用案例] 區段中,CloudFormation從下拉式清單中選擇。
-
選取選項按CloudFormation鈕。
-
選擇底部的 [下一步]。
-
使用搜尋方塊尋找下列權限原則,然後選取各自的核取方塊。
注意
如果您搜尋的策略並未顯示,請務必選擇 [清除篩選器],然後再試一次。
-
CloudWatchFullAccess
-
AWS CloudFormationFullAccess
-
IAMFullAccess
-
AWS羔羊 FullAccess
-
mazonAPIGateway管理員
-
亞馬遜 3 FullAccess
-
Amazon EC2ContainerRegistryFullAccess
第一個原則允許存取, CloudWatch 以便在發生警示時啟用堆疊復原。
其餘的原則 AWS SAM 允許存取將在本教學課程中部署的堆疊中的服務和資源。如需詳細資訊,請參閱AWS Serverless Application Model 開發人員指南中的權限。
-
-
選擇下一步。
-
在「角色名稱」中,輸入:
codecatalyst-stack-role
-
選擇建立角色。
-
-
獲取堆棧角色的ARN,如下所示:
-
在導覽窗格中,選擇角色。
-
在搜尋方塊中,輸入您剛建立的角色名稱 (
codecatalyst-stack-role
)。 -
從清單中選擇角色。
-
在「摘要」區段中,複製ARN值。供稍後使用。
您現在已經建立具有適當權限的堆疊角色,而且您已取得它ARN。
-
步驟 3:將 AWS 角色新增至 CodeCatalyst
在此步驟中,您將組建角色 (codecatalyst-build-role
) 和部署 role (codecatalyst-deploy-role
) 新增至空間中的 CodeCatalyst 帳戶連線。
注意
您不需要將堆棧角色(codecatalyst-stack-role
)添加到連接中。這是因為堆疊角色是由 CloudFormation(不 CodeCatalyst) 使用,在 CodeCatalyst 與 AWS 使用部署角色之間建立連接之後。由於堆疊角色不會用 CodeCatalyst 來取得存取權 AWS,因此不需要與帳戶連線產生關聯。
若要將建置和部署角色新增至您的帳戶連線
-
在中 CodeCatalyst,導覽至您的空間。
-
選擇AWS 帳戶。此時會顯示帳戶連線清單。
-
選擇代表您建立組建和部署角色之 AWS 帳戶的帳戶連線。
-
從管理主控台選擇 [ AWS 管理角色]。
將顯示 [新增IAM角色至 Amazon CodeCatalyst 空間] 頁面。您可能需要登入才能存取此頁面。
-
選取 [新增您在中建立的現有角色] IAM。
這時系統顯示下拉列表。此清單會顯示具有信任原則的所有IAM角色,其中包括
codecatalyst-runner.amazonaws.com
和codecatalyst.amazonaws.com
服務主體。 -
在下拉式清單中,選擇
codecatalyst-build-role
,然後選擇 [新增角色]。 -
選擇 [新增IAM角色],選擇 [新增您在其中建立的現有角色]IAM,然後在下拉式清單中選擇
codecatalyst-deploy-role
。選擇 Add role (新增角色)。您現在已將組建和部署角色新增至您的空間。
-
複製 Amazon CodeCatalyst 顯示名稱的值。在建立工作流程時,您將需要此值。
步驟 4:創建一個 Amazon S3 存儲桶
在此步驟中,您會建立 Amazon S3 儲存貯體,用於存放無伺服器應用程式的部署套件 .zip 檔案。
建立 Amazon S3 儲存貯體
在開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
在主窗格中,選擇 [建立值區]。
-
若為「值區名稱」,請輸入:
codecatalyst-cfn-s3-bucket
-
對於 AWS 區域,選擇一個區域。本教學課程假設您選擇美國西部 (奧勒岡) us-we st-2。如需 Amazon S3 支援區域的相關資訊,請參閱中的 Amazon 簡單儲存服務端點和配額AWS 一般參考。
-
在頁面底部,選擇 [建立值區]。
您現在已經建立了一個名為美國西部 (奧勒岡) us-west-2 區codecatalyst-cfn-s3-bucket
域的值區。
步驟 5:添加源文件
在此步驟中,您可以將數個應用程式來源檔案新增至 CodeCatalyst 來源儲存庫。該hello-world
資料夾包含您將部署的應用程式檔案。該tests
文件夾包含單元測試。資料夾結構如下:
. |— hello-world | |— tests | |— unit | |— test-handler.js | |— app.js |— .npmignore |— package.json |— sam-template.yml |— setup-sam.sh
.npmignore 文件
該文.npmignore
件指示 npm 應從應用程序包中排除哪些文件和文件夾。在本教程中,npm 會排除該tests
文件夾,因為它不是應用程序的一部分。
若要加入 .npmignore 檔案
請在以下位置開啟 CodeCatalyst 主控台。
https://codecatalyst.aws/ -
選擇您的項目,
codecatalyst-cfn-project
-
在瀏覽窗格中,選擇 [程式碼],然後選擇 [原始碼儲存庫]。
-
從來源儲存庫清單中,選擇您的儲存庫
codecatalyst-cfn-source-repository
。 -
在 [檔案] 中選擇 [建立檔案]。
-
在「檔案名稱」中,輸入:
.npmignore
-
在文字方塊中,輸入下列程式碼:
tests/*
-
選擇「確認」,然後再次選擇「確認」。
現在,您已經在存儲庫的根目錄
.npmignore
中創建了一個名為的文件。
打包. JSON 文件
該package.json
文件包含有關 Node 項目的重要元數據,例如項目名稱,版本號,描述,依賴項以及描述如何與應用程序交互和運行應用程序的其他詳細信息。
本教學課程package.json
中包含相依性清單和指test
令碼。測試腳本執行以下操作:
-
使用摩卡
,測試腳本運行中指定的單元測試, hello-world/tests/unit/
並使用 xunit 報告器將結果寫入junit.xml
文件。 -
使用伊斯坦布爾(nyc)
,測試腳本使用三葉草 記者生成代碼覆蓋率報告( clover.xml
)。如需詳細資訊,請參閱伊斯坦布爾文件中的使用替代記者。
若要新增封裝 .json 檔案
-
在存放庫的檔案中,選擇建立檔案。
-
在「檔案名稱」中,輸入:
package.json
-
在文字方塊中,輸入下列程式碼:
{ "name": "hello_world", "version": "1.0.0", "description": "hello world sample for NodeJS", "main": "app.js", "repository": "https://github.com/awslabs/aws-sam-cli/tree/develop/samcli/local/init/templates/cookiecutter-aws-sam-hello-nodejs", "author": "SAM CLI", "license": "MIT", "dependencies": { "axios": "^0.21.1", "nyc": "^15.1.0" }, "scripts": { "test": "nyc --reporter=clover mocha hello-world/tests/unit/ --reporter xunit --reporter-option output=junit.xml" }, "devDependencies": { "aws-sdk": "^2.815.0", "chai": "^4.2.0", "mocha": "^8.2.1" } }
-
選擇「確認」,然後再次選擇「確認」。
現在,您已經添加了一個名
package.json
為存儲庫的根目錄的文件。
薩姆模板 .yml 文件
該sam-template.yml
檔案包含部署 Lambda 函數和API閘道以及一起設定它們的說明。它遵循AWS Serverless Application Model
模板規範,擴展了 AWS CloudFormation 模板規範。
您在本教學課程中使用 AWS SAM 範本而不是一般 AWS CloudFormation 範本,因為 AWS SAM 提供有用的:: 無伺服器AWS:: Function 資源類型。這種類型執行許多 behind-the-scenes 配置,您通常必須寫出來才能使用基本 CloudFormation 語法。例如,AWS::Serverless::Function
會建立啟動函數的 Lambda 函數、Lambda 執行角色和事件來源對應。如果你想使用基本編寫它,你必須編寫所有這些 CloudFormation。
雖然本教學課程使用預先撰寫的範本,但您可以使用建置動作來產生作為工作流程的一部分。如需詳細資訊,請參閱 部署 AWS CloudFormation 堆疊。
若要新增範本範本 .yml 檔案的步驟
-
在存放庫的檔案中,選擇建立檔案。
-
在「檔案名稱」中,輸入:
sam-template.yml
-
在文字方塊中,輸入下列程式碼:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > serverless-api Sample SAM Template for serverless-api # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Resources: HelloWorldFunction: Type: AWS::Serverless::Function # For details on this resource type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs12.x Events: HelloWorld: Type: Api # For details on this event source type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /hello Method: get Outputs: # ServerlessRestApi is an implicit API created out of the events key under Serverless::Function # Find out about other implicit resources you can reference within AWS SAM at # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api HelloWorldApi: Description: "API Gateway endpoint URL for the Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" HelloWorldFunction: Description: "Hello World Lambda function ARN" Value: !GetAtt HelloWorldFunction.Arn HelloWorldFunctionIamRole: Description: "Implicit Lambda execution role created for the Hello World function" Value: !GetAtt HelloWorldFunctionRole.Arn
-
選擇「確認」,然後再次選擇「確認」。
現在,您已經在存儲庫的根文件夾
sam-template.yml
下添加了一個名為的文件。
setup-sam.sh 檔案
該setup-sam.sh
文件包含下載和安裝該 AWS SAM CLI實用程序的說明。工作流程會使用此公用程式來封裝hello-world
來源。
若要新增 setup-sam.sh 檔案的步驟
-
在存放庫的檔案中,選擇建立檔案。
-
在「檔案名稱」中,輸入:
setup-sam.sh
-
在文字方塊中,輸入下列程式碼:
#!/usr/bin/env bash echo "Setting up sam" yum install unzip -y curl -LO https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip unzip -qq aws-sam-cli-linux-x86_64.zip -d sam-installation-directory ./sam-installation-directory/install; export AWS_DEFAULT_REGION=
us-west-2
在前面的代碼中,替換
us-west-2
與您的 AWS 區域。 -
選擇「確認」,然後再次選擇「確認」。
現在,您已經添加了一個名
setup-sam.sh
為存儲庫的根目錄的文件。
app.js 檔案
app.js
包含 Lambda 函數程式碼。在本自學課程中,程式碼會傳回文字hello world
。
若要新增 app.js 檔案的步驟
-
在存放庫的檔案中,選擇建立檔案。
-
在「檔案名稱」中,輸入:
hello-world/app.js
-
在文字方塊中,輸入下列程式碼:
// const axios = require('axios') // const url = 'http://checkip.amazonaws.com/'; let response; /** * * Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format * @param {Object} event - API Gateway Lambda Proxy Input Format * * Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html * @param {Object} context * * Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html * @returns {Object} object - API Gateway Lambda Proxy Output Format * */ exports.lambdaHandler = async (event, context) => { try { // const ret = await axios(url); response = { 'statusCode': 200, 'body': JSON.stringify({ message: 'hello world', // location: ret.data.trim() }) } } catch (err) { console.log(err); return err; } return response };
-
選擇「確認」,然後再次選擇「確認」。
您現在已經創建了一個名為的文件夾
hello-world
和一個名為的文件app.js
。
test-handler.js 檔案
該test-handler.js
文件包含 Lambda 函數的單元測試。
若要新增 test-handler.js 檔案的步驟
-
在存放庫的檔案中,選擇建立檔案。
-
在「檔案名稱」中,輸入:
hello-world/tests/unit/test-handler.js
-
在文字方塊中,輸入下列程式碼:
'use strict'; const app = require('../../app.js'); const chai = require('chai'); const expect = chai.expect; var event, context; describe('Tests index', function () { it('verifies successful response', async () => { const result = await app.lambdaHandler(event, context) expect(result).to.be.an('object'); expect(result.statusCode).to.equal(200); expect(result.body).to.be.an('string'); let response = JSON.parse(result.body); expect(response).to.be.an('object'); expect(response.message).to.be.equal("hello world"); // expect(response.location).to.be.an("string"); }); });
-
選擇「確認」,然後再次選擇「確認」。
現在,您已經在文件
hello-world/tests/unit
夾test-handler.js
下添加了一個名為的文件。
您現在已經添加了所有源文件。
花點時間仔細檢查您的工作,並確保將所有文件放在正確的文件夾中。資料夾結構如下:
. |— hello-world | |— tests | |— unit | |— test-handler.js | |— app.js |— .npmignore |— README.md |— package.json |— sam-template.yml |— setup-sam.sh
步驟 6:建立並執行工作流程
在此步驟中,您會建立封裝 Lambda 原始程式碼並進行部署的工作流程。工作流程由下列依序執行的建置區塊組成:
-
觸發器 — 當您將變更推送至來源儲存庫時,此觸發器會自動啟動工作流程執行。關於觸發條件的詳細資訊,請參閱 使用觸發器啟動工作流程自動執行。
-
測試操作(
Test
)-在觸發器上,此操作安裝節點包管理器(NPM),然後運行該 npm run test
命令。這個命令告訴 npm 運行package.json
文件中定義的test
腳本。test
腳本反過來運行單元測試並生成兩個報告:測試報告(junit.xml
)和代碼覆蓋報告(clover.xml
)。如需詳細資訊,請參閱 打包. JSON 文件。接下來,測試動作將XML報告轉換為 CodeCatalyst 報告,並在 CodeCatalyst 控制台中,測試動作的「報告」選項卡下顯示它們。
如需測試動作的詳細資訊,請參閱使用工作流程進行測試。
-
建置動作 (
BuildBackend
) — 完成測試動作後,建置動作會下載並安裝 AWS SAM CLI、封裝hello-world
來源,然後將套件複製到 Lambda 服務預期的 Amazon S3 儲存貯體。此動作也會輸出名為的新 AWS SAM 範本檔案,sam-template-packaged.yml
並將其置於名為的輸出加工品中buildArtifact
。如需建置動作的詳細資訊,請參閱使用工作流程建置。
-
部署動作 (
DeployCloudFormationStack
) — 建置動作完成後,部署動作會尋找建置動作 (buildArtifact
) 所產生的輸出成品,尋找 AWS SAM 範本內部,然後執行範本。 AWS SAM 範本會建立部署無伺服器應用程式的堆疊。
若要建立工作流程
-
在瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。
-
選擇建立工作流程。
-
針對來源儲存庫,選擇
codecatalyst-cfn-source-repository
。 -
對於「分支」,請選擇
main
。 -
選擇建立。
-
刪除範YAML例程式碼。
-
添加以下YAML代碼:
注意
在下面的YAML代碼中,如果需要,可以省略這些
Connections:
部分。如果您省略這些區段,則必須確定您環境中「預設IAM角色」欄位中指定的角色包含中所述兩個角色的權限和信任原則步驟 2:建立 AWS 角色。如需有關使用預設IAM角色設定環境的詳細資訊,請參閱建立環境。Name: codecatalyst-cfn-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: Test: Identifier: aws/managed-test@v1 Inputs: Sources: - WorkflowSource Outputs: Reports: CoverageReport: Format: CLOVERXML IncludePaths: - "coverage/*" TestReport: Format: JUNITXML IncludePaths: - junit.xml Configuration: Steps: - Run: npm install - Run: npm run test BuildBackend: Identifier: aws/build@v1 DependsOn: - Test Environment: Name:
codecatalyst-cfn-environment
Connections: - Name:codecatalyst-account-connection
Role:codecatalyst-build-role
Inputs: Sources: - WorkflowSource Configuration: Steps: - Run: . ./setup-sam.sh - Run: sam package --template-file sam-template.yml --s3-bucketcodecatalyst-cfn-s3-bucket
--output-template-file sam-template-packaged.yml --regionus-west-2
Outputs: Artifacts: - Name: buildArtifact Files: - "**/*" DeployCloudFormationStack: Identifier: aws/cfn-deploy@v1 DependsOn: - BuildBackend Environment: Name:codecatalyst-cfn-environment
Connections: - Name:codecatalyst-account-connection
Role:codecatalyst-deploy-role
Inputs: Artifacts: - buildArtifact Sources: [] Configuration: name: codecatalyst-cfn-stack region:us-west-2
role-arn:arn:aws:iam::111122223333:role/StackRole
template: ./sam-template-packaged.yml capabilities: CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND在前面的代碼中,替換:
-
的兩個執行個體
codecatalyst-cfn-environment
使用您的環境名稱。 -
的兩個執行個體
codecatalyst-account-connection
與您的帳戶連接的顯示名稱。顯示名稱可能是數字。如需詳細資訊,請參閱 步驟 3:將 AWS 角色新增至 CodeCatalyst。 -
codecatalyst-build-role
具有您在中建立之建置角色的名稱步驟 2:建立 AWS 角色。 -
codecatalyst-cfn-s3-bucket
使用您在其中創建的 Amazon S3 存儲桶的名稱步驟 4:創建一個 Amazon S3 存儲桶。 -
的兩個執行個體
us-west-2
Amazon S3 儲存貯體所在的區域 (第一個執行個體) 以及堆疊的部署位置 (第二個執行個體)。這些區域可以是不同的。本自學課程假設兩個「區域」都設定為us-west-2
。如需 Amazon S3 支援區域的詳細資訊 AWS CloudFormation,請參閱 AWS 一般參考. -
codecatalyst-deploy-role
使用您在中建立的部署角色名稱步驟 2:建立 AWS 角色。 -
codecatalyst-cfn-environment
使用您在中建立的環境名稱必要條件。 -
arn:aws:iam::111122223333:role/StackRole
使用您在中建立的堆疊角色的 Amazon 資源名稱 (ARN) 步驟 2:建立 AWS 角色。注意
如果您決定不建立建置、部署和堆疊角色,請取代
codecatalyst-build-role
,codecatalyst-deploy-role
和arn:aws:iam::111122223333:role/StackRole
具有或CodeCatalystWorkflowDevelopmentRole-
角色ARN的名稱。如需有關此角色的詳細資訊,請參閱 步驟 2:建立 AWS 角色。spaceName
如需先前顯示之程式碼中屬性的相關資訊,請參閱「部署 AWS CloudFormation 堆疊」動作 YAML。
-
-
(選擇性) 選擇「驗證」,確定YAML程式碼在認可之前是有效的。
-
選擇 Commit (遞交)。
-
在「提交工作流程」對話方塊中,輸入以下內容:
-
對於「工作流程」檔案名稱,請保留預設值,
codecatalyst-cfn-workflow
。 -
對於提交訊息,請輸入:
add initial workflow file
-
針對「儲存庫」,選擇codecatalyst-cfn-source-repository。
-
選擇「主要」做為「分支名稱」。
-
選擇 Commit (遞交)。
您現在已建立工作流程。工作流程執行會自動啟動,因為工作流程頂端定義了觸發器。具體而言,當您認可 (並推送)
codecatalyst-cfn-workflow.yaml
檔案至來源儲存庫時,觸發程序會啟動工作流程執行。 -
若要檢視進行中的工作流程執行
-
在瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。
-
選擇您剛建立的工作流程:
codecatalyst-cfn-workflow
。 -
選擇「執行」頁標。
-
在「執行 ID」欄中,選擇執行 ID。
-
選擇「測試」以查看測試進度。
-
選擇BuildBackend查看構建進度。
-
選擇DeployCloudFormationStack以查看部署進度。
如需檢視執行詳細資訊的詳細資訊,請參閱檢視工作流程執行狀態與詳細。
-
DeployCloudFormationStack動作完成後,請執行下列動作:
-
如果工作流程執行成功,請移至下一個程序。
-
如果測試或BuildBackend動作上的工作流程執行失敗,請選擇 [記錄檔] 以疑難排解問題。
-
如果DeployCloudFormationStack動作上的工作流程執行失敗,請選擇部署動作,然後選擇 [摘要] 索引標籤。捲動至「CloudFormation 事件」區段以檢視詳細的錯誤訊息。如果發生復原,請先透過中的 AWS CloudFormation 主控台刪除
codecatalyst-cfn-stack
堆疊, AWS 然後再重新執行工作流程。
-
驗證部署的步驟
-
成功部署後,從靠近頂部的水平功能表列中選擇變數 (7)。(請勿在右側窗格中選擇「變數」。)
-
接下來 HelloWorldApi,將其貼
https://
URL到瀏覽器中。此時會顯示來自 Lambda 函數的 Hello World JSON 訊息,指出工作流程已成功部署和設定 Lambda 函數和API閘道。
提示
您可以在工作流程圖URL中 CodeCatalyst 顯示這一點,只需幾個小的配置。如需詳細資訊,請參閱 在工作流程圖表中顯示應用程式 URL。
驗證單元測試結果和代碼覆蓋率
-
在工作流程圖表中,選擇 [測試],然後選擇 [報告]。
-
選擇TestReport檢視單元測試結果,或選擇檢視CoverageReport要測試之檔案的程式碼涵蓋範圍詳細資訊 (在本例中為
app.js
和)test-handler.js
。
驗證已部署的資源
登入 AWS Management Console 並開啟API閘道主控台,位於https://console.aws.amazon.com/apigateway/
。 -
觀察codecatalyst-cfn-stackAPI該 AWS SAM 模板創建。名API稱來自工作流程定義檔案 (
codecatalyst-cfn-workflow.yaml
) 中的Configuration/name
值。 在開啟 AWS Lambda 主控台https://console.aws.amazon.com/lambda/
。 -
在導覽視窗中,選擇函數。
-
選擇您的 Lambda 函數
codecatalyst-cfn-stack-HelloWorldFunction-
。string
-
您可以看到API閘道如何是該功能的觸發器。此整合已依 AWS SAM
AWS::Serverless::Function
資源類型自動設定。
步驟 7:進行變更
在此步驟中,您可以變更 Lambda 原始程式碼並進行認可。此提交會啟動新的工作流程執行。此執行會以藍綠色配置部署新的 Lambda 函數,該配置使用 Lambda 主控台中指定的預設流量轉移組態。
若要變更您的 Lambda 來源
-
在中 CodeCatalyst,導覽至您的專案。
-
在瀏覽窗格中,選擇 [程式碼],然後選擇 [原始碼儲存庫]。
-
選擇您的來源儲存庫
codecatalyst-cfn-source-repository
。 -
更改應用程序文件:
-
選擇
hello-world
資料夾。 -
選擇
app.js
檔案。 -
選擇編輯。
-
在第 23 行上,變更
hello world
為Tutorial complete!
。 -
選擇「確認」,然後再次選擇「確認」。
提交會導致工作流程執行開始。此運行將失敗,因為您尚未更新單元測試以反映名稱更改。
-
-
更新單元測試:
-
選擇
hello-world\tests\unit\test-handler.js
。 -
選擇編輯。
-
在第 19 行上,
hello world
將變更為Tutorial complete!
。 -
選擇「確認」,然後再次選擇「確認」。
提交會導致另一個工作流程執行開始。這次執行會成功。
-
-
在瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。
-
選擇
codecatalyst-cfn-workflow
,然後選擇 [執行]。 -
選擇最近一次執行的執行 ID。它應該仍在進行中。
-
選擇測試、BuildBackend,並DeployCloudFormationStack查看工作流程執行進度。
-
當工作流程完成時,選擇頂部附近的變數 (7)。
-
接下來 HelloWorldApi,將其貼
https://
URL到瀏覽器中。瀏覽器中會出現一則
Tutorial complete!
訊息,指出您的新應用程式已成功部署。
清除
清理本教程中使用的文件和服務,以避免被收取費用。
在 CodeCatalyst 主控台中進行清理
請在以下位置開啟 CodeCatalyst 主控台。
https://codecatalyst.aws/ -
刪除
codecatalyst-cfn-workflow
。 -
刪除
codecatalyst-cfn-environment
。 -
刪除
codecatalyst-cfn-source-repository
。 -
刪除
codecatalyst-cfn-project
。
若要在中進行清理 AWS Management Console
-
在中進行清理 CloudFormation,如下所示:
請在以下位置開啟 AWS CloudFormation 主控台。
https://console.aws.amazon.com/cloudformation -
刪除
codecatalyst-cfn-stack
。刪除堆疊會從API閘道和 Lambda 服務中移除所有教學課程資源。
-
在 Amazon S3 中進行清理,如下所示:
在開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
選擇
codecatalyst-cfn-s3-bucket
。 -
刪除值區內容。
-
刪除儲存貯體。
-
在中進行清理IAM,如下所示:
開啟位於 IAM 的 https://console.aws.amazon.com/iam/
主控台。 -
刪除
codecatalyst-deploy-policy
。 -
刪除
codecatalyst-build-policy
。 -
刪除
codecatalyst-stack-policy
。 -
刪除
codecatalyst-deploy-role
。 -
刪除
codecatalyst-build-role
。 -
刪除
codecatalyst-stack-role
。
在本教學課程中,您學習了如何使用 CodeCatalyst 工作流程和 Deploy CloudFormation 堆疊動作將無伺服器應用程式部署為 AWS CloudFormation 堆疊。