forked from aws-samples/aws-lex-web-ui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
master-pipeline.yaml
364 lines (334 loc) · 14.5 KB
/
master-pipeline.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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
AWSTemplateFormatVersion: 2010-09-09
Description: |
Master Pipeline Lex Web UI CloudFormation template (v0.14.8)
It deploys:
- S3 buckets to host the web application
- CodeBuild project to build the configuration and deploy to S3
- Optional Lex Bot (based on OrderFlowers example)
- Optional Cognito Identity Pool for unauthenticated identities
- Optional Lambda function to delete S3 buckets
- CodeCommit Repository containg the source code in
this project and a CodeBuild project, Lambda functions to initialize
the repo
- Optional deployment pipeline using CodePipeline and CodeBuild
- CloudWatch Logs groups related to Lambda functions
- Associated IAM roles
Parameters:
BotName:
Description: >
Name of an existing Lex Bot to be used by the web ui.
This is an optional parameter. If left empty, a Bot based
on the OrderFlowers sample will be automatically created.
Type: String
Default: ''
MaxLength: 50
AllowedPattern: '(^$|^[a-zA-Z]+((_[a-zA-Z]+)*|([a-zA-Z]+_)*|_))'
ConstraintDescription: >
Must conform with the permitted Lex Bot name pattern.
BotNamePrefix:
Type: String
Description: >
Prefix to add to Lex resource names when using the sample bot.
Ignored if you provide your own bot. Must conform to the
permitted Lex Bot name syntax (alpha characters).
Default: WebUi
MinLength: 3
MaxLength: 32
AllowedPattern: '^[a-zA-Z\._]+$'
ConstraintDescription: >
Must conform with the permitted Lex Bot name pattern.
ShouldDeleteBot:
Type: String
Default: true
AllowedValues:
- true
- false
Description: >
If set to True, the Lex bot and associated resources will
be deleted when the stack is deleted. Otherwise, the bot
will be preserved. Only applies if the bot is created by
this stack.
CodeCommitRepoName:
Type: String
Description: >
Name of CodeCommit repository to be created. Used as the
source for the pipeline and to automate deployments of the
web app. It is initialized with source artifacts from the
bootstrap S3 bucket. Must be unique per region.
Default: lex-web-ui
MinLength: 1
MaxLength: 100
AllowedPattern: '^[\w\.-]+$'
ConstraintDescription: Alphanumeric, dot and dash.
CodePipelineName:
Type: String
Description: >
Name of CodePipeline pipeline to be created. Used to manage
the build and deployment of the web application. Must be
unique per region.
to true.
Default: lex-web-ui
MinLength: 1
MaxLength: 100
AllowedPattern: '[A-Za-z0-9.@\-_]+'
ConstraintDescription: Alphanumeric, dot, dash, underscore and @.
CodeBuildName:
Type: String
Description: >
Name of the CodeBuild project to be created. Used for
building the web app with the pipeline. Must be unique
per region.
Default: lex-web-ui
MinLength: 2
MaxLength: 255
AllowedPattern: '^[A-Za-z0-9][A-Za-z0-9\-_]{1,254}$'
ConstraintDescription: >
Should start with Alphanumeric. May contain alphanumeric, undescore
and dash.
WebAppParentOrigin:
Type: String
Description: >
Browser origin (e.g. http://mysite.example.com:8080)
of an existing site that is allowed to send/receive data
and events from the web ui in an iframe setup. This is an
optional parameter. If left empty, an S3 bucket will be
created to host a sample parent site embedding the webapp
as an iframe.
Default: ''
AllowedPattern: '(^$|^https?://[\w\.-]+(:\d+)?$)'
ConstraintDescription: Empty or valid browser origin
WebAppPath:
Type: String
Default: '/parent.html'
Description: >
Path to the page hosting the sample WebApp. This parameter defaults
to parent.html which is used by the sample app created when hosting the
bot in a separate iframe. This path should be updated to reflect the
path to the default (home) page used by the WebAppParentOrigin.
This may be /index.html rather than the default.
CognitoIdentityPoolId:
Type: String
Description: >
Id of an existing Cognito Identity Pool. This is an optional
parameter. If left empty, a Cognito Identity Pool will be
automatically created. The pool ID is used by the web ui
to get AWS credentials for making calls to Lex and Polly.
Default: ''
AllowedPattern: '(^$|^[\w-]+:[0-9a-f-]+$)'
ConstraintDescription: Empty or a valid Cognito Identity Pool ID
CognitoIdentityPoolName:
Type: String
Description: >
Name of Cognito identity pool to be created to provide
AWS credentials to the web ui. Only used if the
CognitoIdentityPoolId parameter is left empty (default).
Default: Lex Web UI
MinLength: 1
MaxLength: 128
AllowedPattern: '^[\w ]+$'
ConstraintDescription: Alphanumeric and spaces.
CleanupBuckets:
Type: String
Default: true
AllowedValues:
- true
- false
Description: >
If set to True, buckets created for the Pipeline and to store the
web application will be deleted on CloudFormation stack delete.
If set to False, S3 buckets will be retained.
# Sub-templates and source artifacts are hosted in this bucket.
# The content of this bucket is maintained outside of this template
# by using the Makefile under the build directory of this project.
# See the README.md file for instructions on how to use your own bucket.
BootstrapBucket:
Type: String
Default: aws-bigdata-blog
Description: >
S3 bucket containing pre-staged nested templates and source artifacts
BootstrapPrefix:
Type: String
Default: artifacts/aws-lex-web-ui/artifacts
Description: >
S3 prefix where the templates and source are stored under
WebAppConfNegativeFeedback:
Type: String
Default: Thumbs down
Description: >
This optional parameter defines the message to be sent by the user upon pressing
a feedback button signaling a negative feedback.
If left empty feedback buttons will be disabled on the UI.
WebAppConfPositiveFeedback:
Type: String
Default: Thumbs up
Description: >
This optional parameter defines the message to be sent by the user upon pressing
a feedback button signaling a positive feedback.
If left empty feedback buttons will be disabled on the UI.
WebAppConfHelp:
Type: String
Default: Help
Description: >
This is an optional parameter, when defined with a value, a help button will display on the chat bot toolbar.
When pressed the button will send the entered string to the bot as a help message. If left empty
the help button will be disabled.
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
- Label:
default: Deployment Parameters
Parameters:
- CodeBuildName
- CodePipelineName
- CodeCommitRepoName
- CleanupBuckets
- BootstrapBucket
- BootstrapPrefix
- Label:
default: Lex Bot Configuration Parameters
Parameters:
- BotName
- BotNamePrefix
- ShouldDeleteBot
- Label:
default: Cognito Parameters
Parameters:
- CognitoIdentityPoolId
- CognitoIdentityPoolName
- Label:
default: Web Application Parameters
Parameters:
- WebAppParentOrigin
- WebAppPath
- WebAppConfNegativeFeedback
- WebAppConfPositiveFeedback
- WebAppConfHelp
Conditions:
NeedsBot: !Equals [!Ref BotName, '']
NeedsCognito: !Equals [!Ref CognitoIdentityPoolId, '']
NeedsParentOrigin: !Equals [!Ref WebAppParentOrigin, '']
Resources:
Bot:
Type: AWS::CloudFormation::Stack
Condition: NeedsBot
Properties:
TimeoutInMinutes: 15
TemplateURL: !Sub "https://s3.amazonaws.com/${BootstrapBucket}/${BootstrapPrefix}/templates/lexbot.yaml"
Parameters:
NamePrefix: !Ref BotNamePrefix
ShouldDeleteBot: !Ref ShouldDeleteBot
CustomResourceCodeBucket: !Ref BootstrapBucket
CustomResourceCodeObject: !Sub "${BootstrapPrefix}/custom-resources.zip"
CognitoIdentityPool:
Type: AWS::CloudFormation::Stack
Condition: NeedsCognito
Properties:
TemplateURL: !Sub "https://s3.amazonaws.com/${BootstrapBucket}/${BootstrapPrefix}/templates/cognito.yaml"
Parameters:
CognitoIdentityPoolName: !Ref CognitoIdentityPoolName
LexBotName:
!If
- NeedsBot
- !GetAtt Bot.Outputs.BotName
- !Ref BotName
##########################################################################
# deployment using a pipeline
##########################################################################
CodeCommitRepo:
Type: AWS::CloudFormation::Stack
Properties:
TimeoutInMinutes: 15
TemplateURL: !Sub "https://s3.amazonaws.com/${BootstrapBucket}/${BootstrapPrefix}/templates/coderepo.yaml"
Parameters:
BotName:
!If
- NeedsBot
- !GetAtt Bot.Outputs.BotName
- !Ref BotName
CodeBuildName: !Sub "${CodeCommitRepoName}-init"
CodeCommitRepoName: !Ref CodeCommitRepoName
CognitoIdentityPoolId:
!If
- NeedsCognito
- !GetAtt CognitoIdentityPool.Outputs.CognitoIdentityPoolId
- !Ref CognitoIdentityPoolId
SourceBucket: !Ref BootstrapBucket
SourceObject: !Sub "${BootstrapPrefix}/src.zip"
CustomResourceCodeObject: !Sub "${BootstrapPrefix}/custom-resources.zip"
Pipeline:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: !Sub "https://s3.amazonaws.com/${BootstrapBucket}/${BootstrapPrefix}/templates/pipeline.yaml"
Parameters:
BotName:
!If
- NeedsBot
- !GetAtt Bot.Outputs.BotName
- !Ref BotName
CodePipelineName: !Ref CodePipelineName
CodeCommitRepoName: !GetAtt CodeCommitRepo.Outputs.CodeCommitRepoName
CodeBuildName: !Ref CodeBuildName
CognitoIdentityPoolId:
!If
- NeedsCognito
- !GetAtt CognitoIdentityPool.Outputs.CognitoIdentityPoolId
- !Ref CognitoIdentityPoolId
ParentOrigin: !Ref WebAppParentOrigin
CustomResourceCodeBucket: !Ref BootstrapBucket
CustomResourceCodeObject: !Sub "${BootstrapPrefix}/custom-resources.zip"
CleanupBuckets: !Ref CleanupBuckets
CognitoAppUserPoolClientId: !GetAtt CognitoIdentityPool.Outputs.CognitoUserPoolClientId
CognitoUserPoolId: !GetAtt CognitoIdentityPool.Outputs.CognitoUserPoolId
WebAppConfNegativeFeedback: !Ref WebAppConfNegativeFeedback
WebAppConfPositiveFeedback: !Ref WebAppConfPositiveFeedback
WebAppConfHelp: !Ref WebAppConfHelp
CognitoIdentityPoolConfig:
Type: AWS::CloudFormation::Stack
Condition: NeedsCognito
Properties:
TemplateURL: !Sub "https://s3.amazonaws.com/${BootstrapBucket}/${BootstrapPrefix}/templates/cognitouserpoolconfig.yaml"
Parameters:
WebAppUrl: !If [NeedsParentOrigin, !GetAtt Pipeline.Outputs.WebAppBase, !Ref WebAppParentOrigin]
WebAppPath: !Ref WebAppPath
CodeBuildProjectName: !Ref CodeBuildName
CognitoUserPool: !GetAtt CognitoIdentityPool.Outputs.CognitoUserPoolId
CognitoUserPoolClient: !GetAtt CognitoIdentityPool.Outputs.CognitoUserPoolClientId
Outputs:
BotName:
Condition: NeedsBot
Description: >
Name of the Lex bot created by the stack
Value: !GetAtt Bot.Outputs.BotName
CodeCommitRepoUrl:
Description: CodeCommit repository clone URL
Value: !GetAtt CodeCommitRepo.Outputs.CodeCommitRepoUrl
PipelineUrl:
Description: >
Monitor the pipeline URL to see when the application has been fully
built and deployed.
Value: !Sub "https://console.aws.amazon.com/codepipeline/home?region=${AWS::Region}#/view/${Pipeline.Outputs.PipelineName}"
WebAppUrl:
Description: >
URL of the stand-alone sample web application.
This page will be available after the pipeline/deployment completes.
Value: !GetAtt Pipeline.Outputs.WebAppUrl
ParentPageUrl:
Condition: NeedsParentOrigin
Description: >
URL of the iframe based sample web application
This page will be available after the pipeline/deployment completes.
Value: !GetAtt Pipeline.Outputs.ParentPageUrl
LoaderScriptUrl:
Description: >
URL of the loader script
This script will be available after the pipeline/deployment completes.
Value: !GetAtt Pipeline.Outputs.LoaderScriptUrl
SnippetUrl:
Description: >
URL of a page showing the snippet to load the chatbot UI as
an iframe
Value: !GetAtt Pipeline.Outputs.SnippetUrl
CognitoIdentityPoolId:
Condition: NeedsCognito
Description: Cognito Identity Pool Id
Value: !GetAtt CognitoIdentityPool.Outputs.CognitoIdentityPoolId