diff --git a/integration_tests/cdk/app.py b/integration_tests/cdk/app.py index f86c201..e647d90 100644 --- a/integration_tests/cdk/app.py +++ b/integration_tests/cdk/app.py @@ -1,17 +1,152 @@ -from aws_cdk import App +from config import build_app_config, AppConfig +from aws_cdk import ( + Stack, + aws_ec2, + aws_rds, + App +) +from constructs import Construct +from eoapi_cdk import ( + PgStacApiLambda, + PgStacDatabase, + TitilerPgstacApiLambda, + TiPgApiLambda, +) +import datetime + +# to get (almost) unique stack ids +timestamp = datetime.datetime.utcnow().strftime("%Y%m%d%H%M%S") + + +class VpcStack(Stack): + def __init__(self, scope: Construct, app_config: AppConfig, id: str, **kwargs) -> None: + super().__init__( + scope, + id=id, + tags=app_config.tags, + **kwargs + ) + + self.vpc = aws_ec2.Vpc( + self, + "vpc", + subnet_configuration=[ + aws_ec2.SubnetConfiguration( + name="ingress", subnet_type=aws_ec2.SubnetType.PUBLIC, cidr_mask=24 + ), + ] + ) + + self.vpc.add_interface_endpoint( + "SecretsManagerEndpoint", + service=aws_ec2.InterfaceVpcEndpointAwsService.SECRETS_MANAGER, + ) + + self.vpc.add_interface_endpoint( + "CloudWatchEndpoint", + service=aws_ec2.InterfaceVpcEndpointAwsService.CLOUDWATCH_LOGS, + ) + + self.vpc.add_gateway_endpoint( + "S3", service=aws_ec2.GatewayVpcEndpointAwsService.S3 + ) + + self.export_value( + self.vpc.select_subnets(subnet_type=aws_ec2.SubnetType.PUBLIC) + .subnets[0] + .subnet_id + ) + self.export_value( + self.vpc.select_subnets(subnet_type=aws_ec2.SubnetType.PUBLIC) + .subnets[1] + .subnet_id + ) + + +class pgStacInfraStack(Stack): + def __init__( + self, + scope: Construct, + vpc: aws_ec2.Vpc, + id: str, + app_config: AppConfig, + **kwargs, + ) -> None: + super().__init__( + scope, + id=id, + tags=app_config.tags, + **kwargs, + ) + + pgstac_db = PgStacDatabase( + self, + "pgstac-db", + vpc=vpc, + engine=aws_rds.DatabaseInstanceEngine.postgres( + version=aws_rds.PostgresEngineVersion.VER_14 + ), + vpc_subnets=aws_ec2.SubnetSelection( + subnet_type=aws_ec2.SubnetType.PUBLIC, + ), + allocated_storage=app_config.db_allocated_storage, + instance_type=aws_ec2.InstanceType(app_config.db_instance_type) + ) + + pgstac_db.db.connections.allow_default_port_from_any_ipv4() + + PgStacApiLambda( + self, + "pgstac-api", + api_env={ + "NAME": app_config.build_service_name("STAC API"), + "description": f"{app_config.stage} STAC API", + }, + db=pgstac_db.db, + db_secret=pgstac_db.pgstac_secret + ) + + TitilerPgstacApiLambda( + self, + "titiler-pgstac-api", + api_env={ + "NAME": app_config.build_service_name("titiler pgSTAC API"), + "description": f"{app_config.stage} titiler pgstac API", + }, + db=pgstac_db.db, + db_secret=pgstac_db.pgstac_secret, + buckets=[], + lambda_function_options={ + "allow_public_subnet": True, + }, + ) + + TiPgApiLambda( + self, + "tipg-api", + db=pgstac_db.db, + db_secret=pgstac_db.pgstac_secret, + api_env={ + "NAME": app_config.build_service_name("tipg API"), + "description": f"{app_config.stage} tipg API", + }, + lambda_function_options={ + "allow_public_subnet": True, + }, + ) -from config import build_app_config -from eoapi_template import pgStacInfra, vpc app = App() app_config = build_app_config() -vpc_stack = vpc.VpcStack(scope=app, app_config=app_config) +vpc_stack = VpcStack(scope=app, app_config=app_config, id=f"{app_config.build_service_name('vpc')}-{timestamp}") -pgstac_infra_stack = pgStacInfra.pgStacInfraStack( +pgstac_infra_stack = pgStacInfraStack( scope=app, vpc=vpc_stack.vpc, app_config=app_config, + id=f"{app_config.build_service_name('pgstac')}-{timestamp}" ) + app.synth() diff --git a/integration_tests/cdk/eoapi_template/__init__.py b/integration_tests/cdk/eoapi_template/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/integration_tests/cdk/eoapi_template/pgStacInfra.py b/integration_tests/cdk/eoapi_template/pgStacInfra.py deleted file mode 100644 index cbb5491..0000000 --- a/integration_tests/cdk/eoapi_template/pgStacInfra.py +++ /dev/null @@ -1,71 +0,0 @@ -from aws_cdk import ( - Stack, - aws_ec2, - aws_rds -) -from constructs import Construct -from eoapi_cdk import ( - PgStacApiLambda, - PgStacDatabase, - TitilerPgstacApiLambda, -) - -from config import AppConfig - - -class pgStacInfraStack(Stack): - def __init__( - self, - scope: Construct, - vpc: aws_ec2.Vpc, - app_config: AppConfig, - **kwargs, - ) -> None: - super().__init__( - scope, - id=app_config.build_service_name("pgSTAC-infra"), - tags=app_config.tags, - **kwargs, - ) - - pgstac_db = PgStacDatabase( - self, - "pgstac-db", - vpc=vpc, - engine=aws_rds.DatabaseInstanceEngine.postgres( - version=aws_rds.PostgresEngineVersion.VER_14 - ), - vpc_subnets=aws_ec2.SubnetSelection( - subnet_type=aws_ec2.SubnetType.PUBLIC, - ), - allocated_storage=app_config.db_allocated_storage, - instance_type=aws_ec2.InstanceType(app_config.db_instance_type) - ) - - pgstac_db.db.connections.allow_default_port_from_any_ipv4() - - PgStacApiLambda( - self, - "pgstac-api", - api_env={ - "NAME": app_config.build_service_name("STAC API"), - "description": f"{app_config.stage} STAC API", - }, - db=pgstac_db.db, - db_secret=pgstac_db.pgstac_secret - ) - - TitilerPgstacApiLambda( - self, - "titiler-pgstac-api", - api_env={ - "NAME": app_config.build_service_name("titiler pgSTAC API"), - "description": f"{app_config.stage} titiler pgstac API", - }, - db=pgstac_db.db, - db_secret=pgstac_db.pgstac_secret, - buckets=[], - lambda_function_options={ - "allow_public_subnet": True, - }, - ) diff --git a/integration_tests/cdk/eoapi_template/vpc.py b/integration_tests/cdk/eoapi_template/vpc.py deleted file mode 100644 index d17967f..0000000 --- a/integration_tests/cdk/eoapi_template/vpc.py +++ /dev/null @@ -1,49 +0,0 @@ -from aws_cdk import Stack, aws_ec2 -from constructs import Construct - -from config import AppConfig - - -class VpcStack(Stack): - def __init__(self, scope: Construct, app_config: AppConfig, **kwargs) -> None: - super().__init__( - scope, - id=app_config.build_service_name("pgSTAC-vpc"), - tags=app_config.tags, - **kwargs - ) - - self.vpc = aws_ec2.Vpc( - self, - "vpc", - subnet_configuration=[ - aws_ec2.SubnetConfiguration( - name="ingress", subnet_type=aws_ec2.SubnetType.PUBLIC, cidr_mask=24 - ), - ] - ) - - self.vpc.add_interface_endpoint( - "SecretsManagerEndpoint", - service=aws_ec2.InterfaceVpcEndpointAwsService.SECRETS_MANAGER, - ) - - self.vpc.add_interface_endpoint( - "CloudWatchEndpoint", - service=aws_ec2.InterfaceVpcEndpointAwsService.CLOUDWATCH_LOGS, - ) - - self.vpc.add_gateway_endpoint( - "S3", service=aws_ec2.GatewayVpcEndpointAwsService.S3 - ) - - self.export_value( - self.vpc.select_subnets(subnet_type=aws_ec2.SubnetType.PUBLIC) - .subnets[0] - .subnet_id - ) - self.export_value( - self.vpc.select_subnets(subnet_type=aws_ec2.SubnetType.PUBLIC) - .subnets[1] - .subnet_id - )