Terraform 0.11

aws_api_gateway_integration




terraform

aws_api_gateway_integration

एक एपीआई गेटवे एकीकरण के लिए एक HTTP विधि एकीकरण प्रदान करता है।

उदाहरण उपयोग

resource "aws_api_gateway_rest_api" "MyDemoAPI" {
  name        = "MyDemoAPI"
  description = "This is my API for demonstration purposes"
}

resource "aws_api_gateway_resource" "MyDemoResource" {
  rest_api_id = "${aws_api_gateway_rest_api.MyDemoAPI.id}"
  parent_id   = "${aws_api_gateway_rest_api.MyDemoAPI.root_resource_id}"
  path_part   = "mydemoresource"
}

resource "aws_api_gateway_method" "MyDemoMethod" {
  rest_api_id   = "${aws_api_gateway_rest_api.MyDemoAPI.id}"
  resource_id   = "${aws_api_gateway_resource.MyDemoResource.id}"
  http_method   = "GET"
  authorization = "NONE"
}

resource "aws_api_gateway_integration" "MyDemoIntegration" {
  rest_api_id          = "${aws_api_gateway_rest_api.MyDemoAPI.id}"
  resource_id          = "${aws_api_gateway_resource.MyDemoResource.id}"
  http_method          = "${aws_api_gateway_method.MyDemoMethod.http_method}"
  type                 = "MOCK"
  cache_key_parameters = ["method.request.path.param"]
  cache_namespace      = "foobar"

  request_parameters = {
    "integration.request.header.X-Authorization" = "'static'"
  }

  # Transforms the incoming XML request to JSON
  request_templates {
    "application/xml" = <<EOF
{
   "body" : $input.json('$')
}
EOF
  }
}

लमबा एकीकरण

# Variables
variable "myregion" {}
variable "accountId" {}

# API Gateway
resource "aws_api_gateway_rest_api" "api" {
  name = "myapi"
}

resource "aws_api_gateway_resource" "resource" {
  path_part = "resource"
  parent_id = "${aws_api_gateway_rest_api.api.root_resource_id}"
  rest_api_id = "${aws_api_gateway_rest_api.api.id}"
}

resource "aws_api_gateway_method" "method" {
  rest_api_id   = "${aws_api_gateway_rest_api.api.id}"
  resource_id   = "${aws_api_gateway_resource.resource.id}"
  http_method   = "GET"
  authorization = "NONE"
}

resource "aws_api_gateway_integration" "integration" {
  rest_api_id             = "${aws_api_gateway_rest_api.api.id}"
  resource_id             = "${aws_api_gateway_resource.resource.id}"
  http_method             = "${aws_api_gateway_method.method.http_method}"
  integration_http_method = "POST"
  type                    = "AWS_PROXY"
  uri                     = "arn:aws:apigateway:${var.myregion}:lambda:path/2015-03-31/functions/${aws_lambda_function.lambda.arn}/invocations"
}

# Lambda
resource "aws_lambda_permission" "apigw_lambda" {
  statement_id  = "AllowExecutionFromAPIGateway"
  action        = "lambda:InvokeFunction"
  function_name = "${aws_lambda_function.lambda.arn}"
  principal     = "apigateway.amazonaws.com"

  # More: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html
  source_arn = "arn:aws:execute-api:${var.myregion}:${var.accountId}:${aws_api_gateway_rest_api.api.id}/*/${aws_api_gateway_method.method.http_method}${aws_api_gateway_resource.resource.path}"
}

resource "aws_lambda_function" "lambda" {
  filename         = "lambda.zip"
  function_name    = "mylambda"
  role             = "${aws_iam_role.role.arn}"
  handler          = "lambda.lambda_handler"
  runtime          = "python2.7"
  source_code_hash = "${base64sha256(file("lambda.zip"))}"
}

# IAM
resource "aws_iam_role" "role" {
  name = "myrole"

  assume_role_policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
POLICY
}
variable "name" {}
variable "subnet_id" {}

resource "aws_lb" "test" {
  name               = "${var.name}"
  internal           = true
  load_balancer_type = "network"
  subnets            = ["${var.subnet_id}"]
}

resource "aws_api_gateway_vpc_link" "test" {
  name        = "${var.name}"
  target_arns = ["${aws_lb.test.arn}"]
}

resource "aws_api_gateway_rest_api" "test" {
  name = "${var.name}"
}

resource "aws_api_gateway_resource" "test" {
  rest_api_id = "${aws_api_gateway_rest_api.test.id}"
  parent_id   = "${aws_api_gateway_rest_api.test.root_resource_id}"
  path_part   = "test"
}

resource "aws_api_gateway_method" "test" {
  rest_api_id   = "${aws_api_gateway_rest_api.test.id}"
  resource_id   = "${aws_api_gateway_resource.test.id}"
  http_method   = "GET"
  authorization = "NONE"

  request_models = {
    "application/json" = "Error"
  }
}

resource "aws_api_gateway_integration" "test" {
  rest_api_id = "${aws_api_gateway_rest_api.test.id}"
  resource_id = "${aws_api_gateway_resource.test.id}"
  http_method = "${aws_api_gateway_method.test.http_method}"

  request_templates = {
    "application/json" = ""
    "application/xml"  = "#set($inputRoot = $input.path('$'))\n{ }"
  }

  request_parameters = {
    "integration.request.header.X-Authorization" = "'static'"
    "integration.request.header.X-Foo"           = "'Bar'"
  }

  type                    = "HTTP"
  uri                     = "https://www.google.de"
  integration_http_method = "GET"
  passthrough_behavior    = "WHEN_NO_MATCH"
  content_handling        = "CONVERT_TO_TEXT"

  connection_type = "VPC_LINK"
  connection_id   = "${aws_api_gateway_vpc_link.test.id}"
}

तर्क संदर्भ

निम्नलिखित तर्क समर्थित हैं:

  • rest_api_id - (आवश्यक) संबंधित REST API की आईडी।
  • resource_id - (आवश्यक) API संसाधन ID।
  • http_method - (आवश्यक) संबंधित संसाधन को कॉल करते समय HTTP विधि ( GET , POST , PUT , DELETE , HEAD , OPTION , ANY )।
  • integration_http_method - (वैकल्पिक) एकीकरण HTTP विधि ( GET , POST , PUT , DELETE , HEAD , OPTION ) यह निर्दिष्ट करते हुए कि एपीआई गेटवे पीछे के छोर से कैसे संपर्क करेगा। यदि AWS , AWS_PROXY , HTTP या HTTP_PROXY type आवश्यक है। सभी तरीके सभी AWS एकीकरण के साथ संगत नहीं हैं। उदाहरण के लिए लैंबडा फ़ंक्शन को केवल POST माध्यम से ही लागू किया जा सकता है
  • type - (आवश्यक) एकीकरण इनपुट का type । मान्य मान HTTP (HTTP बैकेंड के लिए), MOCK (किसी भी वास्तविक बैकेंड को कॉल नहीं कर रहे हैं), AWS (AWS सेवाओं के लिए), AWS_PROXY ( AWS_PROXY प्रॉक्सी एकीकरण के लिए) और HTTP_PROXY (HTTP प्रॉक्सी एकीकरण के लिए) हैं। किसी HTTP या HTTP_PROXY एकीकरण को VPC_LINK के VPC_LINK साथ एक निजी एकीकरण के रूप में जाना जाता है और VPCLink का उपयोग एपीआई गेटवे को VPC के नेटवर्क लोड बैलेंसर से जोड़ने के लिए किया जाता है।
  • connection_type - (वैकल्पिक) एकीकरण इनपुट का connectionType । मान्य मान INTERNET (सार्वजनिक VPC_LINK इंटरनेट के माध्यम से कनेक्शन के लिए डिफ़ॉल्ट), और VPC_LINK (एपीआई गेटवे और VPC_LINK एक नेटवर्क लोड बैलेंसर के बीच निजी कनेक्शन के लिए) हैं।
  • connection_id - (वैकल्पिक) एकीकरण के लिए प्रयुक्त VpcLink की आईडी। यदि आवश्यक हो तो connection_type VPC_LINK
  • uri - (वैकल्पिक) इनपुट का URI (HTTP, AWS)। यदि HTTP या AWS है तो आवश्यक है । HTTP इंटीग्रेशन के लिए, URI को RFC-3986 स्पेसिफिकेशन के अनुसार एक पूरी तरह से गठित, एनकोडेड HTTP (S) URL होना चाहिए। AWS इंटीग्रेशन के लिए, URI फॉर्म arn:aws:apigateway:{region}:{subdomain.service|service}:{path|action}/{service_api} । सही समापन बिंदु निर्धारित करने के लिए region , subdomain और service का उपयोग किया जाता है। उदाहरण के लिए arn:aws:apigateway:eu-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-west-1:012345678901:function:my-func/invocations
  • credentials - (वैकल्पिक) एकीकरण के लिए आवश्यक क्रेडेंशियल्स। AWS एकीकरण के लिए, 2 विकल्प उपलब्ध हैं। अमेज़ॅन एपीआई गेटवे के लिए एक IAM भूमिका निर्दिष्ट करने के लिए, भूमिका के एआरएन का उपयोग करें। यह अनुरोध करने के लिए कि कॉलर की पहचान अनुरोध से गुजरती है, स्ट्रिंग को निर्दिष्ट करें arn:aws:iam::\*:user/\*
  • request_templates - (वैकल्पिक) एकीकरण के अनुरोध टेम्पलेट्स का एक नक्शा।
  • request_parameters - (वैकल्पिक) अनुरोध क्वेरी स्ट्रिंग पैरामीटर और हेडर का एक नक्शा जो बैकएंड रिस्पॉन्डर को पास किया जाना चाहिए। उदाहरण के लिए: request_parameters = { "integration.request.header.X-Some-Other-Header" = "method.request.header.X-Some-Header" }
  • passthrough_behavior - (वैकल्पिक) एकीकरण passthrough व्यवहार ( WHEN_NO_MATCH , WHEN_NO_TEMPLATES , NEVER )। यदि आवश्यक हो तो request_templates का उपयोग किया जाता है।
  • cache_key_parameters - (वैकल्पिक) एकीकरण के लिए कैश प्रमुख मापदंडों की एक सूची।
  • cache_namespace - (वैकल्पिक) एकीकरण का कैश नाम स्थान।
  • request_parameters_in_json - अस्वीकृत , इसके बजाय request_parameters उपयोग करें।
  • content_handling - (वैकल्पिक) निर्दिष्ट करता है कि अनुरोध पेलोड सामग्री प्रकार रूपांतरणों को कैसे संभालना है। समर्थित मान CONVERT_TO_BINARY और CONVERT_TO_TEXT । यदि यह गुण परिभाषित नहीं किया गया है, तो अनुरोध पेलोड को संशोधन के बिना विधि अनुरोध से एकीकरण अनुरोध के माध्यम से पारित किया जाएगा, बशर्ते कि पोज़थ्रूबीहेयरर्स पेलोड पास-थ्रू समर्थन करने के लिए कॉन्फ़िगर किया गया हो।