新增無伺服器應用程式 - AWS Marketplace

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

新增無伺服器應用程式

您可以建立包含一或多個 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 ModelAWS CloudFormation語法。AWS Serverless Application Repository是無伺服器應用程式的受管理儲存庫。它可讓您儲存和共用可重複使用的應用程式,以便購買者可以組裝和部署無伺服器架構。若要建立並提供此類型的產品,請完成下列步驟:

AWS Marketplace在建立商品清單之前,請先評論並驗證您的產品。如果您在列出優惠之前必須解決問題,我們將向您發送電子郵件。

作為履行訂閱的一部分,我們會將 AMI、無伺服器應用程式和AWS CloudFormation範本複製到每個範本中的AWS Marketplace自有存放庫AWS 區域。當買家訂閱您的產品時,我們會授予他們存取權,並在您更新軟體時通知他們。

建立無伺服器應用程式

您的第一個步驟是封裝用來建立無伺服器應用程式的AWS Lambda函數。您的應用程式是 Lambda 函數、事件來源及其他資源的組合,以共同執行任務。無伺服器應用程式可以像一個 Lambda 函數一樣簡單,也可以與其他資源包含多個函數,例如 API、資料庫和事件來源對應。

使用AWS SAM定義無伺服器應用程式的模型。有關性質名稱和類型的描述,請參閱AWS::Serverless::Application中的《AWS實驗室》中的 GitHub。以下是具有單一 Lambda 函數和AWS Identity and Access Management (IAM) 角色的範AWS SAM本範例。

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予存取您上載的成品。

將無伺服器應用程式發佈至無伺服器應用程式儲存庫
  1. 請在 https://console.aws.amazon.com/s3/ 開啟 Amazon Simple Storage Service (Amazon S3) 主控台。

  2. 選擇您用於封裝應用程式的 Amazon S3 儲存貯體。

  3. 選擇 Permissions (許可) 標籤。

  4. 選擇 Bucket Policy (儲存貯體政策)。

  5. 複製並貼上下列政策陳述式。

    注意

    範例原則陳述式會產生錯誤,直到下列步驟中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" } } } ] }
    1. 將屬性值中的 DOC-EXAMPLEResource 值區取代為值區的值區名稱。

    2. 用您的AWS 帳戶識別碼取代Condition元素中的 123456789012。該Condition元素可確保AWS Serverless Application Repository唯一具有從指定的訪問應用程序的權限AWS 帳戶。

  6. 選擇 Save (儲存)

  7. 開啟位於 AWS Serverless Application Repository 的 https://console.aws.amazon.com/serverlessrepo 主控台。

  8. 在 [我的應用程式] 頁面上選擇 [發佈應用程式

  9. 視需要填寫必填欄位和任何選擇性欄位。必填欄位為:

    • Application name (應用程式名稱)

    • 作者

    • Description (描述)

    • 源代碼網址

    • SAM 範本

  10. 選擇發佈應用程式

若要發佈應用程式的後續版本
  1. 開啟位於 AWS Serverless Application Repository 的 https://console.aws.amazon.com/serverlessrepo 主控台。

  2. 在導覽窗格中,從我的應用程式中選擇應用程式。

  3. 選擇 Publish new version (發佈新版本)

如需詳細資訊,請參閱使用 AWS SAMCLI 發行無伺服器應用程式

建立 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 Resource Name (ARN)。此資訊位於的 [我的應用程式] 區段中AWS Serverless Application Repository。

  • SemanticVersion— 無伺服器應用程式的版本。您可以從的 [我的應用程式] 區段中找到這個AWS Serverless Application Repository。

  • Parameter(選擇性) — 應用程式參數。

注意

對於ApplicationIDSemanticVersion不支持內在函數。您必須對這些字串進行硬編碼。由複製時會更新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-id application-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賣家營運團隊會以電郵聯絡你。