本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:建立管道,將您的無伺服器應用程式發佈至 AWS Serverless Application Repository
您可以使用 AWS CodePipeline 持續將無 AWS SAM 伺服器應用程式交付至 AWS Serverless Application Repository。
重要
在建立管道時,CodePipeline 將使用客戶提供的 S3 成品儲存貯體來製作成品。(這與用於 S3 來源動作的 儲存貯體不同。) 如果 S3 成品儲存貯體位於與管道帳戶不同的帳戶中,請確定 S3 成品儲存貯體屬於 AWS 帳戶 安全且可靠的 。
本教學課程示範如何建立和設定管道,以建置 GitHub 中託管的無伺服器應用程式,並將其 AWS Serverless Application Repository 自動發佈至 。管道使用 GitHub 做為來源提供者,並使用 CodeBuild 做為建置提供者。若要將無伺服器應用程式發佈至 AWS Serverless Application Repository,您可以部署應用程式
重要
您在此程序中新增至管道的許多動作都涉及您在建立管道之前需要建立 AWS 的資源。來源動作 AWS 的資源一律必須在您建立管道的相同 AWS 區域中建立。例如,如果您在美國東部 (俄亥俄) 區域建立管道,則 CodeCommit 儲存庫必須位於美國東部 (俄亥俄) 區域。
您可以在建立管道時新增跨區域動作。跨區域動作 AWS 的資源必須位於您計劃執行動作的相同 AWS 區域中。如需詳細資訊,請參閱在中新增跨區域動作 CodePipeline。
開始之前
在此教學課程中,我們假設以下情況。
-
您熟悉 AWS Serverless Application Model (AWS SAM) 和 AWS Serverless Application Repository。
-
您在 GitHub 中託管了使用 CLI AWS SAM 發佈到 AWS Serverless Application Repository 的無伺服器應用程式。若要將範例應用程式發佈至 AWS Serverless Application Repository,請參閱《 AWS Serverless Application Repository 開發人員指南》中的 Quick Start: Publishing 應用程式。若要將您自己的應用程式發佈至 AWS Serverless Application Repository,請參閱《 AWS Serverless Application Model 開發人員指南》中的使用 AWS SAM CLI 發佈應用程式。
步驟 1:建立 buildspec.yml 檔案
建立 buildspec.yml
檔案與以下內容,並新增到您的無伺服器應用程式的 GitHub 儲存庫。將 template.yml
取代為應用程式 AWS SAM 範本,並將儲存貯體名稱
取代為儲存封裝應用程式的 S3 儲存貯體。
version: 0.2 phases: install: runtime-versions: python: 3.8 build: commands: - sam package --template-file
template.yml
--s3-bucketbucketname
--output-template-file packaged-template.yml artifacts: files: - packaged-template.yml
步驟 2:建立並設定管道
請依照下列步驟,在 AWS 區域 您要發佈無伺服器應用程式的 中建立管道。
登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/codepipeline/
開啟 CodePipeline 主控台。 -
如有必要,請切換到 AWS 區域 您要發佈無伺服器應用程式的 。
-
在 Welcome (歡迎) 頁面、Getting started (入門) 頁面、或者 Pipelines (管道) 頁面上,選擇 Create pipeline (建立管道)。
-
在步驟 1:選擇建立選項頁面的建立選項下,選擇建置自訂管道選項。選擇 Next (下一步)。
-
選擇 Create pipeline (建立管道)。在步驟 2:選擇管道設定頁面上,在管道名稱中輸入管道的名稱。
-
在管道類型中,選擇 V2。如需詳細資訊,請參閱管道類型。選擇 Next (下一步)。
-
在服務角色中,選擇新服務角色,以允許 CodePipeline 在 IAM 中建立服務角色。
-
將 Advanced settings (進階設定) 下的設定保留為預設值,然後選擇 Next (下一步)。
-
在步驟 3:新增來源階段頁面的來源提供者中,選擇 GitHub。
-
在連線下,選擇現有的連線或建立新的連線。若要為您的 GitHub 來源動作建立或管理連線,請參閱GitHub 連線。
-
在 Repository (儲存庫) 中,選擇 GitHub 來源儲存庫。
-
在 Branch (分支) 中,選擇您的 GitHub 分支。
-
保留來源動作的其餘預設值。選擇 Next (下一步)。
-
在步驟 4:新增建置階段頁面上,新增建置階段:
-
在 Build provider (建置供應商) 中,選擇 AWS CodeBuild。對於 Region (區域),請使用管道區域。
-
選擇建立專案。
-
在 Project name (專案名稱) 中,輸入此建置專案的名稱。
-
在 Environment image (環境映像) 中,選擇 Managed image (受管映像)。針對 Operating system (作業系統),選擇 Ubuntu。
-
對於 Runtime (執行時間) 和 Runtime version (執行時間版本),選擇無伺服器應用程式所需的執行時間和版本。
-
對於 Service role (服務角色),選擇 New service role (新服務角色)。
-
對於 Build specifications (建置規格),選擇 Use a buildspec file (使用 buildspec 檔案)。
-
選擇 Continue to CodePipeline (繼續 CodePipeline)。這會開啟 CodePipeline 主控台,並建立 CodeBuild 專案,該專案會在您的儲存庫
buildspec.yml
中使用 進行組態。建置專案使用服務角色來管理 AWS 服務 許可。此步驟可能需要數分鐘。 -
選擇 Next (下一步)。
-
-
在步驟 5:新增測試階段,選擇略過測試階段,然後再次選擇略過以接受警告訊息。
選擇 Next (下一步)。
-
在步驟 6:新增部署階段頁面上,選擇略過部署階段,然後再次選擇略過以接受警告訊息。選擇 Next (下一步)。
-
在步驟 7:檢閱中,選擇建立管道。您應該會看到顯示階段的圖表。
-
授予 CodeBuild 服務角色許可,以存取存放封裝應用程式的 S3 儲存貯體。
-
在新管道的建置階段中,選擇 CodeBuild。
-
選擇 Build details (建置詳細資訊) 標籤。
-
在環境中,選擇 CodeBuild 服務角色以開啟 IAM 主控台。
-
展開
CodeBuildBasePolicy
的選項,然後選擇 Edit policy (編輯政策)。 -
選擇 JSON。
-
新增政策陳述式與下列內容。此陳述式可讓 CodeBuild 將物件放入存放封裝應用程式的 S3 儲存貯體。以您的 S3 儲存貯體名稱取代
bucketname
。{ "Effect": "Allow", "Resource": [ "arn:aws:s3:::
bucketname
/*" ], "Action": [ "s3:PutObject" ] } -
選擇檢閱政策。
-
選擇 Save changes (儲存變更)。
-
步驟 3:部署發佈應用程式
請依照下列步驟,部署包含執行發佈至 之 Lambda 函數的應用程式 AWS Serverless Application Repository。這個應用程式是 aws-serverless-codepipeline-serverlessrepo-publish。
注意
您必須將應用程式部署到與管道 AWS 區域 相同的 。
-
移至應用程式
頁面,並選擇 Deploy (部署)。 -
選擇 I acknowledge that this app creates custom IAM roles (我認可此應用程式建立自訂的 IAM 角色)。
-
選擇部署。
-
選擇檢視 AWS CloudFormation 堆疊以開啟 AWS CloudFormation 主控台。
-
展開 Resources (資源) 區段。您會看到 ServerlessRepoPublish,類型為 AWS::Lambda::Function。請記下這個資源的實體 ID,以用於下一個步驟。當您在 CodePipeline 中建立新的發佈動作時,請使用此實體 ID。
步驟 4:建立發佈動作
依照以下步驟在管道中建立發佈動作。
-
前往 https://console.aws.amazon.com/codepipeline/
開啟 CodePipeline 主控台。 -
在左側導覽區段中,選擇您欲編輯的管道。
-
選擇編輯。
-
在目前管道的最後階段之後,選擇 + Add stage (新增階段)。在 Stage name (階段名稱) 中輸入名稱,例如
Publish
,然後選擇 Add stage (新增階段)。 -
在新階段中,選擇 + Add action group (+ 新增動作群組)。
-
輸入動作名稱。從 Action provider (動作供應商) 的 Invoke (呼叫) 中,選擇 AWS Lambda。
-
從 Input artifacts (輸入成品),選擇 BuildArtifact。
-
從函數名稱中,選擇您在上一個步驟中記下的 Lambda 函數的實體 ID。
-
為動作選擇 Save (儲存)。
-
為階段選擇 Done (完成)。
-
在右上角,選擇 Save (儲存)。
-
若要驗證您的管道,在 GitHub 對您的應用程式進行變更。例如,在 AWS SAM 範本檔案的
Metadata
區段中變更應用程式的描述。遞交變更並將其推送到您的 GitHub 分支。這會觸發您的管道執行。當管道完成時,在 AWS Serverless Application Repository中檢查您的應用程式是否已就您的變更進行更新。