AWS SDK for C++ 跨服务示例全解析:从 Aurora Serverless 任务追踪器到 SNS/SQS 发布订阅

发布时间:2026/9/24 16:37:37
AWS SDK for C++ 跨服务示例全解析:从 Aurora Serverless 任务追踪器到 SNS/SQS 发布订阅 示例工程教程后端【免费下载链接】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点击查看免费下载导读本文以仓库 cpp/example_code/cross-service/README.md 为主线系统讲解 AWS SDK for C 的跨服务cross-service示例体系。跨服务示例是指使用 AWS SDK for C 构建的、同时调用多个 AWS 服务的应用。仓库中cpp/example_code/cross-service目录目前包含三个典型的跨服务示例基于 Amazon Aurora Serverless 与 Amazon SES 的 Item Tracker 任务追踪 Web 应用、基于 Lambda 无服务器架构的 Photo Asset Manager 图片资产管理应用以及基于 Amazon SNS 与 Amazon SQS 的发布订阅含 FIFO 与消息过滤命令行示例。读完本文你将掌握这些示例的整体架构、核心 API 调用链、构建运行方式以及如何结合源码理解 AWS SDK for C 的多服务协作模式。跨服务示例概述根据 cpp/example_code/cross-service/README.mdcpp/example_code/cross-service目录下的每个子文件夹都是一个跨服务示例每个子目录中的 README 都描述了该示例的具体运行方式。当前目录包含的示例有示例功能简介说明文档serverless-aurora使用 Amazon Aurora Serverless 和 Amazon SES 创建 Item Tracker 任务追踪 Web 应用serverless-aurora/README.mdphoto_asset_manager创建图片资产管理应用Photo Asset ManagerPAMphoto_asset_manager/README.mdtopics_and_queues使用过滤器和队列探索 SNS 主题的发布订阅机制topics_and_queues/README.md运行费用与权限提醒原文档对三类示例统一给出了重要的费用与权限提示运行前务必注意运行示例代码可能产生 AWS 账户费用运行测试同样可能产生 AWS 账户费用建议为代码授予最小权限least privilege仅授予完成任务所需的最低权限相关最佳实践可参考 AWS IAM 文档 Grant least privilege这些代码并未在每个 AWS 区域进行测试跨区域部署前请核对 AWS 区域服务可用性。示例一Item Tracker——Aurora Serverless 任务追踪 Web 应用架构概览serverless-aurora/README.md 描述了该示例的三层结构HTTP 服务层使用 C 编写 HTTP 服务器通过 AWS SDK for C 访问 AWS 服务核心代码位于 serverless-aurora 目录前端客户端JavaScript React Web 应用代码位于 resources/clients/react/elwing基础设施Amazon Aurora Serverless 资源通过 AWS CDK 代码创建位于 resources/cdk/aurora_serverless_app。数据存储于 Amazon Aurora Serverless 数据库邮件报告通过 Amazon SES 发送。HTTP API 设计示例创建的 HTTP 服务器实现了如下 API 集合注意源码 ItemTrackerHTTPHandler.cpp 中实际路由以/api/items为前缀而 README 中的描述省略了该前缀方法路径功能GET/items查询全部条目GET/items?archivedtrue查询已归档条目GET/items?archivedfalse查询未归档active条目GET/items/{item_id}查询单个条目POST/items在集合中新建条目PUT/items/{item_id}更新单个条目PUT/items/{item_id}:archive将条目移动到archived状态POST/items:report生成报告请求体可携带email字段字符串邮箱地址从源码 ItemTrackerHTTPHandler.cpp 的handleHTTP方法可以看到完整的路由实现逻辑GET /api/items、GET /api/items?archivedtrue、GET /api/items?archivedfalse分别对应WorkItemStatus::BOTH、WorkItemStatus::ARCHIVED、WorkItemStatus::NOT_ARCHIVED三种查询状态PUT /api/items/{id}:archive通过判断 URI 中是否包含:archive后缀来区分归档操作与普通更新操作POST /api/items:report解析请求体中的email字段后触发邮件发送。源码实现剖析serverless_aurora.cppserverless_aurora.cpp的main函数严格校验命令行参数数量argc ! 5时输出用法并返回 1随后按顺序完成以下初始化调用Aws::InitAPI(options)初始化 AWS SDK从命令行读取 4 个参数database、resourceArn、secretArn、sesEmailAddress创建Aws::Client::ClientConfiguration源码中注释说明可在此通过clientConfig.region指定区域调用runServerLessAurora启动服务内部流程为创建RDSDataHandler数据库名、资源 ARN、密钥 ARN、表名items调用rdsDataHandler.initializeTable(false)false表示表已存在时不做重建创建SESV2EmailHandler组合成ItemTrackerHTTPHandler通过PocoHTTPServer启动监听。RDSDataHandlerRDS Data Service 数据访问层RDSDataHandler.cpp 封装了对 Aurora Serverless 的所有 SQL 操作核心是executeStatement方法它创建RDSDataServiceClient构造ExecuteStatementRequest并设置database、secretArn、resourceArn与sql可选附带SqlParameter参数向量然后调用client.ExecuteStatement。表结构由createTable定义RDSDataHandler.cppiditemVARCHAR(45)usernameVARCHAR(45)descriptionVARCHAR(400)guideVARCHAR(45)statusVARCHAR(400)archivedTINYINT(4)值得注意的是addWorkItem使用Aws::Utils::UUID::RandomUUID()为每条记录生成 UUID 作为主键布尔型archived字段在写入时被编码为long值0/1读取时通过GetLongValue() 0还原为布尔。查询通过SHOW TABLES IN database判断表是否存在initializeTable(recreateTable)根据表是否存在决定是建表、复用还是删除重建。SESV2EmailHandlerSES 邮件报告层SESV2EmailHandler.cpp 展示了如何用 SES v2 API 发送一个multipart/alternative格式的原始邮件邮件包含三部分纯文本部分text/plain; charsetUTF-8报告条数、生成时间HTML 部分text/html; charsetUTF-8格式化展示报告内容附件部分text/csv文件名report.csv将所有工作条目以 CSV 形式导出字段为ID,Name,Guide,Description,Status,Archived。邮件通过构造SESV2Client与SendEmailRequest发送其中RawMessage使用ByteBuffer承载原始 MIME 内容附件内容经Aws::Utils::Base64::Base64编码后嵌入见 SESV2EmailHandler.cpp。PocoHTTPServer可复用的 HTTP 服务层PocoHTTPServer.cpp 实现了一个基于 POCO 库的 HTTP 服务器注释明确说明这段代码被设计为可在多个示例间原样复用。它在 8080 端口监听Poco::Net::ServerSocket(8080)支持 CORS 预检请求OPTIONS响应头设置Access-Control-Allow-Origin: *这是浏览器端 React 应用能够跨域访问的前提。前提条件安装 AWS SDK for C安装 Conan C 包管理器本示例用它安装依赖。依赖清单在 conanfile.txt 中poco/1.12.2并关闭了activerecord、crypto、data*、jwt、mongodb、netssl、zip等非必要组件仅开启json、net、redis、util、xml、encodings。创建资源通过 AWS CloudFormation 运行 resources/cdk/aurora_serverless_app 中的setup.yaml脚本创建 Amazon RDS 资源具体步骤见该目录的 README在 Amazon SES 中创建已验证身份verified identity作为发件邮箱。构建代码在示例目录下依次执行mkdir build cd build安装 POCO 库Linux/Macconan install .. --buildmissing安装 POCO 库Windowsconan install .. --buildmissing -o poco:sharedTrue -s build_typeDebug使用 CMake 构建cmake .. make ..运行示例以命令行参数启动 HTTP 服务器./run_serverless_aurora database resource_arn secret_arn email四个参数的含义如下参数说明databaseAurora 数据库名称来自创建资源步骤resource_arnAmazon RDS 数据库的资源 ARN来自创建资源步骤secret_arnAWS Secrets Manager 中数据库凭据的 ARN来自创建资源步骤email已在 Amazon SES 中验证的身份邮箱随后运行 resources/clients/react/elwing 客户端应用运行方式见其 README。两端都启动后在浏览器中打开客户端在侧边栏选择 Item Tracker 页面即可通过网页操作 AWS 资源读取、写入、归档工作条目。测试验证示例在 serverless-aurora/tests 目录下提供了基于 GoogleTest 的测试gtest_serverless_aurora.cpp负责端到端测试serverless_aurora_gtests.cpp/h提供公共测试辅助函数test_main.cpp为测试入口。测试通过构建目录下的 CMake 配置执行用于验证 HTTP API 与 RDS/SES 的交互行为。清理资源为避免持续计费按 resources/cdk/aurora_serverless_app/README.md 中 Destroying resources 一节的说明销毁 Aurora Serverless CDK 部署创建的所有资源。示例二Photo Asset Manager——无服务器图片资产管理架构概览photo_asset_manager/README.md 描述了 PAM 应用使用 Amazon Rekognition 对图片进行分类图片存储于启用 Amazon S3 Intelligent-Tiering 的桶中以节约成本。用户可以上传新图片系统进行标签检测label detection标签存入 Amazon DynamoDB 表用户随后可按标签列表请求图片包系统从 S3 检索图片、打包为 zip 并提供下载链接。该应用采用无服务器架构由以下 AWS Lambda 函数构成后端函数职责Labels无服务器 API 端点返回 S3 存储桶中图片的标签及标签计数Upload无服务器 API 端点返回用于上传图片的预签名 URLpresigned URLDetectLabelsFunctionS3 事件函数当 S3 存储桶中创建图片对象时被调用使用 Amazon Rekognition 分析新图片并将标签信息存入 DynamoDB 表DownloadFunctionAmazon API Gateway 函数将图片合并为 zip 文件存入 S3 存储桶并提供预签名下载链接同时通过 Amazon SNS 发送通知消息前端是使用 Cloudscape Design System 的 React 单页应用支持通过 Amazon Cognito 流程认证部署到 S3 桶并通过 Amazon CloudFront 分发对外公开应用名在 CDK 部署时动态生成。构建与部署前提条件AWS 账户、Docker Desktop、Node.js 18、AWS SDK for C。创建资源按 applications/photo-asset-manager/cdk/README.md 的说明使用 AWS CDK 或 AWS CLI 创建并管理示例所需资源执行 CDK 步骤时必须运行 Docker。构建代码代码在资源创建时自动构建并上传构建使用仓库提供的 Dockerfiledocker build . -f Dockerfile -t cpp_pam_image docker run --name pam_lambda cpp_pam_image docker cp pam_lambda:/pam_lambda/build/cpp_pam_lambdas.zip .构建产物位于容器内/pam_lambda/build/cpp_pam_lambdas.zipdocker cp可将其拷贝到本地文件系统。Dockerfile 与 Lambda 运行时要点从 Dockerfile 可以看出无服务器 C Lambda 的构建策略基础镜像为amazonlinux:2023安装gcc-c、cmake3、jsoncpp-devel、libzip-devel等编译依赖先编译安装aws-lambda-cpp运行时-DBUILD_SHARED_LIBSOFF静态链接通过ENV SERVICESs3;sns;rekognition;dynamodb配合-DBUILD_ONLY${SERVICES}仅编译 SDK 中 S3、SNS、Rekognition、DynamoDB 四个服务模块显著缩短构建时间最后执行make aws-lambda-package-cpp_pam_lambdas打包并unzip到/asset目录供 CDK 的lambda.Code.fromDockerBuildAPI 使用。应用注意事项图像分析的最大像素尺寸为 10000x10000更大的图片不会被分析部分邮件客户端不支持过长的下载 URL若下载失败可能需要去掉 URL 中的空格。清理资源按 applications/photo-asset-manager/cdk/README.md 的说明清理 CDK 栈资源避免持续产生费用。测试测试位于 photo_asset_manager/tests包括pam_gtests.cpp/hPAM 功能测试、cpp_lambda_tests.cppLambda 函数测试与test_main.cpp测试入口test_image.jpg作为测试图片使用。示例三topics_and_queues——SNS/SQS 发布订阅与 FIFO 消息过滤架构概览topics_and_queues/README.md 讲解发布订阅publish/subscribe机制生产者发布消息、订阅者接收消息生产者与消费者之间完全解耦。示例不构建完整的端到端应用而是提供一个命令行交互程序让开发者体验创建 Amazon SNS 主题订阅两个 Amazon SQS 队列到该主题可启用 FIFOFirst-In-First-Out队列可添加带过滤器的订阅向主题发布消息并查看队列中的结果。SNS 与 SQS 的协作模型Amazon SNS是推送push服务向邮箱、移动应用端点或 SQS 队列等端点推送消息Amazon SQS通过轮询polling接收消息——订阅者调用接收消息 API 拉取消息任何代码都可以轮询队列且消息在删除之前一直保留在队列中处理方式更灵活。二者组合使用比单独使用 SNS 提供更大的消费灵活性。命令行交互流程C 实现界面创建 SNS 主题1. 是否使用 FIFO 主题Would you like to work with FIFO topics? (y/n)FIFO 主题在创建时配置选择 FIFO 会启用其他相关选项。2. 是否使用基于内容的去重Use content-based deduplication instead of a deduplication ID? (y/n)去重仅对 FIFO 主题可用。SNS FIFO 主题在五分钟去重间隔内发现重复消息时会接受但不再投递。基于内容的去重使用内容哈希作为去重 ID若未启用则每条消息必须携带去重 ID。3. 输入主题名称Enter a name for your SNS topic:主题名称长度 1-256 个字符可包含大小写 ASCII 字母、数字、下划线和连字符。若选择 FIFO 主题应用会自动追加.fifo后缀FIFO 主题的强制要求。创建两个 SQS 队列1. 输入队列名称Enter a name for an SQS queue.队列名称长度 1-80 个字符可包含大小写 ASCII 字母、数字、下划线和连字符。若选择 FIFO 主题应用会自动为队列追加.fifo后缀FIFO 队列的强制要求。为每个订阅者创建独立队列可以分别定制消息消费方式与消息过滤策略。2. 是否为主题订阅添加消息过滤Filter messages for queue name.fifos subscription to the topic topic name.fifo? (y/n)若选择 FIFO 主题可以为队列的主题订阅添加过滤器。3. 选择过滤属性toneYou can filter messages by one or more of the following tone attributes. 1. cheerful 2. funny 3. serious 4. sincere Enter a number (or enter zero to stop adding more)可选择一个或多个tone属性进行过滤输入0结束添加。随后重复以上步骤配置第二个队列。发布消息配置完成后进入消息发布环节1. 输入消息文本Enter a message text to publish.所有配置都包含消息文本。2. 输入消息组 IDEnter a message group ID for this message.仅 FIFO 主题需要组 ID 最长 128 个字符可包含字母数字a-z, A-Z, 0-9与标点符号!#$%()*,-./:;?[\]^_{|}~。3. 输入去重 IDEnter a deduplication ID for this message.当主题为 FIFO 且未启用基于内容的去重时必须输入。去重 ID 长度限制与组 ID 相同最长 128 字符字母数字与标点。4. 是否添加消息属性Add an attribute to this message? (y/n) y若某个订阅添加了过滤器可为消息添加过滤属性1. cheerful 2. funny 3. serious 4. sincere Enter a number for an attribute:5. 是否继续发布Post another message? (y/n)可发布任意多条消息。全部发布完成后应用轮询队列并展示其中的消息。构建与运行前提条件完成 AWS SDK for C 入门指南 中的安装与设置。构建命令mkdir build cd build cmake —build ..构建产物为可执行文件run_topics_and_queues。运行该示例需要具备 SNS 与 SQS 的 IAM 权限。测试验证测试位于 topics_and_queues/testsgtest_messaging_with_topics_and_queues.cpp负责消息场景测试topics_and_queues_gtests.cpp/h提供测试辅助函数test_main.cpp为测试入口可验证主题创建、队列订阅、过滤与消息投递全流程。三个示例的对比与选型参考维度serverless-auroraphoto_asset_managertopics_and_queues服务组合Aurora Serverless SES RDS Data APIS3 Rekognition DynamoDB SNS Cognito LambdaSNS SQS应用形态HTTP 服务器 React 前端无服务器 Lambda 函数 CDK 部署命令行交互程序关键学习点RDS Data API 免服务器 SQL、原始 MIME 邮件、POCO HTTP 服务Lambda C 运行时、预签名 URL、事件驱动FIFO 语义、消息去重、订阅过滤构建方式Conan CMakeDocker CMakeCMake三个示例共同展示了 AWS SDK for C 在多服务协作场景下的典型模式通过Aws::Client::ClientConfiguration统一管理区域与凭据、每个服务一个独立 Client 类、以InitAPI/ShutdownAPI管理 SDK 生命周期。延伸阅读Amazon Aurora 用户指南Amazon RDS Data Service API 参考Amazon SES API 参考Amazon SNS 开发者指南Amazon SQS 开发者指南AWS SDK for C 开发者指南更多 C 跨服务示例入口cpp/example_code/cross-service赞分享示例工程教程后端【免费下载链接】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点击查看免费下载相关推荐AWS SDK示例项目基于SNS和SQS实现消息发布订阅模式的技术解析AWS SDK示例项目基于SNS和SQS实现消息发布订阅模式的技术解析 消息发布订阅模式概述 消息发布订阅Pub/Sub是一种广泛应用于现代软件架构的消息示例工程教程后端AWS SDK for C 实战使用 SNS 主题与 SQS 队列实现带过滤与 FIFO 的发布订阅AWS SDK for C 实战使用 SNS 主题与 SQS 队列实现带过滤与 FIFO 的发布订阅 本篇文章基于 aws doc sdk example示例工程教程后端如何用chart-快速构建专业级图表从安装到渲染的完整教程如何用chart 快速构建专业级图表从安装到渲染的完整教程 chart 是一个基于Go语言的轻量级图表库能够帮助开发者快速创建各种专业级数据可视化图表。无论上一篇如何用RPCS3在电脑上重温PS3经典游戏5个关键技巧带你轻松上手下一篇如何用多智能体LLM金融交易框架3步打造你的AI投资顾问团队创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询