📌  相关文章
📜  Amazon Web Services – 解决方案构造简介

📅  最后修改于: 2022-05-13 01:57:46.420000             🧑  作者: Mango

Amazon Web Services – 解决方案构造简介

这是一篇关于 AWS Solutions Constructs 的介绍性文章。如果您不熟悉解决方案构造,简而言之,它们是一组可重用的架构组件,可让您创建更好的基础设施作为代码堆栈并更快地创建它们。

我们先来谈谈基础设施即代码。在以 AWS 云形成开始的 AWS 中,基础设施即代码 (IaS) 服务。云形成允许您使用声明性 YAML 定义完整的云架构 或 JSON 模板。这些模板是创建基础设施即代码的强大机制。这是定义 SQS 队列和云形成的 JSON 片段。

"gfg_queue 529S8454": {
"Type": "AWS:: SQS::Queue",
"Properties": {
"MaximumMessageSize": 1130,
"QueueName": "demo-queue"
}
}

现在,这些模板可能会变得非常长且非常复杂,而且它们本质上是静态的,因此根据部署条件改变基础架构是一个挑战。幸运的是,有一种比文本编辑器更好的方法来创建这些云形成模板。 AWS 云开发工具包AWS CDK在确认模板上提供了一个抽象层,允许您使用传统的编程语言而不是声明性标记来定义您的基础设施。这使得定义云形成堆栈更容易,并为您提供更多功能。在 CDK 中,定义一个新队列如下所示:

new sqs.Queue (this, 'gfg-queue', { 
    queueName: 'gfg-queue', 
    maxMessageSizeBytes: 1130,
});

您只需实例化一个新的队列对象,但由于它是一种编程语言,您可以更动态地创建事物。例如,如果您只想在某些条件下创建资源,则可以将其包装在条件中,如下所示:

if (environment == 'PROD') {
    new sqs.Queue (this, 'gfg-queue',{
     queueName: 'demo-queue',
     maxMessageSizeBytes: 1130,
});
}

如果您想要基于运行时值的多个资源,您可以将实例化包装在一个循环中,如下所示:

inputs.forEach( input => {

    new sqs.Queue (this, input-${input.id)', { 
     queueName: input-${input.id}', 
     maxMessageSizeBytes: 1130,
});
});

此示例是用 typescript 编写的,但您也可以将 CDK 与Python、.net 和Java一起使用。所有这一切的核心仍然是云的形成,但这种对原始云形成的抽象减轻了编写 YAML 的需要 或 JSON 并使您的云形成堆栈更加动态。

AWS 解决方案构造是常见架构模式的实现,您可以将其单独插入 CDK 堆栈,也可以连接到其他解决方案构造。它们都建立在 CDK 之上,因此位于其下方的云层之上。它们不仅可以节省您的时间和代码,还可以使用最佳实践来部署模式,并包含您从头开始构建堆栈时可能会忽略的架构元素。

让我们看一下 AWS-SQS lambda,它是一种部署 SQS-Queue 的构造,以及每当消息存储在队列中时都会调用的 lambda函数。以下是您只需将 SQS 实例化为 lambda 对象即可在 CDK 程序中部署它的方法:

new SqsToLambda (this, 'SqsToLambdaPattern',{
 lambdaFunctionProps: {
runtime: lambda.Runtime. NODEJS_10_X,
handler: 'function.handler',
code: lambda.Code.fromAsset (`lambda)
},

queue Props: {
maxMessageSizeBytes: 1130,
queueName: 'gfg-queue'
});

该构造部署了一个队列和一个 lambda函数,但是这两个服务的交互实际上需要几个其他资源才能同时具有功能性和安全性,例如:

资源清单:

  1. AWS: : IAM: : 角色
  2. AWS: :IAM :: 政策
  3. AWS::Lambda::函数
  4. AWS::Lambda::EventSourceMapping
  5. AWS: :SQS: : 队列
  6. AWS: :SQS : : QueuePolicy
  7. AWS: :SQS: : 队列(死信)

该构造实际上会自动为您启动 7 项服务。除了更快的架构之外,它还提供了更好的架构,这是因为解决方案的构造都默认为推荐或最佳实践。您会看到的一些区域是:

  • 您的资源默认全部加密
  • IAM 角色和策略遵循最小权限原则,限制允许的操作和定位资源
  • 错误处理架构是设置死信队列等架构

目前在库中发布了超过 35 种解决方案结构,并且还在开发中。这是一个简单的数据摄取系统,其中外部参与者将数据存储在 SQS-Queue 中,队列触发 lambda函数来处理数据并将处理数据保存到 Dynamodb 表中。使用解决方案构造来启动它几乎是微不足道的。您可以使用两种解决方案构造 AWS SQS lambda 和 AWS lambda Dynamodb 创建此架构。

这些构造可以通过 lambda函数连接以创建所需的架构。