前言
在 Serverless 架构下部署应用已经成为现代云计算的主流方式。Serverless 无服务器的设计理念不仅让开发者不需要去管理硬件,也大大简化了应用的部署和管理流程,同时也节省了成本。但是,当我们使用 Serverless 部署应用时,有时会遇到一些困难和问题,其中最常见的问题就是部署失败。本文将结合实例,对 Serverless 部署失败的排查技巧进行详细介绍,帮助你快速解决部署问题。
一、读取错误日志
在 Serverless 部署失败时,错误日志是最有价值的信息来源,可以帮助我们定位问题所在。一般情况下,Serverless 的服务商都会提供错误日志查询的功能。在云函数的控制台或者部署工具的历史记录中,我们可以找到部署任务的详情,并查看错误日志。例如,下面是 AWS Lambda 中一个节点执行错误的例子。
-- -------------------- ---- ------- - --------------- ------- ---- -------- ----- -- ----------- ------------ ------------ ------------- - ----------------------- --------------------------- ---------------- -------------------- ------------------------------ -------------------- ------------ -------------------- -------------- -------------------- ---------------------- ------------------- --------------- -------------------- -------- --------------------------- - -
查看错误日志时,我们应该仔细阅读错误信息、错误类型和堆栈跟踪,从中找到引起错误的原因。例如,上面的错误信息中显示该函数试图读取一条未定义的属性,从而导致错误产生。我们需要在代码中找到此处并进行更正。
二、检查云平台授权
在开发 Serverless 应用时,我们通常需要为应用授权,以访问云服务的资源,例如 S3 存储桶或 DynamoDB 表。当授权失败时,Serverless 应用部署将会失败。为了检查授权问题,我们可以检查以下内容:
区分用户和角色:如果你使用了 IAM 角色或 Amazon Cognito 用户池等服务,你需要确认这些服务是否与你的云函数或 Lambda 函数的执行过程有关联,并尝试遵循相应的安全最佳实践。
检查授权:当我们使用 serverless 进行部署时,serverless 客户端会自动将部署所需的权限向云平台发出申请,我们可以检查授权时是否出现问题。在 AWS 中,我们可以使用 AWS CLI 命令获取当前角色的权限列表:
aws iam get-role --role-name lambda_basic_execution --query 'Role.AssumeRolePolicyDocument.Statement[*].Principal.Service' --output text
更新授权:如果授权都没有问题,但仍然出现了部署失败的情况,你可以尝试更新配置文件中的访问权限、检查 IAM 角色的权限等。
三、检查配置文件
Serverless 应用的配置文件是 yaml 或 JSON 格式的文件,用于定义应用的资源和部署的设置。在配置文件中定义的资源包括 Lambda 函数、S3 存储桶、事件触发器等。例如,在以下代码中,config.yml 文件定义了一个名为 "helloworld" 的 Lambda 函数和相关的文件:
-- -------------------- ---- ------- -------- ---------- -------- - ------------------------------ --------- ----- --- -------- --------- ------ --- ------- --------- ---------- ----------- -------- ------------------- ------- - ----- ----- ----- ------- ---
当我们部署 Serverless 应用时,配置文件中的所有信息都将被用来创建、配置和部署资源。但是,如果指定了错误的资源、缺失相关的文件或格式不正确等其他错误,我们就可能遭遇部署失败的情况。因此,在任何 Serverless 部署中,检查配置文件都是非常重要的。
四、检查运行环境
当部署 Serverless 应用时,我们需要注意的另一个问题是运行环境。我们需要检查 Lambda 函数或云函数所在的环境是否正确。例如,部署时指定了错误的运行环境、运行环境中缺失依赖项或依赖项版本不匹配等问题都可能导致部署失败。
在 Node.js 中,我们通常会使用 NPM 安装依赖,并在配置文件中指定依赖项和版本。像这样:
-- -------------------- ---- ------- -------- ---------- -------- - ------------------------------ --------- ----- --- -------- --------- ---------- ------------ -------- ------------- -------- --------- -------- -------- - ------------ ------------ ---------- ---------------- ------- - --- --------- ------- --------- --- -- ----- --- ------ --- -------- - ----- --- ---------- ------ ------------ ------- -------- -------- ----- ----------- ------------- ------------- ------------ ---------- ---------------- ----------------- ----- -------------------- ------- - ----- ----- ----------- ------- ---
以上例子中,我们使用 serverless-python-requirements 插件和 package 子节点指定依赖项和运行环境,然后使用 builder 部分来指定构建和部署函数的方式。
五、确保资源存在
Serverless 应用所使用的资源包括存储桶、命名空间、事件触发器、如 DynamoDB 表 中的数据库和保存对象的 S3 存储桶等。但是,在使用这些资源的过程中,我们需要确保它们都已经创建,否则将无法完成部署任务。
例如,以下代码演示了在 AWS Lambda 中创建存储桶的过程:
resources: Resources: ImageBucket: Type: AWS::S3::Bucket Properties: BucketName: ${opt:stage}-example-images
这里我们使用了 AWS CloudFormation 部署 S3 存储桶资源,但在运行部署之前,必须先创建存储桶。如果您没有创建存储桶,那么部署任务将会因无法找到资源而失败。
结论
本文主要介绍了 Serverless 部署失败的排查技巧,即通过阅读错误日志、检查授权设置、检查配置文件、检查运行环境和检查资源是否存在等多个方面来排查问题。相信这些技巧可以帮助您在 Serverless 应用部署时快速定位问题,提高工作效率。希望您可以通过这篇文章学到新的东西,如果有任何问题或补充意见,请在评论区留言。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6736e66c0bc820c582570125