Quay lại

Hướng Dẫn Kết Hợp AWS Q và MCP: Sức Mạnh Tối Ưu Hóa Cho Hạ Tầng AWS Chuyên mục Devops    2025-05-12    12 Lượt xem    12 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Trong kỷ nguyên AI hỗ trợ lập trình, Amazon Q nổi bật như một trợ lý đắc lực giúp các nhà phát triển làm việc hiệu quả hơn với AWS. Nhưng bạn có biết rằng, bằng cách kết hợp với một dự án mã nguồn mở tên là MCP (Modular Context Platform), bạn có thể biến Amazon Q trở thành một trợ lý hiểu rõ chính dự án của bạn?

Trong bài viết này, chúng ta sẽ cùng tìm hiểu:

  • Amazon Q là gì?

  • MCP là gì và nó hoạt động như thế nào?

  • Cách tích hợp MCP với Amazon Q CLI

  • Cách cài đặt, cấu hình và kiểm thử từng MCP server

  • Một số mẹo tăng hiệu quả với MCP và Amazon Q


🧠 Amazon Q là gì?

Amazon Q là một AI assistant do AWS phát triển, hỗ trợ developer và engineer trong việc:

  • Viết mã hạ tầng như Terraform, CDK

  • Phân tích chi phí AWS

  • Hiểu và chỉnh sửa kiến trúc hiện tại

  • Giải thích policy, cấu hình

  • Chat context-aware với project của bạn

Và điều đặc biệt là: Amazon Q có thể mở rộng context hiểu biết thông qua MCP – chính là thứ chúng ta sẽ bàn đến.


🔌 MCP là gì?

MCP (Modular Context Platform) là một nền tảng mã nguồn mở của AWS Labs cho phép bạn khởi chạy các microservices (gọi là MCP servers) cung cấp kiến thức chuyên sâu cho Amazon Q.

Ví dụ:

MCP Server Chức năng
terraform-mcp-server Giải thích & sinh mã Terraform chuẩn AWS
cdk-mcp-server Hỗ trợ CDK Python, TypeScript
aws-documentation-mcp-server Truy vấn và tóm tắt tài liệu AWS chính thức
cost-analysis-mcp-server Tính chi phí AWS dựa trên mô tả kiến trúc
 
Amazon Q CLI sẽ tự động kết nối tới các MCP server nếu bạn cấu hình đúng.

🔧 Yêu cầu trước khi bắt đầu

  • Hệ điều hành: Ubuntu (tested on 22.04)

  • Đã có AWS CLI và cấu hình AWS credentials

  • Đã cài Git (để clone MCP nếu muốn chạy local)


⚙️ Cài đặt Amazon Q CLI và MCP từ đầu

Bước 1: Cài Amazon Q CLI

wget https://desktop-release.q.us-east-1.amazonaws.com/latest/amazon-q.deb
sudo dpkg -i amazon-q.deb
sudo apt-get install -f  # Fix dependency nếu có​

Sau đó chạy q:

q login​

Làm theo hướng dẫn để đăng nhập bằng Builder ID hoặc IAM Identity Center.

⚙️ Bước 2: Cài đặt uv – Trình quản lý Python plugin cực nhanh

curl -fsSL https://astral.sh/uv/install.sh | sh
uv python install 3.10​

✅ Bước 3: Cài đặt các công cụ bổ trợ

📦 Cài pip3 (nếu chưa có)

sudo apt update
sudo apt install python3-pip​

🏗️ Cài Terraform CLI

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update
sudo apt install terraform​

🔒 Cài Checkov – quét bảo mật mã Terraform

pip3 install checkov

📁 Bước 4: Cấu hình MCP trong ~/.aws/amazonq/mcp.json

Tạo folder (nếu chưa có):

mkdir -p ~/.aws/amazonq
nano ~/.aws/amazonq/mcp.json​

✨ Cấu hình nhiều MCP server cần thiết:

{
  "mcpServers": {
    "awslabs.terraform-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.terraform-mcp-server@latest"],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR"
      }
    },
    "awslabs.aws-diagram-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.aws-diagram-mcp-server@latest"],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR"
      }
    },
    "awslabs.cost-analysis-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.cost-analysis-mcp-server@latest"],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR"
      }
    },
    "awslabs.aws-documentation-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.aws-documentation-mcp-server@latest"],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR"
      }
    },
    "awslabs.lambda-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.lambda-mcp-server@latest"],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR"
      }
    }
  }
}​

✅ Bước 5: Kiểm tra hoạt động MCP + Amazon Q

q chat​

Nếu thành công, bạn sẽ thấy dòng như sau:

✓ terraform_mcp_server loaded
✓ aws-diagram-mcp-server loaded
✓ aws-documentation-mcp-server loaded
...​

🧪 Ví dụ sử dụng Amazon Q

> tell me best practices for writing Terraform on AWS

> !terraform plan

> draw serverless architecture (API Gateway, Lambda, DynamoDB) in draw.io XML format

> draw an architecture diagram for a serverless app using API Gateway, Lambda, and DynamoDB

> generate documentation for this Terraform module

> estimate the monthly cost for an S3 + Lambda + CloudFront architecture​

Demo

Bạn có thể yêu cầu Amazon Q như sau:

> draw serverless architecture (API Gateway, Lambda, DynamoDB) in draw.io XML format

Amazon Q sẽ trả về đoạn mã XML. Copy toàn bộ nội dung XML.

<mxfile host="app.diagrams.net" modified="2025-05-12T02:50:52.000Z" agent="Amazon Q" etag="serverless-architecture" version="21.2.9" type="device">
  <diagram id="serverless-arch" name="Serverless Architecture">
    <mxGraphModel dx="1422" dy="762" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <!-- Client -->
        <mxCell id="2" value="Client" style="outlineConnect=0;fontColor=#232F3E;gradientColor=none;strokeColor=#232F3E;fillColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.client;" parent="1" vertex="1">
          <mxGeometry x="80" y="280" width="78" height="78" as="geometry" />
        </mxCell>
        <!-- API Gateway -->
        <mxCell id="3" value="Amazon API Gateway" style="outlineConnect=0;fontColor=#232F3E;gradientColor=#945DF2;gradientDirection=north;fillColor=#5A30B5;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway;" parent="1" vertex="1">
          <mxGeometry x="280" y="280" width="78" height="78" as="geometry" />
        </mxCell>
        <!-- Lambda -->
        <mxCell id="4" value="AWS Lambda" style="outlineConnect=0;fontColor=#232F3E;gradientColor=#F78E04;gradientDirection=north;fillColor=#D05C17;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;" parent="1" vertex="1">
          <mxGeometry x="480" y="280" width="78" height="78" as="geometry" />
        </mxCell>
        <!-- DynamoDB -->
        <mxCell id="5" value="Amazon DynamoDB" style="outlineConnect=0;fontColor=#232F3E;gradientColor=#4D72F3;gradientDirection=north;fillColor=#3334B9;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;" parent="1" vertex="1">
          <mxGeometry x="680" y="280" width="78" height="78" as="geometry" />
        </mxCell>
        <!-- Client to API Gateway -->
        <mxCell id="6" value="HTTPS Request" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="2" target="3" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <!-- API Gateway to Lambda -->
        <mxCell id="7" value="Invoke" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="3" target="4" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <!-- Lambda to DynamoDB -->
        <mxCell id="8" value="CRUD Operations" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="4" target="5" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <!-- DynamoDB to Lambda -->
        <mxCell id="9" value="Response Data" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="5" target="4" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="620" y="340" />
              <mxPoint x="520" y="340" />
            </Array>
          </mxGeometry>
        </mxCell>
        <!-- Lambda to API Gateway -->
        <mxCell id="10" value="Response" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="4" target="3" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="420" y="340" />
              <mxPoint x="320" y="340" />
            </Array>
          </mxGeometry>
        </mxCell>
        <!-- API Gateway to Client -->
        <mxCell id="11" value="HTTPS Response" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="3" target="2" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="220" y="340" />
              <mxPoint x="120" y="340" />
            </Array>
          </mxGeometry>
        </mxCell>
        <!-- Title -->
        <mxCell id="12" value="Serverless Architecture with API Gateway, Lambda, and DynamoDB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="175" y="180" width="500" height="30" as="geometry" />
        </mxCell>
        <!-- AWS Cloud Border -->
        <mxCell id="13" value="AWS Cloud" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud;strokeColor=#232F3E;fillColor=none;verticalAlign=top;align=left;spacingLeft=30;fontColor=#232F3E;dashed=0;" vertex="1" parent="1">
          <mxGeometry x="240" y="220" width="560" height="200" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>

🧩 Mở sơ đồ bằng draw.io

  1. Truy cập: https://app.diagrams.net

  2. Chọn File > New

  3. Dán đoạn XML vào

  4. Bấm OK, sơ đồ kiến trúc sẽ hiển thị hoàn chỉnh.

✅ Tip: Bạn có thể chỉnh sửa và export ra PNG, SVG hoặc nhúng vào tài liệu kỹ thuật.

🎁 Tổng kết

Bạn vừa biến Amazon Q CLI thành một trợ lý DevOps AI mạnh mẽ, có khả năng:

  • Phân tích mã Terraform

  • Vẽ kiến trúc hệ thống

  • Sinh tài liệu kỹ thuật

  • Dự đoán chi phí AWS

  • Quét bảo mật hạ tầng

  • Và hơn thế nữa...

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday