source/packages/services/assetlibrary/infrastructure/cfn-assetLibrary-parent.yaml (140 lines of code) (raw):
---
#-----------------------------------------------------------------------------------------------------------------------
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
# with the License. A copy of the License is located at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
# OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
# and limitations under the License.
#-----------------------------------------------------------------------------------------------------------------------
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: CDF Asset Library Service
Parameters:
PrivateApiGatewayVPCEndpoint:
Description: VPC endpoint required for private api gateway support
Type: String
ApplicationConfigurationOverride:
Description: This allows you to override any application configuration. It should consists of a text-based content with a structure and syntax comprising key–value pairs for properties. Any configurations contained in this will override the configurations found and merged from the default .env files.
Type: String
Environment:
Description: Name of environment. Used to name the created resources.
Type: String
MinLength: 1
VpcId:
Description: ID of VPC to deploy the Asset Library into
Type: String
CDFSecurityGroupId:
Description: ID of an existing CDF security group to deploy the Asset Library into (required if running full mode, or private API)
Type: String
PrivateSubNetIds:
Description: Comma delimited list of private subnetIds to deploy the Asset Library into
Type: String
Mode:
Description: Run in 'lite' mode which includes device registry only, or 'full' mode which augments the device registry with an additional datastore
Type: String
Default: full
AllowedValues:
- full
- lite
MinLength: 1
TemplateSnippetS3UriBase:
Description: |
S3 uri of directory where template snippets are stored for the account.
Type: String
MinLength: 1
ApiGatewayDefinitionTemplate:
Description: |
Name of the API Gateway Cloudformation definition along with the authorization method to use. Use one of the provided
templates to implement no auth, private, api key, lambda request, lamdba token, or Cognito auth, or modify one to meet your own
authentization requirements. The template must exist within the provided TemplateSnippetS3UriBase location.
Type: String
MinLength: 1
AuthType:
Description: Authorization type to apply to the API gateway endpoints
Type: String
Default: None
AllowedValues:
- None
- Private
- Cognito
- LambdaRequest
- LambdaToken
- ApiKey
- IAM
MinLength: 1
CognitoUserPoolArn:
Description: Cognito user pool arn. Only required if AuthType is set to 'Cognito'.
Type: String
Default: 'N/A'
AuthorizerFunctionArn:
Description: Lambda authorizer function arn. Only required if AuthType is set to 'LambdaRequest' or 'LambdaToken'.
Type: String
Default: 'N/A'
# Neptune Parameters
NeptuneDbInstanceType:
Description: >
Neptune DB instance type. The list of available instance types for your region can be found here:
https://aws.amazon.com/neptune/pricing/
Type: String
AllowedPattern: "^db\\.[tr]\\d+[a-z0-9]*\\.[a-z0-9]*$"
ConstraintDescription: Must be a valid Neptune instance type.
CustomResourceVPCLambdaArn:
Description: Custom resource lambda arn with access to vpc
Type: String
MinLength: 1
EnableApiGatewayAccessLogs:
Description: Enales API gateway Access Logging, defaults to false if not specified.
Type: String
Default: false
AllowedValues:
- true
- false
MinLength: 1
NeptuneSnapshotIdentifier:
Type: String
Description: Specifies the identifier for an existing DB cluster snapshot to restore. Refer to Neptune documentation on its use.
Conditions:
DeployFullMode: !Equals [!Ref Mode, 'full']
UsingVPCForAuth: !Equals [!Ref AuthType, 'Private']
Resources:
Neptune:
Condition: DeployFullMode
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: ./cfn-neptune.yaml
Parameters:
Environment: !Ref Environment
DbInstanceType: !Ref NeptuneDbInstanceType
PrivateSubNetIds: !Ref PrivateSubNetIds
CDFSecurityGroupId: !Ref CDFSecurityGroupId
VpcId: !Ref VpcId
CustomResourceVPCLambdaArn: !Ref CustomResourceVPCLambdaArn
SnapshotIdentifier: !Ref NeptuneSnapshotIdentifier
TimeoutInMinutes: 60
AssetLibrary:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: ./cfn-assetLibrary.yaml
Parameters:
ApplicationConfigurationOverride: !Ref ApplicationConfigurationOverride
PrivateApiGatewayVPCEndpoint:
!If [UsingVPCForAuth, !Ref PrivateApiGatewayVPCEndpoint, 'N/A']
Environment: !Ref Environment
VpcId: !Ref VpcId
CDFSecurityGroupId: !Ref CDFSecurityGroupId
PrivateSubNetIds: !Ref PrivateSubNetIds
Mode: !Ref Mode
TemplateSnippetS3UriBase: !Ref TemplateSnippetS3UriBase
ApiGatewayDefinitionTemplate: !Ref ApiGatewayDefinitionTemplate
CognitoUserPoolArn: !Ref CognitoUserPoolArn
AuthorizerFunctionArn: !Ref AuthorizerFunctionArn
AuthType: !Ref AuthType
NeptuneURL: !If [DeployFullMode, !GetAtt Neptune.Outputs.GremlinEndpoint, '']
CustomResourceVPCLambdaArn: !Ref CustomResourceVPCLambdaArn
EnableApiGatewayAccessLogs: !Ref EnableApiGatewayAccessLogs
TimeoutInMinutes: 60
Outputs:
RestApiFunctionName:
Description: Asset library lambda function name
Value: !GetAtt AssetLibrary.Outputs.RestApiFunctionName
ApiGatewayUrl:
Description: URL for application
Value: !GetAtt AssetLibrary.Outputs.ApiGatewayUrl
ApiGatewayHost:
Description: Host for application
Value: !GetAtt AssetLibrary.Outputs.ApiGatewayHost
NeptuneURL:
Description: Neptune Url
Value: !GetAtt Neptune.Outputs.GremlinEndpoint