Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
1 contributor

Users who have contributed to this file

157 lines (155 sloc) 4.45 KB
service: serverless-elasticache-vpc-nat
provider:
name: aws
runtime: nodejs6.10
region: us-east-2
stage: development
profile: default
environment:
REDIS_ENDPOINT:
"Fn::Join": [":", ["Fn::GetAtt": [ServerlessElasticacheCluster, RedisEndpoint.Address], "Fn::GetAtt": [ServerlessElasticacheCluster, RedisEndpoint.Port]]]
functions:
hello:
handler: handler.hello
vpc:
securityGroupIds:
- "Fn::GetAtt": ServerlessSecurityGroup.GroupId
subnetIds:
- Ref: ServerlessPrivateSubnetA
events:
- http:
path: "api/${env:API_PATH, self:custom.api.apiPath}"
method: ${env:API_METHOD, self:custom.api.apiMethod}
cors: true
resources:
Resources:
ServerlessVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: "10.0.0.0/16"
ElasticIpLambda:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
InternetGatewayLambda:
Type: AWS::EC2::InternetGateway
VPCGatewayAttachmentLambda:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId:
Ref: ServerlessVPC
InternetGatewayId:
Ref: InternetGatewayLambda
NatGatewayLambda:
Type: AWS::EC2::NatGateway
Properties:
AllocationId:
Fn::GetAtt:
- ElasticIpLambda
- AllocationId
SubnetId:
Ref: ServerlessPublicSubnetA
ServerlessPrivateSubnetA:
DependsOn: ServerlessVPC
Type: AWS::EC2::Subnet
Properties:
VpcId:
Ref: ServerlessVPC
AvailabilityZone: ${self:provider.region}a
CidrBlock: "10.0.1.0/24"
ServerlessPublicSubnetA:
DependsOn: ServerlessVPC
Type: AWS::EC2::Subnet
Properties:
VpcId:
Ref: ServerlessVPC
AvailabilityZone: ${self:provider.region}a
CidrBlock: "10.0.2.0/24"
DefaultPrivateRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId:
Ref: ServerlessVPC
DefaultPrivateRoute:
Type: AWS::EC2::Route
Properties:
RouteTableId:
Ref: DefaultPrivateRouteTable
DestinationCidrBlock: 0.0.0.0/0
NatGatewayId:
Ref: NatGatewayLambda
DefaultPublicRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId:
Ref: ServerlessVPC
DefaultPublicRoute:
Type: AWS::EC2::Route
Properties:
RouteTableId:
Ref: DefaultPublicRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId:
Ref: InternetGatewayLambda
SubnetRouteTableAssociationLambdaPrivateA:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId:
Ref: ServerlessPrivateSubnetA
RouteTableId:
Ref: DefaultPrivateRouteTable
SubnetRouteTableAssociationLambdaPublicA:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId:
Ref: ServerlessPublicSubnetA
RouteTableId:
Ref: DefaultPublicRouteTable
ServerlessSecurityGroup:
DependsOn: ServerlessVPC
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: SecurityGroup for Serverless Functions
VpcId:
Ref: ServerlessVPC
ServerlessStorageSecurityGroup:
DependsOn: ServerlessVPC
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Ingress for Redis Cluster
VpcId:
Ref: ServerlessVPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '6379'
ToPort: '6379'
SourceSecurityGroupId:
Ref: ServerlessSecurityGroup
ServerlessCacheSubnetGroup:
Type: AWS::ElastiCache::SubnetGroup
Properties:
Description: "Cache Subnet Group"
SubnetIds:
- Ref: ServerlessPrivateSubnetA
ServerlessElasticacheCluster:
DependsOn: ServerlessStorageSecurityGroup
Type: AWS::ElastiCache::CacheCluster
Properties:
AutoMinorVersionUpgrade: true
Engine: redis
CacheNodeType: ${self:custom.config.CACHE_INSTANCE_SIZE}
NumCacheNodes: 1
VpcSecurityGroupIds:
- "Fn::GetAtt": ServerlessStorageSecurityGroup.GroupId
CacheSubnetGroupName:
Ref: ServerlessCacheSubnetGroup
plugins:
- serverless-webpack
- serverless-offline
custom:
api:
apiPath: "{proxy+}"
apiMethod: "any"
config:
CACHE_INSTANCE_SIZE: cache.t2.micro
webpackIncludeModules: true # enable auto-packing of external modules
You can’t perform that action at this time.