本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
新增無伺服器應用程式元
您可以建立包含一或多個 Amazon 機器映像 (AMI) 的產品,並使用一或多個 AWS CloudFormation 範本交付,並將無伺服器元件整合到產品中。例如,建立一個產品,其中一個 AMI 設定為控制器伺服器,另一個 AMI 設定為背景伺服器,並以 AWS CloudFormation 堆疊形式提供。用來建立堆疊的 AWS CloudFormation 範本可以包含用來設定由其中一個伺服器中的事件觸發的 AWS Lambda 函數的定義。
當您使用這種方法設計產品時,您可以簡化架構並使您的買家更容易上市。這種方法也可以讓您更輕鬆地更新產品。
如需有關為產品建立 AMI 的資訊,請參閱基於阿美的產品。如需完成產品 AWS CloudFormation 範本的詳細資訊,請參閱基於 AMI 的交付使用 AWS CloudFormation。
定義無伺服器應用程式時,您可以使用儲存在中的 AWS Serverless Application Model (AWS SAM) 範本。 AWS Serverless Application Repository AWS SAM 是建置無伺服器應用程式的開放原始碼架構。在部署期間,將語法 AWS SAM 轉換並擴充為 AWS Serverless Application Model AWS CloudFormation 語法。 AWS Serverless Application Repository 是無伺服器應用程式的受管理儲存庫。它可讓您儲存和共用可重複使用的應用程式,以便購買者可以組裝和部署無伺服器架構。若要建立並提供此類型的產品,請完成以下步驟:
步驟
AWS Marketplace 在建立商品清單之前,請先評論並驗證您的產品。如果您在列出優惠之前必須解決問題,我們將向您發送電子郵件。
作為履行訂閱的一部分,我們會將 AMI、無伺服器應用程式和 AWS CloudFormation 範本複製到每個範本中的 AWS Marketplace自有存放庫。 AWS 區域當買家訂閱您的產品時,我們會授予他們存取權,並在您更新軟體時通知他們。
建立無伺服器應用程式
您的第一個步驟是封裝用來建立無伺服器應用程式的 AWS Lambda 函數。您的應用程式是 Lambda 函數、事件來源和其他一起工作來執行工作的資源的組合。無伺服器應用程式可以像一個 Lambda 函數一樣簡單,也可以與其他資源包含多個函數,例如 API、資料庫和事件來源對應。
使用 AWS SAM 定義無伺服器應用程式的模型。有關性質名稱和類型的描述,請參閱AWS::Serverless::Application
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An example of SAM template with Lambda function and IAM role Resources: SampleFunction: Type: AWS::Serverless::Function Properties: Handler: 'com.sampleproject.SampleHandler::handleRequest' Runtime: java8 CodeUri: 's3://DOC-EXAMPLE-BUCKET/
2EXAMPLE-1234-4b12-ac37-515EXAMPLEe5-lambda.zip
' Description: Sample Lambda function Timeout: 120 MemorySize: 1024 Role: Fn::GetAtt: [SampleFunctionRole, Arn] # Role to execute the Lambda function SampleFunctionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Statement: - Effect: "Allow" Principal: Service: - "lambda.amazonaws.com" Action: "sts:AssumeRole" ManagedPolicyArns: - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" Policies: - PolicyName: SFNXDeployWorkflowDefinitionPolicy PolicyDocument: Statement: - Effect: "Allow" Action: - "s3:Get*" Resource: "*" RoleName: "SampleFunctionRole"
將您的應用程式發佈到儲存庫
若要發佈應用程式,您需先上傳應用程式程式碼。將您的程式碼成品 (例如 Lambda 函數、指令碼、組態檔) 存放在您帳戶擁有的 Amazon S3 儲存貯體中。當您上傳應用程式時,它一開始會設定為私人,這表示只有建立應用程式的使用者 AWS 帳戶 才能使用。您必須建立 IAM 政策,以授予 AWS Serverless Application Repository 權限才能存取您上傳的成品。
將無伺服器應用程式發佈至無伺服器應用程式儲存庫
-
前往 https://console.aws.amazon.com/s3/
開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。 -
選擇您用來封裝應用程式的 Amazon S3 儲存貯體。
-
選擇許可索引標籤標籤。
-
選擇 Bucket Policy (儲存貯體政策)。
-
複製並貼上下列範例政策陳述式。
注意
範例原則陳述式會產生錯誤,直到下列步驟中
Resource
的值aws:SourceAccount
和更新為止。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "serverlessrepo.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition" : { "StringEquals": { "aws:SourceAccount": "
123456789012
" } } } ] }-
將
Resource
屬性值中的 DOC-EXAMPLE 存儲桶替換為存儲桶的存儲桶名稱。 -
用您的識別碼取代
元素中的 123456789012
。Condition
AWS 帳戶 該Condition
元素可確保 AWS Serverless Application Repository 唯一具有從指定的訪問應用程序的權限 AWS 帳戶。
-
-
選擇儲存。
-
在開啟 AWS Serverless Application Repository 主控台https://console.aws.amazon.com/serverlessrepo
。 -
在 [我的應用程式] 頁面上選擇 [發佈應用程式
-
視需要填寫必填欄位和任何選擇性欄位。必填欄位為:
-
Application name (應用程式名稱)
-
作者
-
Description
-
源代碼網址
-
SAM 範本
-
-
選擇發佈應用程式。
若要發佈應用程式的後續版本
-
在開啟 AWS Serverless Application Repository 主控台https://console.aws.amazon.com/serverlessrepo
。 -
在功能窗格中,從 [我的應用程式] 中選擇應用程式。
-
選擇 Publish new version (發佈新版本)。
如需詳細資訊,請參閱使用 AWS SAM CLI 發行無伺服器應用程式。
建立 CloudFormation範本
若要建立 CloudFormation 範本,您必須符合範本先決條件,並提供必要的輸入和安全性參數。如需詳細資訊,請參閱《使用指南》中的AWS CloudFormation 〈範本剖析〉。
在 CloudFormation 範本中,您可以參考無伺服器應用程式和 AMI。您也可以在根 CloudFormation 範本和巢狀範本中使用巢狀範本和參考無伺服器應用程式。若要參考無伺服器應用程式,請使用 AWS SAM 範本。您可以從中自動產生應用程式的 AWS SAM 範本 AWS Serverless Application Repository。以下是範例範本。
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An example root template for a SAR application Resources: SampleSARApplication: Type: AWS::Serverless::Application Properties: Location: ApplicationId: arn:aws:serverlessrepo:us-east-1:1234567890:applications/TestApplication SemanticVersion: 1.0.0 SampleEC2Instance: Type: AWS::EC2::Instance Properties: ImageId: "ami-79fd7eee" KeyName: "testkey" BlockDeviceMappings: - DeviceName: "/dev/sdm" Ebs: VolumeType: "io1" Iops: "200" DeleteOnTermination: "false" VolumeSize: "20" - DeviceName: "/dev/sdk" NoDevice: {}
該 AWS SAM 模板包含以下元素:
-
ApplicationID
— 您的應用程式的 Amazon 資源名稱 (ARN). 此資訊位於的 [我的應用程式] 區段中 AWS Serverless Application Repository。 -
SemanticVersion
— 無伺服器應用程式的版本。您可以從的 [我的應用程式] 區段中找到這個 AWS Serverless Application Repository。 -
Parameter
(選擇性) — 應用程式參數。
注意
對於ApplicationID
和SemanticVersion
,不支持內在函數。您必須對這些字串進行硬編碼。由 AWS Marketplace複製時會更新。ApplicationID
如果您打算在 CloudFormation範本中參考設定檔和指令碼檔案,請使用下列格式。對於嵌套模板(AWS::Cloudformation::Stack
),只支持TemplateURLs
沒有內部函數。請注意範本中的Parameters
內容。
AWSTemplateFormatVersion: '2010-09-09' Metadata: Name: Seller test product Parameters: CFTRefFilesBucket: Type: String Default: "seller-bucket" CFTRefFilesBucketKeyPrefix: Type: String Default: "cftsolutionFolder/additionCFfiles" Resources: TestEc2: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: addCloudAccount: files: /etc/cfn/set-aia-settings.sh: source: Fn::Sub: - https://${CFTRefFilesBucket}.${S3Region}amazonaws.com/${CFTRefFilesBucketKeyPrefix}/
sampleScript.sh
- S3Region: !If - GovCloudCondition - s3-us-gov-west-1 - s3 owner: root mode: '000700' authentication: S3AccessCreds .. .. .. SampleNestedStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: 'https://sellerbucket.s3.amazon.com/sellerproductfolder/nestedCft.template' Parameters: SampleParameter: 'test' Transform: AWS::Serverless-2016-10-31
提交您的 CloudFormation 模板和配置文件
若要提交 CloudFormation 範本、組態和指令碼檔案,請 AWS Marketplace 授與讀取存放這些檔案之 Amazon S3 儲存貯體的權限。若要這麼做,請更新儲存貯體政策以包含下列權限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "assets.marketplace.amazonaws.com" }, "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"] } ] }
更新 AWS Serverless Application Repository 應用程式權限
若要將您的 AWS Serverless Application Repository 申請提交給 AWS Marketplace,您必須授予讀取應用程式的 AWS Marketplace 權限。若要這麼做,請將權限新增至與您的無伺服器應用程式相關聯的原則。有兩種方法可以更新您的應用程式原則:
-
前往 AWS Serverless Application Repository
。從清單中選擇您的無伺服器應用程式。選取「共用」標籤,然後選擇「建立對帳單」。在 [陳述式組態] 頁面的 [帳戶 ID] 欄位中 assets.marketplace.amazonaws.com
,輸入下列服務主體。然後選擇 Save (儲存)。 -
使用下列 AWS CLI 命令來更新您的應用程式原則。
aws serverlessrepo put-application-policy \ --region
region
\ --application-idapplication-arn
\ --statements Principals=assets.marketplace.amazonaws.com,Actions=Deploy
分享您的 AMI
建置並提交的所有 AMI 都必 AWS Marketplace 須遵守所有產品政策。中提供自助 AMI 掃描 AWS Marketplace 管理入口網站。使用此功能,您可以開始對 AMI 的掃描。您可以在一個位置快速收到掃描結果(通常不到一小時),並提供清晰的反饋。成功掃描 AMI 後,請通過上傳您的產品加載表單提交 AMI 以供 AWS Marketplace 賣方操作團隊進行處理。
透過 AMI 和無伺服器應用程式提交您的 CloudFormation 產品
提交產品之前,請記住以下事項:
-
您必須為每個範本提供架構圖。此圖表必須針對透過 CloudFormation 範本部署的每個 AWS 服務使用 AWS 產品圖示。此外,圖表必須包含服務的中繼資料。若要下載我們的官方 AWS 架構圖示,請參閱 AWS 架構圖示
。 -
向買家顯示的每個範本的基礎結構成本估算,都是根據您使用「AWS 定價計算器
」提供的預估值。在估計中,包括要部署為範本一部分的服務清單,以及典型部署的預設值。 -
完成產品載入表單。您可以從中找到產品載入表單 AWS Marketplace 管理入口網站。單個 AMI 產品和多個 AMI 產品需要不同的產品加載形式。在產品載入表單中,您將提供 CloudFormation範本的公開 URL。 CloudFormation 範本必須以公開 URL 的形式提交。
-
使用 AWS Marketplace 管理入口網站 來送出你的刊登物品。從「資產」中選擇「檔案上傳」,附加檔案,然後選擇「上傳」。我們收到您的範本和中繼資料後, AWS 就會開始處理您的要求。
送出清單後,請 AWS Marketplace 檢閱並驗證產品載入表單。此外, AWS Marketplace 將 AMI 和無伺服器應用程式區域化,並代表您更新 AWS CloudFormation 範本的地區對應。如果發生任何問題, AWS Marketplace 賣家營運團隊會以電郵與你聯絡。