The CDK Construct Library for AWS::APIGatewayv2
Project description
AWS::APIGatewayv2 Construct Library
---All classes with the
Cfn
prefix in this module (CFN Resources) are always stable and safe to use.
The APIs of higher level constructs in this module are experimental and under active development. They are subject to non-backward compatible changes or removal in any future version. These are not subject to the Semantic Versioning model and breaking changes will be announced in the release notes. This means that while you may use them, you may need to update your source code when upgrading to a newer version of this package.
Table of Contents
Introduction
Amazon API Gateway is an AWS service for creating, publishing, maintaining, monitoring, and securing REST, HTTP, and WebSocket APIs at any scale. API developers can create APIs that access AWS or other web services, as well as data stored in the AWS Cloud. As an API Gateway API developer, you can create APIs for use in your own client applications. Read the Amazon API Gateway Developer Guide.
This module supports features under API Gateway v2
that lets users set up Websocket and HTTP APIs.
REST APIs can be created using the @aws-cdk/aws-apigateway
module.
HTTP API
HTTP APIs enable creation of RESTful APIs that integrate with AWS Lambda functions, known as Lambda proxy integration, or to any routable HTTP endpoint, known as HTTP proxy integration.
Defining HTTP APIs
HTTP APIs have two fundamental concepts - Routes and Integrations.
Routes direct incoming API requests to backend resources. Routes consist of two parts: an HTTP method and a resource
path, such as, GET /books
. Learn more at Working with
routes. Use the ANY
method
to match any methods for a route that are not explicitly defined.
Integrations define how the HTTP API responds when a client reaches a specific Route. HTTP APIs support two types of integrations - Lambda proxy integration and HTTP proxy integration. Learn more at Configuring integrations.
The code snippet below configures a route GET /books
with an HTTP proxy integration and uses the ANY
method to
proxy all other HTTP method calls to /books
to a lambda proxy.
# Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
get_books_integration = HttpProxyIntegration(
url="https://get-books-proxy.myproxy.internal"
)
books_default_fn = lambda.Function(stack, "BooksDefaultFn", ...)
books_default_integration = LambdaProxyIntegration(
handler=books_default_fn
)
http_api = HttpApi(stack, "HttpApi")
http_api.add_routes(
path="/books",
methods=[HttpMethod.GET],
integration=get_books_integration
)
http_api.add_routes(
path="/books",
methods=[HttpMethod.ANY],
integration=books_default_integration
)
The defaultIntegration
option while defining HTTP APIs lets you create a default catch-all integration that is
matched when a client reaches a route that is not explicitly defined.
# Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
HttpApi(stack, "HttpProxyApi",
default_integration=HttpProxyIntegration(
url="http://example.com"
)
)
Cross Origin Resource Sharing (CORS)
Cross-origin resource sharing (CORS) is a browser security feature that restricts HTTP requests that are initiated from scripts running in the browser. Enabling CORS will allow requests to your API from a web application hosted in a domain different from your API domain.
When configured CORS for an HTTP API, API Gateway automatically sends a response to preflight OPTIONS
requests, even
if there isn't an OPTIONS
route configured. Note that, when this option is used, API Gateway will ignore CORS headers
returned from your backend integration. Learn more about Configuring CORS for an HTTP
API.
The corsPreflight
option lets you specify a CORS configuration for an API.
# Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
HttpApi(stack, "HttpProxyApi",
cors_preflight={
"allow_credentials": True,
"allow_headers": ["Authorization"],
"allow_methods": [HttpMethod.GET, HttpMethod.HEAD, HttpMethod.OPTIONS, HttpMethod.POST],
"allow_origins": ["*"],
"max_age": Duration.days(10)
}
)
Publishing HTTP APIs
A Stage is a logical reference to a lifecycle state of your API (for example, dev
, prod
, beta
, or v2
). API
stages are identified by their stage name. Each stage is a named reference to a deployment of the API made available for
client applications to call.
Use HttpStage
to create a Stage resource for HTTP APIs. The following code sets up a Stage, whose URL is available at
https://{api_id}.execute-api.{region}.amazonaws.com/beta
.
# Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
HttpStage(stack, "Stage",
http_api=api,
stage_name="beta"
)
If you omit the stageName
will create a $default
stage. A $default
stage is one that is served from the base of
the API's URL - https://{api_id}.execute-api.{region}.amazonaws.com/
.
Note that, HttpApi
will always creates a $default
stage, unless the createDefaultStage
property is unset.
Custom Domain
Custom domain names are simpler and more intuitive URLs that you can provide to your API users. Custom domain name are associated to API stages.
The code snippet below creates a custom domain and configures a default domain mapping for your API that maps the
custom domain to the $default
stage of the API.
# Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
cert_arn = "arn:aws:acm:us-east-1:111111111111:certificate"
domain_name = "example.com"
dn = DomainName(stack, "DN",
domain_name=domain_name,
certificate=acm.Certificate.from_certificate_arn(stack, "cert", cert_arn)
)
api = HttpApi(stack, "HttpProxyProdApi",
default_integration=LambdaProxyIntegration(handler=handler),
# https://${dn.domainName} goes to prodApi $default stage
default_domain_mapping={
"domain_name": dn,
"mapping_key": "/"
}
)
To associate a specifc Stage
to a custom domain mapping -
# Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
api.add_stage("beta",
stage_name="beta",
auto_deploy=True,
# https://${dn.domainName}/beta goes to the beta stage
domain_mapping={
"domain_name": dn,
"mapping_key": "beta"
}
)
The same domain name can be associated with stages across different HttpApi
as so -
# Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
api_demo = HttpApi(stack, "DemoApi",
default_integration=LambdaProxyIntegration(handler=handler),
# https://${dn.domainName}/demo goes to apiDemo $default stage
default_domain_mapping={
"domain_name": dn,
"mapping_key": "demo"
}
)
The mappingKey
determines the path
of the URL with the custom domain. Each custom domain is only allowed
to have one API mapping with the root(/) mappingKey
. In the sample above, the custom domain is associated
with 3 API mapping resources across different APIs and Stages.
API | Stage | URL |
---|---|---|
api | $default | https://${domainName} |
api | beta | https://${domainName}/beta |
apiDemo | $default | https://${domainName}/demo |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for aws-cdk.aws-apigatewayv2-1.52.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 702075b4ee71ecc23feb91f2f74f70b67b5d8f56320c93dfc08714528a3a651f |
|
MD5 | 23b4de229023d622f6acbfa732f814cb |
|
BLAKE2b-256 | de898257bd0b7537479c6490ed418bc3e44d5f4e55ddbf6ced2676c21fab9abf |
Hashes for aws_cdk.aws_apigatewayv2-1.52.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a6004681be7086848dcaffc54e43c05825132eab2749892c5a150c7164671cdd |
|
MD5 | a5171939666944096f5b59fb812f4b4f |
|
BLAKE2b-256 | 2919f23cb08deab43c6a1a80ff0fc1608917ba81562d8a9c8fffaa223bb82fe1 |