Package com.pulumi.aws.apigateway
Class Integration
- java.lang.Object
-
- com.pulumi.resources.Resource
-
- com.pulumi.resources.CustomResource
-
- com.pulumi.aws.apigateway.Integration
-
public class Integration extends com.pulumi.resources.CustomResourceProvides an HTTP Method Integration for an API Gateway Integration. ## Example Usage
### Lambda integrationpackage generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.aws.apigateway.RestApi; import com.pulumi.aws.apigateway.RestApiArgs; import com.pulumi.aws.apigateway.Resource; import com.pulumi.aws.apigateway.ResourceArgs; import com.pulumi.aws.apigateway.Method; import com.pulumi.aws.apigateway.MethodArgs; import com.pulumi.aws.apigateway.Integration; import com.pulumi.aws.apigateway.IntegrationArgs; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App { public static void main(String[] args) { Pulumi.run(App::stack); } public static void stack(Context ctx) { var myDemoAPI = new RestApi("myDemoAPI", RestApiArgs.builder() .name("MyDemoAPI") .description("This is my API for demonstration purposes") .build()); var myDemoResource = new Resource("myDemoResource", ResourceArgs.builder() .restApi(myDemoAPI.id()) .parentId(myDemoAPI.rootResourceId()) .pathPart("mydemoresource") .build()); var myDemoMethod = new Method("myDemoMethod", MethodArgs.builder() .restApi(myDemoAPI.id()) .resourceId(myDemoResource.id()) .httpMethod("GET") .authorization("NONE") .build()); var myDemoIntegration = new Integration("myDemoIntegration", IntegrationArgs.builder() .restApi(myDemoAPI.id()) .resourceId(myDemoResource.id()) .httpMethod(myDemoMethod.httpMethod()) .type("MOCK") .cacheKeyParameters("method.request.path.param") .cacheNamespace("foobar") .timeoutMilliseconds(29000) .requestParameters(Map.of("integration.request.header.X-Authorization", "'static'")) .requestTemplates(Map.of("application/xml", """ { \"body\" : $input.json('$') } """)) .build()); } }
### Lambda integration with response streaming All other resources and data sources are the same as in the previous example; only the integration configuration differs. Note that the `timeout` of the `aws.lambda.Function` may need to be adjusted.package generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.aws.AwsFunctions; import com.pulumi.aws.inputs.GetCallerIdentityArgs; import com.pulumi.aws.inputs.GetRegionArgs; import com.pulumi.aws.inputs.GetPartitionArgs; import com.pulumi.aws.apigateway.RestApi; import com.pulumi.aws.apigateway.RestApiArgs; import com.pulumi.aws.apigateway.Resource; import com.pulumi.aws.apigateway.ResourceArgs; import com.pulumi.aws.apigateway.Method; import com.pulumi.aws.apigateway.MethodArgs; import com.pulumi.aws.iam.IamFunctions; import com.pulumi.aws.iam.inputs.GetPolicyDocumentArgs; import com.pulumi.aws.iam.inputs.GetPolicyDocumentStatementArgs; import com.pulumi.aws.iam.inputs.GetPolicyDocumentStatementPrincipalArgs; import com.pulumi.aws.iam.Role; import com.pulumi.aws.iam.RoleArgs; import com.pulumi.aws.lambda.Function; import com.pulumi.aws.lambda.FunctionArgs; import com.pulumi.std.StdFunctions; import com.pulumi.std.inputs.Filebase64sha256Args; import com.pulumi.aws.apigateway.Integration; import com.pulumi.aws.apigateway.IntegrationArgs; import com.pulumi.aws.lambda.Permission; import com.pulumi.aws.lambda.PermissionArgs; import com.pulumi.asset.FileArchive; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App{public static void main(String[] args){Pulumi.run(App::stack);}public static void stack(Context ctx){final var current = AwsFunctions.getCallerIdentity(GetCallerIdentityArgs.builder() .build()); final var currentGetRegion = AwsFunctions.getRegion(GetRegionArgs.builder() .build()); final var currentGetPartition = AwsFunctions.getPartition(GetPartitionArgs.builder() .build()); // API Gateway var api = new RestApi("api", RestApiArgs.builder() .name("myapi") .build()); var resource = new Resource("resource", ResourceArgs.builder() .pathPart("resource") .parentId(api.rootResourceId()) .restApi(api.id()) .build()); var method = new Method("method", MethodArgs.builder() .restApi(api.id()) .resourceId(resource.id()) .httpMethod("GET") .authorization("NONE") .build()); // IAM final var assumeRole = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder() .statements(GetPolicyDocumentStatementArgs.builder() .principals(GetPolicyDocumentStatementPrincipalArgs.builder() .type("Service") .identifiers("lambda.amazonaws.com") .build()) .effect("Allow") .actions("sts:AssumeRole") .build()) .build()); var role = new Role("role", RoleArgs.builder() .name("myrole") .assumeRolePolicy(assumeRole.json()) .build()); var lambda = new Function("lambda", FunctionArgs.builder() .code(new FileArchive("lambda.zip")) .name("mylambda") .role(role.arn()) .handler("lambda.lambda_handler") .runtime("python3.12") .sourceCodeHash(StdFunctions.filebase64sha256(Filebase64sha256Args.builder() .input("lambda.zip") .build()).result()) .build()); var integration = new Integration("integration", IntegrationArgs.builder() .restApi(api.id()) .resourceId(resource.id()) .httpMethod(method.httpMethod()) .integrationHttpMethod("POST") .type("AWS_PROXY") .uri(lambda.invokeArn()) .build()); // Lambda var apigwLambda = new Permission("apigwLambda", PermissionArgs.builder() .statementId("AllowExecutionFromAPIGateway") .action("lambda:InvokeFunction") .function(lambda.name()) .principal("apigateway.amazonaws.com") .sourceArn(Output.tuple(api.id(), method.httpMethod(), resource.path()).applyValue(values ->{var id = values.t1; var httpMethod = values.t2; var path = values.t3; return String.format("arn:%s:execute-api:%s:%s:%s/*/%s%s", currentGetPartition.partition(),currentGetRegion.region(),current.accountId(),id,httpMethod,path);})) .build());}}
### VPC Linkpackage generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.aws.apigateway.Integration; import com.pulumi.aws.apigateway.IntegrationArgs; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App { public static void main(String[] args) { Pulumi.run(App::stack); } public static void stack(Context ctx) { var integration = new Integration("integration", IntegrationArgs.builder() .restApi(api.id()) .resourceId(resource.id()) .httpMethod(method.httpMethod()) .integrationHttpMethod("POST") .type("AWS_PROXY") .uri(lambda.responseStreamingInvokeArn()) .responseTransferMode("STREAM") .timeoutMilliseconds(900000) .build()); } }
### VPC Link V2 with Application Load Balancerpackage generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.aws.lb.LoadBalancer; import com.pulumi.aws.lb.LoadBalancerArgs; import com.pulumi.aws.apigateway.VpcLink; import com.pulumi.aws.apigateway.VpcLinkArgs; import com.pulumi.aws.apigateway.RestApi; import com.pulumi.aws.apigateway.RestApiArgs; import com.pulumi.aws.apigateway.Resource; import com.pulumi.aws.apigateway.ResourceArgs; import com.pulumi.aws.apigateway.Method; import com.pulumi.aws.apigateway.MethodArgs; import com.pulumi.aws.apigateway.Integration; import com.pulumi.aws.apigateway.IntegrationArgs; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App { public static void main(String[] args) { Pulumi.run(App::stack); } public static void stack(Context ctx) { final var config = ctx.config(); final var name = config.require("name"); final var subnetId = config.require("subnetId"); var test = new LoadBalancer("test", LoadBalancerArgs.builder() .name(name) .internal(true) .loadBalancerType("network") .subnets(subnetId) .build()); var testVpcLink = new VpcLink("testVpcLink", VpcLinkArgs.builder() .name(name) .targetArn(test.arn()) .build()); var testRestApi = new RestApi("testRestApi", RestApiArgs.builder() .name(name) .build()); var testResource = new Resource("testResource", ResourceArgs.builder() .restApi(testRestApi.id()) .parentId(testRestApi.rootResourceId()) .pathPart("test") .build()); var testMethod = new Method("testMethod", MethodArgs.builder() .restApi(testRestApi.id()) .resourceId(testResource.id()) .httpMethod("GET") .authorization("NONE") .requestModels(Map.of("application/json", "Error")) .build()); var testIntegration = new Integration("testIntegration", IntegrationArgs.builder() .restApi(testRestApi.id()) .resourceId(testResource.id()) .httpMethod(testMethod.httpMethod()) .requestTemplates(Map.ofEntries( Map.entry("application/json", ""), Map.entry("application/xml", """ #set($inputRoot = $input.path('$')) { } """) )) .requestParameters(Map.ofEntries( Map.entry("integration.request.header.X-Authorization", "'static'"), Map.entry("integration.request.header.X-Foo", "'Bar'") )) .type("HTTP") .uri("https://www.google.de") .integrationHttpMethod("GET") .passthroughBehavior("WHEN_NO_MATCH") .contentHandling("CONVERT_TO_TEXT") .connectionType("VPC_LINK") .connectionId(testVpcLink.id()) .build()); } }
## Import ### Identity Schema #### Required * `restApiId` (String) - ID of the associated REST API. * `resourceId` (String) - API resource ID. * `httpMethod` (String) - HTTP Method. #### Optional * `accountId` (String) - AWS Account where this resource is managed. * `region` (String) - Region where this resource is managed. Using `pulumi import`, import `aws.apigateway.Integration` using `REST-API-ID/RESOURCE-ID/HTTP-METHOD`. For example: ```sh $ pulumi import aws:apigateway/integration:Integration example 12345abcde/67890fghij/GET ```package generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.aws.apigatewayv2.VpcLink; import com.pulumi.aws.apigatewayv2.VpcLinkArgs; import com.pulumi.aws.lb.LoadBalancer; import com.pulumi.aws.lb.LoadBalancerArgs; import com.pulumi.aws.lb.Listener; import com.pulumi.aws.lb.ListenerArgs; import com.pulumi.aws.lb.inputs.ListenerDefaultActionArgs; import com.pulumi.aws.lb.inputs.ListenerDefaultActionFixedResponseArgs; import com.pulumi.aws.apigateway.RestApi; import com.pulumi.aws.apigateway.RestApiArgs; import com.pulumi.aws.apigateway.Resource; import com.pulumi.aws.apigateway.ResourceArgs; import com.pulumi.aws.apigateway.Method; import com.pulumi.aws.apigateway.MethodArgs; import com.pulumi.aws.apigateway.Integration; import com.pulumi.aws.apigateway.IntegrationArgs; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App { public static void main(String[] args) { Pulumi.run(App::stack); } public static void stack(Context ctx) { var example = new VpcLink("example", VpcLinkArgs.builder() .name("example") .securityGroupIds(exampleAwsSecurityGroup.id()) .subnetIds(exampleAwsSubnet.stream().map(element -> element.id()).collect(toList())) .build()); var exampleLoadBalancer = new LoadBalancer("exampleLoadBalancer", LoadBalancerArgs.builder() .name("example-alb") .internal(true) .loadBalancerType("application") .securityGroups(exampleAwsSecurityGroup.id()) .subnets(exampleAwsSubnet.stream().map(element -> element.id()).collect(toList())) .build()); var exampleListener = new Listener("exampleListener", ListenerArgs.builder() .defaultActions(ListenerDefaultActionArgs.builder() .fixedResponse(ListenerDefaultActionFixedResponseArgs.builder() .contentType("text/plain") .messageBody("OK") .statusCode("200") .build()) .type("fixed-response") .build()) .loadBalancerArn(exampleLoadBalancer.arn()) .port(80) .protocol("HTTP") .build()); var exampleRestApi = new RestApi("exampleRestApi", RestApiArgs.builder() .name("example") .build()); var exampleResource = new Resource("exampleResource", ResourceArgs.builder() .restApi(exampleRestApi.id()) .parentId(exampleRestApi.rootResourceId()) .pathPart("example") .build()); var exampleMethod = new Method("exampleMethod", MethodArgs.builder() .restApi(exampleRestApi.id()) .resourceId(exampleResource.id()) .httpMethod("GET") .authorization("NONE") .build()); var exampleIntegration = new Integration("exampleIntegration", IntegrationArgs.builder() .restApi(exampleRestApi.id()) .resourceId(exampleResource.id()) .httpMethod(exampleMethod.httpMethod()) .integrationHttpMethod("GET") .type("HTTP_PROXY") .connectionType("VPC_LINK") .connectionId(example.id()) .integrationTarget(exampleLoadBalancer.arn()) .uri("http://example.com") .build()); } }
-
-
Constructor Summary
Constructors Constructor Description Integration(java.lang.String name)Integration(java.lang.String name, IntegrationArgs args)Integration(java.lang.String name, IntegrationArgs args, com.pulumi.resources.CustomResourceOptions options)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description com.pulumi.core.Output<java.util.Optional<java.util.List<java.lang.String>>>cacheKeyParameters()com.pulumi.core.Output<java.lang.String>cacheNamespace()com.pulumi.core.Output<java.util.Optional<java.lang.String>>connectionId()com.pulumi.core.Output<java.util.Optional<java.lang.String>>connectionType()com.pulumi.core.Output<java.util.Optional<java.lang.String>>contentHandling()com.pulumi.core.Output<java.util.Optional<java.lang.String>>credentials()static Integrationget(java.lang.String name, com.pulumi.core.Output<java.lang.String> id, IntegrationState state, com.pulumi.resources.CustomResourceOptions options)Get an existing Host resource's state with the given name, ID, and optional extra properties used to qualify the lookup.com.pulumi.core.Output<java.lang.String>httpMethod()com.pulumi.core.Output<java.util.Optional<java.lang.String>>integrationHttpMethod()com.pulumi.core.Output<java.util.Optional<java.lang.String>>integrationTarget()com.pulumi.core.Output<java.lang.String>passthroughBehavior()com.pulumi.core.Output<java.lang.String>region()com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,java.lang.String>>>requestParameters()com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,java.lang.String>>>requestTemplates()com.pulumi.core.Output<java.lang.String>resourceId()com.pulumi.core.Output<java.lang.String>responseTransferMode()com.pulumi.core.Output<java.lang.String>restApi()com.pulumi.core.Output<java.util.Optional<java.lang.Integer>>timeoutMilliseconds()com.pulumi.core.Output<java.util.Optional<IntegrationTlsConfig>>tlsConfig()com.pulumi.core.Output<java.lang.String>type()com.pulumi.core.Output<java.util.Optional<java.lang.String>>uri()
-
-
-
Constructor Detail
-
Integration
public Integration(java.lang.String name)
- Parameters:
name- The _unique_ name of the resulting resource.
-
Integration
public Integration(java.lang.String name, IntegrationArgs args)- Parameters:
name- The _unique_ name of the resulting resource.args- The arguments to use to populate this resource's properties.
-
Integration
public Integration(java.lang.String name, IntegrationArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options)- Parameters:
name- The _unique_ name of the resulting resource.args- The arguments to use to populate this resource's properties.options- A bag of options that control this resource's behavior.
-
-
Method Detail
-
cacheKeyParameters
public com.pulumi.core.Output<java.util.Optional<java.util.List<java.lang.String>>> cacheKeyParameters()
- Returns:
- List of cache key parameters for the integration.
-
cacheNamespace
public com.pulumi.core.Output<java.lang.String> cacheNamespace()
- Returns:
- Integration's cache namespace.
-
connectionId
public com.pulumi.core.Output<java.util.Optional<java.lang.String>> connectionId()
- Returns:
- ID of the VpcLink used for the integration. **Required** if `connectionType` is `VPC_LINK`
-
connectionType
public com.pulumi.core.Output<java.util.Optional<java.lang.String>> connectionType()
- Returns:
- Integration input's [connectionType](https://docs.aws.amazon.com/apigateway/api-reference/resource/integration/#connectionType). Valid values are `INTERNET` (default for connections through the public routable internet), and `VPC_LINK` (for private connections between API Gateway and a network load balancer in a VPC).
-
contentHandling
public com.pulumi.core.Output<java.util.Optional<java.lang.String>> contentHandling()
- Returns:
- How to handle request payload content type conversions. Supported values are `CONVERT_TO_BINARY` and `CONVERT_TO_TEXT`. If this property is not defined, the request payload will be passed through from the method request to integration request without modification, provided that the passthroughBehaviors is configured to support payload pass-through.
-
credentials
public com.pulumi.core.Output<java.util.Optional<java.lang.String>> credentials()
- Returns:
- Credentials required for the integration. For `AWS` integrations, 2 options are available. To specify an IAM Role for Amazon API Gateway to assume, use the role's ARN. To require that the caller's identity be passed through from the request, specify the string `arn:aws:iam::\*:user/\*`.
-
httpMethod
public com.pulumi.core.Output<java.lang.String> httpMethod()
- Returns:
- HTTP method (`GET`, `POST`, `PUT`, `DELETE`, `HEAD`, `OPTION`, `ANY`) when calling the associated resource.
-
integrationHttpMethod
public com.pulumi.core.Output<java.util.Optional<java.lang.String>> integrationHttpMethod()
- Returns:
- Integration HTTP method (`GET`, `POST`, `PUT`, `DELETE`, `HEAD`, `OPTIONs`, `ANY`, `PATCH`) specifying how API Gateway will interact with the back end. **Required** if `type` is `AWS`, `AWS_PROXY`, `HTTP` or `HTTP_PROXY`. Not all methods are compatible with all `AWS` integrations. e.g., Lambda function [can only be invoked](https://github.com/awslabs/aws-apigateway-importer/issues/9#issuecomment-129651005) via `POST`.
-
integrationTarget
public com.pulumi.core.Output<java.util.Optional<java.lang.String>> integrationTarget()
- Returns:
- ALB or NLB ARN to send the request to. Used for private integrations with VPC Link V2. When using VPC Link V2, this parameter specifies the load balancer ARN, while `uri` is used to set the Host header.
-
passthroughBehavior
public com.pulumi.core.Output<java.lang.String> passthroughBehavior()
- Returns:
- Integration passthrough behavior (`WHEN_NO_MATCH`, `WHEN_NO_TEMPLATES`, `NEVER`). **Required** if `requestTemplates` is used.
-
region
public com.pulumi.core.Output<java.lang.String> region()
- Returns:
- Region where this resource will be [managed](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints). Defaults to the Region set in the provider configuration.
-
requestParameters
public com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,java.lang.String>>> requestParameters()
- Returns:
- Map of request query string parameters and headers that should be passed to the backend responder. For example: `requestParameters = { "integration.request.header.X-Some-Other-Header" = "method.request.header.X-Some-Header" }`
-
requestTemplates
public com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,java.lang.String>>> requestTemplates()
- Returns:
- Map of the integration's request templates.
-
resourceId
public com.pulumi.core.Output<java.lang.String> resourceId()
- Returns:
- API resource ID.
-
responseTransferMode
public com.pulumi.core.Output<java.lang.String> responseTransferMode()
- Returns:
- Response transfer mode of the integration. Valid values are `BUFFERED` and `STREAM`. Default to `BUFFERED`. Once set, setting the value to `BUFFERED` requires explicitly specifying `BUFFERED`, rather than removing this argument.
-
restApi
public com.pulumi.core.Output<java.lang.String> restApi()
- Returns:
- ID of the associated REST API.
-
timeoutMilliseconds
public com.pulumi.core.Output<java.util.Optional<java.lang.Integer>> timeoutMilliseconds()
- Returns:
- Custom timeout in milliseconds. The minimum value is 50. The maximum value is 300,000 when `responseTransferMode` is `BUFFERED`, and 900,000 when `responseTransferMode` is `STREAM`. The default value is 29,000 milliseconds. You need to raise a [Service Quota Ticket](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) to increase time beyond 29,000 milliseconds for `BUFFERED` mode.
-
tlsConfig
public com.pulumi.core.Output<java.util.Optional<IntegrationTlsConfig>> tlsConfig()
- Returns:
- TLS configuration. See below.
-
type
public com.pulumi.core.Output<java.lang.String> type()
- Returns:
- Integration input's [type](https://docs.aws.amazon.com/apigateway/api-reference/resource/integration/). Valid values are `HTTP` (for HTTP backends), `MOCK` (not calling any real backend), `AWS` (for AWS services), `AWS_PROXY` (for Lambda proxy integration) and `HTTP_PROXY` (for HTTP proxy integration). An `HTTP` or `HTTP_PROXY` integration with a `connectionType` of `VPC_LINK` is referred to as a private integration and uses a VpcLink to connect API Gateway to a network load balancer of a VPC.
-
uri
public com.pulumi.core.Output<java.util.Optional<java.lang.String>> uri()
- Returns:
- Input's URI. **Required** if `type` is `AWS`, `AWS_PROXY`, `HTTP` or `HTTP_PROXY`. For HTTP integrations, the URI must be a fully formed, encoded HTTP(S) URL according to the RFC-3986 specification . For AWS integrations, the URI should be of the form `arn:aws:apigateway:{region}:{subdomain.service|service}:{path|action}/{service_api}`. `region`, `subdomain` and `service` are used to determine the right endpoint. e.g., `arn:aws:apigateway:eu-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-west-1:123456789012:function:my-func/invocations`. For private integrations, the URI parameter is not used for routing requests to your endpoint, but is used for setting the Host header and for certificate validation.
-
get
public static Integration get(java.lang.String name, com.pulumi.core.Output<java.lang.String> id, @Nullable IntegrationState state, @Nullable com.pulumi.resources.CustomResourceOptions options)
Get an existing Host resource's state with the given name, ID, and optional extra properties used to qualify the lookup.- Parameters:
name- The _unique_ name of the resulting resource.id- The _unique_ provider ID of the resource to lookup.state-options- Optional settings to control the behavior of the CustomResource.
-
-