-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlambda-vpc.yaml
141 lines (122 loc) · 3.6 KB
/
lambda-vpc.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
AWSTemplateFormatVersion: "2010-09-09"
Description: Lambda - VPC
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
-
Label:
default: "Network Configuration"
Parameters:
- VpcId
- VpcSubnetIdList
-
Label:
default: "Code Configuration"
Parameters:
- CodeBucketName
- CodeObjectKey
Parameters:
CodeBucketName:
Type: String
Default: my-bucket
Description: Bucket containing lambda code
CodeObjectKey:
Type: String
Default: lambda/rds-client-lambda.zip
Description: Object Key of the zipped code
VpcId:
Description: VPC ID
Type: AWS::EC2::VPC::Id
ConstraintDescription: Must be the identifier of an existing Virtual Private Cloud
VpcSubnetIdList:
Description: Private VpcSubnets for Web Servers
Type: List<AWS::EC2::Subnet::Id>
ConstraintDescription: Must be the identifier of an existing Subnets
Rules:
SubnetsInVPC:
Assertions:
- Assert:
'Fn::EachMemberEquals':
- 'Fn::ValueOf':
- VpcSubnetIdList
- VpcId
- Ref: VpcId
AssertDescription: All subnets must in the VPC
Resources:
# Todo Receive this as a parameter.
LambdaSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref VpcId
GroupDescription: allow ICMP via same VPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: "0.0.0.0/0"
FunctionExecutionRole:
Type: AWS::IAM::Role
Properties:
#RoleName: "lambda-role"
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- 'sts:AssumeRole'
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
- arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole
- arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess
- arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess
- !Ref LambdaExecutionRolePolicy
LambdaExecutionRolePolicy:
Type: 'AWS::IAM::ManagedPolicy'
Properties:
Description: "LambdaExecutionRolePolicy"
PolicyDocument:
Version: 2012-10-17
Statement:
- Action:
- 'rds:*'
Effect: Allow
Resource: "*"
LambdaFunction:
Type: AWS::Lambda::Function
Properties:
#FunctionName : "client-lambda"
Description: "Lambda VPC"
Runtime: nodejs20.x
Role: !GetAtt FunctionExecutionRole.Arn
Handler: index.handler
Timeout: 30
Environment:
Variables:
EDATABASE_ENDPOINT: xxx
EDATABASE_USER: xxx
EDATABASE_NAME: xxx
EDATABASE_PASSWORD: xxx
Code:
S3Bucket: !Ref CodeBucketName
S3Key: !Ref CodeObjectKey
#S3ObjectVersion: 1
VpcConfig:
SecurityGroupIds:
- !Ref LambdaSecurityGroup
SubnetIds: !Ref VpcSubnetIdList
#- !Ref VpcSubnet
TracingConfig:
Mode: Active
LambdaLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub "/aws/lambda/${LambdaFunction}"
RetentionInDays: 1
Outputs:
LambdaFunctionArn:
Value: !GetAtt LambdaFunction.Arn
FunctionExecutionRoleArn:
Value: !GetAtt FunctionExecutionRole.Arn