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

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

新增無伺服器應用程式元

您可以建立包含一或多個 Amazon Machine Image (AMIs) 的產品,並使用一或多個 AWS CloudFormation 範本交付,並將無伺服器元件併入產品中。例如,建立一個產品,其中一個AMI設定為控制器伺服器,另一個AMI設定為 Worker 伺服器,並以 AWS CloudFormation 堆疊形式提供。用來建立堆疊的 AWS CloudFormation 範本可以包含用來設定由其中一個伺服器中的事件觸發的 AWS Lambda 函數的定義。

當您使用這種方法設計產品時,您可以簡化架構並使您的買家更容易上市。這種方法也可以讓您更輕鬆地更新產品。

如需有關為產品建立AMIs的資訊,請參閱AMI型產品。如需完成產品 AWS CloudFormation 範本的詳細資訊,請參閱AMI以 為基礎的交付使用 AWS CloudFormation

定義無伺服器應用程式時,您可以使用儲存在 AWS Serverless Application Repository. AWS Serverless Application Model AWS SAM AWS SAM 是建置無伺服器應用程式的開放原始碼架構。在部署期間,將語法 AWS SAM 轉換並擴充為 AWS Serverless Application Model AWS CloudFormation 語法。 AWS Serverless Application Repository 是無伺服器應用程式的受管理儲存庫。它可讓您儲存和共用可重複使用的應用程式,以便購買者可以組裝和部署無伺服器架構。若要建立並提供此類產品,請完成以下步驟:

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

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

建立無伺服器應用程式

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

使用 AWS SAM 定義無伺服器應用程式的模型。如需屬性名稱和類型的描述,請參閱:AWS: 無伺服器:: Labs 中的應用程式 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://amzn-s3-demo-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. 在開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

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

  3. 選擇許可索引標籤標籤。

  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:::amzn-s3-demo-bucket/*", "Condition" : { "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }
    1. 將屬性值中的 amzn-s3-demo-bucket 替換為值區的Resource值區名稱。

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

  6. 選擇 Save (儲存)。

  7. 在開啟 AWS Serverless Application Repository 主控台https://console.aws.amazon.com/serverlessrepo

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

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

    • Application name (應用程式名稱)

    • 作者

    • Description

    • 源代碼 URL

    • SAM範本

  10. 選擇發佈應用程式

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

  2. 在功能窗格中,從 [我的應用程式] 中選擇應用程式。

  3. 選擇 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(選擇性) — 應用程式參數。

注意

對於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:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*"] } ] }

更新 AWS Serverless Application Repository 應用程式權限

若要將您的 AWS Serverless Application Repository 申請提交給 AWS Marketplace,您必須授予讀取應用程式的 AWS Marketplace 權限。若要這麼做,請將權限新增至與無伺服器應用程式相關聯的原則。有兩種方法可以更新您的應用程式原則:

  • 移至 AWSServerless 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

所有AMIs構建和提交必 AWS Marketplace 須遵守所有產品政策。您可以在中使用自助AMI掃描 AWS Marketplace 管理入口網站。使用此功能,您可以對AMIs. 您可以在一個位置快速收到掃描結果(通常不到一小時),並提供清晰的反饋。掃描成功後,請上傳您AMI的產品載入表單,提交 AWS Marketplace 賣家營運團隊AMI進行處理。

使用無伺服器應用程AMI式提交 CloudFormation 產品

提交產品之前,請記住以下事項:

  • 您必須為每個範本提供架構圖。此圖表必須針對透過 CloudFormation 範本部署的每個 AWS 服務使用 AWS 產品圖示。此外,圖表必須包含服務的中繼資料。若要下載我們的官方 AWS 架構圖示,請參閱AWS架構圖示

  • 向買家顯示的每個範本的基礎結構成本估算,都是根據您使用「AWS 定價計算器」提供的預估值。在估計中,包括要部署為範本一部分的服務清單,以及典型部署的預設值。

  • 完成產品載入表單。您可以從中找到產品載入表單 AWS Marketplace 管理入口網站。單一產品和多AMI項產品需要不同的產AMI品載入表單。在產品載入表單中,您將為 CloudFormation範本提供公URL開資訊。 CloudFormation 模板必須以公眾的形式提交URL。

  • 使用 AWS Marketplace 管理入口網站 來送出你的刊登物品。從「資產」中選擇「檔案上傳」,附加檔案,然後選擇「上傳」。我們收到您的範本和中繼資料後, AWS 就會開始處理您的要求。

送出清單後,請 AWS Marketplace 檢閱並驗證產品載入表單。此外,將 AWS Marketplace 區域化AMIs和無伺服器應用程式,並代表您更新 AWS CloudFormation 範本的區域對應。如果發生任何問題, AWS Marketplace 賣家營運團隊會以電郵聯絡你。