├── Auth └── README.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── DataProcessing ├── .DS_Store ├── README.md ├── client │ ├── .gitignore │ ├── Makefile │ ├── consumer.go │ └── producer.go └── guide │ ├── .gitignore │ ├── Dockerfile │ ├── Gemfile │ ├── Gemfile.lock │ ├── README.md │ ├── Rakefile │ ├── content │ ├── README.md │ ├── _toc.haml │ ├── cleanup.md │ ├── dashboard.haml │ ├── data-lake.md │ ├── extra-credit.md │ ├── layout.haml │ ├── setup.md │ ├── stream-processing.md │ ├── streaming-aggregation.md │ └── streaming-data.md │ ├── helpers.rb │ └── site │ ├── cleanup.html │ ├── client │ ├── css │ ├── dashboard.css │ ├── styles.css │ └── syntax.css │ ├── dashboard.html │ ├── data-lake.html │ ├── extra-credit.html │ ├── images │ ├── aws.png │ ├── data-lake-create-bucket.png │ ├── data-lake-delivery-stream-details.png │ ├── data-lake-object-list.png │ ├── data-lake-object-preview.png │ ├── data-lake-query-results.png │ ├── setup-cloud9-terminal.png │ ├── stream-processing-add-arn.png │ ├── stream-processing-dynamodb-create.png │ ├── stream-processing-dynamodb-items.png │ ├── stream-processing-lambda-basic-information.png │ ├── stream-processing-lambda-basic-settings.png │ ├── stream-processing-lambda-code.png │ ├── stream-processing-lambda-environment-variables.png │ ├── stream-processing-lambda-trigger.png │ ├── stream-processing-review-policy.png │ ├── stream-processing-trigger-designer.png │ ├── stream-processing-trigger-enabled.png │ ├── streaming-aggregation-rows-preview.png │ ├── streaming-aggregation-schema-discovery.png │ ├── streaming-data-consumer-arn.png │ ├── streaming-data-create-stream.png │ ├── streaming-data-dashboard-configure.png │ ├── streaming-data-identity-pool-id.png │ ├── streaming-data-map-details.png │ ├── streaming-data-map-two-unicorns.png │ ├── streaming-data-map.png │ ├── streaming-data-stream-arn.png │ ├── streaming-data-stream-policy.png │ └── unicorn-icon.png │ ├── index.html │ ├── js │ ├── cookies.js │ ├── dashboard.js │ └── guide.js │ ├── setup.html │ ├── stream-processing.html │ ├── streaming-aggregation.html │ └── streaming-data.html ├── DevOps ├── .DS_Store └── README.md ├── ImageProcessing ├── README.md ├── images │ ├── 1st-state-machine-graph.png │ ├── 1st_execution_result.png │ ├── 2nd-state-machine-graph.png │ ├── 3-create-statemachine-select-role.png │ ├── 3-initial-sfn-code.png │ ├── 3rd-state-machine-graph.png │ ├── 4-edit-state-machine.png │ ├── 4-save-state-machine-definition.png │ ├── 4-update-state-machine-definition.png │ ├── 4th-state-machine-graph.png │ ├── 5-update-state-machine-with-parallel-step.png │ ├── 6-update-state-machine-persistence.png │ ├── already-indexed-face.png │ ├── bucket-icon.png │ ├── cloudformation-delete.png │ ├── dynamodb_example.png │ ├── initial-machine-sunglasses.png │ ├── s3-console-empty-bucket.png │ ├── s3-console-select-bucket.png │ ├── s3-empty-bucket-dialog.png │ ├── selfie │ │ ├── LICENSE │ │ ├── README.md │ │ └── selfie-picture.jpeg │ ├── test-execution-1.png │ └── wild-rydes-architecture.png ├── src │ ├── cloudformation │ │ ├── module-setup.yaml │ │ └── publish-template.sh │ └── lambda-functions │ │ ├── copy-s3-object │ │ ├── index.py │ │ └── requirements.txt │ │ ├── face-detection │ │ └── index.js │ │ ├── face-search │ │ ├── index.js │ │ └── test-input.json │ │ ├── index-face │ │ └── index.js │ │ ├── mock-notification │ │ ├── index.js │ │ └── test-input.json │ │ ├── persist-metadata │ │ ├── index.js │ │ └── test-input.json │ │ └── thumbnail │ │ ├── index.js │ │ ├── package.json │ │ └── test.json └── test-images │ ├── 1_happy_face.jpg │ ├── 2_sunglass_face.jpg │ ├── 3_multiple_faces.jpg │ └── 4_no_face.jpg ├── LICENSE ├── MultiRegion ├── 1_API │ ├── .gitignore │ ├── README.md │ ├── health-check.js │ ├── images │ │ ├── accept-replace-cors.png │ │ ├── actions-enable-cors.png │ │ ├── api-child-resource-cors.png │ │ ├── api-lambda-permission.png │ │ ├── api-method-get-setup.png │ │ ├── api-method-get.png │ │ ├── api-method-health-get-setup.png │ │ ├── api-method-post-setup.png │ │ ├── api-ticket-health.png │ │ ├── create-example-api.png │ │ ├── create-lambda-function.png │ │ ├── create-lambda-ticket-get.png │ │ ├── create-new-api.png │ │ ├── create-policy-1.png │ │ ├── create-policy-2.png │ │ ├── create-role-1.png │ │ ├── create-role-final.png │ │ ├── create-role-lambda.png │ │ ├── create-role-select-policy.png │ │ ├── deploy-api-prod-new-stage.png │ │ ├── deploy-api-prod.png │ │ ├── dynamodb-create-button.png │ │ ├── dynamodb-create-sxrtickets.png │ │ ├── lambda-author-scratch.png │ │ ├── mr-api-create-bucket.png │ │ └── test-api-gateway-endpoint.png │ ├── tickets-get.js │ ├── tickets-post.js │ ├── tickets-replicate.js │ ├── wild-rydes-api-failover-region.yaml │ ├── wild-rydes-api-primary-region.yaml │ ├── wild-rydes-dynamodb-get.json │ ├── wild-rydes-dynamodb-post.json │ └── wild-rydes-dynamodb-replication.json ├── 2_UI │ ├── .editorconfig │ ├── .gitignore │ ├── README.md │ ├── angular.json │ ├── cfn │ │ ├── README.md │ │ └── web-ui-stack.yaml │ ├── e2e │ │ ├── app.e2e-spec.ts │ │ ├── app.po.ts │ │ └── tsconfig.e2e.json │ ├── images │ │ ├── app-screenshot.png │ │ ├── choose-web-distribution.png │ │ ├── cloudfront-domain.png │ │ ├── configure-origin.png │ │ ├── create-distribution.png │ │ ├── facebook-add-app.png │ │ ├── facebook-add-platform.png │ │ ├── facebook-config.png │ │ ├── facebook-make-public.png │ │ ├── facebook-select-settings.png │ │ ├── facebook-select-website.png │ │ ├── facebook-website-url.png │ │ ├── set-cloudfront-https.png │ │ ├── set-cloudfront-root.png │ │ └── set-cloudfront-ttl.png │ ├── index.d.ts │ ├── karma.conf.js │ ├── package-lock.json │ ├── package.json │ ├── protractor.conf.js │ ├── src │ │ ├── app │ │ │ ├── app-routing.module.ts │ │ │ ├── app.component.css │ │ │ ├── app.component.html │ │ │ ├── app.component.spec.ts │ │ │ ├── app.component.ts │ │ │ ├── app.module.ts │ │ │ ├── components │ │ │ │ └── ticket-list │ │ │ │ │ ├── ticket-list.component.css │ │ │ │ │ ├── ticket-list.component.html │ │ │ │ │ ├── ticket-list.component.spec.ts │ │ │ │ │ └── ticket-list.component.ts │ │ │ ├── model │ │ │ │ └── ticket.ts │ │ │ ├── services │ │ │ │ ├── cognito.service.ts │ │ │ │ └── ticket.service.ts │ │ │ ├── shared │ │ │ │ ├── guard │ │ │ │ │ ├── auth.guard.ts │ │ │ │ │ └── config.guard.ts │ │ │ │ └── index.ts │ │ │ └── views │ │ │ │ ├── cognito-tools │ │ │ │ ├── cognito-tools.component.css │ │ │ │ ├── cognito-tools.component.html │ │ │ │ ├── cognito-tools.component.spec.ts │ │ │ │ └── cognito-tools.component.ts │ │ │ │ ├── home │ │ │ │ ├── home.component.css │ │ │ │ ├── home.component.html │ │ │ │ ├── home.component.spec.ts │ │ │ │ └── home.component.ts │ │ │ │ ├── login │ │ │ │ ├── login.component.css │ │ │ │ ├── login.component.html │ │ │ │ ├── login.component.spec.ts │ │ │ │ └── login.component.ts │ │ │ │ ├── ticket │ │ │ │ ├── ticket.component.css │ │ │ │ ├── ticket.component.html │ │ │ │ ├── ticket.component.spec.ts │ │ │ │ ├── ticket.component.ts │ │ │ │ └── ticket.module.ts │ │ │ │ ├── troubleshooting │ │ │ │ ├── troubleshooting.component.css │ │ │ │ ├── troubleshooting.component.html │ │ │ │ ├── troubleshooting.component.spec.ts │ │ │ │ └── troubleshooting.component.ts │ │ │ │ ├── views-routing.module.ts │ │ │ │ ├── views.component.html │ │ │ │ ├── views.component.ts │ │ │ │ └── views.module.ts │ │ ├── assets │ │ │ ├── .gitkeep │ │ │ └── js │ │ │ │ ├── amazon-login.js │ │ │ │ └── aws │ │ │ │ ├── amazon-cognito-identity.js │ │ │ │ ├── amazon-cognito-identity.min.js │ │ │ │ ├── amazon-cognito-identity.min.js.map │ │ │ │ ├── aws-cognito-sdk.js │ │ │ │ ├── aws-cognito-sdk.min.js │ │ │ │ ├── aws-cognito-sdk.min.js.map │ │ │ │ └── aws-sdk.js │ │ ├── aws-exports.ts │ │ ├── environments │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── main.ts │ │ ├── polyfills.ts │ │ ├── styles │ │ │ ├── _responsive.scss │ │ │ ├── app.scss │ │ │ ├── awsui │ │ │ │ ├── awsui.scss │ │ │ │ ├── base-styles │ │ │ │ │ ├── grid.css │ │ │ │ │ ├── home.css │ │ │ │ │ └── utilities.css │ │ │ │ └── components.css │ │ │ ├── bootstrap │ │ │ │ ├── _alert.scss │ │ │ │ ├── _badge.scss │ │ │ │ ├── _breadcrumb.scss │ │ │ │ ├── _button-group.scss │ │ │ │ ├── _buttons.scss │ │ │ │ ├── _card.scss │ │ │ │ ├── _carousel.scss │ │ │ │ ├── _close.scss │ │ │ │ ├── _code.scss │ │ │ │ ├── _custom-forms.scss │ │ │ │ ├── _custom.scss │ │ │ │ ├── _dropdown.scss │ │ │ │ ├── _forms.scss │ │ │ │ ├── _grid.scss │ │ │ │ ├── _images.scss │ │ │ │ ├── _input-group.scss │ │ │ │ ├── _jumbotron.scss │ │ │ │ ├── _list-group.scss │ │ │ │ ├── _media.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _modal.scss │ │ │ │ ├── _nav.scss │ │ │ │ ├── _navbar.scss │ │ │ │ ├── _normalize.scss │ │ │ │ ├── _pagination.scss │ │ │ │ ├── _popover.scss │ │ │ │ ├── _print.scss │ │ │ │ ├── _progress.scss │ │ │ │ ├── _reboot.scss │ │ │ │ ├── _responsive-embed.scss │ │ │ │ ├── _tables.scss │ │ │ │ ├── _tooltip.scss │ │ │ │ ├── _transitions.scss │ │ │ │ ├── _type.scss │ │ │ │ ├── _utilities.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── bootstrap-grid.scss │ │ │ │ ├── bootstrap-reboot.scss │ │ │ │ ├── bootstrap.scss │ │ │ │ ├── mixins │ │ │ │ │ ├── _alert.scss │ │ │ │ │ ├── _background-variant.scss │ │ │ │ │ ├── _badge.scss │ │ │ │ │ ├── _border-radius.scss │ │ │ │ │ ├── _breakpoints.scss │ │ │ │ │ ├── _buttons.scss │ │ │ │ │ ├── _cards.scss │ │ │ │ │ ├── _clearfix.scss │ │ │ │ │ ├── _float.scss │ │ │ │ │ ├── _forms.scss │ │ │ │ │ ├── _gradients.scss │ │ │ │ │ ├── _grid-framework.scss │ │ │ │ │ ├── _grid.scss │ │ │ │ │ ├── _hover.scss │ │ │ │ │ ├── _image.scss │ │ │ │ │ ├── _list-group.scss │ │ │ │ │ ├── _lists.scss │ │ │ │ │ ├── _nav-divider.scss │ │ │ │ │ ├── _navbar-align.scss │ │ │ │ │ ├── _pagination.scss │ │ │ │ │ ├── _reset-text.scss │ │ │ │ │ ├── _resize.scss │ │ │ │ │ ├── _screen-reader.scss │ │ │ │ │ ├── _size.scss │ │ │ │ │ ├── _table-row.scss │ │ │ │ │ ├── _text-emphasis.scss │ │ │ │ │ ├── _text-hide.scss │ │ │ │ │ ├── _text-truncate.scss │ │ │ │ │ ├── _transforms.scss │ │ │ │ │ └── _visibility.scss │ │ │ │ └── utilities │ │ │ │ │ ├── _align.scss │ │ │ │ │ ├── _background.scss │ │ │ │ │ ├── _borders.scss │ │ │ │ │ ├── _clearfix.scss │ │ │ │ │ ├── _display.scss │ │ │ │ │ ├── _flex.scss │ │ │ │ │ ├── _float.scss │ │ │ │ │ ├── _position.scss │ │ │ │ │ ├── _screenreaders.scss │ │ │ │ │ ├── _sizing.scss │ │ │ │ │ ├── _spacing.scss │ │ │ │ │ ├── _text.scss │ │ │ │ │ └── _visibility.scss │ │ │ └── toasta │ │ │ │ └── toasta.scss │ │ ├── test.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.spec.json │ │ └── typings.d.ts │ ├── tsconfig.json │ └── tslint.json ├── 3_Replication │ ├── README.md │ ├── images │ │ ├── create-ddb-global-table-region.png │ │ ├── create-ddb-global-table.png │ │ ├── create-health-check.png │ │ ├── created-health-check.png │ │ ├── custom-domain.png │ │ ├── custom-domains-configured-ireland.png │ │ ├── ddb-create-trigger.png │ │ ├── ddb-show-replicated-ticket.png │ │ ├── ddb-trigger-enabled.png │ │ ├── delete-ddb-items.png │ │ ├── ireland-health-response.png │ │ ├── ireland-subdomain-record.png │ │ ├── select-ddb-source-table.png │ │ ├── select-ddb-triggers.png │ │ └── zone-configuration.png │ └── setup-dns-record.json ├── 4_Testing │ ├── README.md │ └── images │ │ ├── break-api.png │ │ ├── failed-health.png │ │ └── failed-over-response.png ├── 5_Cleanup │ └── README.md ├── README.md ├── README_InstallDevDependencies.md └── images │ ├── architecture.png │ ├── architecture_new.png │ ├── cloud9_connect.png │ ├── git_clone.png │ └── install_nvm.png ├── NOTICE ├── README.md ├── WebApplication ├── 0_Setup │ └── README.md ├── 1_StaticWebHosting │ ├── .eslintrc │ ├── README.md │ └── website │ │ ├── apply.html │ │ ├── css │ │ ├── bootstrap.min.css │ │ ├── bootstrap.min.css.map │ │ ├── font.css │ │ ├── index.css │ │ ├── main.css │ │ ├── mapbox-gl.css │ │ ├── message.css │ │ ├── normalize.css │ │ └── ride.css │ │ ├── faq.html │ │ ├── favicon.ico │ │ ├── fonts │ │ ├── fairplex-wide-n4.woff │ │ ├── fairplex-wide-n7.woff │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── images │ │ ├── background.png │ │ ├── bbd3207c.png │ │ ├── bucephalus.png │ │ ├── loading.gif │ │ ├── logo.png │ │ ├── rocinante.png │ │ ├── shadowfox.png │ │ ├── spinning-gears.gif │ │ ├── star-pattern.png │ │ ├── unicorn-icon.png │ │ ├── unicorn-logo.png │ │ ├── unicorn-map-bg.png │ │ ├── unicorn-silhouette.png │ │ ├── wr-apply-header.png │ │ ├── wr-faq-header.jpg │ │ ├── wr-home-W.png │ │ ├── wr-home-Xiaomi.png │ │ ├── wr-home-about.jpg │ │ ├── wr-home-apple.png │ │ ├── wr-home-blackberry.png │ │ ├── wr-home-block-1.png │ │ ├── wr-home-block-2.png │ │ ├── wr-home-block-3.png │ │ ├── wr-home-block-4.png │ │ ├── wr-home-facebook.png │ │ ├── wr-home-google.png │ │ ├── wr-home-instagram.png │ │ ├── wr-home-kraken.png │ │ ├── wr-home-quote.jpg │ │ ├── wr-home-quote.png │ │ ├── wr-home-top.jpg │ │ ├── wr-home-twitter.png │ │ ├── wr-home-wechat.png │ │ ├── wr-home-weibo.png │ │ ├── wr-investors-1.png │ │ ├── wr-investors-2.png │ │ ├── wr-investors-3.png │ │ ├── wr-investors-4.png │ │ ├── wr-investors-5.png │ │ ├── wr-investors-awesome.png │ │ ├── wr-investors-header.png │ │ ├── wr-investors-pcp.png │ │ ├── wr-investors-thebarn.png │ │ ├── wr-logo-black.png │ │ ├── wr-logo-white.png │ │ ├── wr-unicorn-header.png │ │ ├── wr-unicorn-one.png │ │ ├── wr-unicorn-three.png │ │ └── wr-unicorn-two.png │ │ ├── index.html │ │ ├── investors.html │ │ ├── js │ │ ├── cognito-auth.js │ │ ├── config.js │ │ ├── esri-map.js │ │ ├── main.js │ │ ├── ride.js │ │ ├── vendor.js │ │ └── vendor │ │ │ ├── amazon-cognito-identity.min.js │ │ │ ├── aws-cognito-sdk.min.js │ │ │ ├── bootstrap.min.js │ │ │ ├── html5shiv.min.js │ │ │ ├── jquery-3.1.0.js │ │ │ ├── modernizr.js │ │ │ ├── moment.min.js │ │ │ ├── respond.min.js │ │ │ └── unicorn-icon │ │ ├── register.html │ │ ├── ride.html │ │ ├── robots.txt │ │ ├── signin.html │ │ ├── unicorns.html │ │ └── verify.html ├── 2_UserManagement │ └── README.md ├── 3_ServerlessBackend │ ├── README.md │ └── requestUnicorn.js ├── 4_RESTfulAPIs │ └── README.md ├── 5_OAuth │ ├── ListUnicornAuthorizer.zip │ ├── ListUnicornAuthorizer │ │ ├── index.js │ │ └── package.json │ ├── README.md │ ├── UnicornManager │ │ ├── css │ │ │ ├── bootstrap.min.css │ │ │ ├── bootstrap.min.css.map │ │ │ ├── font.css │ │ │ ├── index.css │ │ │ ├── main.css │ │ │ ├── mapbox-gl.css │ │ │ ├── message.css │ │ │ ├── normalize.css │ │ │ └── ride.css │ │ ├── favicon.ico │ │ ├── fonts │ │ │ ├── fairplex-wide-n4.woff │ │ │ ├── fairplex-wide-n7.woff │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── images │ │ │ └── background.png │ │ ├── index.html │ │ ├── js │ │ │ ├── config.js │ │ │ ├── unicornManager.js │ │ │ ├── vendor.js │ │ │ └── vendor │ │ │ │ ├── amazon-cognito-identity.min.js │ │ │ │ ├── aws-cognito-sdk.min.js │ │ │ │ ├── bootstrap.min.js │ │ │ │ ├── html5shiv.min.js │ │ │ │ ├── jquery-3.1.0.js │ │ │ │ ├── modernizr.js │ │ │ │ ├── moment.min.js │ │ │ │ ├── respond.min.js │ │ │ │ └── unicorn-icon │ │ └── robots.txt │ ├── listUnicornRides.js │ └── prerequisites.yaml ├── 6_GraphQLAPI │ └── README.md ├── 9_CleanUp │ └── README.md ├── README.md ├── gulpfile.js └── images │ ├── add-app.png │ ├── amplify-console-repository-setup.png │ ├── amplify-deploy-status.png │ ├── amplify-renderings.png │ ├── api-authorizer.png │ ├── api-integration-setup.png │ ├── apigateway-test-authorizer.png │ ├── appsync-api-authorization.png │ ├── appsync-archiecture.png │ ├── appsync-cognito-login.png │ ├── appsync-create-model.png │ ├── appsync-model-fields.png │ ├── appsync-query-resolvers.png │ ├── authentication-architecture.png │ ├── cfn-ack-iam.png │ ├── client-id.png │ ├── cognito-resource-servers-menu.png │ ├── configure-cognito-app-client.png │ ├── configure-cognito-resource-server.png │ ├── configure-test-event-2.png │ ├── configure-test-event.png │ ├── create-a-user-pool.png │ ├── create-api.png │ ├── create-bucket.png │ ├── create-cloudfront-distribution.png │ ├── create-cognito-app-client.png │ ├── create-custom-token-authorizer.png │ ├── create-lambda-function-code-revised.png │ ├── create-lambda-function-code.png │ ├── create-lambda-function-revised.png │ ├── create-lambda-function.png │ ├── create-list-rides-authorizer-function.png │ ├── create-list-rides-function.png │ ├── create-method.png │ ├── create-resource.png │ ├── create-unicornmanager-bucket.png │ ├── create-user-pool-authorizer.png │ ├── ddb-create-table.png │ ├── enable-website-hosting-unicornmanager.png │ ├── enable-website-hosting.png │ ├── execution-success.png │ ├── iam-add-user.png │ ├── inline-policies.png │ ├── input-test-event.png │ ├── lambda-handler-and-role.png │ ├── list-rides-api-integration.png │ ├── module1-cfn-specify-details.png │ ├── module2-cfn-specify-details.png │ ├── oauth-architecture.png │ ├── open-wild-rydes-authorizers.png │ ├── policy-generator.png │ ├── pool-id.png │ ├── region-selection.png │ ├── restful-api-architecture.png │ ├── review-policy.png │ ├── s3-upload.png │ ├── select-list-custom-authorizer.png │ ├── select-policy-service.png │ ├── serverless-backend-architecture.png │ ├── set-role-name.png │ ├── static-website-architecture.png │ ├── successful-login.png │ ├── title-update.png │ ├── update-bucket-policy.png │ ├── user-pool-unicorn-signup.png │ ├── wildrydes-complete-architecture.png │ ├── wildrydes-diagrams.graffle │ ├── data.plist │ ├── image1.pdf │ ├── image10.png │ ├── image11.pdf │ ├── image12.pdf │ ├── image13.tiff │ ├── image2.pdf │ ├── image3.pdf │ ├── image4.pdf │ ├── image5.pdf │ ├── image6.pdf │ ├── image7.pdf │ ├── image8.pdf │ └── image9.pdf │ └── wildrydes-homepage.png ├── WorkshopTemplate ├── 1_ExampleTemplate │ └── README.md └── README.md ├── create-lambda-function-code-revised.png ├── create-lambda-function-revised.png ├── gulpfile.js └── package.json /Auth/README.md: -------------------------------------------------------------------------------- 1 | # 서버리스 identity 관리, 인증 및 인가 워크샵 2 | 3 | 이 워크샵에서는 사용자가 Wild Rydes 에서 유니콘 타기를 요청할 수있는 서버리스 마이크로 서비스 응용 프로그램을 구축합니다.이 응용 프로그램은 사용자에게 가입, 로그인, 탑승 요청 위치를 나타내는 사용자 인터페이스와 유니콘 프로필을 제공합니다. 4 | 5 | 이 애플리케이션 아키텍처는 [Amazon Cognito](https://aws.amazon.com/cognito/), [Amazon API Gateway](https://aws.amazon.com/api-gateway), [AWS Lambda](https://aws.amazon.com/lambda/) 및 [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam) 를 사용하여 종단 간 인증 및 권한 부여 패턴을 보여줍니다. 단일 페이지 [React JS](https://reactjs.org/) 웹 앱은 HTML, CSS 및 JavaScript를 호스팅하여 프론트 엔드를 렌더링 한 다음 Amazon API Gateway와 Amazon Lambda를 사용하여 구축 한 퍼블릭 서버리스 백엔드 API에 연결합니다. Amazon Cognito는 백엔드 API를 보호하기 위해 사용자 자격 증명 관리 및 인증 기능을 제공하며, 마지막으로 DynamoDB는 API의 Lambda 함수를 통해 데이터를 저장하고 검색하는 지속성 계층을 제공합니다. 6 | 7 | 전체 아키텍처에 대한 설명은 아래 다이어그램을 참조하십시오. 8 | 9 | ![와일드 라이드 웹 응용 프로그램 아키텍처](images/wildrydes-complete-architecture.png) 10 | 11 | ## 모듈 12 | 13 | 이 워크샵은 여러 모듈로 나뉘어져 있으며 Wild Rydes 응용 프로그램을 확장해 나갈 떄 각 모듈은 이전 모듈을 기반으로 하기 때문에 다음 모듈로 진행하기 전에 각 모듈을 완료해야합니다. 14 | 15 | 1. **사용자 인증** - 이 모듈에서는 ID 관리 및 사용자 인증을 위한 Cognito 사용자 풀을 생성하고 이를 기존 WildRydes React JS 웹 응용 프로그램과 통합하고 Cognito ID 풀도 구성합니다. 응용 프로그램 내에서 IAM (Identity and Access Management) 역할을 시작할 수 있는 수있는 기능을 제공합니다. 16 | 17 | 2. **서버리스 백엔드** - 이 모듈에서는 API Gateway 및 Lambda를 사용하여 Wild Rydes 애플리케이션에 서버리스 백엔드를 추가 한 다음 API에서 인증 및 권한 부여를 활성화하여 유효한 요청만 승인하도록 백엔드를 보호합니다. 18 | 19 | 3. **IAM 인증** - 이 모듈에서는 프로파일 관리 및 프로파일 사진 관리 기능을 활성화하여 Wild Rydes 애플리케이션을 확장합니다. Amazon Cognito는 사용자의 프로필 정보와 속성을 저장하는 데 사용되고 Amazon S3는 사용자의 프로필 정보에 저장된 사진에 대한 링크와 함께 사용자의 프로필 사진을 저장합니다. 20 | 21 | ## 시작하기 22 | 다음 링크를 클릭하여 시작합니다. 23 | https://auth.serverlessworkshops.io. -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 4 | opensource-codeofconduct@amazon.com with any additional questions or comments. 5 | -------------------------------------------------------------------------------- /DataProcessing/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/.DS_Store -------------------------------------------------------------------------------- /DataProcessing/README.md: -------------------------------------------------------------------------------- 1 | # Serverless Data Processing on AWS 2 | 3 | This module is now available at 4 | [https://dataprocessing.wildrydes.com](https://dataprocessing.wildrydes.com). 5 | -------------------------------------------------------------------------------- /DataProcessing/client/.gitignore: -------------------------------------------------------------------------------- 1 | consumer 2 | producer 3 | client.tar 4 | -------------------------------------------------------------------------------- /DataProcessing/client/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: all clean 2 | 3 | all: consumer producer 4 | tar -cvf client.tar producer consumer 5 | 6 | consumer: 7 | go build consumer.go 8 | 9 | producer: 10 | go build producer.go 11 | 12 | clean: 13 | rm client.tar producer consumer 14 | -------------------------------------------------------------------------------- /DataProcessing/guide/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /DataProcessing/guide/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ruby:2.3-alpine 2 | 3 | RUN apk --no-cache add make gcc libc-dev libffi-dev 4 | 5 | ADD https://github.com/jgm/pandoc/releases/download/2.1/pandoc-2.1-linux.tar.gz /tmp 6 | 7 | WORKDIR /tmp 8 | 9 | RUN tar -zxvf pandoc-2.1-linux.tar.gz && \ 10 | mv pandoc-2.1/bin/pandoc /usr/local/bin && \ 11 | rm -rf pandoc-2.1 12 | 13 | COPY Gemfile Gemfile.lock /tmp/ 14 | 15 | RUN bundle 16 | 17 | VOLUME /guide 18 | 19 | WORKDIR /guide 20 | 21 | CMD ["rake", "listen"] 22 | -------------------------------------------------------------------------------- /DataProcessing/guide/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "haml" 4 | gem "listen" 5 | gem "rake" 6 | gem "pandoc-ruby" 7 | gem "gemoji-parser" 8 | -------------------------------------------------------------------------------- /DataProcessing/guide/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | ffi (1.13.1) 5 | gemoji (3.0.0) 6 | gemoji-parser (1.3.1) 7 | gemoji (>= 2.1.0) 8 | haml (5.0.3) 9 | temple (>= 0.8.0) 10 | tilt 11 | listen (3.0.8) 12 | rb-fsevent (~> 0.9, >= 0.9.4) 13 | rb-inotify (~> 0.9, >= 0.9.7) 14 | pandoc-ruby (2.0.1) 15 | rake (12.3.3) 16 | rb-fsevent (0.9.8) 17 | rb-inotify (0.9.8) 18 | ffi (>= 0.5.0) 19 | temple (0.8.0) 20 | tilt (2.0.8) 21 | 22 | PLATFORMS 23 | ruby 24 | 25 | DEPENDENCIES 26 | gemoji-parser 27 | haml 28 | listen 29 | pandoc-ruby 30 | rake 31 | 32 | BUNDLED WITH 33 | 1.13.6 34 | -------------------------------------------------------------------------------- /DataProcessing/guide/README.md: -------------------------------------------------------------------------------- 1 | # Serverless Data Processing on AWS 2 | 3 | ## Development 4 | 5 | ### Building content on file changes 6 | 7 | - docker build -t guide . 8 | - docker run -ti -v $PWD:/guide guide 9 | -------------------------------------------------------------------------------- /DataProcessing/guide/Rakefile: -------------------------------------------------------------------------------- 1 | require "haml" 2 | require "listen" 3 | require "pandoc-ruby" 4 | require "time" 5 | require "gemoji-parser" 6 | 7 | require "./helpers" 8 | 9 | LAYOUT = "content/layout.haml" 10 | 11 | task default: :build 12 | 13 | task :build do 14 | build 15 | end 16 | 17 | task :listen do 18 | listener = Listen.to(".", "content/", only: /\.md|\.haml/) do |modified, added, removed| 19 | paths = [modified, added, removed].flatten.map { |path| 20 | ContentFile.new(path).basename 21 | }.join(",") 22 | 23 | puts "Building site -- ts=#{Time.now.iso8601} modified=#{paths}" 24 | 25 | begin 26 | build 27 | rescue Exception => ex 28 | puts ex 29 | puts ex.backtrace 30 | end 31 | end 32 | 33 | trap("SIGINT") do 34 | puts 35 | exit(0) 36 | end 37 | 38 | puts "Listening for changes -- ts=#{Time.now.iso8601}" 39 | listener.start 40 | sleep 41 | end 42 | 43 | def build 44 | Dir["content/*"].each do |path| 45 | next if path == LAYOUT 46 | 47 | content_file = ContentFile.new(path) 48 | next if content_file.partial? 49 | 50 | File.open(File.join("site", content_file.stem + ".html"), "w") do |file| 51 | if content_file.fullpage? 52 | file.write(render(path)) 53 | else 54 | file.write(render(LAYOUT) { render(path) }) 55 | end 56 | end 57 | end 58 | end 59 | -------------------------------------------------------------------------------- /DataProcessing/guide/content/_toc.haml: -------------------------------------------------------------------------------- 1 | .toc 2 | %strong Contents 3 | %ul 4 | %li 5 | %a{href: "index.html"} Welcome 6 | %li 7 | %a{href: "setup.html"} Setup 8 | %li 9 | %a{href: "index.html#modules"} Modules 10 | %ol 11 | %li 12 | %a{href: "streaming-data.html"} Real-time Data Streaming 13 | %li 14 | %a{href: "streaming-aggregation.html"} Stream Aggregation 15 | %li 16 | %a{href: "stream-processing.html"} Stream Processing 17 | %li 18 | %a{href: "data-lake.html"} Data Lake 19 | %li 20 | %a{href: "extra-credit.html"} Extra Credit 21 | %li 22 | %a{href: "cleanup.html"} Clean Up 23 | -------------------------------------------------------------------------------- /DataProcessing/guide/content/extra-credit.md: -------------------------------------------------------------------------------- 1 | ## 추가 크레딧 2 | 3 | 일찍 랩을 완료하였습니까? 아직 유니콘 모니터링 시스템을 살펴볼 시간이 있다면 도전해볼 만한 다른 과제가 있습니다. 4 | 5 | - [AWS SDK][sdks]를 사용하여 익숙한 프로그래밍 언어로 **wildrydes** 스트림 Consumer를 작성하십시오. 출력 형식을 자유롭게 시도해보십시오. 6 | 7 | - wildrydes 데이터 스트림을 읽어서 건강 지표가 100점 보다 아래인 유니콘의 데이터 포인트를 출력하는 Amazon Kinesis Data Analytics 애플리케이션을 구축하십시오. 8 | 9 | - 스트림을 읽고 유니콘의 건강 지표가 100점 이하인 유니콘에 대해 운영 담당자가 알 수 있도록 알람을 보내는 AWS Lambda 함수를 생성하십시오. 10 | 11 | - 추가 Amazon Athena 쿼리를 작성하십시오. 12 | - 운행시 유니콘이 보고하는 모든 위도와 경도 쌍을 출력하십시오. 13 | - 특정 타임 스탬프 후에 캡처된 모든 데이터 포인트. 14 | - 각 유니콘이 여행한 총 거리. 15 | - 유니콘의 건강 지표가 100점 미만인 모든 데이터 포인트 16 | 17 | [sdks]: https://aws.amazon.com/tools/ -------------------------------------------------------------------------------- /DataProcessing/guide/site/client: -------------------------------------------------------------------------------- 1 | ../../client/ -------------------------------------------------------------------------------- /DataProcessing/guide/site/css/dashboard.css: -------------------------------------------------------------------------------- 1 | body { 2 | position: fixed; 3 | padding: 0; 4 | margin: 0; 5 | top: 0; 6 | left; 0; 7 | height: 100%; 8 | width: 100%; 9 | } 10 | 11 | #map { 12 | position: relative; 13 | height: 100%; 14 | width: 100%; 15 | } 16 | 17 | #popUpName { 18 | font-size: 17px; 19 | font-weight: bold; 20 | margin-bottom: 5px; 21 | } 22 | 23 | #popUpTime { 24 | font-size: 11px; 25 | font-weight: italic; 26 | margin-top: 0px; 27 | } 28 | 29 | #popUpDetails { 30 | border: 0; 31 | } 32 | 33 | .popUpDetailsHeader { 34 | font-weight: bold; 35 | } 36 | 37 | button.copy { 38 | font-size: 13px; 39 | margin-bottom: 20px; 40 | width: 140px; 41 | } 42 | 43 | .notice { 44 | display: none; 45 | } 46 | 47 | table td { 48 | padding-right: 20px; 49 | } 50 | -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/aws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/aws.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/data-lake-create-bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/data-lake-create-bucket.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/data-lake-delivery-stream-details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/data-lake-delivery-stream-details.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/data-lake-object-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/data-lake-object-list.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/data-lake-object-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/data-lake-object-preview.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/data-lake-query-results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/data-lake-query-results.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/setup-cloud9-terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/setup-cloud9-terminal.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/stream-processing-add-arn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/stream-processing-add-arn.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/stream-processing-dynamodb-create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/stream-processing-dynamodb-create.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/stream-processing-dynamodb-items.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/stream-processing-dynamodb-items.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/stream-processing-lambda-basic-information.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/stream-processing-lambda-basic-information.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/stream-processing-lambda-basic-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/stream-processing-lambda-basic-settings.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/stream-processing-lambda-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/stream-processing-lambda-code.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/stream-processing-lambda-environment-variables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/stream-processing-lambda-environment-variables.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/stream-processing-lambda-trigger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/stream-processing-lambda-trigger.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/stream-processing-review-policy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/stream-processing-review-policy.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/stream-processing-trigger-designer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/stream-processing-trigger-designer.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/stream-processing-trigger-enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/stream-processing-trigger-enabled.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/streaming-aggregation-rows-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/streaming-aggregation-rows-preview.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/streaming-aggregation-schema-discovery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/streaming-aggregation-schema-discovery.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/streaming-data-consumer-arn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/streaming-data-consumer-arn.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/streaming-data-create-stream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/streaming-data-create-stream.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/streaming-data-dashboard-configure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/streaming-data-dashboard-configure.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/streaming-data-identity-pool-id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/streaming-data-identity-pool-id.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/streaming-data-map-details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/streaming-data-map-details.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/streaming-data-map-two-unicorns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/streaming-data-map-two-unicorns.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/streaming-data-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/streaming-data-map.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/streaming-data-stream-arn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/streaming-data-stream-arn.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/streaming-data-stream-policy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/streaming-data-stream-policy.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/images/unicorn-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DataProcessing/guide/site/images/unicorn-icon.png -------------------------------------------------------------------------------- /DataProcessing/guide/site/js/guide.js: -------------------------------------------------------------------------------- 1 | $(window).on('load', function() { 2 | // Hide content from long blockquotes in scrolling div 3 | const details = $('details'); 4 | 5 | details.attr('open', true); 6 | 7 | $.find('pre').forEach(function(el) { 8 | const pre = $(el); 9 | 10 | if (pre.height() > 350) { 11 | pre.addClass('scrolling'); 12 | } 13 | }); 14 | 15 | details.attr('open', false); 16 | // "Copy to Clipboard" buttons 17 | $('button.copy').on('click', function(e) { 18 | const button = $(e.target) 19 | const textArea = $('textarea#buffer'); 20 | const previousButtonText = button.text(); 21 | const content = button.prev().text(); 22 | 23 | textArea.show().val(content).select(); 24 | document.execCommand('copy', false); 25 | textArea.hide().val(''); 26 | 27 | setTimeout(() => button.text(previousButtonText), 3000); 28 | button.text('Copied!'); 29 | }); 30 | 31 | // Set external links to open in new tab 32 | $('a[href^="http"').each((_, link) => link.target = 'blank'); 33 | }); 34 | -------------------------------------------------------------------------------- /DevOps/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/DevOps/.DS_Store -------------------------------------------------------------------------------- /DevOps/README.md: -------------------------------------------------------------------------------- 1 | # Serverless 데브옵스 워크샵 2 | 3 | 다음 링크에서 시작합니다: https://cicd.serverlessworkshops.io -------------------------------------------------------------------------------- /ImageProcessing/images/1st-state-machine-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/1st-state-machine-graph.png -------------------------------------------------------------------------------- /ImageProcessing/images/1st_execution_result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/1st_execution_result.png -------------------------------------------------------------------------------- /ImageProcessing/images/2nd-state-machine-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/2nd-state-machine-graph.png -------------------------------------------------------------------------------- /ImageProcessing/images/3-create-statemachine-select-role.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/3-create-statemachine-select-role.png -------------------------------------------------------------------------------- /ImageProcessing/images/3-initial-sfn-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/3-initial-sfn-code.png -------------------------------------------------------------------------------- /ImageProcessing/images/3rd-state-machine-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/3rd-state-machine-graph.png -------------------------------------------------------------------------------- /ImageProcessing/images/4-edit-state-machine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/4-edit-state-machine.png -------------------------------------------------------------------------------- /ImageProcessing/images/4-save-state-machine-definition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/4-save-state-machine-definition.png -------------------------------------------------------------------------------- /ImageProcessing/images/4-update-state-machine-definition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/4-update-state-machine-definition.png -------------------------------------------------------------------------------- /ImageProcessing/images/4th-state-machine-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/4th-state-machine-graph.png -------------------------------------------------------------------------------- /ImageProcessing/images/5-update-state-machine-with-parallel-step.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/5-update-state-machine-with-parallel-step.png -------------------------------------------------------------------------------- /ImageProcessing/images/6-update-state-machine-persistence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/6-update-state-machine-persistence.png -------------------------------------------------------------------------------- /ImageProcessing/images/already-indexed-face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/already-indexed-face.png -------------------------------------------------------------------------------- /ImageProcessing/images/bucket-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/bucket-icon.png -------------------------------------------------------------------------------- /ImageProcessing/images/cloudformation-delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/cloudformation-delete.png -------------------------------------------------------------------------------- /ImageProcessing/images/dynamodb_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/dynamodb_example.png -------------------------------------------------------------------------------- /ImageProcessing/images/initial-machine-sunglasses.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/initial-machine-sunglasses.png -------------------------------------------------------------------------------- /ImageProcessing/images/s3-console-empty-bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/s3-console-empty-bucket.png -------------------------------------------------------------------------------- /ImageProcessing/images/s3-console-select-bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/s3-console-select-bucket.png -------------------------------------------------------------------------------- /ImageProcessing/images/s3-empty-bucket-dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/s3-empty-bucket-dialog.png -------------------------------------------------------------------------------- /ImageProcessing/images/selfie/README.md: -------------------------------------------------------------------------------- 1 | ## Attribution 2 | 3 | This photo is from [https://www.pexels.com/photo/red-hand-iphone-smartphone-80673/](https://www.pexels.com/photo/red-hand-iphone-smartphone-80673/) and is under the CC0 license. -------------------------------------------------------------------------------- /ImageProcessing/images/selfie/selfie-picture.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/selfie/selfie-picture.jpeg -------------------------------------------------------------------------------- /ImageProcessing/images/test-execution-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/test-execution-1.png -------------------------------------------------------------------------------- /ImageProcessing/images/wild-rydes-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/images/wild-rydes-architecture.png -------------------------------------------------------------------------------- /ImageProcessing/src/cloudformation/publish-template.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd ../lambda-functions/thumbnail 4 | npm install 5 | echo "success installing npm dependencies!" 6 | cd ../copy-s3-object 7 | pip2.7 install -r requirements.txt -t . 8 | echo "success installing python dependencies!" 9 | cd ../../cloudformation 10 | 11 | listOfRegions="us-east-1 12 | us-east-2 13 | us-west-2 14 | eu-west-1 15 | ap-south-1 16 | ap-northeast-2 17 | ap-southeast-2 18 | ap-northeast-1" 19 | 20 | # change here to profile name being used 21 | profile=sfnworkshop 22 | 23 | for region in $listOfRegions 24 | do 25 | bucket="wildrydes-${region}" 26 | echo $bucket 27 | aws cloudformation package --s3-bucket ${bucket} --region ${region} --template ./module-setup.yaml --output-template-file setup-sam-transformed-${region}.yaml --profile ${profile} --s3-prefix ImageProcessing 28 | aws s3 cp setup-sam-transformed-${region}.yaml s3://${bucket}/ImageProcessing/setup-sam.yaml --profile ${profile} 29 | echo "deployed to $bucket" 30 | done 31 | -------------------------------------------------------------------------------- /ImageProcessing/src/lambda-functions/copy-s3-object/requirements.txt: -------------------------------------------------------------------------------- 1 | cfn-response==0.0.4 2 | -------------------------------------------------------------------------------- /ImageProcessing/src/lambda-functions/face-search/index.js: -------------------------------------------------------------------------------- 1 | const util = require('util'); 2 | const AWS = require('aws-sdk'); 3 | const rekognition = new AWS.Rekognition(); 4 | 5 | exports.handler = (event, context, callback) => { 6 | console.log("Reading input from event:\n", util.inspect(event, {depth: 5})); 7 | 8 | const srcBucket = event.s3Bucket; 9 | // Object key may have spaces or unicode non-ASCII characters. 10 | const srcKey = decodeURIComponent(event.s3Key.replace(/\+/g, " ")); 11 | 12 | var params = { 13 | CollectionId: process.env.REKOGNITION_COLLECTION_ID, 14 | Image: { 15 | S3Object: { 16 | Bucket: srcBucket, 17 | Name: srcKey 18 | } 19 | }, 20 | FaceMatchThreshold: 70.0, 21 | MaxFaces: 3 22 | }; 23 | rekognition.searchFacesByImage(params).promise().then(data => { 24 | if (data.FaceMatches.length > 0) { 25 | callback(new FaceAlreadyExistsError()); 26 | } else { 27 | callback(null, null); 28 | } 29 | }).catch(err => { 30 | callback(err); 31 | }); 32 | }; 33 | 34 | function FaceAlreadyExistsError() { 35 | this.name = "FaceAlreadyExistsError"; 36 | this.message = "Face in the picture is already in the system. "; 37 | } 38 | FaceAlreadyExistsError.prototype = new Error(); 39 | -------------------------------------------------------------------------------- /ImageProcessing/src/lambda-functions/face-search/test-input.json: -------------------------------------------------------------------------------- 1 | { 2 | "userId": "johndoe", 3 | "s3Bucket": "wildrydes-riderphotos-johndoe", 4 | "s3Key": "1_happy_face.jpg" 5 | } -------------------------------------------------------------------------------- /ImageProcessing/src/lambda-functions/index-face/index.js: -------------------------------------------------------------------------------- 1 | const util = require('util'); 2 | const AWS = require('aws-sdk'); 3 | const rekognition = new AWS.Rekognition(); 4 | 5 | exports.handler = (event, context, callback) => { 6 | const srcBucket = event.s3Bucket; 7 | // Object key may have spaces or unicode non-ASCII characters. 8 | const srcKey = decodeURIComponent(event.s3Key.replace(/\+/g, " ")); 9 | 10 | var params = { 11 | CollectionId: process.env.REKOGNITION_COLLECTION_ID, 12 | DetectionAttributes: [], 13 | ExternalImageId: event.userId, 14 | Image: { 15 | S3Object: { 16 | Bucket: srcBucket, 17 | Name: srcKey 18 | } 19 | } 20 | }; 21 | rekognition.indexFaces(params).promise().then(data => { 22 | callback(null, data['FaceRecords'][0]['Face']); 23 | }).catch(err => { 24 | callback(err); 25 | }); 26 | } -------------------------------------------------------------------------------- /ImageProcessing/src/lambda-functions/mock-notification/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const util = require('util'); 4 | 5 | exports.handler = (event, context, callback) => { 6 | 7 | console.log("Reading input from event:\n", util.inspect(event, {depth: 5})); 8 | 9 | var title = ""; 10 | var message = ""; 11 | 12 | if (event["errorInfo"]) { 13 | title = event["errorInfo"]["Error"]; 14 | var errorCause = JSON.parse(event["errorInfo"]["Cause"]); 15 | message = errorCause["errorMessage"]; 16 | } 17 | 18 | callback(null, {"messageToSend": {"title": title, "message": message}}) 19 | 20 | }; 21 | -------------------------------------------------------------------------------- /ImageProcessing/src/lambda-functions/mock-notification/test-input.json: -------------------------------------------------------------------------------- 1 | { 2 | "userId": "johndoe", 3 | "s3Bucket": "wildrydes-riderphotos-johndoe", 4 | "s3Key": "2_sunglass_face.jpg", 5 | "errorInfo": { 6 | "Error": "PhotoDoesNotMeetRequirementError", 7 | "Cause": "{\"errorMessage\":\"Face is wearing sunglasses\",\"errorType\":\"PhotoDoesNotMeetRequirementError\",\"stackTrace\":[\"Object. (/var/task/index.js:54:46)\",\"Module._compile (module.js:409:26)\",\"Object.Module._extensions..js (module.js:416:10)\",\"Module.load (module.js:343:32)\",\"Function.Module._load (module.js:300:12)\",\"Module.require (module.js:353:17)\",\"require (internal/module.js:12:17)\"]}" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /ImageProcessing/src/lambda-functions/persist-metadata/index.js: -------------------------------------------------------------------------------- 1 | // dependencies 2 | const AWS = require('aws-sdk'); 3 | const util = require('util'); 4 | 5 | const tableName = process.env.RIDER_PHOTOS_DDB_TABLE; 6 | 7 | const docClient = new AWS.DynamoDB.DocumentClient({ 8 | region: process.env.AWS_REGION 9 | }); 10 | 11 | exports.handler = (event, context, callback) => { 12 | console.log("Reading input from event:\n", util.inspect(event, {depth: 5})); 13 | 14 | const dynamoItem = { 15 | Username: event.userId, 16 | s3key: event.s3Key, 17 | s3bucket: event.s3Bucket 18 | }; 19 | 20 | var indexDetails = event['parallelResult'][0]; 21 | var thumbnailDetails = event['parallelResult'][1]; 22 | dynamoItem['faceId'] = indexDetails['FaceId']; 23 | dynamoItem['thumbnail'] = thumbnailDetails['thumbnail']; 24 | docClient.put({ 25 | TableName: tableName, 26 | Item: dynamoItem 27 | // uncomment below if you want to disallow overwriting if the user is already in the table 28 | // ,ConditionExpression: 'attribute_not_exists (Username)' 29 | }).promise().then(data => { 30 | callback(null, data); 31 | }).catch(err => { 32 | callback(err); 33 | }) 34 | 35 | } 36 | -------------------------------------------------------------------------------- /ImageProcessing/src/lambda-functions/thumbnail/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "thumbnail", 3 | "version": "1.0.0", 4 | "description": "generate thumbnail of an image stored in S3", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Angela Wang", 10 | "license": "Apache 2.0", 11 | "dependencies": { 12 | "gm": "^1.23.0", 13 | "bluebird": "^3.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ImageProcessing/src/lambda-functions/thumbnail/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "userId": "johndoe", 3 | "s3Bucket": "wildrydes-riderphotos-johndoe", 4 | "s3Key": "1_happy_face.jpg" 5 | } 6 | -------------------------------------------------------------------------------- /ImageProcessing/test-images/1_happy_face.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/test-images/1_happy_face.jpg -------------------------------------------------------------------------------- /ImageProcessing/test-images/2_sunglass_face.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/test-images/2_sunglass_face.jpg -------------------------------------------------------------------------------- /ImageProcessing/test-images/3_multiple_faces.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/test-images/3_multiple_faces.jpg -------------------------------------------------------------------------------- /ImageProcessing/test-images/4_no_face.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/ImageProcessing/test-images/4_no_face.jpg -------------------------------------------------------------------------------- /MultiRegion/1_API/.gitignore: -------------------------------------------------------------------------------- 1 | *-output.yaml 2 | -------------------------------------------------------------------------------- /MultiRegion/1_API/health-check.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const AWS = require("aws-sdk"); 4 | const table = process.env.TABLE_NAME; 5 | 6 | exports.handler = (event, context, callback) => { 7 | 8 | const docClient = new AWS.DynamoDB.DocumentClient(); 9 | 10 | const params = { 11 | TableName: table 12 | }; 13 | 14 | docClient.scan(params, function (err, data) { 15 | 16 | let response = {}; 17 | let body = {}; 18 | body.region = process.env.AWS_REGION; 19 | 20 | 21 | if (err) { 22 | 23 | console.log(JSON.stringify(err, null, 2)); 24 | 25 | body.message = ("Could not read from DynamoDB table."); 26 | 27 | response = { 28 | statusCode: 500, 29 | headers: { 30 | "Access-Control-Allow-Origin" : "*", // Required for CORS support to work 31 | "Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS 32 | }, 33 | body: JSON.stringify(body) 34 | }; 35 | 36 | } else { 37 | 38 | body.message = ("Successful response reading from DynamoDB table."); 39 | 40 | response = { 41 | statusCode: 200, 42 | headers: { 43 | "Access-Control-Allow-Origin" : "*", // Required for CORS support to work 44 | "Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS 45 | }, 46 | body: JSON.stringify(body) 47 | }; 48 | } 49 | 50 | 51 | 52 | callback(null, response); 53 | }); 54 | 55 | }; -------------------------------------------------------------------------------- /MultiRegion/1_API/images/accept-replace-cors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/accept-replace-cors.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/actions-enable-cors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/actions-enable-cors.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/api-child-resource-cors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/api-child-resource-cors.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/api-lambda-permission.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/api-lambda-permission.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/api-method-get-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/api-method-get-setup.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/api-method-get.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/api-method-get.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/api-method-health-get-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/api-method-health-get-setup.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/api-method-post-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/api-method-post-setup.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/api-ticket-health.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/api-ticket-health.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/create-example-api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/create-example-api.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/create-lambda-function.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/create-lambda-function.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/create-lambda-ticket-get.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/create-lambda-ticket-get.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/create-new-api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/create-new-api.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/create-policy-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/create-policy-1.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/create-policy-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/create-policy-2.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/create-role-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/create-role-1.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/create-role-final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/create-role-final.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/create-role-lambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/create-role-lambda.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/create-role-select-policy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/create-role-select-policy.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/deploy-api-prod-new-stage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/deploy-api-prod-new-stage.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/deploy-api-prod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/deploy-api-prod.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/dynamodb-create-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/dynamodb-create-button.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/dynamodb-create-sxrtickets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/dynamodb-create-sxrtickets.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/lambda-author-scratch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/lambda-author-scratch.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/mr-api-create-bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/mr-api-create-bucket.png -------------------------------------------------------------------------------- /MultiRegion/1_API/images/test-api-gateway-endpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/1_API/images/test-api-gateway-endpoint.png -------------------------------------------------------------------------------- /MultiRegion/1_API/tickets-get.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const AWS = require("aws-sdk"); 4 | const table = process.env.TABLE_NAME; 5 | 6 | exports.handler = (event, context, callback) => { 7 | 8 | const docClient = new AWS.DynamoDB.DocumentClient(); 9 | 10 | const params = { 11 | TableName: table 12 | }; 13 | 14 | docClient.scan(params, function (err, data) { 15 | if (err) 16 | console.log(JSON.stringify(err, null, 2)); 17 | else { 18 | 19 | let response = { 20 | statusCode: 200, 21 | headers: { 22 | "Access-Control-Allow-Origin" : "*", // Required for CORS support to work 23 | "Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS 24 | }, 25 | body: JSON.stringify(data) 26 | }; 27 | 28 | callback(null, response); 29 | } 30 | }); 31 | 32 | }; -------------------------------------------------------------------------------- /MultiRegion/1_API/wild-rydes-dynamodb-get.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version": "2012-10-17", 3 | "Statement": [ 4 | { 5 | "Action": [ 6 | "dynamodb:Scan", 7 | "dynamodb:GetItem", 8 | "logs:CreateLogGroup", 9 | "logs:CreateLogStream", 10 | "logs:PutLogEvents" 11 | ], 12 | "Resource": "*", 13 | "Effect": "Allow" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /MultiRegion/1_API/wild-rydes-dynamodb-post.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version": "2012-10-17", 3 | "Statement": [ 4 | { 5 | "Action": [ 6 | "dynamodb:PutItem", 7 | "logs:CreateLogGroup", 8 | "logs:CreateLogStream", 9 | "logs:PutLogEvents" 10 | ], 11 | "Resource": "*", 12 | "Effect": "Allow" 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /MultiRegion/1_API/wild-rydes-dynamodb-replication.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version": "2012-10-17", 3 | "Statement": [ 4 | { 5 | "Action": [ 6 | "dynamodb:PutItem", 7 | "dynamodb:GetItem", 8 | "dynamodb:GetRecords", 9 | "dynamodb:GetShardIterator", 10 | "dynamodb:DescribeStream", 11 | "dynamodb:ListStreams", 12 | "dynamodb:DeleteItem", 13 | "kinesis:*", 14 | "logs:CreateLogGroup", 15 | "logs:CreateLogStream", 16 | "logs:PutLogEvents" 17 | ], 18 | "Resource": "*", 19 | "Effect": "Allow" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | 8 | # dependencies 9 | /node_modules 10 | 11 | # IDEs and editors 12 | /.idea 13 | .project 14 | .classpath 15 | .c9/ 16 | *.launch 17 | .settings/ 18 | *.sublime-workspace 19 | 20 | # IDE - VSCode 21 | .vscode/* 22 | !.vscode/settings.json 23 | !.vscode/tasks.json 24 | !.vscode/launch.json 25 | !.vscode/extensions.json 26 | 27 | # misc 28 | /.sass-cache 29 | /connect.lock 30 | /coverage 31 | /libpeerconnection.log 32 | npm-debug.log 33 | testem.log 34 | /typings 35 | yarn-error.log 36 | 37 | # e2e 38 | /e2e/*.js 39 | /e2e/*.map 40 | 41 | # System Files 42 | .DS_Store 43 | Thumbs.db 44 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/cfn/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | This yaml file is used to create the necessary cognito 3 | resources, e.g. user pool, identity pool, etc. 4 | 5 | 6 | 7 | 8 | # Instructions 9 | 10 | - cd into cfn folder and execute the following. 11 | 12 | ```bash 13 | aws cloudformation deploy \ 14 | --template-file ticket-service-output.yaml \ 15 | --stack-name ticket-service-api \ 16 | --capabilities CAPABILITY_IAM 17 | ``` 18 | 19 | - You will use the output of the executed template to update reference ids in 20 | the UI code: [environment.ts](../src/environments/environment.ts) (See TODO Comments in file) 21 | 22 | 23 | 24 | # Useful commands 25 | 26 | ```bash 27 | aws cloudformation validate-template --template-body file://cognito.yaml 28 | ``` 29 | 30 | 31 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/e2e/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { AppPage } from './app.po'; 2 | 3 | describe('sxr-ui App', () => { 4 | let page: AppPage; 5 | 6 | beforeEach(() => { 7 | page = new AppPage(); 8 | }); 9 | 10 | it('should display welcome message', () => { 11 | page.navigateTo(); 12 | expect(page.getParagraphText()).toEqual('Welcome to app!'); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/e2e/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element } from 'protractor'; 2 | 3 | export class AppPage { 4 | navigateTo() { 5 | return browser.get('/'); 6 | } 7 | 8 | getParagraphText() { 9 | return element(by.css('app-root h1')).getText(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/e2e", 5 | "baseUrl": "./", 6 | "module": "commonjs", 7 | "target": "es5", 8 | "types": [ 9 | "jasmine", 10 | "jasminewd2", 11 | "node" 12 | ] 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/app-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/app-screenshot.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/choose-web-distribution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/choose-web-distribution.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/cloudfront-domain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/cloudfront-domain.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/configure-origin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/configure-origin.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/create-distribution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/create-distribution.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/facebook-add-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/facebook-add-app.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/facebook-add-platform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/facebook-add-platform.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/facebook-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/facebook-config.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/facebook-make-public.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/facebook-make-public.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/facebook-select-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/facebook-select-settings.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/facebook-select-website.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/facebook-select-website.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/facebook-website-url.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/facebook-website-url.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/set-cloudfront-https.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/set-cloudfront-https.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/set-cloudfront-root.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/set-cloudfront-root.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/images/set-cloudfront-ttl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/images/set-cloudfront-ttl.png -------------------------------------------------------------------------------- /MultiRegion/2_UI/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage-istanbul-reporter'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client:{ 16 | clearContext: false // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | coverageIstanbulReporter: { 19 | dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ], 20 | fixWebpackSourcePaths: true 21 | }, 22 | 23 | reporters: ['progress', 'kjhtml'], 24 | port: 9876, 25 | colors: true, 26 | logLevel: config.LOG_INFO, 27 | autoWatch: true, 28 | browsers: ['Chrome'], 29 | singleRun: false 30 | }); 31 | }; 32 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/protractor.conf.js: -------------------------------------------------------------------------------- 1 | // Protractor configuration file, see link for more information 2 | // https://github.com/angular/protractor/blob/master/lib/config.ts 3 | 4 | const { SpecReporter } = require('jasmine-spec-reporter'); 5 | 6 | exports.config = { 7 | allScriptsTimeout: 11000, 8 | specs: [ 9 | './e2e/**/*.e2e-spec.ts' 10 | ], 11 | capabilities: { 12 | 'browserName': 'chrome' 13 | }, 14 | directConnect: true, 15 | baseUrl: 'http://localhost:4200/', 16 | framework: 'jasmine', 17 | jasmineNodeOpts: { 18 | showColors: true, 19 | defaultTimeoutInterval: 30000, 20 | print: function() {} 21 | }, 22 | onPrepare() { 23 | require('ts-node').register({ 24 | project: 'e2e/tsconfig.e2e.json' 25 | }); 26 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/app-routing.module.ts: -------------------------------------------------------------------------------- 1 | import {RouterModule, Routes} from '@angular/router'; 2 | import {NgModule} from '@angular/core'; 3 | import {LoginComponent} from './views/login/login.component'; 4 | 5 | const mainRoutes: Routes = [ 6 | { 7 | path: '', 8 | loadChildren: './views/views.module#ViewsModule', 9 | }, 10 | { 11 | path: 'login', 12 | component: LoginComponent 13 | } 14 | 15 | ]; 16 | 17 | @NgModule({ 18 | imports: [ 19 | RouterModule.forRoot( 20 | mainRoutes, 21 | { useHash: true } 22 | // ,{enableTracing: true} 23 | ) 24 | ], 25 | exports: [RouterModule] 26 | }) 27 | 28 | export class AppRoutingModule { } 29 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/app.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/src/app/app.component.css -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, async } from '@angular/core/testing'; 2 | 3 | import { AppComponent } from './app.component'; 4 | 5 | describe('AppComponent', () => { 6 | beforeEach(async(() => { 7 | TestBed.configureTestingModule({ 8 | declarations: [ 9 | AppComponent 10 | ], 11 | }).compileComponents(); 12 | })); 13 | 14 | it('should create the app', async(() => { 15 | const fixture = TestBed.createComponent(AppComponent); 16 | const app = fixture.debugElement.componentInstance; 17 | expect(app).toBeTruthy(); 18 | })); 19 | 20 | it(`should have as title 'app'`, async(() => { 21 | const fixture = TestBed.createComponent(AppComponent); 22 | const app = fixture.debugElement.componentInstance; 23 | expect(app.title).toEqual('app'); 24 | })); 25 | 26 | it('should render title in a h1 tag', async(() => { 27 | const fixture = TestBed.createComponent(AppComponent); 28 | fixture.detectChanges(); 29 | const compiled = fixture.debugElement.nativeElement; 30 | expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!'); 31 | })); 32 | }); 33 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import {Component, OnInit, ViewContainerRef} from '@angular/core'; 2 | import {LoggedInCallback} from './services/cognito.service'; 3 | import {environment} from '../environments/environment'; 4 | import {Router} from '@angular/router'; 5 | 6 | @Component({ 7 | selector: 'app-root', 8 | templateUrl: './app.component.html', 9 | styleUrls: ['./app.component.css'] 10 | }) 11 | export class AppComponent implements OnInit, LoggedInCallback { 12 | 13 | constructor(public router: Router) {} 14 | 15 | ngOnInit() { 16 | 17 | const errorMessages = []; 18 | 19 | console.log('AppComponent: Checking configuration values.'); 20 | 21 | if (!environment.cognitoIdentityPoolId) { 22 | errorMessages.push('Cognito Identity Pool not configured!\n\t The id is available in cloud formation output section.\n'); 23 | } 24 | 25 | if (!environment.facebookAppId) { 26 | errorMessages.push('Facebook App Id not configured! \n\t This is the ID from your facebook developer portal.\n'); 27 | } 28 | 29 | if (!environment.ticketAPI) { 30 | errorMessages.push('Ticket API not configured!'); 31 | } 32 | 33 | if (errorMessages.length > 0) { 34 | this.router.navigate(['/troubleshooting']); 35 | } 36 | 37 | } 38 | 39 | isLoggedIn(message: string, isLoggedIn: boolean) { 40 | 41 | console.log('AppComponent: the user is authenticated: ' + isLoggedIn); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserModule } from '@angular/platform-browser'; 2 | import { NgModule } from '@angular/core'; 3 | 4 | import { AppComponent } from './app.component'; 5 | import {CognitoLoginService, CognitoService} from './services/cognito.service'; 6 | import {TicketService} from './services/ticket.service'; 7 | 8 | import { FacebookModule } from 'ngx-facebook'; 9 | import {HttpModule} from '@angular/http'; 10 | import {FormsModule} from '@angular/forms'; 11 | import { LoginComponent } from './views/login/login.component'; 12 | import {AppRoutingModule} from './app-routing.module'; 13 | import {AuthGuard} from './shared/guard/auth.guard'; 14 | import {ConfigGuard} from './shared/guard/config.guard'; 15 | import {ToastaModule} from 'ngx-toasta'; 16 | import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; 17 | import { AmplifyAngularModule, AmplifyService } from 'aws-amplify-angular'; 18 | 19 | @NgModule({ 20 | declarations: [ 21 | AppComponent, 22 | LoginComponent 23 | ], 24 | imports: [ 25 | BrowserModule, 26 | FormsModule, 27 | HttpModule, 28 | FacebookModule.forRoot(), 29 | AppRoutingModule, 30 | BrowserAnimationsModule, 31 | ToastaModule.forRoot(), 32 | AmplifyAngularModule 33 | ], 34 | providers: [ 35 | CognitoService, 36 | CognitoLoginService, 37 | TicketService, 38 | AuthGuard, 39 | ConfigGuard, 40 | AmplifyService 41 | ], 42 | exports: [BrowserModule, ToastaModule], 43 | bootstrap: [AppComponent] 44 | }) 45 | 46 | export class AppModule { } 47 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/components/ticket-list/ticket-list.component.css: -------------------------------------------------------------------------------- 1 | .ng-valid[required], .ng-valid.required { 2 | border-left: 5px solid #42A948; /* green */ 3 | } 4 | 5 | .ng-invalid:not(form) { 6 | border-left: 5px solid #a94442; /* red */ 7 | } 8 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/components/ticket-list/ticket-list.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TicketListComponent } from './ticket-list.component'; 4 | 5 | describe('TicketListComponent', () => { 6 | let component: TicketListComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ TicketListComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TicketListComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/model/ticket.ts: -------------------------------------------------------------------------------- 1 | export interface ITicket { 2 | id: number; 3 | description: string; 4 | assigned: string; 5 | priority: string; 6 | status: string; 7 | createdBy: string; 8 | createdOn: string; 9 | } 10 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/services/ticket.service.ts: -------------------------------------------------------------------------------- 1 | import {Http, RequestOptions, Response, Headers} from '@angular/http'; 2 | import { Injectable } from '@angular/core'; 3 | import {environment} from '../../environments/environment'; 4 | import 'rxjs/add/operator/map'; 5 | import {Observable} from 'rxjs'; 6 | import {ITicket} from '../model/ticket'; 7 | 8 | @Injectable() 9 | export class TicketService { 10 | 11 | private _API_ROOT = environment.ticketAPI; 12 | 13 | constructor ( private http: Http) { 14 | 15 | } 16 | 17 | /** 18 | * 19 | * @returns {Observable} 20 | */ 21 | getTickets() { 22 | return this.http.get(this._API_ROOT + 'ticket') 23 | .map((res: Response) => res.json()); 24 | } 25 | 26 | getHealth() { 27 | return this.http.get(this._API_ROOT + 'health') 28 | .map((res: Response) => res.json()); 29 | } 30 | 31 | addTicket(ticket: ITicket): Observable { 32 | 33 | const headers = new Headers({ 'Content-Type': 'application/json' }); 34 | const options = new RequestOptions({ headers: headers }); 35 | 36 | return this.http.post(this._API_ROOT + 'ticket', ticket, options) 37 | .map(this.extractData); 38 | // .catch(this.handleErrorObservable); 39 | 40 | } 41 | 42 | private extractData(res: Response) { 43 | const body = res.json(); 44 | return body || {}; 45 | } 46 | 47 | private handleErrorObservable (error: Response | any) { 48 | console.error(error.message || error); 49 | return Observable.throw(error.message || error); 50 | } 51 | 52 | private handleErrorPromise (error: Response | any) { 53 | console.error(error.message || error); 54 | return Promise.reject(error.message || error); 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/shared/guard/auth.guard.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { CanActivate } from '@angular/router'; 3 | import { Router } from '@angular/router'; 4 | import {CognitoService} from '../../services/cognito.service'; 5 | 6 | @Injectable() 7 | export class AuthGuard implements CanActivate { 8 | 9 | constructor(private router: Router, 10 | public cognitoService: CognitoService) { } 11 | 12 | async canActivate() { 13 | 14 | if ( this.cognitoService.isLoggedin()) { 15 | return true; 16 | } 17 | 18 | this.router.navigate(['/login']); 19 | 20 | return false; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/shared/guard/config.guard.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { CanActivate } from '@angular/router'; 3 | import { Router } from '@angular/router'; 4 | import {environment} from '../../../environments/environment'; 5 | 6 | @Injectable() 7 | export class ConfigGuard implements CanActivate { 8 | 9 | constructor(private router: Router) { } 10 | 11 | canActivate() { 12 | 13 | const errorMessages = []; 14 | 15 | if (!environment.cognitoIdentityPoolId) { 16 | errorMessages.push('Cognito Identity Pool not configured!\n\t The id is available in cloud formation output section.\n'); 17 | } 18 | 19 | if (!environment.facebookAppId) { 20 | errorMessages.push('Facebook App Id not configured! \n\t This is the ID from your facebook developer portal.\n'); 21 | } 22 | 23 | if (!environment.ticketAPI) { 24 | errorMessages.push('Ticket API not configured!'); 25 | } 26 | 27 | if (environment.ticketAPI && !(environment.ticketAPI.slice(-1) === '/')) { 28 | errorMessages.push('Ticket API URL needs a trailing slash!'); 29 | } 30 | 31 | if (errorMessages.length > 0) { 32 | this.router.navigate(['/troubleshooting']); 33 | return false; 34 | } 35 | 36 | return true; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/shared/index.ts: -------------------------------------------------------------------------------- 1 | export * from './guard/auth.guard'; 2 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/cognito-tools/cognito-tools.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/src/app/views/cognito-tools/cognito-tools.component.css -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/cognito-tools/cognito-tools.component.html: -------------------------------------------------------------------------------- 1 |

2 | Coming Soon. 3 |

4 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/cognito-tools/cognito-tools.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { CognitoToolsComponent } from './cognito-tools.component'; 4 | 5 | describe('CognitoToolsComponent', () => { 6 | let component: CognitoToolsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ CognitoToolsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(CognitoToolsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/cognito-tools/cognito-tools.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-cognito-tools', 5 | templateUrl: './cognito-tools.component.html', 6 | styleUrls: ['./cognito-tools.component.css'] 7 | }) 8 | export class CognitoToolsComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/home/home.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/src/app/views/home/home.component.css -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/home/home.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Welcome to Wild Rydes Trouble Ticket System.

4 |

To enter a ticket into our ticketing system please navigate to the ticketing console by pressing the button below:.

5 |

Ticket Console »

6 |
7 |
8 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/home/home.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeComponent } from './home.component'; 4 | 5 | describe('HomeComponent', () => { 6 | let component: HomeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ HomeComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(HomeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-home', 5 | templateUrl: './home.component.html', 6 | styleUrls: ['./home.component.css'] 7 | }) 8 | export class HomeComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/login/login.component.css: -------------------------------------------------------------------------------- 1 | .ng-valid[required], .ng-valid.required { 2 | border-left: 5px solid #42A948; /* green */ 3 | } 4 | 5 | .ng-invalid:not(form) { 6 | border-left: 5px solid #a94442; /* red */ 7 | } 8 | 9 | 10 | .btn-facebook { 11 | color: #fff; 12 | background-color: #3b5998; 13 | border-color: rgba(0,0,0,0.2); 14 | color: white !important; 15 | } 16 | 17 | .btn-social { 18 | position: relative; 19 | padding-left: 44px; 20 | text-align: left; 21 | white-space: nowrap; 22 | overflow: hidden; 23 | text-overflow: ellipsis; 24 | } 25 | 26 | .btn-social:hover { 27 | color: #eee; 28 | } 29 | 30 | .btn-social :first-child { 31 | position: absolute; 32 | left: 0; 33 | top: 0; 34 | bottom: 0; 35 | width: 40px; 36 | padding: 7px; 37 | font-size: 1.6em; 38 | text-align: center; 39 | border-right: 1px solid rgba(0,0,0,0.2); 40 | } 41 | 42 | .Absolute-Center { 43 | margin: auto; 44 | position: absolute; 45 | top: 0; left: 0; bottom: 0; right: 0; 46 | } 47 | 48 | .Absolute-Center.is-Responsive { 49 | width: 50%; 50 | height: 50%; 51 | min-width: 200px; 52 | max-width: 400px; 53 | padding: 40px; 54 | } 55 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/login/login.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | 7 |
8 | Login 9 |
10 | 15 |
16 |
17 |
18 | 20 |
21 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/login/login.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { LoginComponent } from './login.component'; 4 | 5 | describe('LoginComponent', () => { 6 | let component: LoginComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ LoginComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(LoginComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/ticket/ticket.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/src/app/views/ticket/ticket.component.css -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/ticket/ticket.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/ticket/ticket.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TicketComponent } from './ticket.component'; 4 | 5 | describe('TicketComponent', () => { 6 | let component: TicketComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ TicketComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TicketComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/ticket/ticket.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-ticket', 5 | templateUrl: './ticket.component.html', 6 | styleUrls: ['./ticket.component.css'] 7 | }) 8 | export class TicketComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/ticket/ticket.module.ts: -------------------------------------------------------------------------------- 1 | import {NgModule} from '@angular/core'; 2 | import {TicketListComponent} from '../../components/ticket-list/ticket-list.component'; 3 | 4 | @NgModule({ 5 | imports: [ 6 | ], 7 | declarations: [ 8 | TicketListComponent 9 | ] 10 | }) 11 | 12 | export class TicketModule { } 13 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/troubleshooting/troubleshooting.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/src/app/views/troubleshooting/troubleshooting.component.css -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/troubleshooting/troubleshooting.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TroubleshootingComponent } from './troubleshooting.component'; 4 | 5 | describe('TroubleshootingComponent', () => { 6 | let component: TroubleshootingComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ TroubleshootingComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TroubleshootingComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/troubleshooting/troubleshooting.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import {environment} from '../../../environments/environment'; 3 | import {Router} from '@angular/router'; 4 | 5 | @Component({ 6 | selector: 'app-troubleshooting', 7 | templateUrl: './troubleshooting.component.html', 8 | styleUrls: ['./troubleshooting.component.css'] 9 | }) 10 | export class TroubleshootingComponent { 11 | 12 | public env: any; 13 | 14 | public invalidAPIURL: any; 15 | 16 | constructor(public router: Router) { 17 | 18 | this.env = environment; 19 | 20 | const errorMessages = []; 21 | 22 | console.log('AppComponent: Checking configuration values.'); 23 | 24 | if (!environment.cognitoIdentityPoolId) { 25 | errorMessages.push('Cognito Identity Pool not configured!\n\t The id is available in cloud formation output section.\n'); 26 | } 27 | 28 | if (!environment.facebookAppId) { 29 | errorMessages.push('Facebook App Id not configured! \n\t This is the ID from your facebook developer portal.\n'); 30 | } 31 | 32 | if (!environment.ticketAPI) { 33 | errorMessages.push('Ticket API not configured!'); 34 | } 35 | // 36 | if (environment.ticketAPI && !(environment.ticketAPI.slice(-1) === "/")) { 37 | errorMessages.push('Ticket API URL needs a trailing slash!'); 38 | this.invalidAPIURL = 'Ticket API URL needs a trailing slash!'; 39 | } 40 | 41 | console.log(errorMessages.join('\n')); 42 | 43 | if (errorMessages.length <= 0 ) { 44 | this.router.navigate(['/home']); 45 | } 46 | 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/views-routing.module.ts: -------------------------------------------------------------------------------- 1 | import {RouterModule, Routes} from '@angular/router'; 2 | import {NgModule} from '@angular/core'; 3 | import {ViewsComponent} from './views.component'; 4 | import {TicketComponent} from './ticket/ticket.component'; 5 | import {CognitoToolsComponent} from './cognito-tools/cognito-tools.component'; 6 | import {HomeComponent} from './home/home.component'; 7 | import {AuthGuard} from '../shared/guard/auth.guard'; 8 | import {TroubleshootingComponent} from './troubleshooting/troubleshooting.component'; 9 | import {ConfigGuard} from '../shared/guard/config.guard'; 10 | 11 | const viewsRoutes: Routes = [ 12 | { 13 | path: '', component: ViewsComponent, 14 | children: [ 15 | { 16 | path: 'home', component: HomeComponent 17 | }, 18 | { 19 | path: 'ticket', component: TicketComponent, canActivate: [ConfigGuard, AuthGuard] 20 | }, 21 | { 22 | path: 'cognito', component: CognitoToolsComponent 23 | }, 24 | { 25 | path: 'troubleshooting', component: TroubleshootingComponent 26 | } 27 | ] 28 | } 29 | ]; 30 | 31 | @NgModule({ 32 | imports: [ 33 | RouterModule.forChild(viewsRoutes) 34 | ], 35 | exports: [ 36 | RouterModule 37 | ] 38 | }) 39 | export class ViewsRoutingModule { } 40 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/views.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 15 |
16 | 17 |
18 | 19 |
20 | 21 | 38 |
39 | 40 | 41 | 42 |
43 |
44 |
45 |
46 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/views.component.ts: -------------------------------------------------------------------------------- 1 | import {Component, OnInit} from '@angular/core'; 2 | import {Router} from '@angular/router'; 3 | import {CognitoLoginService, CognitoService} from '../services/cognito.service'; 4 | import {TicketService} from '../services/ticket.service'; 5 | 6 | @Component({ 7 | selector: 'app-views', 8 | templateUrl: './views.component.html' 9 | }) 10 | export class ViewsComponent implements OnInit { 11 | 12 | public region = ''; 13 | 14 | constructor(public router: Router, 15 | public ticketService: TicketService, 16 | public cognitoService: CognitoService, // used in UI 17 | public cognitoLoginService: CognitoLoginService) { } 18 | 19 | ngOnInit() { 20 | if (this.router.url === '/') { 21 | this.router.navigate(['/home']); 22 | } 23 | 24 | this.callHealth(); 25 | } 26 | 27 | callHealth() { 28 | this.ticketService.getHealth() 29 | .subscribe( 30 | data => { 31 | console.log('DATA: ' + data); 32 | this.region = data.region; 33 | }, 34 | error => { 35 | console.log('ERROR: ' + error); 36 | 37 | } 38 | ); 39 | } 40 | 41 | onLoggedout() { 42 | 43 | this.cognitoLoginService.logout(); 44 | 45 | this.router.navigate(['/home']); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/app/views/views.module.ts: -------------------------------------------------------------------------------- 1 | import {NgModule} from '@angular/core'; 2 | import {ViewsComponent} from './views.component'; 3 | import {ViewsRoutingModule} from './views-routing.module'; 4 | import {TicketComponent} from './ticket/ticket.component'; 5 | import {CognitoToolsComponent} from './cognito-tools/cognito-tools.component'; 6 | import { HomeComponent } from './home/home.component'; 7 | import {TicketListComponent} from '../components/ticket-list/ticket-list.component'; 8 | import {FormsModule} from '@angular/forms'; 9 | import { NgxDatatableModule } from '@swimlane/ngx-datatable'; 10 | import { TroubleshootingComponent } from './troubleshooting/troubleshooting.component'; 11 | import {CommonModule} from '@angular/common'; 12 | import {ToastaModule} from 'ngx-toasta'; 13 | 14 | @NgModule({ 15 | imports: [ 16 | ViewsRoutingModule, 17 | FormsModule, 18 | NgxDatatableModule, 19 | CommonModule, 20 | ToastaModule.forRoot() 21 | ], 22 | declarations: [ 23 | ViewsComponent, 24 | TicketComponent, 25 | HomeComponent, 26 | CognitoToolsComponent, 27 | HomeComponent, 28 | TicketListComponent, 29 | TroubleshootingComponent 30 | ] 31 | }) 32 | export class ViewsModule { } 33 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/src/assets/.gitkeep -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/aws-exports.ts: -------------------------------------------------------------------------------- 1 | // WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten. 2 | 3 | const awsmobile = { 4 | "aws_project_region": "us-east-1", 5 | "aws_cognito_region": "us-east-1", 6 | "aws_user_pools_id": "us-east-1_bABrRhLTs", 7 | "aws_user_pools_web_client_id": "2vh6f45v5l86vnpu19uc65vopd" 8 | }; 9 | 10 | 11 | export default awsmobile; 12 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | 3 | production: true, 4 | 5 | // TODO: make sure you have the correct region 6 | region: 'eu-west-1', 7 | 8 | 9 | // TODO: This id can be retrieved in output section of the cognito ui 10 | // cloud formation stack. 11 | cognitoIdentityPoolId: '', 12 | 13 | // TODO: Facebook app id can be retrieved from the application in your 14 | // facebook developer account. 15 | facebookAppId: '', 16 | 17 | // TODO: The API URL is available in the API Gateway console under Stage 18 | // NOTE: don't forget trailing "/" For example: 19 | // https://api.example.com/prod/ 20 | ticketAPI: '' 21 | 22 | }; 23 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/2_UI/src/favicon.ico -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SXR 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 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | import Amplify from 'aws-amplify'; 8 | 9 | Amplify.configure({ 10 | Auth: { 11 | 12 | // REQUIRED only for Federated Authentication - Amazon Cognito Identity Pool ID 13 | identityPoolId: environment.cognitoIdentityPoolId, 14 | 15 | // REQUIRED - Amazon Cognito Region 16 | region: environment.region 17 | } 18 | }); 19 | 20 | 21 | if (environment.production) { 22 | enableProdMode(); 23 | } 24 | 25 | platformBrowserDynamic().bootstrapModule(AppModule); 26 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/_responsive.scss: -------------------------------------------------------------------------------- 1 | @media screen and (max-width: 992px) { 2 | .push-right { 3 | .sidebar { 4 | left: 235px !important; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/app.scss: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | @import "bootstrap/bootstrap"; 3 | @import "responsive"; 4 | @import "awsui/awsui"; 5 | @import "toasta/toasta"; 6 | @import '~@swimlane/ngx-datatable/release/index.css'; 7 | @import '~@swimlane/ngx-datatable/release/themes/material.css'; 8 | @import '~@swimlane/ngx-datatable/release/assets/icons.css'; 9 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/awsui/awsui.scss: -------------------------------------------------------------------------------- 1 | @import "components"; 2 | @import "base-styles/grid"; 3 | @import "base-styles/home"; 4 | @import "base-styles/utilities"; 5 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | padding: $alert-padding-y $alert-padding-x; 7 | margin-bottom: $alert-margin-bottom; 8 | border: $alert-border-width solid transparent; 9 | @include border-radius($alert-border-radius); 10 | } 11 | 12 | // Headings for larger alerts 13 | .alert-heading { 14 | // Specified to prevent conflicts of changing $headings-color 15 | color: inherit; 16 | } 17 | 18 | // Provide class for links that match alerts 19 | .alert-link { 20 | font-weight: $alert-link-font-weight; 21 | } 22 | 23 | 24 | // Dismissible alerts 25 | // 26 | // Expand the right padding and account for the close button's positioning. 27 | 28 | .alert-dismissible { 29 | // Adjust close link position 30 | .close { 31 | position: relative; 32 | top: -$alert-padding-y; 33 | right: -$alert-padding-x; 34 | padding: $alert-padding-y $alert-padding-x; 35 | color: inherit; 36 | } 37 | } 38 | 39 | 40 | // Alternate styles 41 | // 42 | // Generate contextual modifier classes for colorizing the alert. 43 | 44 | .alert-success { 45 | @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text); 46 | } 47 | .alert-info { 48 | @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text); 49 | } 50 | .alert-warning { 51 | @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text); 52 | } 53 | .alert-danger { 54 | @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text); 55 | } 56 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | padding: $breadcrumb-padding-y $breadcrumb-padding-x; 3 | margin-bottom: $spacer-y; 4 | list-style: none; 5 | background-color: $breadcrumb-bg; 6 | @include border-radius($border-radius); 7 | @include clearfix; 8 | } 9 | 10 | .breadcrumb-item { 11 | float: left; 12 | 13 | // The separator between breadcrumbs (by default, a forward-slash: "/") 14 | + .breadcrumb-item::before { 15 | display: inline-block; // Suppress underlining of the separator in modern browsers 16 | padding-right: $breadcrumb-item-padding; 17 | padding-left: $breadcrumb-item-padding; 18 | color: $breadcrumb-divider-color; 19 | content: "#{$breadcrumb-divider}"; 20 | } 21 | 22 | // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built 23 | // without `
    `s. The `::before` pseudo-element generates an element 24 | // *within* the .breadcrumb-item and thereby inherits the `text-decoration`. 25 | // 26 | // To trick IE into suppressing the underline, we give the pseudo-element an 27 | // underline and then immediately remove it. 28 | + .breadcrumb-item:hover::before { 29 | text-decoration: underline; 30 | } 31 | + .breadcrumb-item:hover::before { 32 | text-decoration: none; 33 | } 34 | 35 | &.active { 36 | color: $breadcrumb-active-color; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_close.scss: -------------------------------------------------------------------------------- 1 | .close { 2 | float: right; 3 | font-size: $close-font-size; 4 | font-weight: $close-font-weight; 5 | line-height: 1; 6 | color: $close-color; 7 | text-shadow: $close-text-shadow; 8 | opacity: .5; 9 | 10 | @include hover-focus { 11 | color: $close-color; 12 | text-decoration: none; 13 | cursor: pointer; 14 | opacity: .75; 15 | } 16 | } 17 | 18 | // Additional properties for button version 19 | // iOS requires the button element instead of an anchor tag. 20 | // If you want the anchor version, it requires `href="#"`. 21 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 22 | 23 | // scss-lint:disable QualifyingElement 24 | button.close { 25 | padding: 0; 26 | cursor: pointer; 27 | background: transparent; 28 | border: 0; 29 | -webkit-appearance: none; 30 | } 31 | // scss-lint:enable QualifyingElement 32 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_code.scss: -------------------------------------------------------------------------------- 1 | // Inline and block code styles 2 | code, 3 | kbd, 4 | pre, 5 | samp { 6 | font-family: $font-family-monospace; 7 | } 8 | 9 | // Inline code 10 | code { 11 | padding: $code-padding-y $code-padding-x; 12 | font-size: $code-font-size; 13 | color: $code-color; 14 | background-color: $code-bg; 15 | @include border-radius($border-radius); 16 | 17 | // Streamline the style when inside anchors to avoid broken underline and more 18 | a > & { 19 | padding: 0; 20 | color: inherit; 21 | background-color: inherit; 22 | } 23 | } 24 | 25 | // User input typically entered via keyboard 26 | kbd { 27 | padding: $code-padding-y $code-padding-x; 28 | font-size: $code-font-size; 29 | color: $kbd-color; 30 | background-color: $kbd-bg; 31 | @include border-radius($border-radius-sm); 32 | @include box-shadow($kbd-box-shadow); 33 | 34 | kbd { 35 | padding: 0; 36 | font-size: 100%; 37 | font-weight: $nested-kbd-font-weight; 38 | @include box-shadow(none); 39 | } 40 | } 41 | 42 | // Blocks of code 43 | pre { 44 | display: block; 45 | margin-top: 0; 46 | margin-bottom: 1rem; 47 | font-size: $code-font-size; 48 | color: $pre-color; 49 | 50 | // Account for some code outputs that place code tags in pre tags 51 | code { 52 | padding: 0; 53 | font-size: inherit; 54 | color: inherit; 55 | background-color: transparent; 56 | border-radius: 0; 57 | } 58 | } 59 | 60 | // Enable scrollable blocks of code 61 | .pre-scrollable { 62 | max-height: $pre-scrollable-max-height; 63 | overflow-y: scroll; 64 | } 65 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_custom.scss: -------------------------------------------------------------------------------- 1 | // Bootstrap overrides 2 | // 3 | // Copy variables from `_variables.scss` to this file to override default values 4 | // without modifying source files. 5 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_grid.scss: -------------------------------------------------------------------------------- 1 | // Container widths 2 | // 3 | // Set the container width, and override it for fixed navbars in media queries. 4 | 5 | @if $enable-grid-classes { 6 | .container { 7 | @include make-container(); 8 | @include make-container-max-widths(); 9 | } 10 | } 11 | 12 | // Fluid container 13 | // 14 | // Utilizes the mixin meant for fixed width containers, but without any defined 15 | // width for fluid, full width layouts. 16 | 17 | @if $enable-grid-classes { 18 | .container-fluid { 19 | @include make-container(); 20 | } 21 | } 22 | 23 | // Row 24 | // 25 | // Rows contain and clear the floats of your columns. 26 | 27 | @if $enable-grid-classes { 28 | .row { 29 | @include make-row(); 30 | } 31 | 32 | // Remove the negative margin from default .row, then the horizontal padding 33 | // from all immediate children columns (to prevent runaway style inheritance). 34 | .no-gutters { 35 | margin-right: 0; 36 | margin-left: 0; 37 | 38 | > .col, 39 | > [class*="col-"] { 40 | padding-right: 0; 41 | padding-left: 0; 42 | } 43 | } 44 | } 45 | 46 | // Columns 47 | // 48 | // Common styles for small and large grid columns 49 | 50 | @if $enable-grid-classes { 51 | @include make-grid-columns(); 52 | } 53 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_images.scss: -------------------------------------------------------------------------------- 1 | // Responsive images (ensure images don't scale beyond their parents) 2 | // 3 | // This is purposefully opt-in via an explicit class rather than being the default for all ``s. 4 | // We previously tried the "images are responsive by default" approach in Bootstrap v2, 5 | // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps) 6 | // which weren't expecting the images within themselves to be involuntarily resized. 7 | // See also https://github.com/twbs/bootstrap/issues/18178 8 | .img-fluid { 9 | @include img-fluid; 10 | } 11 | 12 | 13 | // Image thumbnails 14 | .img-thumbnail { 15 | padding: $thumbnail-padding; 16 | background-color: $thumbnail-bg; 17 | border: $thumbnail-border-width solid $thumbnail-border-color; 18 | @include border-radius($thumbnail-border-radius); 19 | @include transition($thumbnail-transition); 20 | @include box-shadow($thumbnail-box-shadow); 21 | 22 | // Keep them at most 100% wide 23 | @include img-fluid; 24 | } 25 | 26 | // 27 | // Figures 28 | // 29 | 30 | .figure { 31 | // Ensures the caption's text aligns with the image. 32 | display: inline-block; 33 | } 34 | 35 | .figure-img { 36 | margin-bottom: ($spacer-y / 2); 37 | line-height: 1; 38 | } 39 | 40 | .figure-caption { 41 | font-size: $figure-caption-font-size; 42 | color: $figure-caption-color; 43 | } 44 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_jumbotron.scss: -------------------------------------------------------------------------------- 1 | .jumbotron { 2 | padding: $jumbotron-padding ($jumbotron-padding / 2); 3 | margin-bottom: $jumbotron-padding; 4 | background-color: $jumbotron-bg; 5 | @include border-radius($border-radius-lg); 6 | 7 | @include media-breakpoint-up(sm) { 8 | padding: ($jumbotron-padding * 2) $jumbotron-padding; 9 | } 10 | } 11 | 12 | .jumbotron-hr { 13 | border-top-color: darken($jumbotron-bg, 10%); 14 | } 15 | 16 | .jumbotron-fluid { 17 | padding-right: 0; 18 | padding-left: 0; 19 | @include border-radius(0); 20 | } 21 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_media.scss: -------------------------------------------------------------------------------- 1 | .media { 2 | display: flex; 3 | align-items: flex-start; 4 | } 5 | 6 | .media-body { 7 | flex: 1; 8 | } 9 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Toggles 2 | // 3 | // Used in conjunction with global variables to enable certain theme features. 4 | 5 | @mixin box-shadow($shadow...) { 6 | @if $enable-shadows { 7 | box-shadow: $shadow; 8 | } 9 | } 10 | 11 | @mixin transition($transition...) { 12 | @if $enable-transitions { 13 | @if length($transition) == 0 { 14 | transition: $transition-base; 15 | } @else { 16 | transition: $transition; 17 | } 18 | } 19 | } 20 | 21 | // Utilities 22 | @import "mixins/breakpoints"; 23 | @import "mixins/hover"; 24 | @import "mixins/image"; 25 | @import "mixins/badge"; 26 | @import "mixins/resize"; 27 | @import "mixins/screen-reader"; 28 | @import "mixins/size"; 29 | @import "mixins/reset-text"; 30 | @import "mixins/text-emphasis"; 31 | @import "mixins/text-hide"; 32 | @import "mixins/text-truncate"; 33 | @import "mixins/transforms"; 34 | @import "mixins/visibility"; 35 | 36 | // // Components 37 | @import "mixins/alert"; 38 | @import "mixins/buttons"; 39 | @import "mixins/cards"; 40 | @import "mixins/pagination"; 41 | @import "mixins/lists"; 42 | @import "mixins/list-group"; 43 | @import "mixins/nav-divider"; 44 | @import "mixins/forms"; 45 | @import "mixins/table-row"; 46 | 47 | // // Skins 48 | @import "mixins/background-variant"; 49 | @import "mixins/border-radius"; 50 | @import "mixins/gradients"; 51 | 52 | // // Layout 53 | @import "mixins/clearfix"; 54 | // @import "mixins/navbar-align"; 55 | @import "mixins/grid-framework"; 56 | @import "mixins/grid"; 57 | @import "mixins/float"; 58 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_progress.scss: -------------------------------------------------------------------------------- 1 | // Progress animations 2 | @keyframes progress-bar-stripes { 3 | from { background-position: $progress-height 0; } 4 | to { background-position: 0 0; } 5 | } 6 | 7 | // Basic progress bar 8 | .progress { 9 | display: flex; 10 | overflow: hidden; // force rounded corners by cropping it 11 | font-size: $progress-font-size; 12 | line-height: $progress-height; 13 | text-align: center; 14 | background-color: $progress-bg; 15 | @include border-radius($progress-border-radius); 16 | } 17 | .progress-bar { 18 | height: $progress-height; 19 | color: $progress-bar-color; 20 | background-color: $progress-bar-bg; 21 | } 22 | 23 | // Striped 24 | .progress-bar-striped { 25 | @include gradient-striped(); 26 | background-size: $progress-height $progress-height; 27 | } 28 | 29 | // Animated 30 | .progress-bar-animated { 31 | animation: progress-bar-stripes $progress-bar-animation-timing; 32 | } 33 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_responsive-embed.scss: -------------------------------------------------------------------------------- 1 | // Credit: Nicolas Gallagher and SUIT CSS. 2 | 3 | .embed-responsive { 4 | position: relative; 5 | display: block; 6 | width: 100%; 7 | padding: 0; 8 | overflow: hidden; 9 | 10 | &::before { 11 | display: block; 12 | content: ""; 13 | } 14 | 15 | .embed-responsive-item, 16 | iframe, 17 | embed, 18 | object, 19 | video { 20 | position: absolute; 21 | top: 0; 22 | bottom: 0; 23 | left: 0; 24 | width: 100%; 25 | height: 100%; 26 | border: 0; 27 | } 28 | } 29 | 30 | .embed-responsive-21by9 { 31 | &::before { 32 | padding-top: percentage(9 / 21); 33 | } 34 | } 35 | 36 | .embed-responsive-16by9 { 37 | &::before { 38 | padding-top: percentage(9 / 16); 39 | } 40 | } 41 | 42 | .embed-responsive-4by3 { 43 | &::before { 44 | padding-top: percentage(3 / 4); 45 | } 46 | } 47 | 48 | .embed-responsive-1by1 { 49 | &::before { 50 | padding-top: percentage(1 / 1); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_transitions.scss: -------------------------------------------------------------------------------- 1 | .fade { 2 | opacity: 0; 3 | @include transition($transition-fade); 4 | 5 | &.show { 6 | opacity: 1; 7 | } 8 | } 9 | 10 | .collapse { 11 | display: none; 12 | &.show { 13 | display: block; 14 | } 15 | } 16 | 17 | tr { 18 | &.collapse.show { 19 | display: table-row; 20 | } 21 | } 22 | 23 | tbody { 24 | &.collapse.show { 25 | display: table-row-group; 26 | } 27 | } 28 | 29 | .collapsing { 30 | position: relative; 31 | height: 0; 32 | overflow: hidden; 33 | @include transition($transition-collapse); 34 | } 35 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/_utilities.scss: -------------------------------------------------------------------------------- 1 | @import "utilities/align"; 2 | @import "utilities/background"; 3 | @import "utilities/borders"; 4 | @import "utilities/clearfix"; 5 | @import "utilities/display"; 6 | @import "utilities/flex"; 7 | @import "utilities/float"; 8 | @import "utilities/position"; 9 | @import "utilities/screenreaders"; 10 | @import "utilities/sizing"; 11 | @import "utilities/spacing"; 12 | @import "utilities/text"; 13 | @import "utilities/visibility"; 14 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/bootstrap-grid.scss: -------------------------------------------------------------------------------- 1 | // Bootstrap Grid only 2 | // 3 | // Includes relevant variables and mixins for the flexbox grid 4 | // system, as well as the generated predefined classes (e.g., `.col-sm-4`). 5 | 6 | // 7 | // Box sizing, responsive, and more 8 | // 9 | 10 | @at-root { 11 | @-ms-viewport { width: device-width; } 12 | } 13 | 14 | html { 15 | box-sizing: border-box; 16 | -ms-overflow-style: scrollbar; 17 | } 18 | 19 | *, 20 | *::before, 21 | *::after { 22 | box-sizing: inherit; 23 | } 24 | 25 | 26 | // 27 | // Variables 28 | // 29 | 30 | @import "variables"; 31 | 32 | // 33 | // Grid mixins 34 | // 35 | 36 | @import "mixins/clearfix"; 37 | @import "mixins/breakpoints"; 38 | @import "mixins/grid-framework"; 39 | @import "mixins/grid"; 40 | 41 | @import "custom"; 42 | 43 | @import "grid"; 44 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/bootstrap-reboot.scss: -------------------------------------------------------------------------------- 1 | // Bootstrap Reboot only 2 | // 3 | // Includes only Normalize and our custom Reboot reset. 4 | 5 | @import "variables"; 6 | @import "mixins"; 7 | @import "custom"; 8 | 9 | @import "normalize"; 10 | @import "reboot"; 11 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/bootstrap.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v4.0.0-alpha.6 (https://getbootstrap.com) 3 | * Copyright 2011-2017 The Bootstrap Authors 4 | * Copyright 2011-2017 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | // Core variables and mixins 9 | @import "variables"; 10 | @import "mixins"; 11 | @import "custom"; 12 | 13 | // Reset and dependencies 14 | @import "normalize"; 15 | @import "print"; 16 | 17 | // Core CSS 18 | @import "reboot"; 19 | @import "type"; 20 | @import "images"; 21 | @import "code"; 22 | @import "grid"; 23 | @import "tables"; 24 | @import "forms"; 25 | @import "buttons"; 26 | 27 | // Components 28 | @import "transitions"; 29 | @import "dropdown"; 30 | @import "button-group"; 31 | @import "input-group"; 32 | @import "custom-forms"; 33 | @import "nav"; 34 | @import "navbar"; 35 | @import "card"; 36 | @import "breadcrumb"; 37 | @import "pagination"; 38 | @import "badge"; 39 | @import "jumbotron"; 40 | @import "alert"; 41 | @import "progress"; 42 | @import "media"; 43 | @import "list-group"; 44 | @import "responsive-embed"; 45 | @import "close"; 46 | 47 | // Components w/ JavaScript 48 | @import "modal"; 49 | @import "tooltip"; 50 | @import "popover"; 51 | @import "carousel"; 52 | 53 | // Utility classes 54 | @import "utilities"; 55 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_alert.scss: -------------------------------------------------------------------------------- 1 | // Alerts 2 | 3 | @mixin alert-variant($background, $border, $body-color) { 4 | background-color: $background; 5 | border-color: $border; 6 | color: $body-color; 7 | 8 | hr { 9 | border-top-color: darken($border, 5%); 10 | } 11 | .alert-link { 12 | color: darken($body-color, 10%); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_background-variant.scss: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | @mixin bg-variant($parent, $color) { 4 | #{$parent} { 5 | background-color: $color !important; 6 | } 7 | a#{$parent} { 8 | @include hover-focus { 9 | background-color: darken($color, 10%) !important; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_badge.scss: -------------------------------------------------------------------------------- 1 | // Badges 2 | 3 | @mixin badge-variant($color) { 4 | background-color: $color; 5 | 6 | &[href] { 7 | @include hover-focus { 8 | background-color: darken($color, 10%); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_border-radius.scss: -------------------------------------------------------------------------------- 1 | // Single side border-radius 2 | 3 | @mixin border-radius($radius: $border-radius) { 4 | @if $enable-rounded { 5 | border-radius: $radius; 6 | } 7 | } 8 | 9 | @mixin border-top-radius($radius) { 10 | @if $enable-rounded { 11 | border-top-right-radius: $radius; 12 | border-top-left-radius: $radius; 13 | } 14 | } 15 | 16 | @mixin border-right-radius($radius) { 17 | @if $enable-rounded { 18 | border-bottom-right-radius: $radius; 19 | border-top-right-radius: $radius; 20 | } 21 | } 22 | 23 | @mixin border-bottom-radius($radius) { 24 | @if $enable-rounded { 25 | border-bottom-right-radius: $radius; 26 | border-bottom-left-radius: $radius; 27 | } 28 | } 29 | 30 | @mixin border-left-radius($radius) { 31 | @if $enable-rounded { 32 | border-bottom-left-radius: $radius; 33 | border-top-left-radius: $radius; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_cards.scss: -------------------------------------------------------------------------------- 1 | // Card variants 2 | 3 | @mixin card-variant($background, $border) { 4 | background-color: $background; 5 | border-color: $border; 6 | 7 | .card-header, 8 | .card-footer { 9 | background-color: transparent; 10 | } 11 | } 12 | 13 | @mixin card-outline-variant($color) { 14 | background-color: transparent; 15 | border-color: $color; 16 | } 17 | 18 | // 19 | // Inverse text within a card for use with dark backgrounds 20 | // 21 | 22 | @mixin card-inverse { 23 | color: rgba(255,255,255,.65); 24 | 25 | .card-header, 26 | .card-footer { 27 | background-color: transparent; 28 | border-color: rgba(255,255,255,.2); 29 | } 30 | .card-header, 31 | .card-footer, 32 | .card-title, 33 | .card-blockquote { 34 | color: #fff; 35 | } 36 | .card-link, 37 | .card-text, 38 | .card-subtitle, 39 | .card-blockquote .blockquote-footer { 40 | color: rgba(255,255,255,.65); 41 | } 42 | .card-link { 43 | @include hover-focus { 44 | color: $card-link-hover-color; 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_clearfix.scss: -------------------------------------------------------------------------------- 1 | @mixin clearfix() { 2 | &::after { 3 | display: block; 4 | content: ""; 5 | clear: both; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_float.scss: -------------------------------------------------------------------------------- 1 | @mixin float-left { 2 | float: left !important; 3 | } 4 | @mixin float-right { 5 | float: right !important; 6 | } 7 | @mixin float-none { 8 | float: none !important; 9 | } 10 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_hover.scss: -------------------------------------------------------------------------------- 1 | @mixin hover { 2 | // TODO: re-enable along with mq4-hover-shim 3 | // @if $enable-hover-media-query { 4 | // // See Media Queries Level 4: https://drafts.csswg.org/mediaqueries/#hover 5 | // // Currently shimmed by https://github.com/twbs/mq4-hover-shim 6 | // @media (hover: hover) { 7 | // &:hover { @content } 8 | // } 9 | // } 10 | // @else { 11 | &:hover { @content } 12 | // } 13 | } 14 | 15 | @mixin hover-focus { 16 | @if $enable-hover-media-query { 17 | &:focus { @content } 18 | @include hover { @content } 19 | } 20 | @else { 21 | &:focus, 22 | &:hover { 23 | @content 24 | } 25 | } 26 | } 27 | 28 | @mixin plain-hover-focus { 29 | @if $enable-hover-media-query { 30 | &, 31 | &:focus { 32 | @content 33 | } 34 | @include hover { @content } 35 | } 36 | @else { 37 | &, 38 | &:focus, 39 | &:hover { 40 | @content 41 | } 42 | } 43 | } 44 | 45 | @mixin hover-focus-active { 46 | @if $enable-hover-media-query { 47 | &:focus, 48 | &:active { 49 | @content 50 | } 51 | @include hover { @content } 52 | } 53 | @else { 54 | &:focus, 55 | &:active, 56 | &:hover { 57 | @content 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_image.scss: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | 10 | @mixin img-fluid { 11 | // Part 1: Set a maximum relative to the parent 12 | max-width: 100%; 13 | // Part 2: Override the height to auto, otherwise images will be stretched 14 | // when setting a width and height attribute on the img element. 15 | height: auto; 16 | } 17 | 18 | 19 | // Retina image 20 | // 21 | // Short retina mixin for setting background-image and -size. 22 | 23 | @mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) { 24 | background-image: url($file-1x); 25 | 26 | // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio, 27 | // but doesn't convert dppx=>dpi. 28 | // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard. 29 | // Compatibility info: http://caniuse.com/#feat=css-media-resolution 30 | @media 31 | only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx 32 | only screen and (min-resolution: 2dppx) { // Standardized 33 | background-image: url($file-2x); 34 | background-size: $width-1x $height-1x; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_list-group.scss: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | @mixin list-group-item-variant($state, $background, $color) { 4 | .list-group-item-#{$state} { 5 | color: $color; 6 | background-color: $background; 7 | } 8 | 9 | a.list-group-item-#{$state}, 10 | button.list-group-item-#{$state} { 11 | color: $color; 12 | 13 | .list-group-item-heading { 14 | color: inherit; 15 | } 16 | 17 | @include hover-focus { 18 | color: $color; 19 | background-color: darken($background, 5%); 20 | } 21 | 22 | &.active { 23 | color: #fff; 24 | background-color: $color; 25 | border-color: $color; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_lists.scss: -------------------------------------------------------------------------------- 1 | // Lists 2 | 3 | // Unstyled keeps list items block level, just removes default browser padding and list-style 4 | @mixin list-unstyled { 5 | padding-left: 0; 6 | list-style: none; 7 | } 8 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_nav-divider.scss: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | @mixin nav-divider($color: #e5e5e5) { 6 | height: 1px; 7 | margin: ($spacer-y / 2) 0; 8 | overflow: hidden; 9 | background-color: $color; 10 | } 11 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_navbar-align.scss: -------------------------------------------------------------------------------- 1 | // Navbar vertical align 2 | // 3 | // Vertically center elements in the navbar. 4 | // Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. 5 | 6 | // @mixin navbar-vertical-align($element-height) { 7 | // margin-top: (($navbar-height - $element-height) / 2); 8 | // margin-bottom: (($navbar-height - $element-height) / 2); 9 | // } 10 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_pagination.scss: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | @mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { 4 | .page-link { 5 | padding: $padding-y $padding-x; 6 | font-size: $font-size; 7 | } 8 | 9 | .page-item { 10 | &:first-child { 11 | .page-link { 12 | @include border-left-radius($border-radius); 13 | } 14 | } 15 | &:last-child { 16 | .page-link { 17 | @include border-right-radius($border-radius); 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_reset-text.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-text { 2 | font-family: $font-family-base; 3 | // We deliberately do NOT reset font-size or word-wrap. 4 | font-style: normal; 5 | font-weight: $font-weight-normal; 6 | letter-spacing: normal; 7 | line-break: auto; 8 | line-height: $line-height-base; 9 | text-align: left; // Fallback for where `start` is not supported 10 | text-align: start; 11 | text-decoration: none; 12 | text-shadow: none; 13 | text-transform: none; 14 | white-space: normal; 15 | word-break: normal; 16 | word-spacing: normal; 17 | } 18 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_resize.scss: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | @mixin resizable($direction) { 4 | resize: $direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Only display content to screen readers 2 | // 3 | // See: http://a11yproject.com/posts/how-to-hide-content 4 | 5 | @mixin sr-only { 6 | position: absolute; 7 | width: 1px; 8 | height: 1px; 9 | padding: 0; 10 | margin: -1px; 11 | overflow: hidden; 12 | clip: rect(0,0,0,0); 13 | border: 0; 14 | } 15 | 16 | // Use in conjunction with .sr-only to only display content when it's focused. 17 | // 18 | // Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 19 | // 20 | // Credit: HTML5 Boilerplate 21 | 22 | @mixin sr-only-focusable { 23 | &:active, 24 | &:focus { 25 | position: static; 26 | width: auto; 27 | height: auto; 28 | margin: 0; 29 | overflow: visible; 30 | clip: auto; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_size.scss: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | @mixin size($width, $height: $width) { 4 | width: $width; 5 | height: $height; 6 | } 7 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_table-row.scss: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | @mixin table-row-variant($state, $background) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table-#{$state} { 7 | &, 8 | > th, 9 | > td { 10 | background-color: $background; 11 | } 12 | } 13 | 14 | // Hover states for `.table-hover` 15 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 16 | .table-hover { 17 | $hover-background: darken($background, 5%); 18 | 19 | .table-#{$state} { 20 | @include hover { 21 | background-color: $hover-background; 22 | 23 | > td, 24 | > th { 25 | background-color: $hover-background; 26 | } 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_text-emphasis.scss: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | @mixin text-emphasis-variant($parent, $color) { 4 | #{$parent} { 5 | color: $color !important; 6 | } 7 | a#{$parent} { 8 | @include hover-focus { 9 | color: darken($color, 10%) !important; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_text-hide.scss: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | @mixin text-hide() { 3 | font: 0/0 a; 4 | color: transparent; 5 | text-shadow: none; 6 | background-color: transparent; 7 | border: 0; 8 | } 9 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_text-truncate.scss: -------------------------------------------------------------------------------- 1 | // Text truncate 2 | // Requires inline-block or block for proper styling 3 | 4 | @mixin text-truncate() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_transforms.scss: -------------------------------------------------------------------------------- 1 | // Applies the given styles only when the browser support CSS3 3D transforms. 2 | @mixin if-supports-3d-transforms() { 3 | @media (-webkit-transform-3d) { 4 | // Old Safari, Old Android 5 | // http://caniuse.com/#feat=css-featurequeries 6 | // https://developer.mozilla.org/en-US/docs/Web/CSS/@media/-webkit-transform-3d 7 | @content; 8 | } 9 | 10 | @supports (transform: translate3d(0,0,0)) { 11 | // The Proper Way: Using a CSS feature query 12 | @content; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/mixins/_visibility.scss: -------------------------------------------------------------------------------- 1 | // Visibility 2 | 3 | @mixin invisible { 4 | visibility: hidden !important; 5 | } 6 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/utilities/_align.scss: -------------------------------------------------------------------------------- 1 | .align-baseline { vertical-align: baseline !important; } // Browser default 2 | .align-top { vertical-align: top !important; } 3 | .align-middle { vertical-align: middle !important; } 4 | .align-bottom { vertical-align: bottom !important; } 5 | .align-text-bottom { vertical-align: text-bottom !important; } 6 | .align-text-top { vertical-align: text-top !important; } 7 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/utilities/_background.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Contextual backgrounds 3 | // 4 | 5 | .bg-faded { 6 | background-color: darken($body-bg, 3%); 7 | } 8 | 9 | @include bg-variant('.bg-primary', $brand-primary); 10 | 11 | @include bg-variant('.bg-success', $brand-success); 12 | 13 | @include bg-variant('.bg-info', $brand-info); 14 | 15 | @include bg-variant('.bg-warning', $brand-warning); 16 | 17 | @include bg-variant('.bg-danger', $brand-danger); 18 | 19 | @include bg-variant('.bg-inverse', $brand-inverse); 20 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/utilities/_borders.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Border 3 | // 4 | 5 | .border-0 { border: 0 !important; } 6 | .border-top-0 { border-top: 0 !important; } 7 | .border-right-0 { border-right: 0 !important; } 8 | .border-bottom-0 { border-bottom: 0 !important; } 9 | .border-left-0 { border-left: 0 !important; } 10 | 11 | // 12 | // Border-radius 13 | // 14 | 15 | .rounded { 16 | @include border-radius($border-radius); 17 | } 18 | .rounded-top { 19 | @include border-top-radius($border-radius); 20 | } 21 | .rounded-right { 22 | @include border-right-radius($border-radius); 23 | } 24 | .rounded-bottom { 25 | @include border-bottom-radius($border-radius); 26 | } 27 | .rounded-left { 28 | @include border-left-radius($border-radius); 29 | } 30 | 31 | .rounded-circle { 32 | border-radius: 50%; 33 | } 34 | 35 | .rounded-0 { 36 | border-radius: 0; 37 | } 38 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/utilities/_clearfix.scss: -------------------------------------------------------------------------------- 1 | .clearfix { 2 | @include clearfix(); 3 | } 4 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/utilities/_display.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Display utilities 3 | // 4 | 5 | @each $breakpoint in map-keys($grid-breakpoints) { 6 | @include media-breakpoint-up($breakpoint) { 7 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 8 | 9 | .d#{$infix}-none { display: none !important; } 10 | .d#{$infix}-inline { display: inline !important; } 11 | .d#{$infix}-inline-block { display: inline-block !important; } 12 | .d#{$infix}-block { display: block !important; } 13 | .d#{$infix}-table { display: table !important; } 14 | .d#{$infix}-table-cell { display: table-cell !important; } 15 | .d#{$infix}-flex { display: flex !important; } 16 | .d#{$infix}-inline-flex { display: inline-flex !important; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/utilities/_float.scss: -------------------------------------------------------------------------------- 1 | @each $breakpoint in map-keys($grid-breakpoints) { 2 | @include media-breakpoint-up($breakpoint) { 3 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 4 | 5 | .float#{$infix}-left { @include float-left; } 6 | .float#{$infix}-right { @include float-right; } 7 | .float#{$infix}-none { @include float-none; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/utilities/_position.scss: -------------------------------------------------------------------------------- 1 | // Positioning 2 | 3 | .fixed-top { 4 | position: fixed; 5 | top: 0; 6 | right: 0; 7 | left: 0; 8 | z-index: $zindex-fixed; 9 | } 10 | 11 | .fixed-bottom { 12 | position: fixed; 13 | right: 0; 14 | bottom: 0; 15 | left: 0; 16 | z-index: $zindex-fixed; 17 | } 18 | 19 | .sticky-top { 20 | position: sticky; 21 | top: 0; 22 | z-index: $zindex-sticky; 23 | } 24 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/utilities/_screenreaders.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Screenreaders 3 | // 4 | 5 | .sr-only { 6 | @include sr-only(); 7 | } 8 | 9 | .sr-only-focusable { 10 | @include sr-only-focusable(); 11 | } 12 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/utilities/_sizing.scss: -------------------------------------------------------------------------------- 1 | // Width and height 2 | 3 | @each $prop, $abbrev in (width: w, height: h) { 4 | @each $size, $length in $sizes { 5 | .#{$abbrev}-#{$size} { #{$prop}: $length !important; } 6 | } 7 | } 8 | 9 | .mw-100 { max-width: 100% !important; } 10 | .mh-100 { max-height: 100% !important; } 11 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/utilities/_spacing.scss: -------------------------------------------------------------------------------- 1 | // Margin and Padding 2 | 3 | @each $breakpoint in map-keys($grid-breakpoints) { 4 | @include media-breakpoint-up($breakpoint) { 5 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 6 | 7 | @each $prop, $abbrev in (margin: m, padding: p) { 8 | @each $size, $lengths in $spacers { 9 | $length-x: map-get($lengths, x); 10 | $length-y: map-get($lengths, y); 11 | 12 | .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length-y $length-x !important; } 13 | .#{$abbrev}t#{$infix}-#{$size} { #{$prop}-top: $length-y !important; } 14 | .#{$abbrev}r#{$infix}-#{$size} { #{$prop}-right: $length-x !important; } 15 | .#{$abbrev}b#{$infix}-#{$size} { #{$prop}-bottom: $length-y !important; } 16 | .#{$abbrev}l#{$infix}-#{$size} { #{$prop}-left: $length-x !important; } 17 | .#{$abbrev}x#{$infix}-#{$size} { 18 | #{$prop}-right: $length-x !important; 19 | #{$prop}-left: $length-x !important; 20 | } 21 | .#{$abbrev}y#{$infix}-#{$size} { 22 | #{$prop}-top: $length-y !important; 23 | #{$prop}-bottom: $length-y !important; 24 | } 25 | } 26 | } 27 | 28 | // Some special margin utils 29 | .m#{$infix}-auto { margin: auto !important; } 30 | .mt#{$infix}-auto { margin-top: auto !important; } 31 | .mr#{$infix}-auto { margin-right: auto !important; } 32 | .mb#{$infix}-auto { margin-bottom: auto !important; } 33 | .ml#{$infix}-auto { margin-left: auto !important; } 34 | .mx#{$infix}-auto { 35 | margin-right: auto !important; 36 | margin-left: auto !important; 37 | } 38 | .my#{$infix}-auto { 39 | margin-top: auto !important; 40 | margin-bottom: auto !important; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/utilities/_text.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Text 3 | // 4 | 5 | // Alignment 6 | 7 | .text-justify { text-align: justify !important; } 8 | .text-nowrap { white-space: nowrap !important; } 9 | .text-truncate { @include text-truncate; } 10 | 11 | // Responsive alignment 12 | 13 | @each $breakpoint in map-keys($grid-breakpoints) { 14 | @include media-breakpoint-up($breakpoint) { 15 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 16 | 17 | .text#{$infix}-left { text-align: left !important; } 18 | .text#{$infix}-right { text-align: right !important; } 19 | .text#{$infix}-center { text-align: center !important; } 20 | } 21 | } 22 | 23 | // Transformation 24 | 25 | .text-lowercase { text-transform: lowercase !important; } 26 | .text-uppercase { text-transform: uppercase !important; } 27 | .text-capitalize { text-transform: capitalize !important; } 28 | 29 | // Weight and italics 30 | 31 | .font-weight-normal { font-weight: $font-weight-normal; } 32 | .font-weight-bold { font-weight: $font-weight-bold; } 33 | .font-italic { font-style: italic; } 34 | 35 | // Contextual colors 36 | 37 | .text-white { 38 | color: #fff !important; 39 | } 40 | 41 | @include text-emphasis-variant('.text-muted', $text-muted); 42 | 43 | @include text-emphasis-variant('.text-primary', $brand-primary); 44 | 45 | @include text-emphasis-variant('.text-success', $brand-success); 46 | 47 | @include text-emphasis-variant('.text-info', $brand-info); 48 | 49 | @include text-emphasis-variant('.text-warning', $brand-warning); 50 | 51 | @include text-emphasis-variant('.text-danger', $brand-danger); 52 | 53 | // Font color 54 | 55 | @include text-emphasis-variant('.text-gray-dark', $gray-dark); 56 | 57 | // Misc 58 | 59 | .text-hide { 60 | @include text-hide(); 61 | } 62 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/styles/bootstrap/utilities/_visibility.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Visibility utilities 3 | // 4 | 5 | .invisible { 6 | @include invisible(); 7 | } 8 | 9 | // Responsive visibility utilities 10 | 11 | @each $bp in map-keys($grid-breakpoints) { 12 | .hidden-#{$bp}-up { 13 | @include media-breakpoint-up($bp) { 14 | display: none !important; 15 | } 16 | } 17 | .hidden-#{$bp}-down { 18 | @include media-breakpoint-down($bp) { 19 | display: none !important; 20 | } 21 | } 22 | } 23 | 24 | 25 | // Print utilities 26 | // 27 | // Media queries are placed on the inside to be mixin-friendly. 28 | 29 | .visible-print-block { 30 | display: none !important; 31 | 32 | @media print { 33 | display: block !important; 34 | } 35 | } 36 | .visible-print-inline { 37 | display: none !important; 38 | 39 | @media print { 40 | display: inline !important; 41 | } 42 | } 43 | .visible-print-inline-block { 44 | display: none !important; 45 | 46 | @media print { 47 | display: inline-block !important; 48 | } 49 | } 50 | 51 | .hidden-print { 52 | @media print { 53 | display: none !important; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/long-stack-trace-zone'; 4 | import 'zone.js/dist/proxy.js'; 5 | import 'zone.js/dist/sync-test'; 6 | import 'zone.js/dist/jasmine-patch'; 7 | import 'zone.js/dist/async-test'; 8 | import 'zone.js/dist/fake-async-test'; 9 | import { getTestBed } from '@angular/core/testing'; 10 | import { 11 | BrowserDynamicTestingModule, 12 | platformBrowserDynamicTesting 13 | } from '@angular/platform-browser-dynamic/testing'; 14 | 15 | // Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. 16 | declare const __karma__: any; 17 | declare const require: any; 18 | 19 | // Prevent Karma from running prematurely. 20 | __karma__.loaded = function () {}; 21 | 22 | // First, initialize the Angular testing environment. 23 | getTestBed().initTestEnvironment( 24 | BrowserDynamicTestingModule, 25 | platformBrowserDynamicTesting() 26 | ); 27 | // Then we find all the tests. 28 | const context = require.context('./', true, /\.spec\.ts$/); 29 | // And load the modules. 30 | context.keys().map(context); 31 | // Finally, start Karma to run the tests. 32 | __karma__.start(); 33 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "baseUrl": "./", 6 | "module": "es2015", 7 | "types": [ 8 | "node" 9 | ] 10 | }, 11 | "exclude": [ 12 | "test.ts", 13 | "**/*.spec.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/spec", 5 | "baseUrl": "./", 6 | "module": "commonjs", 7 | "target": "es5", 8 | "types": [ 9 | "jasmine", 10 | "node" 11 | ] 12 | }, 13 | "files": [ 14 | "test.ts", 15 | "polyfills.ts" 16 | ], 17 | "include": [ 18 | "**/*.spec.ts", 19 | "**/*.d.ts" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/src/typings.d.ts: -------------------------------------------------------------------------------- 1 | /* SystemJS module definition */ 2 | declare var module: NodeModule; 3 | interface NodeModule { 4 | id: string; 5 | } 6 | -------------------------------------------------------------------------------- /MultiRegion/2_UI/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "outDir": "./dist/out-tsc", 5 | "baseUrl": "src", 6 | "sourceMap": true, 7 | "declaration": false, 8 | "moduleResolution": "node", 9 | "emitDecoratorMetadata": true, 10 | "experimentalDecorators": true, 11 | "target": "es5", 12 | "typeRoots": [ 13 | "node_modules/@types" 14 | ], 15 | "lib": [ 16 | "es2017", 17 | "dom" 18 | ], 19 | "module": "es2015" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/create-ddb-global-table-region.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/create-ddb-global-table-region.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/create-ddb-global-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/create-ddb-global-table.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/create-health-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/create-health-check.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/created-health-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/created-health-check.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/custom-domain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/custom-domain.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/custom-domains-configured-ireland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/custom-domains-configured-ireland.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/ddb-create-trigger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/ddb-create-trigger.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/ddb-show-replicated-ticket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/ddb-show-replicated-ticket.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/ddb-trigger-enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/ddb-trigger-enabled.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/delete-ddb-items.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/delete-ddb-items.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/ireland-health-response.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/ireland-health-response.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/ireland-subdomain-record.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/ireland-subdomain-record.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/select-ddb-source-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/select-ddb-source-table.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/select-ddb-triggers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/select-ddb-triggers.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/images/zone-configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/3_Replication/images/zone-configuration.png -------------------------------------------------------------------------------- /MultiRegion/3_Replication/setup-dns-record.json: -------------------------------------------------------------------------------- 1 | { 2 | "Changes": [ 3 | { 4 | "Action": "CREATE", 5 | "ResourceRecordSet": { 6 | "Name": "simplesurveyservice.com", 7 | "Type": "A", 8 | "AliasTarget": { 9 | "DNSName": "d-67kz8jv3kb.execute-api.us-west-2.amazonaws.com", 10 | "HostedZoneId": "Z2KETINVX67IQG", 11 | "EvaluateTargetHealth": false 12 | } 13 | } 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /MultiRegion/4_Testing/images/break-api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/4_Testing/images/break-api.png -------------------------------------------------------------------------------- /MultiRegion/4_Testing/images/failed-health.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/4_Testing/images/failed-health.png -------------------------------------------------------------------------------- /MultiRegion/4_Testing/images/failed-over-response.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/4_Testing/images/failed-over-response.png -------------------------------------------------------------------------------- /MultiRegion/5_Cleanup/README.md: -------------------------------------------------------------------------------- 1 | # Cleaning Up after the Workshop 2 | 3 | Here are high level instructions on cleaning up after you have completed the 4 | workshop. Do this so you don't incur any ongoing charges once you have completed 5 | this excercise. 6 | 7 | ### Module 1_API: 8 | 9 | If you manually deploy a region in module 1_API 10 | 11 | - Delete the three Lambda functions in each region 12 | - Delete the SXRTickets DynamoDB table in each region 13 | - Delete the API Gateway and Custom Domains in each region 14 | - Delete the SSL Certificates in ACM (you may need to wait some time for resources 15 | to fully un-deploy before this is possible) - in each region 16 | - Delete the IAM Roles and Policies you created 17 | 18 | If you used CloudFormation to deploy a 1_API regions 19 | 20 | - In the console, select the correct regions 21 | - Go into CloudFormation and select the wild-rydes-api stack and then select *delete* 22 | - The template will be deleted along with all resources it created 23 | 24 | ### Module 2_UI 25 | 26 | - In the Console, go into S3, and *Empty* but don't delete the bucket hosting 27 | your website content 28 | - Select the web-ui-stack stack and then *delete* it. 29 | - The template will be deleted along with all resources it created 30 | 31 | ### Module 3_Replication 32 | 33 | - In Route53, remove the Health Check as well as all DNS entries you created 34 | during the workshop 35 | - In Amazon Certificate Manager, delete all SSL certificates you created (both regions) 36 | 37 | 38 | ### Terminate yout Cloud9 IDE 39 | 40 | - Go to the Cloud9 Console and delete the IDE you created 41 | -------------------------------------------------------------------------------- /MultiRegion/images/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/images/architecture.png -------------------------------------------------------------------------------- /MultiRegion/images/architecture_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/images/architecture_new.png -------------------------------------------------------------------------------- /MultiRegion/images/cloud9_connect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/images/cloud9_connect.png -------------------------------------------------------------------------------- /MultiRegion/images/git_clone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/images/git_clone.png -------------------------------------------------------------------------------- /MultiRegion/images/install_nvm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/MultiRegion/images/install_nvm.png -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Wild Rydes Serverless Workshops 2 | Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "babel-eslint", 3 | "parserOptions": { 4 | "ecmaVersion": 5, 5 | "sourceType": "script", 6 | }, 7 | "env": { 8 | "browser": true, 9 | "jquery": true 10 | }, 11 | "rules": { 12 | "no-var": "off", 13 | "prefer-arrow-callback": "off", 14 | "no-use-before-define": ["error", { "functions": false }], 15 | "no-alert": "off", 16 | "prefer-template": "off", 17 | "comma-dangle": ["error", { 18 | "functions": "never", 19 | }], 20 | "import/no-dynamic-require": "off" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/css/font.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "fairplex-wide"; 3 | font-style: normal; 4 | font-weight: 400; 5 | src: url("../fonts/fairplex-wide-n4.woff") format("woff2"); 6 | } 7 | @font-face { 8 | font-family: "fairplex-wide"; 9 | font-style: normal; 10 | font-weight: 700; 11 | src: url("../fonts/fairplex-wide-n7.woff") format("woff2"); 12 | } 13 | -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/css/message.css: -------------------------------------------------------------------------------- 1 | .panel-default { 2 | border-color: #dddddd; 3 | } 4 | .panel { 5 | background-color: #ffffff; 6 | border: 1px solid rgba(0, 0, 0, 0); 7 | border-radius: 4px; 8 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); 9 | } 10 | 11 | .panel-default > .panel-heading { 12 | background-color: #f5f5f5; 13 | border-color: #dddddd; 14 | color: #333333; 15 | } 16 | .panel-heading { 17 | border-bottom: 1px solid rgba(0, 0, 0, 0); 18 | border-top-left-radius: 3px; 19 | border-top-right-radius: 3px; 20 | padding: 10px 15px; 21 | } 22 | 23 | .panel-title { 24 | color: inherit; 25 | font-size: 16px; 26 | margin-bottom: 0; 27 | margin-top: 0; 28 | } 29 | 30 | .configMessage { 31 | width: 100%; 32 | height: 100%; 33 | text-align: center; 34 | background: transparent; 35 | position: absolute; 36 | z-index: 2000; 37 | } 38 | 39 | .configMessage .panel { 40 | margin: auto; 41 | width: 40%; 42 | top: 50%; 43 | position: relative; 44 | transform: translateY(-50%); 45 | -ms-transform: translateY(-50%); 46 | -moz-transform: translateY(-50%); 47 | -webkit-transform: translateY(-50%); 48 | -o-transform: translateY(-50%); 49 | z-index: 100; 50 | } 51 | 52 | .configMessage .panel-body { 53 | text-align: left; 54 | } 55 | 56 | .configMessage .backdrop { 57 | position: absolute; 58 | width: 100%; 59 | height: 100%; 60 | background: #fff; 61 | opacity: 0.6; 62 | z-index: 50; 63 | } 64 | -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/css/ride.css: -------------------------------------------------------------------------------- 1 | html, body, #main, #map { 2 | padding: 0; 3 | margin: 0; 4 | height: 100%; 5 | width: 100%; 6 | } 7 | 8 | .info { 9 | position: absolute; 10 | right: 10px; 11 | top: 10px; 12 | z-index: 100; 13 | width: 275px; 14 | background: transparent; 15 | } 16 | 17 | .info .panel-body { 18 | background: transparent; 19 | } 20 | 21 | #request { 22 | position: relative; 23 | background: #fcc1d4 none repeat scroll 0 0; 24 | color: #000; 25 | border-color: #000; 26 | border-radius: 5px; 27 | text-align: center; 28 | width: 135px; 29 | } 30 | 31 | #request:disabled { 32 | color: #999; 33 | border-color: #999; 34 | } 35 | 36 | #accountLink { 37 | background: inherit; 38 | } 39 | 40 | #updates { 41 | list-style: none; 42 | margin-top: 5px; 43 | padding: 0; 44 | } 45 | 46 | #updates li { 47 | margin: 3px 0; 48 | border: 1px solid #ccc; 49 | border-radius: 5px; 50 | background-color: #f7f7f7; 51 | padding: 5px; 52 | } 53 | 54 | .authToken { 55 | word-wrap: break-word; 56 | width: 100%; 57 | } 58 | -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/favicon.ico -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/fonts/fairplex-wide-n4.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/fonts/fairplex-wide-n4.woff -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/fonts/fairplex-wide-n7.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/fonts/fairplex-wide-n7.woff -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/background.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/bbd3207c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/bbd3207c.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/bucephalus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/bucephalus.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/loading.gif -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/logo.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/rocinante.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/rocinante.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/shadowfox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/shadowfox.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/spinning-gears.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/spinning-gears.gif -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/star-pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/star-pattern.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/unicorn-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/unicorn-icon.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/unicorn-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/unicorn-logo.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/unicorn-map-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/unicorn-map-bg.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/unicorn-silhouette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/unicorn-silhouette.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-apply-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-apply-header.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-faq-header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-faq-header.jpg -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-W.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-W.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-Xiaomi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-Xiaomi.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-about.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-about.jpg -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-apple.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-blackberry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-blackberry.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-block-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-block-1.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-block-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-block-2.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-block-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-block-3.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-block-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-block-4.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-facebook.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-google.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-instagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-instagram.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-kraken.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-kraken.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-quote.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-quote.jpg -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-quote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-quote.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-top.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-top.jpg -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-twitter.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-wechat.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-home-weibo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-home-weibo.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-investors-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-investors-1.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-investors-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-investors-2.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-investors-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-investors-3.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-investors-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-investors-4.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-investors-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-investors-5.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-investors-awesome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-investors-awesome.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-investors-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-investors-header.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-investors-pcp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-investors-pcp.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-investors-thebarn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-investors-thebarn.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-logo-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-logo-black.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-logo-white.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-unicorn-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-unicorn-header.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-unicorn-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-unicorn-one.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-unicorn-three.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-unicorn-three.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/images/wr-unicorn-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/images/wr-unicorn-two.png -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/js/config.js: -------------------------------------------------------------------------------- 1 | window._config = { 2 | cognito: { 3 | userPoolId: '', // e.g. us-east-2_uXboG5pAb 4 | userPoolClientId: '', // e.g. 25ddkmj4v6hfsfvruhpfi7n4hv 5 | region: '' // e.g. us-east-2 6 | }, 7 | api: { 8 | invokeUrl: '' // e.g. https://rc7nyt4tql.execute-api.us-west-2.amazonaws.com/prod, 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/js/main.js: -------------------------------------------------------------------------------- 1 | "use strict";!function(){var n=$("html"),t=function(){$(".btn-menu").on("click",function(t){t.preventDefault(),n.toggleClass("menu-opened")})},e=function(){t()};e()}(); -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/js/vendor/unicorn-icon: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/1_StaticWebHosting/website/js/vendor/unicorn-icon -------------------------------------------------------------------------------- /WebApplication/1_StaticWebHosting/website/robots.txt: -------------------------------------------------------------------------------- 1 | # robotstxt.org/ 2 | 3 | User-agent: * 4 | Disallow: 5 | -------------------------------------------------------------------------------- /WebApplication/5_OAuth/ListUnicornAuthorizer.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/5_OAuth/ListUnicornAuthorizer.zip -------------------------------------------------------------------------------- /WebApplication/5_OAuth/ListUnicornAuthorizer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "list-unicorn-authorizer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "jsonwebtoken": "^8.0.1", 13 | "jwk-to-pem": "^1.2.6", 14 | "request": "^2.83.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/css/font.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "fairplex-wide"; 3 | font-style: normal; 4 | font-weight: 400; 5 | src: url("../fonts/fairplex-wide-n4.woff") format("woff2"); 6 | } 7 | @font-face { 8 | font-family: "fairplex-wide"; 9 | font-style: normal; 10 | font-weight: 700; 11 | src: url("../fonts/fairplex-wide-n7.woff") format("woff2"); 12 | } 13 | -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/css/message.css: -------------------------------------------------------------------------------- 1 | .panel-default { 2 | border-color: #dddddd; 3 | } 4 | .panel { 5 | background-color: #ffffff; 6 | border: 1px solid rgba(0, 0, 0, 0); 7 | border-radius: 4px; 8 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); 9 | } 10 | 11 | .panel-default > .panel-heading { 12 | background-color: #f5f5f5; 13 | border-color: #dddddd; 14 | color: #333333; 15 | } 16 | .panel-heading { 17 | border-bottom: 1px solid rgba(0, 0, 0, 0); 18 | border-top-left-radius: 3px; 19 | border-top-right-radius: 3px; 20 | padding: 10px 15px; 21 | } 22 | 23 | .panel-title { 24 | color: inherit; 25 | font-size: 16px; 26 | margin-bottom: 0; 27 | margin-top: 0; 28 | } 29 | 30 | .configMessage { 31 | width: 100%; 32 | height: 100%; 33 | text-align: center; 34 | background: transparent; 35 | position: absolute; 36 | z-index: 2000; 37 | } 38 | 39 | .configMessage .panel { 40 | margin: auto; 41 | width: 40%; 42 | top: 50%; 43 | position: relative; 44 | transform: translateY(-50%); 45 | -ms-transform: translateY(-50%); 46 | -moz-transform: translateY(-50%); 47 | -webkit-transform: translateY(-50%); 48 | -o-transform: translateY(-50%); 49 | z-index: 100; 50 | } 51 | 52 | .configMessage .panel-body { 53 | text-align: left; 54 | } 55 | 56 | .configMessage .backdrop { 57 | position: absolute; 58 | width: 100%; 59 | height: 100%; 60 | background: #fff; 61 | opacity: 0.6; 62 | z-index: 50; 63 | } 64 | -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/css/ride.css: -------------------------------------------------------------------------------- 1 | html, body, #main, #map { 2 | padding: 0; 3 | margin: 0; 4 | height: 100%; 5 | width: 100%; 6 | } 7 | 8 | .info { 9 | position: absolute; 10 | right: 10px; 11 | top: 10px; 12 | z-index: 100; 13 | width: 275px; 14 | background: transparent; 15 | } 16 | 17 | .info .panel-body { 18 | background: transparent; 19 | } 20 | 21 | #rideList { 22 | margin-top: 30%; 23 | min-width: 50%; 24 | background-color: white; 25 | padding: 10px; 26 | border-radius: 5px; 27 | } 28 | 29 | #request { 30 | position: relative; 31 | background: #fcc1d4 none repeat scroll 0 0; 32 | color: #000; 33 | border-color: #000; 34 | border-radius: 5px; 35 | text-align: center; 36 | width: 135px; 37 | } 38 | 39 | #request:disabled { 40 | color: #999; 41 | border-color: #999; 42 | } 43 | 44 | #accountLink { 45 | background: inherit; 46 | } 47 | 48 | #updates { 49 | list-style: none; 50 | margin-top: 5px; 51 | padding: 0; 52 | } 53 | 54 | #updates li { 55 | margin: 3px 0; 56 | border: 1px solid #ccc; 57 | border-radius: 5px; 58 | background-color: #f7f7f7; 59 | padding: 5px; 60 | } 61 | 62 | .authToken { 63 | word-wrap: break-word; 64 | width: 100%; 65 | } 66 | -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/5_OAuth/UnicornManager/favicon.ico -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/fonts/fairplex-wide-n4.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/5_OAuth/UnicornManager/fonts/fairplex-wide-n4.woff -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/fonts/fairplex-wide-n7.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/5_OAuth/UnicornManager/fonts/fairplex-wide-n7.woff -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/5_OAuth/UnicornManager/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/5_OAuth/UnicornManager/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/5_OAuth/UnicornManager/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/5_OAuth/UnicornManager/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/5_OAuth/UnicornManager/images/background.png -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/js/config.js: -------------------------------------------------------------------------------- 1 | window._config = { 2 | cognito: { 3 | userPoolClientId: 'COGNITO APPLICATION ID', // e.g. 25ddkmj4v6hfsfvruhpfi7n4hv 4 | region: 'AWS REGION', // e.g. us-east-2 5 | authDomainPrefix: 'CONFIGURED COGNITO DOMAIN PREFIX' // wildrydes-sapessi 6 | }, 7 | api: { 8 | invokeUrl: 'API ENDPOINT URI' // e.g. https://xxxxxxxx.execute-api.us-west-2.amazonaws.com/prod', 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/js/vendor/unicorn-icon: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/5_OAuth/UnicornManager/js/vendor/unicorn-icon -------------------------------------------------------------------------------- /WebApplication/5_OAuth/UnicornManager/robots.txt: -------------------------------------------------------------------------------- 1 | # robotstxt.org/ 2 | 3 | User-agent: * 4 | Disallow: 5 | -------------------------------------------------------------------------------- /WebApplication/images/add-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/add-app.png -------------------------------------------------------------------------------- /WebApplication/images/amplify-console-repository-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/amplify-console-repository-setup.png -------------------------------------------------------------------------------- /WebApplication/images/amplify-deploy-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/amplify-deploy-status.png -------------------------------------------------------------------------------- /WebApplication/images/amplify-renderings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/amplify-renderings.png -------------------------------------------------------------------------------- /WebApplication/images/api-authorizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/api-authorizer.png -------------------------------------------------------------------------------- /WebApplication/images/api-integration-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/api-integration-setup.png -------------------------------------------------------------------------------- /WebApplication/images/apigateway-test-authorizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/apigateway-test-authorizer.png -------------------------------------------------------------------------------- /WebApplication/images/appsync-api-authorization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/appsync-api-authorization.png -------------------------------------------------------------------------------- /WebApplication/images/appsync-archiecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/appsync-archiecture.png -------------------------------------------------------------------------------- /WebApplication/images/appsync-cognito-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/appsync-cognito-login.png -------------------------------------------------------------------------------- /WebApplication/images/appsync-create-model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/appsync-create-model.png -------------------------------------------------------------------------------- /WebApplication/images/appsync-model-fields.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/appsync-model-fields.png -------------------------------------------------------------------------------- /WebApplication/images/appsync-query-resolvers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/appsync-query-resolvers.png -------------------------------------------------------------------------------- /WebApplication/images/authentication-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/authentication-architecture.png -------------------------------------------------------------------------------- /WebApplication/images/cfn-ack-iam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/cfn-ack-iam.png -------------------------------------------------------------------------------- /WebApplication/images/client-id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/client-id.png -------------------------------------------------------------------------------- /WebApplication/images/cognito-resource-servers-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/cognito-resource-servers-menu.png -------------------------------------------------------------------------------- /WebApplication/images/configure-cognito-app-client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/configure-cognito-app-client.png -------------------------------------------------------------------------------- /WebApplication/images/configure-cognito-resource-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/configure-cognito-resource-server.png -------------------------------------------------------------------------------- /WebApplication/images/configure-test-event-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/configure-test-event-2.png -------------------------------------------------------------------------------- /WebApplication/images/configure-test-event.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/configure-test-event.png -------------------------------------------------------------------------------- /WebApplication/images/create-a-user-pool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-a-user-pool.png -------------------------------------------------------------------------------- /WebApplication/images/create-api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-api.png -------------------------------------------------------------------------------- /WebApplication/images/create-bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-bucket.png -------------------------------------------------------------------------------- /WebApplication/images/create-cloudfront-distribution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-cloudfront-distribution.png -------------------------------------------------------------------------------- /WebApplication/images/create-cognito-app-client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-cognito-app-client.png -------------------------------------------------------------------------------- /WebApplication/images/create-custom-token-authorizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-custom-token-authorizer.png -------------------------------------------------------------------------------- /WebApplication/images/create-lambda-function-code-revised.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-lambda-function-code-revised.png -------------------------------------------------------------------------------- /WebApplication/images/create-lambda-function-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-lambda-function-code.png -------------------------------------------------------------------------------- /WebApplication/images/create-lambda-function-revised.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-lambda-function-revised.png -------------------------------------------------------------------------------- /WebApplication/images/create-lambda-function.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-lambda-function.png -------------------------------------------------------------------------------- /WebApplication/images/create-list-rides-authorizer-function.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-list-rides-authorizer-function.png -------------------------------------------------------------------------------- /WebApplication/images/create-list-rides-function.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-list-rides-function.png -------------------------------------------------------------------------------- /WebApplication/images/create-method.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-method.png -------------------------------------------------------------------------------- /WebApplication/images/create-resource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-resource.png -------------------------------------------------------------------------------- /WebApplication/images/create-unicornmanager-bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-unicornmanager-bucket.png -------------------------------------------------------------------------------- /WebApplication/images/create-user-pool-authorizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/create-user-pool-authorizer.png -------------------------------------------------------------------------------- /WebApplication/images/ddb-create-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/ddb-create-table.png -------------------------------------------------------------------------------- /WebApplication/images/enable-website-hosting-unicornmanager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/enable-website-hosting-unicornmanager.png -------------------------------------------------------------------------------- /WebApplication/images/enable-website-hosting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/enable-website-hosting.png -------------------------------------------------------------------------------- /WebApplication/images/execution-success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/execution-success.png -------------------------------------------------------------------------------- /WebApplication/images/iam-add-user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/iam-add-user.png -------------------------------------------------------------------------------- /WebApplication/images/inline-policies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/inline-policies.png -------------------------------------------------------------------------------- /WebApplication/images/input-test-event.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/input-test-event.png -------------------------------------------------------------------------------- /WebApplication/images/lambda-handler-and-role.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/lambda-handler-and-role.png -------------------------------------------------------------------------------- /WebApplication/images/list-rides-api-integration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/list-rides-api-integration.png -------------------------------------------------------------------------------- /WebApplication/images/module1-cfn-specify-details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/module1-cfn-specify-details.png -------------------------------------------------------------------------------- /WebApplication/images/module2-cfn-specify-details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/module2-cfn-specify-details.png -------------------------------------------------------------------------------- /WebApplication/images/oauth-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/oauth-architecture.png -------------------------------------------------------------------------------- /WebApplication/images/open-wild-rydes-authorizers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/open-wild-rydes-authorizers.png -------------------------------------------------------------------------------- /WebApplication/images/policy-generator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/policy-generator.png -------------------------------------------------------------------------------- /WebApplication/images/pool-id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/pool-id.png -------------------------------------------------------------------------------- /WebApplication/images/region-selection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/region-selection.png -------------------------------------------------------------------------------- /WebApplication/images/restful-api-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/restful-api-architecture.png -------------------------------------------------------------------------------- /WebApplication/images/review-policy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/review-policy.png -------------------------------------------------------------------------------- /WebApplication/images/s3-upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/s3-upload.png -------------------------------------------------------------------------------- /WebApplication/images/select-list-custom-authorizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/select-list-custom-authorizer.png -------------------------------------------------------------------------------- /WebApplication/images/select-policy-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/select-policy-service.png -------------------------------------------------------------------------------- /WebApplication/images/serverless-backend-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/serverless-backend-architecture.png -------------------------------------------------------------------------------- /WebApplication/images/set-role-name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/set-role-name.png -------------------------------------------------------------------------------- /WebApplication/images/static-website-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/static-website-architecture.png -------------------------------------------------------------------------------- /WebApplication/images/successful-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/successful-login.png -------------------------------------------------------------------------------- /WebApplication/images/title-update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/title-update.png -------------------------------------------------------------------------------- /WebApplication/images/update-bucket-policy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/update-bucket-policy.png -------------------------------------------------------------------------------- /WebApplication/images/user-pool-unicorn-signup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/user-pool-unicorn-signup.png -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-complete-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-complete-architecture.png -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/data.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/data.plist -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image1.pdf -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image10.png -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image11.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image11.pdf -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image12.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image12.pdf -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image13.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image13.tiff -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image2.pdf -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image3.pdf -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image4.pdf -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image5.pdf -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image6.pdf -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image7.pdf -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image8.pdf -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-diagrams.graffle/image9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-diagrams.graffle/image9.pdf -------------------------------------------------------------------------------- /WebApplication/images/wildrydes-homepage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/WebApplication/images/wildrydes-homepage.png -------------------------------------------------------------------------------- /create-lambda-function-code-revised.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/create-lambda-function-code-revised.png -------------------------------------------------------------------------------- /create-lambda-function-revised.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-serverless-workshops-kr/9cf091e21cd180679ccf1e21556b0f38fa57736c/create-lambda-function-revised.png -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | const gulp = require('gulp'); 2 | 3 | const eslint = require('gulp-eslint'); 4 | 5 | const LINT_GLOBS = [ 6 | '**/*.js', 7 | '!node_modules/**', 8 | '!**/*vendor*.js', 9 | '!**/vendor/**', 10 | ]; 11 | 12 | gulp.task('lint', () => gulp.src(LINT_GLOBS) 13 | .pipe(eslint()) 14 | .pipe(eslint.format()) 15 | .pipe(eslint.failAfterError())); 16 | 17 | gulp.task('default', ['lint']); 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wild-rydes-workshops", 3 | "version": "1.0.0", 4 | "description": "Workshops showcasing AWS serverless architectures and use cases.", 5 | "main": "gulpfile.js", 6 | "devDependencies": { 7 | "babel-eslint": "^7.2.3", 8 | "concurrent-transform": "^1.0.0", 9 | "eslint": "^4.18.2", 10 | "eslint-config-airbnb": "^14.1.0", 11 | "eslint-plugin-babel": "^4.1.1", 12 | "eslint-plugin-import": "^2.2.0", 13 | "eslint-plugin-jsx-a11y": "^3.0.2", 14 | "eslint-plugin-react": "^6.10.3", 15 | "gulp": "^3.9.1", 16 | "gulp-awspublish": "^3.3.0", 17 | "gulp-eslint": "^3.0.1", 18 | "gulp-print": "^2.0.1", 19 | "gulp-rename": "^1.2.2", 20 | "gulp-util": "^3.0.8", 21 | "js-yaml": "^3.8.3", 22 | "through2": "^2.0.3" 23 | }, 24 | "scripts": { 25 | "test": "echo \"Error: no test specified\" && exit 1" 26 | }, 27 | "repository": { 28 | "type": "git", 29 | "url": "ssh://git.amazon.com/pkg/WildRydesWorkshops" 30 | }, 31 | "author": "Amazon.com, Inc.", 32 | "license": "Apache-2.0" 33 | } 34 | --------------------------------------------------------------------------------