如何在 Serverless 框架中使用 S3 存储服务
随着云计算技术的快速发展,Serverless 架构(无服务器架构)变得越来越受欢迎。Serverless 框架提供了一种轻量级的开发方式,使开发者不必为架构的维护和扩展担心,专注于业务逻辑的开发。S3 存储服务是亚马逊 Web 服务(AWS)提供的对象存储服务,既可以作为静态网站托管,也可以用作 Web 应用的数据存储。这篇文章将讲述如何在 Serverless 框架中使用 S3 存储服务。
- 安装 Serverless
首先,安装并配置 Serverless 框架环境。Serverless 框架需要 Node.js 环境。在这里我们使用 NPM 来安装 Serverless 框架:
$ npm install -g serverless
安装完成后,我们使用 sls 命令来检查是否安装成功:
$ sls -v
如果输出如下信息,说明已经安装成功:
Framework Core: 1.64.0 Plugin: 3.6.0 SDK: 2.3.0 Components Core: 1.1.2 Components CLI: 1.4.0
- 创建 Serverless 项目
在安装完成 Serverless 框架后,我们需要创建 Serverless 项目。 在终端中,运行以下命令:
$ sls create -t aws-nodejs -n my-s3-project
这个命令会创建一个基于 Node.js 的 Serverless 项目,并在本地的 my-s3-project 目录中创建了一个 serverless.yml 的配置文件。
在这里我们使用 aws-nodejs 模板,也可以使用其他模板,具体可以使用命令行 sls create --help 查看。
- 添加 S3 存储服务
接下来我们需要在项目中添加 S3 存储服务。在 serverless.yml 文件中添加以下内容:
// www.javascriptcn.com code example
service: my-s3-project
provider:
name: aws
runtime: nodejs10.x
resources:
Resources:
myS3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: <your-bucket-name>在这里,我们定义了一个名为 myS3Bucket 的 AWS::S3::Bucket 资源,可以通过 <your-bucket-name> 参数指定存储的桶名。
- 安装 AWS SDK
接下来,我们需要在项目中安装 AWS SDK,以便能够与 S3 存储服务进行交互。在终端中,运行以下命令:
$ npm install aws-sdk
- 编写代码
接下来我们开始编写代码。在 index.js 文件中,创建一个函数来上传文件到 S3 存储服务。代码如下:
// www.javascriptcn.com code example
'use strict';
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const uploadParams = {
Bucket: '<your-bucket-name>',
Key: 'test.txt',
Body: 'Hello World!'
};
module.exports.upload = async (event, context) => {
try {
const result = await s3.upload(uploadParams).promise();
console.log(result);
return {
statusCode: 200,
body: JSON.stringify({
message: 'File uploaded successfully.',
}),
};
} catch (error) {
console.error(error);
return {
statusCode: 500,
body: JSON.stringify({
message: 'Upload failed.',
}),
};
}
};在代码中,我们首先导入 AWS SDK,并创建一个 S3 实例。我们定义了一个 uploadParams 对象,其中 Bucket 参数指定了要上传到的桶名,Key 参数指定了上传文件的 key,也就是文件名,Body 参数指定了要上传的文件内容。
接下来,我们以 async 函数的形式定义了一个 upload 方法,该方法接收 event 和 context 参数。在上传过程中,我们使用 try/catch 块处理错误,结果通过 s3.upload 方法上传,并通过 promise 返回结果。
- 部署项目
经过上述操作之后,我们需要将 Serverless 项目部署到 AWS Lambda 上,然后才能够执行我们的代码。
在终端中,运行以下命令:
$ sls deploy
运行该命令之后,Serverless 会自动将项目打包,并在 AWS Lambda 上部署。在输出信息中,我们可以找到上传的 S3 桶的 URL。在这里,我们可以通过以下 URL 访问:
https://<your-bucket-name>.s3.amazonaws.com/test.txt
- 测试
现在,我们可以测试我们的代码了。在终端中,运行以下命令:
$ serverless invoke -f upload
如果一切正常,可以在终端中看到上传结果,并在 S3 存储中找到上传的文件。
完整的 Serverless 框架代码如下:
// www.javascriptcn.com code example
service: my-s3-project
provider:
name: aws
runtime: nodejs10.x
functions:
upload:
handler: index.upload
resources:
Resources:
myS3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: <your-bucket-name>// www.javascriptcn.com code example
'use strict';
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const uploadParams = {
Bucket: '<your-bucket-name>',
Key: 'test.txt',
Body: 'Hello World!'
};
module.exports.upload = async (event, context) => {
try {
const result = await s3.upload(uploadParams).promise();
console.log(result);
return {
statusCode: 200,
body: JSON.stringify({
message: 'File uploaded successfully.',
}),
};
} catch (error) {
console.error(error);
return {
statusCode: 500,
body: JSON.stringify({
message: 'Upload failed.',
}),
};
}
};通过以上的 Serverless 框架部署,我们可以方便地使用 S3 存储服务。当然,我们还可以扩展我们的函数,实现更多的操作,例如,删除文件、列出文件等操作。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c2b1ec314edc2684c2800d