本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
添加无服务器应用程序组件
您可以创建包含一个或多个 Amazon 系统映像 (AMIs) 的产品,这些映像使用一个或多个 AWS CloudFormation 模板交付,产品中包含无服务器组件。例如,您可以创建一个产品,其中一个AMI配置为控制器服务器,另一个AMI配置为工作服务器,作为 AWS CloudFormation 堆栈交付。用于创建堆栈的 AWS CloudFormation 模板可以包括用于设置由其中一台服务器中的事件触发的 AWS Lambda 函数的定义。使用这种方法来设计产品时,可以简化体系结构并使买家更容易启动产品。此方法还可以让您更轻松地更新您的产品。这些部分向您展示如何创建和提供此类产品。
有关AMIs为您的产品创建的信息,请参阅AMI基于产品的位于 AWS Marketplace。有关完成商品 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 在创建商品信息之前,请对您的商品进行审核和验证。如果在列出产品之前必须解决一些问题,我们将向您发送电子邮件。
-
作为完成订阅的一部分,我们会将无服务器应用程序和模板复制到每个应用程序和 AWS CloudFormation 模板的 AWS Marketplace自有存储库中。AMIs AWS 区域当买家订阅您的产品时,我们将向买家提供访问权限,还会在您更新软件时通知他们。
主题
步骤 1:创建无服务器应用程序
第一步是打包用于创建无服务器应用程序的 AWS Lambda 函数。您的应用程序是 Lambda 函数、事件源以及共同执行任务的其他资源的组合。无服务器应用程序可以像一个 Lambda 函数一样简单,也可以包含具有其他资源(APIs例如数据库和事件源映射)的多个函数。
使用为您的无服务器应用程序定义模型。 AWS SAM 有关属性名称和类型的描述,请参阅上的:: ServerlessAWS:: Appless:: Application in Lab
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"
第 2 步:将您的应用程序发布到存储库
要发布应用程序,首先需要上传应用程序代码。将您的代码构件(例如,Lambda 函数、脚本、配置文件)存储在您的账户拥有的 Amazon S3 存储桶中。当你上传应用程序时,它最初设置为私有,这意味着只有创建应用程序的人才能使用它。 AWS 账户 您必须创建一个IAM策略,授予访问您上传的构件的 AWS Serverless Application Repository 权限。
将无服务器应用程序发布到无服务器应用程序存储库
-
打开 Amazon S3 控制台,网址为https://console.aws.amazon.com/s3/
。 -
选择用于打包您的应用程序的 Amazon S3 存储桶。
-
选择权限选项卡。
-
选择存储桶策略。
-
复制粘贴下面的示例策略语句。
注意
在以下步骤中更新
aws:SourceAccount
和Resource
的值之前,示例策略语句将产生错误。{ "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
" } } } ] }-
将
Resource
属性值中的 amzn-s3-demo-bucket 替换为存储桶的存储桶名称。 -
Replace(替换)
123456789012
在带有您的 AWS 账户 ID 的Condition
元素中。该Condition
元素可确保 AWS Serverless Application Repository 只有用户有权从指定的应用程序访问应用程序 AWS 账户。
-
-
选择保存。
-
打开 AWS Serverless Application Repository 控制台,网址为https://console.aws.amazon.com/serverlessrepo
。 -
在我的应用程序页面上,选择发布应用程序。
-
根据需要,填写必填字段和任何可选字段。必填字段为:
-
应用程序名称
-
作者
-
描述
-
源代码 URL
-
SAM模板
-
-
选择发布应用程序。
发布应用程序的后续版本
-
打开 AWS Serverless Application Repository 控制台,网址为https://console.aws.amazon.com/serverlessrepo
。 -
在导航窗格中,从我的应用程序中选择应用程序。
-
选择发布新版本。
有关更多信息,请参阅使用发布无服务器应用程序。 AWS SAM CLI
步骤 3:创建 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
,不支持内置函数。您必须对这些字符串进行硬编码。克隆后会更新。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
第 4 步:提交您的 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:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*"] } ] }
第 5 步:更新您的 AWS Serverless Application Repository 应用程序权限
要向提交 AWS Serverless Application Repository 申请 AWS Marketplace,您必须授予阅读申请的 AWS Marketplace 权限。为此,将权限添加到与您的无服务器应用程序关联的策略中。可通过两种方式更新您的应用程序策略:
-
前往 AWSServerless Application Repository
。从列表中选择您的无服务器应用程序。选择共享选项卡,然后选择创建语句。在语句配置页面上,在账户 ID 字段中输入以下服务主体: assets.marketplace.amazonaws.com
。然后选择保存。 -
使用以下 AWS CLI 命令更新您的应用程序策略。
aws serverlessrepo put-application-policy \ --region
region
\ --application-idapplication-arn
\ --statements Principals=assets.marketplace.amazonaws.com,Actions=Deploy
第 6 步:分享你的 AMI
所有AMIs构建和提交给的产品都 AWS Marketplace 必须遵守所有产品政策。中提供了自助AMI扫描功能 AWS Marketplace 管理门户。使用此功能,您可以启动对您的扫描AMIs。您可以快速接收扫描结果(通常不到 1 小时),并从单个位置获得清晰的反馈。成功扫描您的AMI商品后,上传您的商品加载表,提交AMI给 AWS Marketplace 卖家运营团队处理。
第 7 步:使用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 卖家运营团队将通过电子邮件与您联系。