赞
踩
欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。
我会每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿云开发/架构技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS最佳实践,并应用到自己的日常工作里。本次介绍的是如何利用亚马逊云科技上利用无服务器云原生代码开发服务Lambda,开发事件触发的图片处理应用,省去服务器运维并提升应用扩展性。本方案架构图如下:
AWS Lambda 是亚马逊云科技提供的一项无服务器计算服务,允许开发者在无需管理服务器的情况下运行代码。通过 Lambda,您可以编写代码并上传到云端,AWS 会自动为您处理底层的计算资源分配、维护和扩展。Lambda 支持多种编程语言,能够响应各种事件触发代码执行,如对 S3 桶的更改、API Gateway 请求、数据库更新等。
使用 AWS Lambda 开发应用程序带来了许多显著优势。首先,简化了基础设施管理。开发者不需要担心服务器的配置、维护或扩展,只需专注于编写业务逻辑,剩下的由 AWS 自动处理。这种无服务器架构极大地减少了运维工作,使得应用开发更加敏捷和高效。
其次,按需扩展能力是 Lambda 的一大亮点。无论应用面临怎样的负载波动,Lambda 都能够自动扩展处理能力,确保应用在高峰期也能保持稳定的性能。同时,由于 Lambda 是按实际计算时间计费,企业只需为代码执行的时间付费,这使得成本控制更加灵活和透明。
此外,Lambda 还支持多种触发事件,与其他 AWS 服务紧密集成。这使得开发者可以轻松构建复杂的事件驱动架构,从数据处理管道、自动化任务到无服务器 Web 应用,Lambda 都能胜任。
1. 首先我们进入S3服务中,创建一个S3存储桶。
2. 点击Create Bucket创建
3. 为S3存储桶命名为“images-randomnumber1112”,保持其他配置为默认后点击Create创建。
4. 进入该S3存储桶后点击Upload选择上传一张图片。
5. 进入Lambda服务页面
6. 点击创建一个Lambda函数
7. 选择“Author from scratch”表示创建一个空的代码文件,为函数命名为“Create-Thumbnail”,编程语言选择Python3.9。
8. 为Lambda函数添加访问S3的权限“lambda-execution-role”,再点击Create创建。
9. 接下来我们为Lambda添加事件触发规则,点击“Add trigger”。
10. 我们配置当我们创建的S3桶“images-randomnumber1112”有图片/文件上传操作时,触发该Lambda函数,最后点击右下角的Add添加。
11. 我们此时的代码文件还是空的,我们选择右侧的“Upload From”,再点击“Amazon S3 link URL:”从S3桶中上传写好的代码文件。
12. 填写代码所在的URL路径“us-west-2-aws-training.s3.us-west-2.amazonaws.com/courses/spl-88/v2.3.25.prod-b11cdbd0/scripts/CreateThumbnail.zip”,点击右下角Save保存。
上传的具体代码如下,该Python代码主要用于处理图像并将图像保存到另外一个S3存储桶。
- import boto3
- import os
- import sys
- import uuid
- from PIL import Image
- import PIL.Image
-
- s3_client = boto3.client('s3')
-
- def resize_image(image_path, resized_path):
- with Image.open(image_path) as image:
- image.thumbnail((128, 128))
- image.save(resized_path)
-
- def handler(event, context):
- for record in event['Records']:
- bucket = record['s3']['bucket']['name']
- key = record['s3']['object']['key']
- download_path = '/tmp/{}{}'.format(uuid.uuid4(), key)
- upload_path = '/tmp/resized-{}'.format(key)
-
- s3_client.download_file(bucket, key, download_path)
- resize_image(download_path, upload_path)
- s3_client.upload_file(upload_path, '{}-resized'.format(bucket), key)
13. 进入Runtime Settings程序运行配置,修改被调用的主函数名Handler为“CreateThumbnail.handler”,与代码中的主函数名匹配。
14. 接下来我们对该代码进行测试,进入“Test”测试页面,将该测试命名为“Upload”。
15. 选择代码测试模板为S3 Put
16. 将代码测试配置中的“s3.bucket.name”和“s3.bucket.arn”替换成我们创建的S3桶名,将“object.key”替换为我们的图片名“HappyFace.jpg”,最后点击右上角的Test开始测试。
17. 我们得到测试成功的结果,返回为“null”,以及得到代码运行的消耗,我们同时可以点击Click Here来查看具体的运行日志和运行指标。
以下是使用AWS Boto3 SDK创建一个AWS Lambda函数的Python代码示例
- import boto3
- import zipfile
- import io
-
- # 创建AWS Lambda客户端
- lambda_client = boto3.client('lambda', region_name='us-east-1')
-
- # 创建一个Lambda函数的代码包
- def create_lambda_deployment_package():
- deployment_package = io.BytesIO()
- with zipfile.ZipFile(deployment_package, mode='w') as zf:
- zf.writestr('lambda_function.py', """
- def lambda_handler(event, context):
- return 'Hello, World!'
- """)
- deployment_package.seek(0)
- return deployment_package.read()
-
- # 创建Lambda函数
- def create_lambda_function():
- function_name = 'myLambdaFunction'
-
- try:
- response = lambda_client.create_function(
- FunctionName=function_name,
- Runtime='python3.8',
- Role='arn:aws:iam::YOUR_ACCOUNT_ID:role/YourLambdaRole',
- Handler='lambda_function.lambda_handler',
- Code={'ZipFile': create_lambda_deployment_package()},
- Description='My test Lambda function',
- Timeout=15,
- MemorySize=128,
- Publish=True,
- )
- print(f'Lambda function {function_name} created successfully.')
- return response
- except Exception as e:
- print(f'Error creating Lambda function: {str(e)}')
- return None
-
- if __name__ == '__main__':
- create_lambda_function()
创建Lambda函数:
create_lambda_function
函数是使用Boto3 SDK的create_function
方法创建Lambda函数。- 参数解释:
FunctionName
: Lambda函数的名称。Runtime
: 代码运行环境,这里指定为Python 3.8。Role
: 赋予Lambda函数的IAM角色,提供必要的权限。Handler
: 指定Lambda函数的主函数,格式为文件名.函数名
。Code
: 上传的Lambda函数代码的zip文件。Description
: 对Lambda函数的描述。Timeout
: 函数的超时时间(以秒为单位)。MemorySize
: 为函数分配的内存大小(以MB为单位)。Publish
: 是否部署函数新版本。
以上就是在亚马逊云科技上利用云原生服务Lambda减轻运维压力,加速代码开发,提升服务扩展性的全部步骤。欢迎大家关注0基础5分钟上手AWS系列,未来获取更多国际前沿的AWS云开发/云架构方案。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。