
示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载导读Photo Asset ManagerPAM照片资产管理器是 AWS Code Examples 仓库中的一个跨服务示例应用它以 React 网站为前端支持将摄影图片上传至 Amazon S3、通过 Amazon Rekognition 自动完成图片分类并支持按类别打包下载 ZIP 压缩包。本指南以 cdk/README.md 为核心结合仓库中applications/photo-asset-manager/cdk/的完整 CDK 源码讲解如何使用 AWS CDK 将 PAM 全栈应用部署到 AWS 云环境。读完本文你将掌握 PAM 的三大 CDK 堆栈结构、环境变量配置、按语言选择 Lambda 运行时的策略机制以及从合成synth、部署deploy到销毁destroy的完整生命周期操作。PAM 应用与 CDK 工程概览PAM 的核心业务流程是一条完整的媒体处理流水线React 前端接收用户上传的图片图片进入 Amazon S3 存储桶S3 对象创建事件触发 AWS Lambda 函数Lambda 调用 Amazon Rekognition 的DetectLabels完成图片自动分类分类标签写入 DynamoDB用户按类别发起下载请求后端打包匹配图片为 ZIP 文件并通过 SNS 发送通知。整个基础设施由 cdk 目录 下的 TypeScript CDK 工程定义包含IAM 用户与用户组创建并管理部署所需的身份与权限Amazon S3 存储桶存放上传图片storage与临时打包文件workingAmazon DynamoDB 表存储图片分类标签AWS Lambda 函数四个函数分别负责图片分类、标签查询、上传与下载打包Amazon API Gateway为 Lambda 函数提供 REST 路由Amazon Cognito用户池与 App Client提供身份认证Amazon CloudFront S3托管 React 静态网站Amazon SNS下载任务完成后的邮件通知角色与策略为上述资源授予最小必要权限。该工程支持使用任意一种 AWS SDK 语言实现来部署相关语言实现列表可参考仓库根目录 README.md。环境准备与依赖安装前置要求依赖用途git获取本仓库代码npmNode.js安装 CDK 工程依赖dockerCDK 的 Docker 镜像打包bundling构建 Lambda 代码AWS 访问密钥与秘密访问密钥IAM 用户需具备创建上述资源的权限配置方式参见 AWS CLI 快速配置文档安装依赖并检查 CDK 版本进入applications/photo-asset-manager/cdk/目录后安装依赖npm install验证 AWS CDK Toolkit 版本cdk --version从 package.json 可以看到工程将aws-cdk2.67.0 作为开发依赖固定aws-cdk-lib为 ^2.189.1、constructs为 ^10.0.0app入口为npx ts-node --prefer-ts-exts bin/app.ts见 cdk.json。配置环境变量PAM_NAME / PAM_EMAIL / PAM_LANG部署前必须导出三个环境变量它们是工程命名与运行时选择的核心输入变量名用途PAM_NAME标识该堆栈的短单词名称如pam、demoPAM_EMAIL预置默认用户账户的邮箱地址用于 Cognito 用户创建与 SNS 订阅通知PAM_LANG本部署中 Lambda 函数使用的编程语言README 声明当前支持的 Lambda 语言为Java、Python、Dotnet。结合源码 strategies.ts 中的STRATEGIES注册表实际可选的键更丰富java、javascript、python、dotnet、dotnetla.NET Lambda 注解版、rust、cpp、php以及占位用的empty。getStrategy()会对输入做小写化匹配未知语言回退到EMPTY_LAMBDAS_STRATEGY空实现仅用于占位。各平台导出语法bash/zshexport PAM_NAME export PAM_EMAIL export PAM_LANGWindows cmdset PAM_NAME set PAM_EMAIL set PAM_LANGWindows PowerShell$Env:PAM_NAME $Env:PAM_EMAIL $Env:PAM_LANG 环境变量的源码级约束在 common.ts 中PAM_NAME与PAM_EMAIL通过assert.ok()强制非空缺失会直接中断程序PAM_LANG缺省值为Java。命名规则如下PAM_STACK_NAME ${PAM_NAME}-${PAM_LANG}-PAM PAM_FE_INFRA_STACK_NAME ${PAM_NAME}-FE-Infra-PAM PAM_FE_ASSET_STACK_NAME ${PAM_NAME}-FE-Assets-PAMCognito 用户池域前缀取自PAM_STACK_NAME的小写形式见 auth.ts因此PAM_NAME建议使用简短、无特殊字符的单词避免用户池域名超长或非法。三个 CDK 堆栈与部署顺序工程共定义三个堆栈必须按顺序部署顺序堆栈名逻辑 ID职责1PamFrontEndInfraStack{PAM_NAME}-FE-Infra-PAMCloudFront 分发与托管静态网站的 S3 桶2PamStack{PAM_NAME}-{PAM_LANG}-PAM后端资源Rekognition、Lambda、S3、Cognito、API Gateway、DynamoDB、SNS3PamFrontEndAssetStack{PAM_NAME}-FE-Assets-PAM构建并部署 React 静态网站资源堆栈之间的依赖与数据交换由 bin/app.ts 驱动应用启动时通过 CloudFormationListExportsCommand拉取已部署堆栈的导出值CloudFront 域名、Cognito 用户池 ID、App Client ID、API Gateway URL 等。只有当上一堆栈的导出值存在时才会实例化下一个堆栈先无条件创建PamFrontEndInfraStack拿到CLOUDFRONT_DISTRIBUTION_NAME导出后才创建PamStack后端拿到 Cognito 与 API Gateway 全部导出后才创建PamFrontEndAssetStack前端资源。这就是为什么 README 要求严格按 1→2→3 的顺序部署。合成与部署列出并合成堆栈cdk ls会基于你的PAM_NAME与PAM_LANG列出三个堆栈。合成synth首个堆栈的 CloudFormation 模板cdk synth {PAM_NAME}-FE-Infra-PAM以PAM_NAMEpam为例实际命令为cdk synth pam-FE-Infra-PAM。部署确认模板无误后执行部署。此步骤会真实修改你的 AWS 云环境cdk bootstrap # 每个账户只需执行一次 cdk deploy {STACK_NAME} # 按顺序依次部署上述三个堆栈cdk bootstrap用于为当前账户/区域准备部署所需的 S3 桶与角色等引导资源仅在账户生命周期内需要一次。前端基础设施堆栈源码要点infra-stack.ts 中网站桶设置RemovalPolicy.DESTROY与autoDeleteObjects: true便于销毁时自动清理CloudFront 分发将 S3 桶作为默认来源根对象为index.html。为遵循现代 S3 私有桶最佳实践该堆栈通过CfnOriginAccessControl创建 OACOrigin Access Control并写入s3:GetObject桶策略StringEquals条件限定为当前 CloudFront 分发的AWS:SourceArn。堆栈最终以CfnOutput导出 CloudFront 域名供后续堆栈消费。后端堆栈PamStack深入解析stack.ts 中的PamStack依次组装五个核心构件PamTables、PamBuckets、SNSTopicPamNotifier并通过EmailSubscription订阅PAM_EMAIL、PamLambda四函数与PamApi最后统一授予权限并导出输出。存储资源S3 桶与 DynamoDB 表resources.ts 定义了storage 桶开放 CORS 的PUT方法allowedOrigins: [*]允许前端直接上传1 天后转入INTELLIGENT_TIERING智能分层存储working 桶打包工作区1 天后过期删除expiration: Duration.days(1)LabelsTableDynamoDB分区键Label字符串类型存放标签聚合数据。两个桶均设置RemovalPolicy.DESTROY与autoDeleteObjects: true销毁堆栈时自动清空删除。Lambda 函数与语言策略lambdas.ts 定义了四个函数并通过PamLambdasStrategy抽象出“语言无关”的构建方式函数名职责环境变量DetectLabelsFnS3 上传触发调用 Rekognition 分类图片LABELS_TABLE_NAME、STORAGE_BUCKET_NAME、WORKING_BUCKET_NAME、NOTIFICATION_TOPICLabelsFn返回标签列表GET同上UploadFn为前端生成预签名上传 URLPUT同上PrepareDownloadFn按标签打包 ZIPPOST同上每种语言的策略strategies.ts不仅指定运行时与处理器还通过 CDK 的bundling容器内打包能力决定代码资产如何构建JavaRuntime.JAVA_111024 MB 内存 / 90 秒超时容器内执行mvn install并导出PhotoAssetRestSDK-1.0-SNAPSHOT.jar源码来自 javav2/usecases/pam_source_filesPythonRuntime.PYTHON_3_9512 MB 内存 / 60 秒超时直接使用 cdk/rekognition_photo_analyzer 目录作为代码资产DotnetRuntime.DOTNET_61024 MB / 90 秒容器内安装Amazon.Lambda.Tools并执行dotnet lambda package源码来自 dotnetv3/cross-service/PhotoAssetManagerDotnet注解版 dotnetla同 Dotnet但打包PamApiAnnotations项目使用Functions_GetLabels_Generated等注解生成的处理器JavaScriptRuntime.NODEJS_18_X256 MB / 5 分钟容器内npm i npm run build源码来自 javascriptv3/example_code/cross-services/photo-asset-managerRustRuntime.PROVIDED_AL2Architecture.ARM_64通过宿主机cargo lambda build --release --arm64 --output-format Zip交叉编译引用 rustv1/cross_service/photo_asset_managementCRuntime.PROVIDED_AL2Architecture.ARM_64使用Code.fromDockerBuild从 cpp/example_code/cross-service/photo_asset_manager 构建PHPRuntime.PROVIDED_AL2X86_64直接引用 php/applications/photo_asset_manager 下预构建的bootstrap.zip。权限授予与事件触发PamStack.permissions()stack.ts集中处理权限与触发DetectLabelsFn 通过LambdaDestination订阅 storage 桶的.jpg与.jpeg后缀对象创建事件授予rekognition:DetectLabels、LabelsTable 读写、storage 桶读写权限LabelsFn 授予 LabelsTable 读权限UploadFn 授予 storage 桶PutObjectgrantPut权限PrepareDownloadFn 授予 LabelsTable 读、storage 读、working 读写、SNS 发布及sns:subscribe权限。四个堆栈输出Cognito 用户池 ID、App Client ID、用户池 Base URL、API Gateway URL通过CfnOutput以exportName导出。认证与 APICognito API Gatewayauth.ts 创建 Cognito 用户池最小密码策略6 位、无强制复杂度、关闭 MFA、关闭自助注册、RemovalPolicy.DESTROY用户池域前缀取PAM_STACK_NAME小写。App Client 配置 OAuth 隐式授权流implicitCodeGrant回调与登出 URL 均指向 CloudFront 域名Scope 为profile与openid。同时通过CfnUserPoolUser预置一个默认用户用户名即PAM_EMAIL。api.ts 构建 API Gateway REST API使用CognitoUserPoolsAuthorizer对全部路由启用AuthorizationType.COGNITO并开启全源 CORS 预检。路由与 Lambda 的映射关系路由方法后端 Lambda说明/labelsGETLabelsFn返回标签聚合列表/uploadPUTUploadFn请求体含file_name返回预签名上传url/downloadPOSTPrepareDownloadFn请求体为labels数组以异步事件方式调用/download使用非代理集成并注入X-Amz-Invocation-Type: Event头使 API Gateway 以异步事件方式触发 Lambda避免客户端长时间等待打包过程。请求/响应模型定义在 api_models.tsJSON Schema Draft4LabelsResponseModel的labels为标签到count的映射、UploadRequestModel含file_name、UploadResponseModel返回url、DownloadRequestModel的labels为字符串数组。以 Python 为例的图片分类 Lambdarekognition_photo_analyzer/rekfunction.py 展示了 DetectLabelsFn 的完整逻辑从 S3 事件取对象 key调用rekognition.detect_labels(Image..., MaxLabels10, MinConfidence70)将标签 JSON 写入 storage 桶的results/目录并把image_name → labels写入 DynamoDB。该文件是理解“S3 事件 → Rekognition 分类 → 结果持久化”链路的最小可读样本。前端资源堆栈PamFrontEndAssetStackasset-stack.ts 做两件事生成前端.env根据上一堆栈的导出值写入 elros-pam 目录下的.env文件VITE_COGNITO_USER_POOL_ID... VITE_COGNITO_USER_POOL_CLIENT_ID... VITE_API_GATEWAY_BASE_URL... VITE_COGNITO_SIGN_IN_URL${userPoolBaseUrl}/oauth2/authorize?response_typetokenclient_id...redirect_urihttps://${cloudfrontUrl} VITE_COGNITO_SIGN_OUT_URL${userPoolBaseUrl}/logout?client_id...logout_urihttps://${cloudfrontUrl}构建并部署静态资源通过BucketDeployment Docker 容器node:18执行npm i npm run build将构建产物dist/*同步到前端基础设施堆栈创建的 S3 桶由 CloudFront 对外提供。测试与验证完成PamFrontEndInfraStack部署后终端会输出 CloudFront 分发 URL。直接访问该 URL 即可看到部署后的 PAM Web 应用登录账号即PAM_EMAIL对应的预置默认用户。测试路径可参考应用整体说明 applications/photo-asset-manager/README.md。清理资源按创建顺序的逆序销毁三个堆栈逐个执行cdk destroy {STACK_NAME}即依次销毁PamFrontEndAssetStack→PamStack→PamFrontEndInfraStack。由于桶与用户池均设置了RemovalPolicy.DESTROY与autoDeleteObjects销毁时会自动清空对象避免残留计费资源。常用 CDK 命令速查命令作用cdk ls基于你的名称与编程语言列出堆栈cdk deploy将堆栈部署到默认 AWS 账户/区域cdk diff对比已部署堆栈与当前状态的差异cdk synth生成emit合成的 CloudFormation 模板cdk bootstrap首次部署前为账户初始化引导资源cdk destroy销毁指定堆栈小结PAM 的 CDK 工程是一个典型的“前后端分离 事件驱动”全栈示例前端由 CloudFront S3 托管后端由 S3 事件触发 Lambda Rekognition 分类 DynamoDB 索引 API Gateway 鉴权 SNS 通知组成。三个堆栈通过 CloudFormation 导出值顺序衔接Lambda 实现则通过策略模式PamLambdasStrategy解耦为 Java、Python、.NET、JavaScript、Rust、C、PHP 等多种语言直观演示了同一套基础设施定义如何对接不同 SDK 语言实现。如果你希望深入扩展可以继续阅读 SPECIFICATION.md、DESIGN.md 与 DEVELOPMENT.md 了解该应用的设计与开发细节。赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐MaaAssistantArknights 库存保持Depot Maintain全指南从计划配置到智能理智判定的源码级解读MaaAssistantArknights 库存保持Depot Maintain全指南从计划配置到智能理智判定的源码级解读 库存保持是《明日方舟》小助手示例工程教程后端使用 AWS CDK 部署 Chalice 应用构建 REST API DynamoDB 完整实战指南使用 AWS CDK 部署 Chalice 应用构建 REST API DynamoDB 完整实战指南 导读 本文以 Chalice 官方 CDK 教程为后端云原生为 Photo Asset ManagerPAM新增语言实现AWS CDK 部署策略与 Lambda 开发指南为 Photo Asset ManagerPAM新增语言实现AWS CDK 部署策略与 Lambda 开发指南 Photo Asset Managemen示例工程教程后端上一篇ESP-Drone 传感器驱动深入解析MPU6050/VL53LXX I2C 驱动与 PMW3901 SPI 光流驱动下一篇一个 ddraw.dll 让老游戏满帧复活DDrawCompat 兼容层从黑屏到 60 帧实战手册创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考