使用 Amazon Bedrock 上的 Claude 3 将架构图转换为 CDK/Terraform 代码

概述

在云原生领域,基础设施即代码 (IaC) 对于开发人员和 DevOps 团队来说是一种不可避免的实践。

最近,Amazon Bedrock 上线了 Claude 3 Sonnet 模型和这个模型的图像转文本能力。这无疑开启了一个新时代,也就是实现架构图与 IaC 工具的无缝融合,如亚马逊云科技云开发工具包 (CDK) 或 Terraform。 这篇博文将探讨如何使用 Amazon Bedrock 上的 Claude 3 Sonnet 来简化基础设施预配和管理流程。

架构图

架构图以可视化方式呈现系统组件、各组件之间的关系以及应用程序或基础设施的整体结构,是团队成员之间沟通、协作和决策所依据的蓝图。但是,手动将架构图转换为代码非常耗时且容易出错,尤其是在复杂的环境中。

Amazon Bedrock 上的 Claude 3 Sonnet

Anthropic 推出的 Claude 3 系列新一代 AI 模型,迅速成为了热门话题。这个系列包括三种模型: Claude 3 Opus、Claude 3 Sonnet 和 Claude 3 Haiku,是具有强大能力的新一代模型。 这个系列模型能够从图像中解析文本。在下面介绍的解决方案中,我们将要使用这个功能。www.anthropic.com/news/claude…

在性能方面,对于大多数工作负载而言,Sonnet 模型可谓是全能选手。无论是输入还是输出,它都比 Anthropic 之前的 Claude 2 和 2.1 模型的速度要快,并且在人工智能水平上更胜一筹。除此之外,Claude 3 Sonnet 更易于控制,这意味着我们可以得到预测性更高、质量更佳的结果。真可谓双赢!

更可喜的事情

Amazon Bedrock 宣布支持 Anthropic Claude 3 系列。www.aboutamazon.com/news/aws/am…

Amazon Bedrock 是一项全托管的服务,为生成式 AI 相关需求提供一站式解决方案。我们可以在 Amazon Bedrock 上选择使用 Anthropic 等一流人工智能公司提供的多款高性能基础模型。Amazon Bedrock 还提供其他很多功能,帮助我们轻松构建和扩展生成式 AI 应用。

解决方案

现在,我们来看看解决方案。下面是构建架构提取器的操作步骤。

  1. 在 Amazon Bedrock 中,选用 Anthropic Claude 3。
  2. 复制以下脚本,创建 claude_vision.py 文件
python代码解读复制代码import base64
import json
import os

import boto3
import click
from botocore.exceptions import ClientError

def call_claude_multi_model(bedrock_runtime, model_id, input_text, image, max_tokens):
    """
    Streams the response from a multimodal prompt.
    Args:
        bedrock_runtime: The Amazon Bedrock boto3 client.
        model_id (str): The model ID to use.
        input_text (str) : The prompt text
        image (str) : The path to  an image that you want in the prompt.
        max_tokens (int) : The maximum  number of tokens to generate.
    Returns:
        None.
    """

    with open(image, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read())

    body = json.dumps(
        {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": max_tokens,
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {"type": "text", "text": input_text},
                        {
                            "type": "image",
                            "source": {
                                "type": "base64",
                                "media_type": "image/jpeg",
                                "data": encoded_string.decode("utf-8"),
                            },
                        },
                    ],
                }
            ],
        }
    )

    response = bedrock_runtime.invoke_model_with_response_stream(
        body=body, modelId=model_id
    )

    for event in response.get("body"):
        chunk = json.loads(event["chunk"]["bytes"])

        if chunk["type"] == "content_block_delta":
            if chunk["delta"]["type"] == "text_delta":
                print(chunk["delta"]["text"], end="")

@click.command()
@click.option("--image_path", prompt="path to image", help="Image you want to parse")
def main(image_path):
    """
    Entrypoint for Anthropic Claude Sonnet multimodal prompt example.
    """

    model_id = "anthropic.claude-3-sonnet-20240229-v1:0"
    input_text = """
You are a AWS solution architect, 
The image provided is an architecture diagram. Use two heading to explain below.
1. Explain the technical data flow in detail.
2. Provide cdk typescript code to implement using aws-cdk-lib

Do not:
1. use preambles.
2. make assumptions.
"""
    max_tokens = 4000

    try:

        bedrock_runtime = boto3.client("bedrock-runtime")

        call_claude_multi_model(
            bedrock_runtime,
            model_id,
            input_text,
            os.path.abspath(image_path),
            max_tokens,
        )

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " + format(message))

if __name__ == "__main__":
    main()
  1. 创建并保存如下架构图。注意:记录下图像的保存路径。

1.png

S3_extractor

  1. 运行脚本:python src/utils/claude_vision.py --image_path ~/Desktop/s3_extractor.png

运行脚本后的响应

$ python src/utils/claude_vision.py --image_path ~/Desktop/s3_extractor.png

Technical Data Flow Explanation

The architecture diagram depicts a serverless data pipeline using AWS services. The data flow can be described as follows:

  1. An Amazon S3 bucket is the source of data, which likely contains files or objects that need to be processed.
  2. When a new object is uploaded or modified in the S3 bucket, it triggers an AWS Lambda function named “LambdaExtractor.”
  3. The LambdaExtractor function is responsible for extracting relevant data or events from the input files or objects in the S3 bucket.
  4. After processing, the extracted data or events are stored in an Amazon DynamoDB table named “StoreEventsDB.”

CDK Typescript Code Implementation

To implement this architecture using the AWS Cloud Development Kit (CDK) and TypeScript, you can use the following code:

php代码解读复制代码import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
import * as lambdaEventSources from 'aws-cdk-lib/aws-lambda-event-sources';

const app = new cdk.App();
const stack = new cdk.Stack(app, 'DataPipelineStack');

// Create the S3 bucket
const sourceBucket = new s3.Bucket(stack, 'SourceBucket');

// Create the DynamoDB table
const eventsTable = new dynamodb.Table(stack, 'StoreEventsDB', {
  partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
  billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
});

// Create the Lambda function
const lambdaExtractor = new lambda.Function(stack, 'LambdaExtractor', {
  runtime: lambda.Runtime.NODEJS_14_X,
  code: lambda.Code.fromAsset('path/to/lambda/code'),
  handler: 'index.handler',
  environment: {
    EVENTS_TABLE_NAME: eventsTable.tableName,
  },
});

// Grant permissions for the Lambda function to access the DynamoDB table
eventsTable.grantWriteData(lambdaExtractor);

// Create the S3 event source and associate it with the Lambda function
lambdaExtractor.addEventSource(
  new lambdaEventSources.S3EventSource(sourceBucket, {
    events: [s3.EventType.OBJECT_CREATED, s3.EventType.OBJECT_REMOVED],
    recursive: true,
  })
);

In this code:

  1. An S3 bucket named “SourceBucket” is created to serve as the source of data.
  2. A DynamoDB table named “StoreEventsDB” is created with a partition key “id” of type string.
  3. A Lambda function named “LambdaExtractor” is created with the provided source code and environment variables.
  4. The Lambda function is granted write permissions to the DynamoDB table.
  5. An S3 event source is created and associated with the Lambda function, triggering the function when objects are created or removed from the “SourceBucket.”

Note: You need to replace ‘path/to/lambda/code’ with the actual path to your Lambda function code, and provide the necessary logic in the Lambda function to extract data from the S3 objects and store it in the DynamoDB table.%

架构图转 IaC 的优势

  1. 一致性和准确性:转换过程自动化可以消除人为错误风险,确保基础设施代码符合你的架构设计。
  2. 更快迭代和部署:根据架构图快速生成代码能力帮助我们快速迭代基础设施、测试改动和部署更新。
  3. 协作和标准化:架构图是团队有效沟通和协作的基础依据。通过将架构图转换为 IaC,你可以在整个组织内建立一致的标准化基础设施管理方法。
  4. 版本控制和可审计性:亚马逊云科技 CDK 和 Terraform 均支持代码版本控制,便于全面审计跟踪基础设施更改,从而更好地实现治理和合规。

总结

Claude 3 Sonnet 与 Amazon Bedrock 的集成,以及架构图转 CDK 或 Terraform 代码的能力,大大方便了开发人员和 DevOps 团队。 采用这种方法,我们就可以充分利用 IaC 的强大能力,简化工作流程,加快交付可靠且可扩展的云基础设施。让我们一起踏上这段旅程,体验可视化设计与自动代码生成的无缝集成,高效构建和管理云环境。

下一篇文章中,我将介绍一种基于 streamlit web UI 的构建方法。不熟悉命令行界面 (CLI) 的用户可以使用交互式 UI 来实现这个解决方案。

本文中的任何观点仅代表作者个人的观点,不代表亚马逊云科技的观点。

*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

资源分享

图片

大模型AGI学习包

图片

图片

资料目录

  1. 成长路线图&学习规划
  2. 配套视频教程
  3. 实战LLM
  4. 人工智能比赛资料
  5. AI人工智能必读书单
  6. 面试题合集

人工智能\大模型入门学习大礼包》,可以扫描下方二维码免费领取

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

图片

2.视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩

图片

3.LLM

大家最喜欢也是最关心的LLM(大语言模型)

图片

人工智能\大模型入门学习大礼包》,可以扫描下方二维码免费领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值