添加无服务器应用程序组件 - AWS Marketplace

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

添加无服务器应用程序组件

您可以创建包含一个或多个 Amazon 系统映像 (AMI) 的产品,这些映像使用一个或多个 AWS CloudFormation 模板交付,产品中包含无服务器组件。例如,创建一个产品,其中一个 AMI 配置为控制器服务器,另一个 AMI 配置为工作服务器,作为 AWS CloudFormation 堆栈交付。用于创建堆栈的 AWS CloudFormation 模板可以包括用于设置由其中一台服务器中的事件触发的 AWS Lambda 函数的定义。

使用这种方法来设计产品时,可以简化体系结构并使买家更容易启动产品。此方法还可以让您更轻松地更新您的产品。

有关为产品创建 AMI 的信息,请参阅 基于 AMI 的产品。有关完成商品 AWS CloudFormation 模板的信息,请参阅基于 AMI 的配送使用 AWS CloudFormation

定义无服务器应用程序时,使用存储在中的 AWS Serverless Application Model AWS Serverless Application Repository(AWS SAM) 模板。 AWS SAM 是一个用于构建无服务器应用程序的开源框架。在部署期间, AWS SAM 将语法转换为语法并将其扩展为 AWS Serverless Application Model AWS CloudFormation 语法。 AWS Serverless Application Repository 是无服务器应用程序的托管存储库。它使您可以存储和共享可重用的应用程序,以便买家可以组装和部署无服务器架构。要创建和提供这种类型的产品,请完成以下步骤:

AWS Marketplace 在创建商品信息之前,请对您的商品进行审核和验证。如果在列出产品之前必须解决一些问题,我们将向您发送电子邮件。

作为完成订阅的一部分,我们会将 AMI、无服务器应用程序和模板复制到每个 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. 打开 Amazon S3 控制台,网址为:https://console.aws.amazon.com/s3/

  2. 选择用于打包您的应用程序的 Amazon S3 存储桶。

  3. 选择权限选项卡。

  4. 选择存储桶策略

  5. 复制粘贴下面的示例策略语句。

    注意

    在以下步骤中更新 aws:SourceAccountResource 的值之前,示例策略语句将产生错误。

    { "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. Resource属性值中的 DOC-EXAMPLE-BUCKET 替换为存储桶的存储桶名称。

    2. 将元素中的 123456789012 替换为你的身份证。Condition AWS 账户 该Condition元素可确保 AWS Serverless Application Repository 只有用户有权从指定的应用程序访问应用程序 AWS 账户。

  6. 选择保存

  7. 打开 AWS Serverless Application Repository 控制台,网址为https://console.aws.amazon.com/serverlessrepo

  8. 我的应用程序页面上,选择发布应用程序

  9. 根据需要,填写必填字段和任何可选字段。必填字段为:

    • 应用程序名称

    • 作者

    • 描述

    • 源代码 URL

    • SAM 模板

  10. 选择发布应用程序

发布应用程序的后续版本
  1. 打开 AWS Serverless Application Repository 控制台,网址为https://console.aws.amazon.com/serverlessrepo

  2. 在导航窗格中,从我的应用程序中选择应用程序。

  3. 选择发布新版本

有关更多信息,请参阅使用 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,不支持内置函数。您必须对这些字符串进行硬编码。克隆后会更新。ApplicationID AWS Marketplace

如果您计划在 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 模板、配置和脚本文件,请授予读取存储这些文件的 Amazon S3 存储桶的 AWS Marketplace 权限。要执行此操作,请更新您的存储桶策略以包含以下权限。

{ "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。然后选择保存

  • 使用以下 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 必须遵守所有商品政策。 AWS Marketplace 管理门户中提供了自助服务 AMI 扫描。使用此特征,您可以启动对您的 AMI 的扫描。您可以快速接收扫描结果(通常不到 1 小时),并从单个位置获得清晰的反馈。成功扫描您的 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 查看并验证商品加载表。此外,还可以对 AMI 和无服务器应用程序进行 AWS Marketplace 区域化,并代表您更新 AWS CloudFormation 模板的区域映射。如果出现任何问题, AWS Marketplace 卖家运营团队将通过电子邮件与您联系。