使用说明
欢迎来到您的CDK TypeScript项目
这是一个使用TypeScript进行CDK开发的空白项目。
这 cdk.json 文件告诉CDK工具包如何执行您的应用程序。
有用的命令
npm run build将typescript编译为jsnpm run watch注意变化并编译npm run test执行jest单元测试npx cdk deploy将此堆栈部署到默认的AWS帐户/区域npx cdk diff将部署的堆栈与当前状态进行比较npx cdk synth发出合成的CloudFormation模板
aws nasmatch股票简介mcp/ │── cdk/#AWS cdk基础架构(TypeScript) │ ├── bin/ │ │ └── aws-nasmatchstockprofile-mcp.ts#CDK入口点 │ ├── lib/ │ │ └── aws-nasmatchstockprofile-mcp-stack.ts#主堆栈 │ ├── package.json │ ├── cdk.json 退回面条;转发 │ │── src/#Python运行时(MCP+AI代理) │ ├── mcp服务器/ │ │ ├── __初始化__南美国家巴拉圭的缩写(Paraguay) │ │ ├── main.py#MCP服务器条目 │ │ ├── excel_handler.py#excel更新的逻辑 │ │ ├── data_extractor.py#解析网站Excel的逻辑 │ │ └── config.py#配置(例如S3 bucket、env变量) │ │ │ ├── 代理商/ │ │ ├── __初始化__南美国家巴拉圭的缩写(Paraguay) │ │ ├── orchestrator.py#AI代理编排 │ │ └── prompts.py#系统提示、推理模板 │ │ │ ├── 测试/ │ │ └── test_excel_handler.py │ │ │ └── 需求.txt │ 会有一只章鱼。微笑。 │── README.md
git远程设置url来源https://aburmd@github/aburmd/aws-nasmatchstockprofile-mcp.git
ssh密钥生成器-t ed25519-C“aburmd@gmail.com"
猫~/.ssh/id_edu21519.pub
复制输出→ 转到GitHub→ 设置→ SSH和GPG密钥→ 新SSH密钥→ 粘贴。
git远程删除源 添加远程仓库源git@github.com:aburmd/aws-nasmatch股票概况-mcp.git
ssh-Tgit@github.com
您应该看到:“嗨,aburmd!您已成功通过身份验证。”
git推送-u源代码main
这是一张可粘贴的单张 主提示 你可以给你的代码助理来构建整个仓库。它符合所有要求: TypeScript中的CDK, Python中的所有运行时, 用于MCP样式工具的API网关WebSocket,以及 Step功能+ECS Fargate ETL。
🔧 主提示(复制并粘贴到此行下方)
您是AWS/CDK解决方案工程师和Python后端高级开发人员。 生成一个生产就绪的Git存储库,实现以下功能 所有基础设施都是TypeScript中的代码(CDK v2) 和 Python 3.11中的所有运行时代码.
高级目标
-
构建一个 MCP样式工具端点 超过 API网关WebSocket 因此,任何AI代理都可以调用以下工具:
mapping.propose(基岩→ 克劳德;带置信度的列映射)mapping.apply(DynamoDB出现故障)excel.replace_table(S3+openpyxl;将表格写入Excel模板的目标工作表中)
-
构建每日 确定性ETL 即:
- 倒像
raw/source.xlsxS3 - 标准化为CSV/Parquet(
staging/) - 出版策划
master.xlsx向curated/使用Excel模板
- 倒像
-
通过编排 阶跃函数 运行A ECS Fargate 任务(Python容器)用于繁重的ETL步骤。
-
所有配置/版本化工件都存在于S3中(
config/,raw/,staging/,curated/).
存储库布局(创建这些路径和文件)
aws-excel-mcp/
README.md
.gitignore
package.json
cdk.json
tsconfig.json
bin/app.ts
lib/
kms-stack.ts
storage-stack.ts
ecr-stack.ts
network-stack.ts
ecs-runner-stack.ts
ws-mcp-stack.ts
stepfn-stack.ts
events-stack.ts
containers/
excel-runner/
Dockerfile
app/handler.py
runtime/
mcp_router/handler.py
mapping_propose/handler.py
mapping_apply/handler.py
excel_replace/
handler.py
requirements.txt
s3_bootstrap/config/
mapping.yaml
master_template.xlsx # put a placeholder binary or describe in README to upload
.github/workflows/cdk-deploy.yml
核心要求
基础架构(CDK TypeScript)
-
密钥管理服务 CMK(
alias/excel-pipeline-kms)用于S3+DynamoDB加密。 -
第3页 带有前缀的bucket(版本化,KMS加密):
raw/,staging/,curated/,config/. -
DynamoDB:
MappingOverrides(PKdataset_id字符串,SKsource_col字符串)。WsConnections(PKconnection_idSTRING)用于WebSocket连接管理。
-
API网关WebSocket:
- 阶段
prod,路线:$connect,$disconnect,$default,加上明确的路线mapping.propose,mapping.apply,excel.replace_table. - 路由器Lambda(Python) 处理连接/断开连接/默认和分派到工具Lambdas;回复完毕
@connectionsAPI
- 阶段
-
工具Lambdas(Python):
mapping_propose:呼叫 亚马逊基岩 (克劳德3.5十四行诗型号idanthropic.claude-3-5-sonnet-20240620-v1:0).输入:source_cols[],canonical_cols[]输出:JSON数组[{from,to,confidence}].返回 严格JSON 只有。mapping_apply:将项目追加到MappingOverrides.excel_replace:负载config/master_template.xlsx从S3,将表格数据写入给定sheet/start_cell随着 openpyxl,并保存到curated/master.xlsx.
-
垂直路径计算机 具有公共+私有子网;S3(网关)和基岩运行时(接口)的VPC端点。
-
ECR ETL容器的存储库:
excel-runner. -
ECS Fargate:
- 要运行的群集+任务定义(1 vCPU/2GB)
containers/excel-runner.
- 要运行的群集+任务定义(1 vCPU/2GB)
-
阶跃函数 状态机:
Transform→ 使用args运行ECS任务进行读取raw/source.xlsx,标准化为staging/orders.parquet+staging/orders.csv.ProposeMapping→ callmapping_proposeLambda。ApplyMapping→ callmapping_applyLambda。Publish→ 运行ECS任务以创建/覆盖staging/master_draft.xlsx并促进curated/master.xlsx通过模板。
-
EventBridge 时间表:太平洋时间每天早上06:05(世界协调时13分),触发状态机。
-
国际机械师协会 最低特权:
- 路由器:
execute-api:ManageConnections,lambda:InvokeFunction对于工具Lambdas,RW onWsConnections. - 工具Lambdas:范围S3,DDB;基岩调用以进行地图绘制。
- ECS任务角色:范围为S3 RW。
- 路由器:
-
使用
@aws-cdk/aws-apigatewayv2-alpha和@aws-cdk/aws-apigatewayv2-integrations-alpha用于WebSocket+Lambda集成。 -
使用
@aws-cdk/aws-lambda-python-alphaPythonFunction捆绑Python Lambdas和requirements.txt为了excel_replace.
运行时代码(Python 3.11)
-
路由器Lambda:
- 在…上
$connect:商店connection_id在DDB中,发送握手JSON{ "mcp": "hello", "tools": ["mapping.propose","mapping.apply","excel.replace_table"] }. - 在…上
$disconnect:删除connection_id. - 在…上
$default或显式工具路由:解析body JSON;找出工具名称(routeKey或body.tool);同步调用正确的工具Lambda;用以下方式回复客户{ ok: true, tool, result }.
- 在…上
-
mapping_propose Lambda:
- 提示模板 严格地 返回JSON数组;稳健地解析LLM输出;如果解析失败,返回
[].
- 提示模板 严格地 返回JSON数组;稳健地解析LLM输出;如果解析失败,返回
-
映射_应用Lambda:
- 输入:
{ "dataset_id": "orders_v1", "mapping": [{from,to,confidence}] }DDB的上级;返回计数。
- 输入:
-
excel_replace Lambda:
- 输入:
{template_key, out_key, sheet, start_cell, data:[{...}]}. - 使用openpyxl清除合理范围,写入头+行,保存到S3。
- 输入:
-
ECS转轮容器 (
excel-runner):- CLI与
--op transform和--op publish. transform:从以下位置读取Excelraw/,申请mapping.yaml规则(重命名/dtypes/filters/dedupe),将Parquet+CSV写入staging/.publish:从S3读取CSV+模板,写入目标工作表/单元格,将草稿放入staging/master_draft.xlsx最后curated/master.xlsx.
- CLI与
配置文件
-
s3_bootstrap/config/mapping.yaml(示例):dataset_id: "orders_v1" source: sheet: "Export_Orders" sheets: - name: "Export_Orders" rename: "Order Id": order_id "Customer Name": customer "Order Date": order_date "Total": total_amount dtypes: order_date: datetime total_amount: float dedupe_keys: [order_id] targets: - sheet: "Raw_Orders" mode: replace_table ai: min_confidence_auto_apply: 0.85 -
放置占位符
master_template.xlsx(或用户应上传的文档)。
Dockerfile(Python)
containers/excel-runner/Dockerfile:基于python:3.11-slim;安装pandas,openpyxl,pyarrow,boto3,pyyaml.
GitHub操作(可选)
cdk-deploy.yml构建CDK、合成和部署(OIDC角色通过secrets承担)。
非功能性需求
- 清晰、防御性的错误处理(对格式错误的JSON或空数据集没有崩溃)。
- 使用有用的上下文进行日志记录:请求ID、S3键、行数、置信度统计。
- Idempotent发布(仅推广到
curated/成功运行后)。 - 版本控制:回滚依赖于S3版本控制。
- 安全性:最低权限IAM,KMS处于静止状态,尽可能将私有VPC流量传输到Bedrock/S3。
README.md(包括)
-
高级架构图(ASCII ok)。
-
设置步骤:
npm install,cdk bootstrapcdk deploy Kms Storage Ecr Net- 构建和推送
excel-runner图像到ECR cdk deploy EcsRunner WsMcp StepFn Events- 上传
s3_bootstrap/config/*以及一个样本raw/source.xlsx
-
如何测试WebSocket
wscat:wscat -c wss://<api-id>.execute-api.<region>.amazonaws.com/prod > {"tool":"mapping.propose","source_cols":["Order Id","Cust Name"],"canonical_cols":["order_id","customer"]} -
如何启动手动步骤函数执行,以及输出在S3中的位置。
-
成本说明(API GW WS按消息付费;无ALB)。
验收标准
cdk synth和cdk deploy在区域/帐户之外无需手动编辑即可成功。- WebSocket连接成功;
$connect返回工具列表;召唤mapping.propose返回一个JSON数组(如果未启用Bedrock,则可模拟)。 - 运行状态机处理样本
raw/source.xlsx进入staging/*.parquet/.csv并出版curated/master.xlsx. excel.replace_table写信给a 隐藏 或暂存工作表,而不会损坏模板中的公式(可见工作表引用的文档Raw_Orders).- IAM策略仅限于必要的资源。
编码标准
- Python:3.11,合理的类型提示,小函数,显式返回,PEP8。
- CDK TS:清晰的堆栈边界,通过堆栈类属性导出密钥ARN/URL,没有硬编码的ARN。
- 使用环境变量作为Bucket名称、DDB表、模型ID。
- 工具Lambdas返回 严格JSON;路由器总是包裹在里面
{ok, tool, result}.
奖金(如果时间允许)
- 添加a
sfn.start工具(Lambda),以便代理可以通过WebSocket启动批处理。 - 如果任何映射置信度<0.85,步骤功能选择状态需要人工批准。
- 用于WebSocket的API GW授权人(Cognito或IAM)。
交付物:完全生成的仓库树,其中所有文件都按照上述内容填充,准备提交和部署。不要省略列出的任何文件。打印最终的存储库树和最后的任何部署后说明。
🔧 结束主提示
要我定制样品吗 mapping.yaml 确切的列名?如果你分享一个假人 source.xlsx 标题行和目标工作表名称,我将插入它们。
mkdir aws nasmatchstockprofile mcp cd aws nasmatch股票简介mcp
使用TypeScript初始化CDK
cdk初始化应用程序——语言类型脚本
安装cdk
节点-v npm-v
如果没有安装,请通过Node.js官方网站获取 或自制: brew安装节点
npm安装-g aws cdk
cdk引导aws://654654547262/us-east-1 cdk部署
npm运行构建
首先部署核心数据平面
cdk部署BaseInfra
部署网络+ECS运行器
cdk部署Net-EcsRunner
部署WebSocket+Lambdas
cdk部署WsMcp
部署步骤功能+计划
cdk部署StepFn事件
明白了👍 — 我们走过去吧 逐步 所以你可以学习如何处理这个问题 MCP(模型上下文协议) 和 AWS CDK.
我们将把它视为:
- 业务需求 → 基于另一个Excel更新Excel。
- 建筑 → AWS经济高效、可扩展、基于Git的基础设施。
- MCP角色 → 通过AI代理自动化infra+运行时工作流。
- 逐步构建CDK → 从小(基础堆栈)开始,然后扩展。
1.业务要求
- 你有 Excel文件A (来源)和 Excel文件B (目标)。
- 系统应根据A的值(由您定义的规则)更新B。
- 这一定是 自动化、可重复和基于云.
2.架构(AWS组件)
- 第3页 → 存储输入和输出Excel文件。
- Lambda(Python运行时) → 处理Excel更新(使用
openpyxl或pandas). - EventBridge/S3触发器 → 上传新文件时启动处理。
- IAM角色 → 安全访问。
- (可选) 阶跃函数 如果工作流变得复杂。
就是这样 CDK驱动,通过Git部署。
3.MCP(模型上下文协议)的作用
-
MCP允许您 定义AI代理的操作 (和我一样)编排基础设施和运行时代码。
-
例子:
- 定义a MCP中的工具 用于“部署CDK堆栈”。
- 为“Process Excel”定义另一个。
-
然后你的AI代理可以 自主决定:上传文件→ 触发器Lambda→ 更新Excel→ 存储输出→ 通知你。
因此,MCP是粘合剂:
- 描述能力 (例如“Excel处理器”)。
- 将它们暴露给AI代理 (所以它知道它可以调用CDK/Lambda)。
- 自动化工作流程 (而不是手动单击)。
4.循序渐进的CDK构建计划
以下是我们将如何逐步构建:
第一步: 基础堆栈
- VPC(如果需要)、S3存储桶。
- IAM角色和政策。
- 输出:“我们可以上传Excel文件。”
第二步: Lambda运行时
- Python代码(使用
openpyxl)打包和部署。 - 已连接到S3。
- 输出:“上传文件时运行Lambda。”
步骤3: 事件触发器
- 配置S3→ EventBridge→ Lambda。
- 输出:“上传时自动启动。”
步骤4: Excel处理逻辑
- Lambda读取
fileA.xlsx&fileB.xlsx,应用规则,写回S3。 - 输出:“Excel文件已自动更新。”
步骤5: MCP暴露
- 定义MCP工具→ “上传Excel”、“运行处理器”、“部署堆栈”。
- 输出:“AI代理可以端到端处理Excel更新。”
💡 成本:
- S3=每GB便士。
- Lambda=免费等级+每100万请求0.20美元。
- EventBridge=每100万个事件1美元。
- IAM角色=免费。 👉 本质上 每月接近0美元 除非你处理巨大的Excel文件。
要不要我来 从步骤1开始(基本堆栈CDK代码) 在编写代码之前,解释一下我们将添加的CDK资源?
aws nasmatch股票简介mcp
AWS上MCP控制、经济高效的Excel处理管道的基础CDK应用程序。
步骤1(此回购状态)
- KMS CMK(别名:
alias/excel-pipeline-kms) - S3存储桶(版本化,KMS加密)
- DynamoDB表:
MappingOverrides(PK:dataset_id,SK:source_col)WsConnections(PK:connection_id)
安装和部署
# from repo root
npm install
npm run build
npm run synth
npm run deploy -- BaseInfra
# after step4
aws-nasmatchstockprofile-mcp/
bin/app.ts
lib/base-infra.ts # add WebSocket API + permissions here
lambda/
processor/ # (already from step2/3)
handler.py
requirements.txt
wsmcp/
on_connect.py
on_disconnect.py
on_message.py
requirements.txt
Got it 👍 — let’s walk through step by step so you can learn how to approach this with MCP (Model Context Protocol) and AWS CDK.
We’ll treat this as:
Business Requirement → Update Excel based on another Excel.
Architecture → AWS cost-effective, scalable, Git-based infra.
MCP Role → Automate infra + runtime workflows via AI agent.
Step-by-Step CDK Build → Start small (base stack), then extend.
1. Business Requirement
You have Excel File A (source) and Excel File B (target).
The system should update B based on values from A (rules defined by you).
This must be automated, repeatable, and cloud-based.
2. Architecture (AWS Components)
S3 → Store input & output Excel files.
Lambda (Python runtime) → Process Excel updates (using openpyxl or pandas).
EventBridge / S3 Trigger → Kick off processing when new file uploaded.
IAM Roles → Secure access.
(Optional) Step Functions if workflow grows complex.
This is all CDK-driven, deployed via Git.
3. Role of MCP (Model Context Protocol)
MCP allows you to define actions for AI agents (like me) to orchestrate infra and runtime code.
Example:
Define a tool in MCP for "Deploy CDK stack".
Define another for "Process Excel".
Then your AI agent can decide autonomously: upload file → trigger Lambda → update Excel → store output → notify you.
So MCP is the glue to:
Describe capabilities (e.g., "Excel Processor").
Expose them to AI agent (so it knows it can invoke CDK/Lambda).
Automate workflows (instead of you clicking manually).
4. Step-by-Step CDK Build Plan
Here’s how we’ll build incrementally:
Step 1: Base Stack
VPC (if needed), S3 bucket(s).
IAM roles & policies.
Output: "We can upload Excel files."
Step 2: Lambda Runtime
Python code (using openpyxl) packaged & deployed.
Connected to S3.
Output: "Lambda runs when file uploaded."
Step 3: Event Trigger
Configure S3 → EventBridge → Lambda.
Output: "Automation kicks off on upload."
Step 4: Excel Processing Logic
Lambda reads fileA.xlsx & fileB.xlsx, applies rules, writes back to S3.
Output: "Excel files updated automatically."
Step 5: MCP Exposure
Define MCP tool(s) → “Upload Excel”, “Run Processor”, “Deploy Stack”.
Output: "AI agent can handle Excel updates end-to-end."
💡 Cost:
S3 = pennies per GB.
Lambda = free tier + $0.20 per 1M requests.
EventBridge = $1 per 1M events.
IAM roles = free.
👉 Essentially close to $0 monthly unless you process huge Excel files.
aws lambda invoke --function-name BaseInfra-ExcelProcessorFnB7B43EA3-fRqa6Yu3FXTU \
--payload '{
"source_key":"source/Portfolio_Positions_Aug-21-2025.csv",
"target_key":"source/nasmatch-portfolio.xlsx",
"output_key":"output/nasmatch-portfolio-updated.xlsx"
}' \
/tmp/out.json && cat /tmp/out.json
# make sure the template exists
aws s3 cp ~/Downloads/nasmatch-portfolio.xlsx s3://baseinfra-excelbucket52f10cb5-wwsunmtzl4nc/source/nasmatch-portfolio.xlsx
# upload CSV (should auto-trigger lambda)
aws s3 cp ~/Downloads/Portfolio_Positions_Aug-21-2025.csv s3://baseinfra-excelbucket52f10cb5-wwsunmtzl4nc/source/Portfolio_Positions_Aug-21-2025.csv
aws s3 cp data/positions-2025-08-23.csv s3://baseinfra-excelbucket52f10cb5-wwsunmtzl4nc/source/positions-2025-08-23.csv
# watch logs
aws logs tail /aws/lambda/BaseInfra-ExcelProcessorFnB7B43EA3-fRqa6Yu3FXTU --follow
# verify output
aws s3 cp s3://baseinfra-excelbucket52f10cb5-wwsunmtzl4nc/output/nasmatch-portfolio-updated.xlsx ./nasmatch-portfolio-updated.xlsx