写 Lambda 函数从零开始要多久?加上调 Bedrock 的参数、DynamoDB 的读写、SNS 通知------搞不好半天就过去了。
我用 Amazon Q Developer 跑了一周,有些场景确实快得离谱。直接上干货。
先说说它是什么
Amazon Q Developer 是亚马逊云科技的 AI 编程助手,装在 VS Code 或 JetBrains 里用。核心能力:
- 实时代码补全:写到一半它就猜出你要干嘛
- 自然语言生成代码:描述需求,直接出代码
- 代码解释 & 转换:看不懂的代码丢给它解释,Python 2 转 3 也能搞
- 安全扫描:帮你揪出硬编码 credentials 和过宽的 IAM 权限
重点是:它对 AWS 服务的理解是原生的。写 Lambda、DynamoDB、S3 相关代码时,补全准确度明显不一样。
场景一:写 Lambda 函数(最香的)
输入注释描述需求:
python
# Create a Lambda function that:
# 1. Receives an S3 event when a new image is uploaded
# 2. Uses Bedrock to analyze the image content
# 3. Stores the analysis result in DynamoDB
# 4. Sends a notification via SNS
Q Developer 生成的代码:
python
import boto3
import json
import os
from datetime import datetime
bedrock = boto3.client('bedrock-runtime', region_name='us-east-1')
dynamodb = boto3.resource('dynamodb')
sns = boto3.client('sns')
s3 = boto3.client('s3')
table = dynamodb.Table(os.environ['TABLE_NAME'])
topic_arn = os.environ['SNS_TOPIC_ARN']
def handler(event, context):
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
# Get image from S3
response = s3.get_object(Bucket=bucket, Key=key)
image_bytes = response['Body'].read()
# Analyze with Bedrock Claude
analysis = bedrock.invoke_model(
modelId='anthropic.claude-3-haiku-20240307-v1:0',
body=json.dumps({
'messages': [{
'role': 'user',
'content': [
{'type': 'image', 'source': {
'type': 'base64',
'media_type': 'image/jpeg',
'data': __import__('base64').b64encode(image_bytes).decode()
}},
{'type': 'text', 'text': 'Describe this image in detail.'}
]
}],
'max_tokens': 1024
})
)
result = json.loads(analysis['body'].read())
description = result['content'][0]['text']
# Store in DynamoDB
table.put_item(Item={
'image_key': key,
'bucket': bucket,
'description': description,
'analyzed_at': datetime.utcnow().isoformat(),
'status': 'completed'
})
# Send notification
sns.publish(
TopicArn=topic_arn,
Subject=f'Image Analyzed: {key}',
Message=f'Image {key} analyzed successfully.\n\nDescription: {description[:200]}'
)
return {'statusCode': 200, 'body': 'OK'}
说实话,Bedrock 的 modelId、多模态输入格式、S3 event 结构------全对。环境变量用法也合理。
核心缺的是错误处理,手动加 try/except 改了不到 10 行就能跑。比从零写快了至少 20 分钟。
场景二:CDK 基础设施代码
typescript
// Create a CDK stack with:
// - API Gateway REST API
// - Lambda function behind it
// - DynamoDB table for storage
// - Cognito user pool for auth
生成的 CDK 代码基本可用。IAM 权限的 grantReadWriteData() 和 API Gateway 的 LambdaIntegration 都是推荐写法,不是那种一把梭 "Resource": "*" 的野路子。
场景三:安全扫描
我拿老项目跑了一遍,发现了 3 个之前 review 没抓住的问题:
- 硬编码的 credentials
- 过于宽泛的 IAM 策略
- 未加密的 S3 桶配置
这个功能平时不起眼,但关键时刻能救命。
场景四:代码转换
Python 2 转 Python 3 的老活:
print语句 →print()函数 ✓unicode→str✓dict.iteritems()→dict.items()✓except Exception, e→except Exception as e✓
准确率大概 95%,剩下 5% 是边缘情况手动调。
总结一下
| 场景 | 效率提升 | 准确度 |
|---|---|---|
| AWS 服务代码 | 明显 | 高 |
| CDK/CloudFormation | 明显 | 高 |
| 安全扫描 | 有价值 | 中高 |
| 代码转换 | 明显 | 高 |
| 通用业务逻辑 | 一般 | 中等 |
核心优势就一句话:对 AWS 生态理解深。写 Bedrock、Lambda、DynamoDB 代码时,API 签名、IAM 权限模型、调用格式都是对的。
局限也有------复杂业务逻辑还得人来设计,AI 生成的代码结构合理但缺乏业务上下文理解。
怎么用
- VS Code 装 Amazon Q 扩展
- Builder ID 登录(免费)
- 开写,AI 自动补全
免费版日常够用,Pro 版($19/月)上下文窗口更大,安全扫描额度更多。
🔗 Amazon Q Developer:aws.amazon.com/cn/q/develo... 🔗 VS Code 扩展:marketplace.visualstudio.com/items?itemN...