欢迎来到您的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.xlsx S3 - 标准化为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 (PK dataset_id 字符串,SK source_col 字符串)。 - WsConnections (PK connection_id STRING)用于WebSocket连接管理。
- API网关WebSocket:
- 阶段 prod,路线: $connect, $disconnect, $default,加上明确的路线 mapping.propose, mapping.apply, excel.replace_table. - 路由器Lambda(Python) 处理连接/断开连接/默认和分派到工具Lambdas;回复完毕 @connections API
- 工具Lambdas(Python):
- mapping_propose:呼叫 亚马逊基岩 (克劳德3.5十四行诗型号id anthropic.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. Transform → 使用args运行ECS任务进行读取 raw/source.xlsx,标准化为 staging/orders.parquet + staging/orders.csv. 1. ProposeMapping → call mapping_propose Lambda。 1. ApplyMapping → call mapping_apply Lambda。 1. Publish → 运行ECS任务以创建/覆盖 staging/master_draft.xlsx 并促进 curated/master.xlsx 通过模板。
- EventBridge 时间表:太平洋时间每天早上06:05(世界协调时13分),触发状态机。
- 国际机械师协会 最低特权:
- 路由器: execute-api:ManageConnections, lambda:InvokeFunction 对于工具Lambdas,RW on WsConnections. - 工具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输出;如果解析失败,返回 [].
- 映射_应用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:从以下位置读取Excel raw/,申请 mapping.yaml 规则(重命名/dtypes/filters/dedupe),将Parquet+CSV写入 staging/. - publish:从S3读取CSV+模板,写入目标工作表/单元格,将草稿放入 staging/master_draft.xlsx 最后 curated/master.xlsx.
配置文件
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)。
- 设置步骤:
1. npm install, cdk bootstrap 1. cdk deploy Kms Storage Ecr Net 1. 构建和推送 excel-runner 图像到ECR 1. cdk deploy EcsRunner WsMcp StepFn Events 1. 上传 s3_bootstrap/config/* 以及一个样本 raw/source.xlsx
- 如何测试WebSocket
wscat:
wscat -c wss://.execute-api..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