如何使用 Terraform 和 AWS API Gateway 创建 API 代理

2024-01-20

我正在尝试使用 Terraform 在 AWS 上的 API Gateway 中建立一个简单的 API 代理。基本上,我想包装 root 并将请求代理回另一个端点。这可能是最简单的设置,但我似乎无法让它在 Terraform 中工作。

您将在下面找到该脚本。此时,我可以创建 REST API、定义资源、创建方法,但似乎没有任何方法可以将其定义为端点。

provider "aws" {
    region = "us-east-1"
}
resource "aws_api_gateway_rest_api" "TerraTest" {
  name = "TerraTest"
  description = "This is my API for demonstration purposes"
}

resource "aws_api_gateway_resource" "TerraProxyResource" {
  rest_api_id = "${aws_api_gateway_rest_api.TerraTest.id}"
  parent_id = "${aws_api_gateway_rest_api.TerraTest.root_resource_id}"
  path_part = "{proxy+}"
}

resource "aws_api_gateway_integration" "integration" {
    rest_api_id = "${aws_api_gateway_rest_api.TerraTest.id}"
    resource_id = "${aws_api_gateway_resource.TerraProxyResource.id}"
    http_method = "${aws_api_gateway_method.mymethod.http_method}"

    type = "HTTP_PROXY"
    uri = "http://api.endpoint.com/{proxy+}"
}

这里我将类型设置为代理,但我认为 URI 不是设置端点的正确属性。

resource "aws_api_gateway_method" "mymethod" {
  rest_api_id = "${aws_api_gateway_rest_api.TerraTest.id}"
  resource_id = "${aws_api_gateway_resource.TerraProxyResource.id}"
  http_method = "ANY"
  authorization = "NONE"
}

我希望这里的某个地方能够创建到其他端点的映射,但似乎没有任何属性。 (https://github.com/hashicorp/terraform/blob/master/builtin/providers/aws/resource_aws_api_gateway_method.go https://github.com/hashicorp/terraform/blob/master/builtin/providers/aws/resource_aws_api_gateway_method.go)

resource "aws_api_gateway_api_key" "TerraTestKey" {
  name = "Terra_Test_Key"

  stage_key {
    rest_api_id = "${aws_api_gateway_rest_api.TerraTest.id}"
    stage_name = "${aws_api_gateway_deployment.TerraTestDeployment.stage_name}"
  }
}


resource "aws_api_gateway_deployment" "TerraTestDeployment" {
  rest_api_id = "${aws_api_gateway_rest_api.TerraTest.id}"
  stage_name = "dev"
}

我扫描了源代码,没有看到任何可以设置的属性。

任何人都可以分享任何建议/片段吗?

Tim

诗。如果您想尝试自己运行该脚本,我将其放在这里:http://textuploader.com/d14sx http://textuploader.com/d14sx


这是显示工作解决方案的相关模块。它并不独立,因为它依赖于其他地方定义的一些变量,但它应该足以帮助任何努力获得 AWS 代理设置的人,并且还显示 L​​ambda 授权者集成作为奖励。

provider "aws" {
  region  = "${var.region}"
  profile = "${var.profile}"
}

data "aws_iam_role" "api_user" {
  role_name = "api_user"
}

module "authorizer_lambda" {
  source   = "../lambda"
  name     = "${var.api_name}-authorizer_lambda"
  filename = "authorizer_lambda"
  runtime  = "nodejs4.3"
  role     = "${data.aws_iam_role.api_user.arn}"
}

resource "aws_api_gateway_authorizer" "custom_authorizer" {
  name                   = "${var.api_name}-custom_authorizer"
  rest_api_id            = "${aws_api_gateway_rest_api.ApiGateway.id}"
  authorizer_uri         = "${module.authorizer_lambda.uri}"
  authorizer_credentials = "${data.aws_iam_role.api_user.arn}"
  authorizer_result_ttl_in_seconds = 1
}

resource "aws_api_gateway_rest_api" "ApiGateway" {
  name        = "${var.api_name}"
  description = "${var.api_description}"
}

resource "aws_api_gateway_resource" "ApiProxyResource" {
  rest_api_id = "${aws_api_gateway_rest_api.ApiGateway.id}"
  parent_id   = "${aws_api_gateway_rest_api.ApiGateway.root_resource_id}"
  path_part   = "{proxy+}"
}

resource "aws_api_gateway_integration" "ApiProxyIntegration" {
  rest_api_id              = "${aws_api_gateway_rest_api.ApiGateway.id}"
  resource_id              = "${aws_api_gateway_resource.ApiProxyResource.id}"
    http_method              = "${aws_api_gateway_method.ApiProxyMethod.http_method}"
    type                     = "HTTP_PROXY"
    integration_http_method  = "ANY"
    uri                      = "${format("%s/{proxy}", "${var.base_url}")}"
    passthrough_behavior     = "WHEN_NO_MATCH"
    request_parameters       = "${var.aws_api_gateway_integration_request_parameters}"
}

resource "aws_api_gateway_method" "ApiProxyMethod" {
  rest_api_id                   = "${aws_api_gateway_rest_api.ApiGateway.id}"
  resource_id                   = "${aws_api_gateway_resource.ApiProxyResource.id}"
  http_method                   = "ANY"
  authorization                 = "CUSTOM"
  authorizer_id                 = "${aws_api_gateway_authorizer.custom_authorizer.id}"  
  request_parameters            = {"method.request.path.proxy" = true}
}

resource "aws_api_gateway_deployment" "ApiDeployment" {
  depends_on = ["aws_api_gateway_method.ApiProxyMethod"]
  rest_api_id = "${aws_api_gateway_rest_api.ApiGateway.id}"
  stage_name = "${var.stage_name}"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Terraform 和 AWS API Gateway 创建 API 代理 的相关文章

  • AWS Application Load Balancer 将所有标头转换为小写

    我有一个 REST API 应用程序在两个 EC2 实例中运行 并且长期使用 AWS Classic Load Balancer REST API 的客户端依赖于响应标头 例如Location 我知道 HTTP 标头根据定义是不区分大小写的
  • 如何简化 Step Functions 的复杂并行分支相互依赖关系

    我的任务是将依赖节点列表转换为 AWS Step Functions AWS Step Function 定义允许并行分支甚至嵌套到多个深度的分支 不幸的是 它不支持分支中任务之间的依赖关系 因此强制您在两个结果可用于步骤函数中的后续任务之
  • 我首次设置 AWS EB 时创建的默认安全组是什么?

    我对几个组所扮演的角色感到困惑 这些组似乎已自动添加到我的 AWS 安全组列表中 并以我收集的默认配置进行连接 并且想知道它们是如何工作的 以及它们的安全性如何 改变 具体来说 有三个神秘之处 launch wizard 1其中有一条入站规
  • 无法理解如何使用 Android AWS SDK

    我正在构建一个将使用 Amazon 的 SimpleDB 服务的应用程序 它使用亚马逊的AWS 安卓 SDK http aws amazon com sdkforandroid 据我了解 不建议我将 Amazon 凭证 访问 ID 和密钥
  • 无法从 EMR 中运行的 Spark 应用程序删除 AWS SQS 消息

    我正在 AWS EMR 集群中运行 Apache Spark 应用程序 该应用程序从 AWS SQS 检索消息 根据消息数据进行一些计算 然后删除每条消息 我正在具有 NAT 实例的私有子网上的 VPC 中运行 EMR 集群 我面临的问题是
  • 如何在启动时添加 EC2 实例属性?

    我们使用 Amazon ECS 提供服务 我们有一个名为application在该集群中 我们有多项服务 dev app dev kafka dev zookeeper qa app qa kafka qa zookeeper etc 服务
  • Apache Tomcat/8.5.3 管理器应用程序 403 错误

    我有 tomcat 在 aws 上的 ubuntu 实例上运行 我可以成功访问If you re seeing this you ve successfully installed Tomcat Congratulations 页面 但是当
  • 如何使提供程序假设_角色块有条件

    我有一个provider我想给的块assume role属性 但前提是它没有在我的本地计算机上运行 我定义了一个变量islocal在所有环境中 tfvars文件 只有本地文件具有该值true 这是provider block provide
  • Django 尝试使用错误的数据库用户

    已解决 我使用的是 USERNAME 而不是之前尝试使用 Postgres 驱动程序时使用的 USER 我正在尝试将我的 django 项目连接到 RDS MySQL 数据库 我可以在 MySQL Workbench 和 mysql 命令行
  • 使用 Terraform 创建/销毁 AWS 帐户?

    我正在尝试创建一个工具来轻松创建和销毁我的 AWS 组织中的 AWS 账户 或者至少将其从组织中删除 如果无法删除 这些帐户将成为沙盒 预算很少 并在几周后被销毁 我发现 Terraform 有一个特定的资源 称为aws 组织 帐户 htt
  • 自动缩放时如何更改新实例标签名称

    我在我的设备上创建了一个新闹钟AWS基于我也创建的指标的帐户 我用这个警报来自动缩放 当启动我正在使用的新实例时User Data字段来设置这个新实例 我面临的唯一问题是我无法修改标签 特别是标签Name 这个新实例 如果我不更改它 所有新
  • 使用 AWS Lambda 从 AWS S3 读取并提取巨大的 zip 文件

    我正在开发数据管理应用程序 客户可以上传zip file approx 250 MB 与多个text files approx 1500 MB on AWS S3 但由于记忆有限aws lamda 最大 1536MB 大小 我能够提取 50
  • AWS ACM 证书管理 删除正在使用的证书

    我想删除 AWS Certificate Manager 中正在使用的 AWS 证书 为此 我使用建议的 AWS CLI 和以下命令 aws iam delete server certificate server certificate
  • 如何连接两个 Ec2 实例以便它们可以相互通信[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想将两个 EC2 实例相互连接 以便它们可以相互通信 第一个将安装 Wordpress 第二个将配置数据库 例如 Mysql Mar
  • AWS SES模板html部分是多行

    我正在使用 AWS SES 按照文档发送电子邮件https docs aws amazon com ses latest DeveloperGuide send personalized email api html https docs
  • S3.getSignedUrl 接受多种内容类型

    我正在使用react s3 uploader节点包 它接受一个signingUrl用于获取用于将对象存储到 S3 中的signedUrl 目前 我已经配置了一个 lambda 函数 带有 API 网关端点 来生成此signedUrl 经过一
  • 在describe-vpcs中按标签过滤的正确语法是什么?

    我试图理解 aws ec2 cli 调用 我希望描述所有 VPC 然后在自定义标记上描述文件管理器 vpcname myvpc 但是在尝试多种组合后 我不断收到有关 filters 的格式和使用的冲突错误 使用作为参考 http docs
  • AWS CDK 授予堆栈外部资源的权限

    我对 AWS CDK 相当陌生 并且没有太多使用 AWS 的经验 在我正在编写的 CDK 堆栈中 我必须向使用其他 CDK 模板构建且已位于 aws 中的资源授予权限 假设我的堆栈 A 包含一个 lambda 该 lambda 将从另一个服
  • 在 S3 中迭代对象时出现“ConnectionPoolTimeoutException”

    我已经使用 aws java API 一段时间了 没有遇到太多问题 目前我使用的是库 1 5 2 版本 当我使用以下代码迭代文件夹内的对象时 AmazonS3 s3 new AmazonS3Client new PropertiesCred
  • 为什么 CloudFront 根据 Accept-Encoding 改变 CORS 标头响应?

    我正在尝试让 CORS 与 Amazon S3 CloudFront 一起正常工作 设置我的 CORS 配置后 它似乎可以正常工作 curl H Origin https app close io I https d4389n07pf8cq

随机推荐

  • Python 与 matplotlib - 重用绘图函数

    我对此有一个后续问题question https stackoverflow com questions 1401102 python with matplotlib drawing multiple figures in parallel
  • 本地化组名称

    我想通过向 Everyone 组分配权限来配置互斥访问规则 当我创建规则时 它看起来类似于以下内容 new MutexAccessRule Everyone MutexRights Modify MutexRights Synchroniz
  • 使用 CUPS 进行 Zebra 打印,不打印 ZPL 或 EPL

    我有一台 Zebra GK420d 通过 CUPS 连接到 OS X 但是 当我向其发送以 ZPL 或 EPL 编写的文件时 它们仅以纯文本形式打印 我需要更改打印机模式吗 与其他人所说的相反 您不需要专门添加原始队列 相反 您可以使用以下
  • 理解 SwiftUI 中的 @Binding

    我观看了一些关于数据绑定的WWDC视频和Apple文档 根据我目前的理解 State作为属性委托将提供视图和带注释的属性之间的绑定连接 例如 State var myText String var body some View VStack
  • PyGame 使 Linux 陷入困境?

    当我运行 pygame 代码时 它会使系统陷入困境 PyGame 变得无响应 并且它使 Ubuntu 的速度大大减慢 以至于我不得不强制关闭两次 我在这里发布了一个非常相似的问题 为什么我的基本 PyGame 模块这么慢 https sta
  • 如何内嵌文本旋转 90 度

    如何在不使用样式表的情况下将文本旋转 90 度 我已将以下说明放置在页面的标题区域中 然后我在相关段落周围放置了以下内容 div p My paragraph p div 但它不起作用 因此我的问题 这是一个小的视觉示例 rotate te
  • 谷歌地图不显示

    我需要在我的 php 页面地图上实现 我有容器 div div 它位于其他 div 内 我将这段代码放入其中标签 但根本不显示 有谁能够帮助我
  • 如何将表转换为 Spark Dataframe

    在 Spark SQL 中 可以使用以下命令将数据帧作为表进行查询 sqlContext registerDataFrameAsTable df mytable 假设我有的是mytable 我如何获取或访问它作为 DataFrame 最干净
  • 如何在 Swift 中规范化 UIImage 的像素值?

    我们正在尝试使UIImage以便它可以正确传递到 CoreML 模型中 我们从每个像素检索 RGB 值的方法是首先初始化一个 CGFloat 数组称为rawData每个像素的值 这样就有一个红色 绿色 蓝色和 alpha 值的位置 在bit
  • ANSI 颜色在带有 PowerShell 的 VSCode 集成终端中不起作用

    我正在为我的 python 项目使用 Visual Studio Code 并且我也在使用片状天堂 https flakeheaven readthedocs io en latest 未维护的分叉弗莱克地狱 https github co
  • 将 python BOTO 与 AWS SQS 结合使用,返回无意义的字符

    因此 我使用 python 和 BOTO 来访问我的 AWS SQS 我在 SQS 中有一些消息 我可以从 AWS 仪表板看到这些消息 然而 当我尝试通过 python 获取这些消息时 出现的字符只是乱码 知道这是怎么回事吗 conn bo
  • 在中继器内更新图像的 ImageUrl

    我希望有一个人可以帮助我 恐怕这是一个相当新手的问题 我在中继器中有一个图像 我想根据传递给它的参数更改其 IMAGEURL
  • 使用 Clipper 库 (c++) 进行线和多边形裁剪返回空路径

    我正在尝试使用 Clipper 库按线分割多边形 执行裁剪后 返回空路径 有人可以建议正确的方法来做同样的事情吗 Paths clip 2 soln clip 0 lt lt IntPoint 264 210 lt lt IntPoint
  • 在 Python 中下载 Sharepoint Excel 文件

    我正在尝试使用 Python 脚本从 SharePoint 存储库下载 Excel 文件 我正在使用 Office365 Rest Python Client 如示例中所定义https github com vgrem Office365
  • 在 Vista 上捕获“程序停止运行”

    在 Vista 上 我遇到了应用程序崩溃处理程序的问题 基本上 如果发生 SEH 无法捕获的意外情况 我会收到此弹出窗口 其中包含 应用程序停止工作 blablabla 关闭程序 调试程序 也就是说 在我使用系统控制面板 启用错误报告后 您
  • 如何获取图像的亮度梯度

    我正在努力通过图像亮度检查来理解图像 我尝试通过下面的代码找到图像的亮度 def brightness im file im Image open im file stat ImageStat Stat im r g b stat rms
  • 使闪亮的 dateInput 返回 NULL 或空字符

    我正在开发一个闪亮的应用程序 它允许用户从input插入 SQL Server 数据库 我想要做的一件事是删除当前存在的日期 为此 我需要一种方法来通过NULL NA or 某物我可以用它来将数据库中的值设置为 NULL dateInput
  • 查找具有属性支持的 JavaScript 库,用于在 JavaScript 中序列化和反序列化对象

    考虑 JavaScript 中的以下类 Tools UserBase Tools Class define Tools UserBase Tools EntityBase UserId type System Int32 key true
  • Laravel 在共享主机上运行 artisan 命令

    我在以下网站上托管了一个网站http 000webhostapp com http 000webhostapp com一段时间以来它工作正常 但它向我显示了这个错误 生产 错误 未指定应用程序加密密钥 我发现我必须运行这个 artisan
  • 如何使用 Terraform 和 AWS API Gateway 创建 API 代理

    我正在尝试使用 Terraform 在 AWS 上的 API Gateway 中建立一个简单的 API 代理 基本上 我想包装 root 并将请求代理回另一个端点 这可能是最简单的设置 但我似乎无法让它在 Terraform 中工作 您将在