-
Notifications
You must be signed in to change notification settings - Fork 3
/
template.yml
137 lines (124 loc) · 3.69 KB
/
template.yml
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
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: serverless-groovy-demo
Parameters:
Stage:
Type: String
Description: The stage where the application is running in, e.g., dev, prod.
Default: dev
Globals:
Function:
MemorySize: 1024
Tracing: Active
Layers:
- !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:java-optimization-layer:1"
Architectures:
- arm64
Environment:
Variables:
AWS_LAMBDA_EXEC_WRAPPER: '/opt/java-exec-wrapper'
PRODUCT_TABLE_NAME: !Ref ProductsTable
POWERTOOLS_SERVICE_NAME: Products
Resources:
GetProductFunction:
Type: AWS::Serverless::Function
Properties:
Handler: software.amazonaws.example.product.entrypoints.ApiGatewayGetProductRequestHandler::handleRequest
Runtime: java11
Timeout: 300
Policies:
- DynamoDBReadPolicy:
TableName: !Ref ProductsTable
Events:
Product:
Type: HttpApi
Properties:
Path: '/{id}'
Method: GET
ApiId: !Ref ProductsApi
GetAllProductsFunction:
Type: AWS::Serverless::Function
Properties:
Handler: software.amazonaws.example.product.entrypoints.ApiGatewayGetAllProductRequestHandler::handleRequest
Runtime: java11
Timeout: 600
Policies:
- DynamoDBReadPolicy:
TableName: !Ref ProductsTable
Events:
Product:
Type: HttpApi
Properties:
Path: '/'
Method: GET
ApiId: !Ref ProductsApi
PutProductsFunction:
Type: AWS::Serverless::Function
Properties:
Handler: software.amazonaws.example.product.entrypoints.ApiGatewayPutProductRequestHandler::handleRequest
Runtime: java11
Timeout: 600
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref ProductsTable
Events:
Product:
Type: HttpApi
Properties:
Path: '/{id}'
Method: PUT
ApiId: !Ref ProductsApi
DeleteProductFunction:
Type: AWS::Serverless::Function
Properties:
Handler: software.amazonaws.example.product.entrypoints.ApiGatewayDeleteProductRequestHandler::handleRequest
Runtime: java11
Timeout: 600
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref ProductsTable
Events:
Product:
Type: HttpApi
Properties:
Path: '/{id}'
Method: DELETE
ApiId: !Ref ProductsApi
GetProductFunctionLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub "/aws/lambda/${GetProductFunction}"
RetentionInDays: 7
GetAllProductFunctionLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub "/aws/lambda/${GetAllProductsFunction}"
RetentionInDays: 7
PutProductsFunctionLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub "/aws/lambda/${PutProductsFunction}"
RetentionInDays: 7
DeleteProductFunctionLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub "/aws/lambda/${DeleteProductFunction}"
RetentionInDays: 7
ProductsApi:
Type: AWS::Serverless::HttpApi
Properties:
StageName: !Ref Stage
ProductsTable:
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
- AttributeName: 'PK'
AttributeType: 'S'
KeySchema:
- AttributeName: 'PK'
KeyType: 'HASH'
BillingMode: PAY_PER_REQUEST
Outputs:
ProductsApi:
Description: "API Gateway endpoint URL for Products API"
Value: !Sub "https://${ProductsApi}.execute-api.${AWS::Region}.${AWS::URLSuffix}/${Stage}"