Full Code of codeaprendiz/learn_devops for AI

main d0312962661f cached
2053 files
19.5 MB
5.3M tokens
958 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (21,075K chars total). Download the full file to get everything.
Repository: codeaprendiz/learn_devops
Branch: main
Commit: d0312962661f
Files: 2053
Total size: 19.5 MB

Directory structure:
gitextract_25g9uy8m/

├── .gitignore
├── README.md
├── ReadMe_static.md
├── _config.yml
└── home/
    ├── cloud_certifications/
    │   └── aws/
    │       ├── ReadMe.md
    │       └── taskset_aws_cloud_certifications/
    │           └── task_001_aws_certified_solutions_architect_professional/
    │               ├── ReadMe.md
    │               ├── apiGateway.md
    │               ├── applicationDiscoveryService.md
    │               ├── aurora.md
    │               ├── awsControlTower.md
    │               ├── backup.md
    │               ├── batch.md
    │               ├── bestPractices.md
    │               ├── billingAndCostManagement.md
    │               ├── certificateManager.md
    │               ├── cloudAdoptionReadinessTool.md
    │               ├── cloudFormation.md
    │               ├── cloudFront.md
    │               ├── cloudHSM.md
    │               ├── cloudTrail.md
    │               ├── cloudWatchLogs.md
    │               ├── cloudsearch.md
    │               ├── cloudwatch.md
    │               ├── codeBuild.md
    │               ├── codeCommit.md
    │               ├── codeDeploy.md
    │               ├── codePipeline.md
    │               ├── cognito.md
    │               ├── commandLineInterface.md
    │               ├── config.md
    │               ├── connect.md
    │               ├── dataMigrationService.md
    │               ├── developerToolsConsole.md
    │               ├── directConnect.md
    │               ├── dynamodb.md
    │               ├── ec2.md
    │               ├── ec2AutoScaling.md
    │               ├── ecs.md
    │               ├── elasticBeanStalk.md
    │               ├── elasticCache.md
    │               ├── elasticFileSystem.md
    │               ├── elasticLoadBalancing.md
    │               ├── eventBridge.md
    │               ├── guardDuty.md
    │               ├── iam.md
    │               ├── inspector.md
    │               ├── kinesis.md
    │               ├── lambda.md
    │               ├── lex.md
    │               ├── macie.md
    │               ├── mechanicalTurk.md
    │               ├── migrationHub.md
    │               ├── opswork.md
    │               ├── opsworks.md
    │               ├── organizations.md
    │               ├── quickSight.md
    │               ├── rds.md
    │               ├── redShift.md
    │               ├── rekognition.md
    │               ├── resourceAccessManager.md
    │               ├── route53.md
    │               ├── s3.md
    │               ├── sageMaker.md
    │               ├── schemaConversionTool.md
    │               ├── secretsManager.md
    │               ├── securityTokenService.md
    │               ├── serverMigrationService.md
    │               ├── serverlessApplicationModel.md
    │               ├── serviceCatalog.md
    │               ├── shield.md
    │               ├── simpleNotificationService.md
    │               ├── simpleQueueService.md
    │               ├── simpleWorkflowService.md
    │               ├── singleSignOn.md
    │               ├── snowball.md
    │               ├── snowballEdge.md
    │               ├── storageGateway.md
    │               ├── systemManager.md
    │               ├── transcribe.md
    │               ├── vpc.md
    │               ├── waf.md
    │               ├── webIdentifyFederation.md
    │               ├── wellArchitected.md
    │               └── whitepapers.md
    ├── cloud_providers/
    │   ├── aws/
    │   │   ├── ReadMe-static.md
    │   │   ├── ReadMe.md
    │   │   └── taskset_aws_cloud_providers/
    │   │       ├── task_001_kms/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_monitoring_msk/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_redirection_using_s3_cloudfront/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_trigger_codebuild_PR_events__eventbridge__static_branc/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_trigger_codebuild_PR_events__eventbridge__lambda__dynamic_branches/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── buildspec.yaml
    │   │       │   └── lambda.py
    │   │       ├── task_006_codebuild_codecommit_test_reports_gradle/
    │   │       │   ├── ReadMe-static.md
    │   │       │   ├── ReadMe.md
    │   │       │   └── buildspec.yaml
    │   │       ├── task_007_codebuild_codecommit_test_reports_mvn/
    │   │       │   ├── ReadMe.md
    │   │       │   └── buildspec.yaml
    │   │       ├── task_008_trigger_lambda_from_codecommit_using_event_bridge/
    │   │       │   └── ReadMe.md
    │   │       └── task_009_pass_vars_dynamically_from_codebuild_to_codepipeline/
    │   │           └── ReadMe.md
    │   ├── azure/
    │   │   ├── ReadMe.md
    │   │   └── taskset_azure_cloud_providers/
    │   │       ├── task_001_capture_web_app_logs_with_app_service_diagnostics_logging/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_devbox/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_create_a_windows_virtual_machine/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_connect_to_windows_virtual_machine_via_rdp/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_create_a_generalized_image/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_create_a_new_virtual_machine_from_a_managed_image/
    │   │       │   └── ReadMe.md
    │   │       ├── task_007_create_an_image_of_azure_vm_from_az_cli_and_provision_a_new_vm/
    │   │       │   └── ReadMe.md
    │   │       ├── task_008_create_an_azure_virtual_machine/
    │   │       │   └── ReadMe.md
    │   │       ├── task_009_configure_network_access/
    │   │       │   └── ReadMe.md
    │   │       ├── task_010_create_a_storage_blob/
    │   │       │   └── ReadMe.md
    │   │       └── task_011_deploy_a_container_app/
    │   │           └── ReadMe.md
    │   ├── gcp/
    │   │   ├── ReadMe-static.md
    │   │   ├── ReadMe.md
    │   │   └── taskset_gcp_cloud_providers/
    │   │       ├── task_001_create_budget__and_alerts/
    │   │       │   └── ReadMe.md
    │   │       ├── task_001_intro_console_projects_iam_apis/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_getting_started_with_cloud_market_place/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_getting_started_with_cloud_market_place__lamp_stack/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_vpc_networking_and_google_compute_engine/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_getting_started_with_cloud_storage_and_cloud_sql__php/
    │   │       │   ├── ReadMe.md
    │   │       │   └── index.php
    │   │       ├── task_005_getting_started_with_gke__nginx/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_hello_cloud_run__node/
    │   │       │   ├── ReadMe.md
    │   │       │   └── hello-world-node/
    │   │       │       ├── Dockerfile
    │   │       │       ├── index.js
    │   │       │       └── package.json
    │   │       ├── task_007_building_a_devops_pipeline__python/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── main.py
    │   │       │   ├── requirements.txt
    │   │       │   └── templates/
    │   │       │       ├── index.html
    │   │       │       └── layout.html
    │   │       ├── task_008_deploying_app_to_app_engine_and_gke_and_cloudrun/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── app.yaml
    │   │       │   ├── k8s-manifests.yaml
    │   │       │   ├── main.py
    │   │       │   ├── requirements.txt
    │   │       │   └── templates/
    │   │       │       ├── index.html
    │   │       │       └── layout.html
    │   │       ├── task_008_deploying_app_to_app_engine_and_gke_and_cloudrun__python/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── app.yaml
    │   │       │   ├── k8s-manifests.yaml
    │   │       │   ├── main.py
    │   │       │   ├── requirements.txt
    │   │       │   └── templates/
    │   │       │       ├── index.html
    │   │       │       └── layout.html
    │   │       ├── task_009_monitoring_applications_in_gcp__python/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── app.yaml
    │   │       │   ├── main.py
    │   │       │   ├── requirements.txt
    │   │       │   └── templates/
    │   │       │       ├── index.html
    │   │       │       └── layout.html
    │   │       ├── task_010_alerting_in_google_cloud/
    │   │       │   └── ReadMe.md
    │   │       ├── task_010_alerting_in_google_cloud__python/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── app-engine-error-percent-policy.json
    │   │       │   ├── app.yaml
    │   │       │   ├── main.py
    │   │       │   ├── requirements.txt
    │   │       │   └── templates/
    │   │       │       ├── index.html
    │   │       │       └── layout.html
    │   │       ├── task_011_service_monitoring__node/
    │   │       │   └── ReadMe.md
    │   │       ├── task_011_service_monitoring__node_app/
    │   │       │   └── ReadMe.md
    │   │       ├── task_012_monitoring_and_dashboarding_multiple_projects_from_a_single_workspace/
    │   │       │   └── ReadMe.md
    │   │       ├── task_012_monitoring_and_dashboarding_multiple_projects_from_a_single_workspace__nginx/
    │   │       │   └── ReadMe.md
    │   │       ├── task_013_compute_logging_and_monitoring/
    │   │       │   └── ReadMe.md
    │   │       ├── task_014_log_analysis/
    │   │       │   └── ReadMe.md
    │   │       ├── task_014_log_analysis_cloud_run__node/
    │   │       │   └── ReadMe.md
    │   │       ├── task_015_cloud_audit_logs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_015_cloud_storage_audit_logs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_016_analyzing_network_traffic_with_vpc_flow_logs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_017_application_performance_management/
    │   │       │   └── ReadMe.md
    │   │       ├── task_017_application_performance_management__python_and_nodejs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_018_2inst_2buckets_2iam/
    │   │       │   └── ReadMe.md
    │   │       ├── task_019_working_with_cloud_build/
    │   │       │   └── ReadMe.md
    │   │       ├── task_020_deploying_google_kubernetes_engine/
    │   │       │   └── ReadMe.md
    │   │       ├── task_021_creating_google_kubernetes_engine_deployments/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── nginx-canary.yaml
    │   │       │   ├── nginx-deployment.yaml
    │   │       │   ├── nginx-svc-session-affinity.yaml
    │   │       │   └── service-nginx.yaml
    │   │       ├── task_022_configuring_persistent_storage_for_google_kubernetes_engine/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── pod-volume-demo.yaml
    │   │       │   ├── pvc-demo.yaml
    │   │       │   └── statefulset-demo.yaml
    │   │       ├── task_023_anthos_service_mesh_walkthrough/
    │   │       │   └── ReadMe.md
    │   │       ├── task_024_observing_anthos_services/
    │   │       │   └── ReadMe.md
    │   │       ├── task_025_managing_traffic_with_anthos_service_mesh/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── conditional-routing-labels.yaml
    │   │       │   ├── conditional-routing-req-headers.yaml
    │   │       │   ├── fault-injection-aborts.yaml
    │   │       │   ├── fault-injection-delays.yaml
    │   │       │   ├── manifests/
    │   │       │   │   ├── destinationrule--productpage-circuit-breaker.yaml
    │   │       │   │   ├── destinationrule-all.yaml
    │   │       │   │   ├── gateway--bookinfo-gateway-port-80-http.yaml
    │   │       │   │   ├── virtualService-2-or-1-second-delay-to-calls-to-ratings-service.yaml
    │   │       │   │   ├── virtualservice--all-to-v1.yaml
    │   │       │   │   ├── virtualservice--bookinfo-based-on-exact-and-prefix-uri-match.yaml
    │   │       │   │   ├── virtualservice--half-second-timeout-for-calls-to-reviews.yaml
    │   │       │   │   ├── virtualservice--productpage-per-try-timeout-2s.yaml
    │   │       │   │   ├── virtualservice--reviews-v2-based-on-header.yaml
    │   │       │   │   ├── virtualservice--reviews-v3.yaml
    │   │       │   │   ├── virtualservice--route-req-to-v2-reviews.yaml
    │   │       │   │   └── virtualservice-reviews-50-v3-and-50-v1.yaml
    │   │       │   ├── retry.yaml
    │   │       │   ├── timeouts.yaml
    │   │       │   └── traffic-splitting.yaml
    │   │       ├── task_026_securing_traffic_through_anthos_service_mesh/
    │   │       │   ├── PeerAuthentication--mesh-wide-mtls.yaml
    │   │       │   ├── PeerAuthentication--restricted-mtls.yaml
    │   │       │   ├── ReadMe.md
    │   │       │   └── manifests/
    │   │       │       ├── AuthorizationPolicy--require-jwt-v2.yaml
    │   │       │       ├── AuthorizationPolicy--require-jwt.yaml
    │   │       │       ├── RequestAuthentication--jwt-example.yaml
    │   │       │       ├── httpbin.yaml
    │   │       │       └── sleep.yaml
    │   │       ├── task_027_cloud_source_repositories_overview/
    │   │       │   └── ReadMe.md
    │   │       ├── task_028_managing_deployments_using_kubernetes_engine/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── cleanup.sh
    │   │       │   ├── deployments/
    │   │       │   │   ├── auth.yaml
    │   │       │   │   ├── frontend.yaml
    │   │       │   │   ├── hello-canary.yaml
    │   │       │   │   ├── hello-green.yaml
    │   │       │   │   └── hello.yaml
    │   │       │   ├── nginx/
    │   │       │   │   ├── frontend.conf
    │   │       │   │   └── proxy.conf
    │   │       │   ├── pods/
    │   │       │   │   ├── healthy-monolith.yaml
    │   │       │   │   ├── monolith.yaml
    │   │       │   │   └── secure-monolith.yaml
    │   │       │   └── services/
    │   │       │       ├── auth.yaml
    │   │       │       ├── frontend.yaml
    │   │       │       ├── hello-blue.yaml
    │   │       │       ├── hello-green.yaml
    │   │       │       ├── hello.yaml
    │   │       │       └── monolith.yaml
    │   │       ├── task_029_trouble_shooting_workloads_on_gke_for_sre/
    │   │       │   └── ReadMe.md
    │   │       ├── task_030_minimal_nodejs_app_dockerize_google_artifact_registry/
    │   │       │   ├── ReadMe.md
    │   │       │   └── test/
    │   │       │       ├── Dockerfile
    │   │       │       └── app.js
    │   │       ├── task_031_hello_node_kubernetes__node/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   └── server.js
    │   │       ├── task_032_setting_up_jenkins_on_kubernetes_engine/
    │   │       │   ├── ReadMe.md
    │   │       │   └── values.yaml
    │   │       └── task_033_continuous_delivery_with_jenkins_in_kubernetes_engine/
    │   │           ├── Jenkinsfile
    │   │           ├── ReadMe.md
    │   │           └── values.yaml
    │   └── oci/
    │       ├── ReadMe.md
    │       └── taskset_oci_cloud_providers/
    │           ├── task_000_set_up_oci_cli/
    │           │   └── ReadMe.md
    │           ├── task_001_oci_cli_commands/
    │           │   └── ReadMe.md
    │           └── task_002_create_k8s_quick_create/
    │               └── ReadMe.md
    ├── containers/
    │   ├── docker/
    │   │   ├── ReadMe.md
    │   │   └── taskset_docker_containers/
    │   │       ├── task_000_commands/
    │   │       │   └── ReadMe.md
    │   │       ├── task_001_docker_overview/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_docker_run__detached_vs_foreground/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_getting_started/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_docker_run__pid_setting_and_choosing_image_with_tag/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_docker_run__assign_name_and_allocate_pseudo_tty/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_docker_run__expose_port_and_pull_policy_and_environment_vars/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_run_commands_in_container/
    │   │       │   └── ReadMe.md
    │   │       ├── task_007_docker_run__full_container_capabilities_and_set_working_dir_and_volume_mounts/
    │   │       │   └── ReadMe.md
    │   │       ├── task_008_docker_run__hostsfile_ulimit_mem_limit/
    │   │       │   └── ReadMe.md
    │   │       ├── task_008_docker_run__metadata_and_network_and_attach_to_stdout/
    │   │       │   └── ReadMe.md
    │   │       ├── task_009_docker_attach/
    │   │       │   └── ReadMe.md
    │   │       ├── task_010_docker_build/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   └── index.html
    │   │       ├── task_011_mongo/
    │   │       │   └── ReadMe.md
    │   │       ├── task_012_postgres/
    │   │       │   └── ReadMe.md
    │   │       ├── task_013_prometheus_blackbox_exporter/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── blackbox.yml
    │   │       │   └── prometheus.yml
    │   │       ├── task_014_elastic_search/
    │   │       │   └── ReadMe.md
    │   │       ├── task_015_elastic_search_bkp_restore/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── register.json
    │   │       │   ├── restoresnapshot.json
    │   │       │   └── snapshotsetting.json
    │   │       ├── task_016_elastic_search_backup_restore_sample_data/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── createdata.json
    │   │       │   ├── register.json
    │   │       │   ├── restoresnapshot.json
    │   │       │   └── snapshotsetting.json
    │   │       ├── task_017_mem_and_cpu_limit_container/
    │   │       │   └── ReadMe.md
    │   │       ├── task_018_mysql/
    │   │       │   └── ReadMe.md
    │   │       ├── task_019_nginx_https_domain_test/
    │   │       │   └── ReadMe.md
    │   │       ├── task_020_docker_commit/
    │   │       │   └── ReadMe.md
    │   │       ├── task_021_kibana/
    │   │       │   └── ReadMe.md
    │   │       ├── task_022_sample_app/
    │   │       │   ├── ReadMe.md
    │   │       │   └── app/
    │   │       │       ├── Dockerfile
    │   │       │       ├── package.json
    │   │       │       ├── spec/
    │   │       │       │   ├── persistence/
    │   │       │       │   │   └── sqlite.spec.js
    │   │       │       │   └── routes/
    │   │       │       │       ├── addItem.spec.js
    │   │       │       │       ├── deleteItem.spec.js
    │   │       │       │       ├── getItems.spec.js
    │   │       │       │       └── updateItem.spec.js
    │   │       │       └── src/
    │   │       │           ├── index.js
    │   │       │           ├── persistence/
    │   │       │           │   ├── index.js
    │   │       │           │   ├── mysql.js
    │   │       │           │   └── sqlite.js
    │   │       │           ├── routes/
    │   │       │           │   ├── addItem.js
    │   │       │           │   ├── deleteItem.js
    │   │       │           │   ├── getItems.js
    │   │       │           │   └── updateItem.js
    │   │       │           └── static/
    │   │       │               ├── css/
    │   │       │               │   ├── font-awesome/
    │   │       │               │   │   ├── fa-brands-400.svg#fontawesome
    │   │       │               │   │   ├── fa-regular-400.svg#fontawesome
    │   │       │               │   │   └── fa-solid-900.svg#fontawesome
    │   │       │               │   └── styles.css
    │   │       │               ├── index.html
    │   │       │               └── js/
    │   │       │                   ├── app.js
    │   │       │                   └── react-bootstrap.js
    │   │       ├── task_023_update_sample_app/
    │   │       │   ├── ReadMe.md
    │   │       │   └── app/
    │   │       │       ├── Dockerfile
    │   │       │       ├── package.json
    │   │       │       ├── spec/
    │   │       │       │   ├── persistence/
    │   │       │       │   │   └── sqlite.spec.js
    │   │       │       │   └── routes/
    │   │       │       │       ├── addItem.spec.js
    │   │       │       │       ├── deleteItem.spec.js
    │   │       │       │       ├── getItems.spec.js
    │   │       │       │       └── updateItem.spec.js
    │   │       │       └── src/
    │   │       │           ├── index.js
    │   │       │           ├── persistence/
    │   │       │           │   ├── index.js
    │   │       │           │   ├── mysql.js
    │   │       │           │   └── sqlite.js
    │   │       │           ├── routes/
    │   │       │           │   ├── addItem.js
    │   │       │           │   ├── deleteItem.js
    │   │       │           │   ├── getItems.js
    │   │       │           │   └── updateItem.js
    │   │       │           └── static/
    │   │       │               ├── css/
    │   │       │               │   ├── font-awesome/
    │   │       │               │   │   ├── fa-brands-400.svg#fontawesome
    │   │       │               │   │   ├── fa-regular-400.svg#fontawesome
    │   │       │               │   │   └── fa-solid-900.svg#fontawesome
    │   │       │               │   └── styles.css
    │   │       │               ├── index.html
    │   │       │               └── js/
    │   │       │                   ├── app.js
    │   │       │                   └── react-bootstrap.js
    │   │       ├── task_024_sample_app_persist_db/
    │   │       │   ├── ReadMe.md
    │   │       │   └── app/
    │   │       │       ├── Dockerfile
    │   │       │       ├── package.json
    │   │       │       ├── spec/
    │   │       │       │   ├── persistence/
    │   │       │       │   │   └── sqlite.spec.js
    │   │       │       │   └── routes/
    │   │       │       │       ├── addItem.spec.js
    │   │       │       │       ├── deleteItem.spec.js
    │   │       │       │       ├── getItems.spec.js
    │   │       │       │       └── updateItem.spec.js
    │   │       │       └── src/
    │   │       │           ├── index.js
    │   │       │           ├── persistence/
    │   │       │           │   ├── index.js
    │   │       │           │   ├── mysql.js
    │   │       │           │   └── sqlite.js
    │   │       │           ├── routes/
    │   │       │           │   ├── addItem.js
    │   │       │           │   ├── deleteItem.js
    │   │       │           │   ├── getItems.js
    │   │       │           │   └── updateItem.js
    │   │       │           └── static/
    │   │       │               ├── css/
    │   │       │               │   ├── font-awesome/
    │   │       │               │   │   ├── fa-brands-400.svg#fontawesome
    │   │       │               │   │   ├── fa-regular-400.svg#fontawesome
    │   │       │               │   │   └── fa-solid-900.svg#fontawesome
    │   │       │               │   └── styles.css
    │   │       │               ├── index.html
    │   │       │               └── js/
    │   │       │                   ├── app.js
    │   │       │                   └── react-bootstrap.js
    │   │       ├── task_025_sonarqube__keycloak__saml/
    │   │       │   ├── .gitignore
    │   │       │   └── ReadMe.md
    │   │       ├── task_026_mssql/
    │   │       │   └── ReadMe.md
    │   │       ├── task_027_docker_openvpn/
    │   │       │   ├── Readme.md
    │   │       │   └── setup_vpn.sh
    │   │       ├── task_028_docker_engine__networking__overview/
    │   │       │   └── ReadMe.md
    │   │       ├── task_029_docker_engine__networking__bridge_network_tutorial/
    │   │       │   └── ReadMe.md
    │   │       └── task_030_docker_engine__networking__host_networking_tutorial/
    │   │           └── ReadMe.md
    │   ├── docker_compose/
    │   │   ├── ReadMe.md
    │   │   └── taskset_docker_compose_containers/
    │   │       ├── task_001__gcp__traefik_letsEncrypt_tls_challenge/
    │   │       │   ├── ReadMe.md
    │   │       │   └── docker-compose.yaml
    │   │       ├── task_002__gcp__traefik_letsEncrypt_http_challenge/
    │   │       │   ├── ReadMe.md
    │   │       │   └── docker-compose.yaml
    │   │       ├── task_003__gcp__datadog/
    │   │       │   ├── ReadMe.md
    │   │       │   └── docker-compose.yaml
    │   │       ├── task_004__local__elastic_search_backup_restore_local_with_sample_data/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── docker-compose.yml
    │   │       │   ├── elasticsearch.yml
    │   │       │   ├── restoresnapshot.json
    │   │       │   └── snapshotsetting.json
    │   │       ├── task_005__local__elastic_search_kibana/
    │   │       │   ├── ReadMe.md
    │   │       │   └── docker-compose.yml
    │   │       ├── task_006__local__logstash/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── conf/
    │   │       │   │   └── filter.conf
    │   │       │   ├── docker-compose.yml
    │   │       │   ├── log-sample/
    │   │       │   │   └── access.log
    │   │       │   └── logstash.yml
    │   │       ├── task_007__local__prometheus_blackboxexporter_alertmanager/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── alertmanager/
    │   │       │   │   └── configuration.yml
    │   │       │   ├── blackboxexporter/
    │   │       │   │   └── config.yml
    │   │       │   ├── docker-compose.yml
    │   │       │   └── prometheus/
    │   │       │       ├── alert.rules.yml
    │   │       │       └── prometheus.yml
    │   │       ├── task_008__local__mongodb_metricbeat_elasticsearch_kibana/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── docker/
    │   │       │   │   └── metricbeat/
    │   │       │   │       ├── Dockerfile
    │   │       │   │       ├── entrypoint.sh
    │   │       │   │       └── metricbeat.yml
    │   │       │   └── docker-compose.yml
    │   │       ├── task_009__local__natsStreaming_metricbeat_elasticsearch_kibana/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── docker/
    │   │       │   │   └── metricbeat/
    │   │       │   │       ├── Dockerfile
    │   │       │   │       ├── entrypoint.sh
    │   │       │   │       └── metricbeat.yml
    │   │       │   └── docker-compose.yml
    │   │       ├── task_010__local__mysql_metricbeat_elasticsearch_kibana/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── docker/
    │   │       │   │   └── metricbeat/
    │   │       │   │       ├── Dockerfile
    │   │       │   │       ├── entrypoint.sh
    │   │       │   │       └── metricbeat.yml
    │   │       │   └── docker-compose.yml
    │   │       ├── task_011__gcp__nginx_https_domain_test/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── certs/
    │   │       │   │   ├── star_domain.com.key
    │   │       │   │   └── star_domain_com.chained.crt
    │   │       │   ├── docker-compose.yml
    │   │       │   └── nginx.conf
    │   │       ├── task_012__local__caddy_https_domain_test_with_custom_certs/
    │   │       │   ├── Caddyfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── certs/
    │   │       │   │   ├── star_domain.com.key
    │   │       │   │   └── star_domain_com.chained.crt
    │   │       │   ├── docker-compose.yml
    │   │       │   ├── index.html-renameme-to-html
    │   │       │   └── password-generation.yml
    │   │       ├── task_013__local__caddy_https_acme_and_save_certs/
    │   │       │   ├── Caddyfile
    │   │       │   ├── ReadMe.md
    │   │       │   └── docker-compose.yml
    │   │       ├── task_014__local__reverse_proxy_nginx_home_using_caddy/
    │   │       │   ├── Caddyfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── certs/
    │   │       │   │   ├── chained-cert.crt
    │   │       │   │   └── private-key.key
    │   │       │   ├── docker-compose.yml
    │   │       │   ├── index.html-rename-me-to-html
    │   │       │   ├── nginx-home/
    │   │       │   │   └── index.html
    │   │       │   └── password-generation.yml
    │   │       ├── task_015__local__mem_and_cpu_limit_nginx_container/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── docker-compose-v2.4.yaml
    │   │       │   └── docker-compose-v3.8.yaml
    │   │       └── task_016__gcp_local__grafana__tempo__prometheus__xk6_client_tracing/
    │   │           ├── ReadMe.md
    │   │           ├── docker-compose.yaml
    │   │           └── shared/
    │   │               ├── grafana-datasources.yaml
    │   │               ├── prometheus.yaml
    │   │               └── tempo.yaml
    │   └── kubernetes/
    │       ├── README.md
    │       ├── concepts/
    │       │   ├── ReadMe.md
    │       │   ├── task_001_blue_green_deployment/
    │       │   │   └── ReadMe.md
    │       │   └── task_002_networking/
    │       │       └── ReadMe.md
    │       └── taskset_kubernetes_containers/
    │           ├── task_001__local__configure_default_CPU_requests_and_limits_for_a_namespace/
    │           │   ├── ReadMe.md
    │           │   ├── limitrange-object.yaml
    │           │   ├── pod-limit-cpu.yaml
    │           │   ├── pod-no-limit-specified.yaml
    │           │   └── pod-request-cpu.yaml
    │           ├── task_002__local__configure_default_memory_requests_and_limits_for_a_namespace/
    │           │   ├── ReadMe.md
    │           │   ├── limitrange-object.yaml
    │           │   ├── pod-limit-memory.yaml
    │           │   ├── pod-no-limit-specified.yaml
    │           │   └── pod-request-memory.yaml
    │           ├── task_003__local__understanding_k8s_port_forward/
    │           │   └── ReadMe.md
    │           ├── task_004__local__expose_svc_via_nodeport/
    │           │   └── ReadMe.md
    │           ├── task_005__local__access_svc_nodeport_via_ingress/
    │           │   ├── ReadMe.md
    │           │   └── ingress.yaml
    │           ├── task_006__local__access_svc_clusterip_via_ingress/
    │           │   ├── ReadMe.md
    │           │   └── ingress.yaml
    │           ├── task_007__local__jenkins_k8s/
    │           │   ├── ReadMe.md
    │           │   ├── jenkins-agent.Dockerfile
    │           │   ├── jenkins-controller.Dockerfile
    │           │   ├── jenkins-k8s-manifests.yaml
    │           │   └── values.yaml
    │           ├── task_008__local__kafka/
    │           │   ├── ReadMe.md
    │           │   ├── kafka-manifests.yaml
    │           │   └── values.yaml
    │           ├── task_009__local__kafdrop/
    │           │   ├── ReadMe.md
    │           │   ├── kafdrop-manifests.yaml
    │           │   └── values.yaml
    │           ├── task_010__aws__deploy_traefik_kops_k8s_helm/
    │           │   ├── ReadMe.md
    │           │   ├── traefik-resources.yaml
    │           │   └── values.yaml
    │           ├── task_011__aws__traefik_kops_whoami/
    │           │   ├── ReadMe.md
    │           │   ├── traefik-resources.yaml
    │           │   ├── values.yaml
    │           │   └── whoami.yaml
    │           ├── task_012__aws__kops_with_traefik_customization/
    │           │   ├── ReadMe.md
    │           │   ├── echo-app/
    │           │   │   ├── dep.yaml
    │           │   │   ├── ingress.yaml
    │           │   │   └── svc.yaml
    │           │   ├── httpbin-app/
    │           │   │   ├── dep.yaml
    │           │   │   ├── ingress.yaml
    │           │   │   └── svc.yaml
    │           │   ├── traefik-custom-image/
    │           │   │   ├── Dockerfile
    │           │   │   ├── middleware/
    │           │   │   │   └── middleware.yaml
    │           │   │   └── traefik-add-trace-id/
    │           │   │       ├── .traefik.yml
    │           │   │       ├── README.md
    │           │   │       ├── go.mod
    │           │   │       ├── go.sum
    │           │   │       ├── rand-utils.go
    │           │   │       ├── trace-id.go
    │           │   │       └── trace-id_test.go
    │           │   └── traefik-helm-chart/
    │           │       ├── .helmignore
    │           │       ├── Chart.yaml
    │           │       ├── Guidelines.md
    │           │       ├── LICENSE
    │           │       ├── README.md
    │           │       ├── crds/
    │           │       │   ├── ingressroute.yaml
    │           │       │   ├── ingressroutetcp.yaml
    │           │       │   ├── ingressrouteudp.yaml
    │           │       │   ├── middlewares.yaml
    │           │       │   ├── middlewarestcp.yaml
    │           │       │   ├── serverstransports.yaml
    │           │       │   ├── tlsoptions.yaml
    │           │       │   ├── tlsstores.yaml
    │           │       │   └── traefikservices.yaml
    │           │       ├── templates/
    │           │       │   ├── _helpers.tpl
    │           │       │   ├── _podtemplate.tpl
    │           │       │   ├── daemonset.yaml
    │           │       │   ├── dashboard-hook-ingressroute.yaml
    │           │       │   ├── deployment.yaml
    │           │       │   ├── gateway.yaml
    │           │       │   ├── gatewayclass.yaml
    │           │       │   ├── hpa.yaml
    │           │       │   ├── ingressclass.yaml
    │           │       │   ├── poddisruptionbudget.yaml
    │           │       │   ├── pvc.yaml
    │           │       │   ├── rbac/
    │           │       │   │   ├── clusterrole.yaml
    │           │       │   │   ├── clusterrolebinding.yaml
    │           │       │   │   ├── podsecuritypolicy.yaml
    │           │       │   │   ├── role.yaml
    │           │       │   │   ├── rolebinding.yaml
    │           │       │   │   └── serviceaccount.yaml
    │           │       │   ├── service.yaml
    │           │       │   └── tlsoption.yaml
    │           │       ├── tests/
    │           │       │   ├── container-config_test.yaml
    │           │       │   ├── daemonset-config_test.yaml
    │           │       │   ├── default-install_test.yaml
    │           │       │   ├── deployment-config_test.yaml
    │           │       │   ├── gateway-config_test.yaml
    │           │       │   ├── gatewayclass-config_test.yaml
    │           │       │   ├── pod-config_test.yaml
    │           │       │   ├── poddisruptionbudget-config_test.yaml
    │           │       │   ├── podsecuritypolicy-config_test.yaml
    │           │       │   ├── ports-config_test.yaml
    │           │       │   ├── rbac-config_test.yaml
    │           │       │   ├── service-config_test.yaml
    │           │       │   └── traefik-config_test.yaml
    │           │       ├── traefik-manifests.yaml
    │           │       └── values.yaml
    │           ├── task_013__aws__oauth2_proxy/
    │           │   ├── ReadMe.md
    │           │   ├── kafdrop-chart/
    │           │   │   ├── .helmignore
    │           │   │   ├── Chart.yaml
    │           │   │   ├── kafdrop-manifests.yaml
    │           │   │   ├── templates/
    │           │   │   │   ├── NOTES.txt
    │           │   │   │   ├── _helpers.tpl
    │           │   │   │   ├── deployment.yaml
    │           │   │   │   ├── ingress.yaml
    │           │   │   │   ├── ingressroute.yaml
    │           │   │   │   ├── service.yaml
    │           │   │   │   └── traefik-middleware.yaml
    │           │   │   └── values.yaml
    │           │   ├── oauth2-proxy/
    │           │   │   ├── .helmignore
    │           │   │   ├── Chart.yaml
    │           │   │   ├── README.md
    │           │   │   ├── charts/
    │           │   │   │   ├── common/
    │           │   │   │   │   ├── .helmignore
    │           │   │   │   │   ├── Chart.yaml
    │           │   │   │   │   ├── README.md
    │           │   │   │   │   ├── templates/
    │           │   │   │   │   │   ├── _affinities.tpl
    │           │   │   │   │   │   ├── _capabilities.tpl
    │           │   │   │   │   │   ├── _errors.tpl
    │           │   │   │   │   │   ├── _images.tpl
    │           │   │   │   │   │   ├── _ingress.tpl
    │           │   │   │   │   │   ├── _labels.tpl
    │           │   │   │   │   │   ├── _names.tpl
    │           │   │   │   │   │   ├── _secrets.tpl
    │           │   │   │   │   │   ├── _storage.tpl
    │           │   │   │   │   │   ├── _tplvalues.tpl
    │           │   │   │   │   │   ├── _utils.tpl
    │           │   │   │   │   │   ├── _warnings.tpl
    │           │   │   │   │   │   └── validations/
    │           │   │   │   │   │       ├── _cassandra.tpl
    │           │   │   │   │   │       ├── _mariadb.tpl
    │           │   │   │   │   │       ├── _mongodb.tpl
    │           │   │   │   │   │       ├── _postgresql.tpl
    │           │   │   │   │   │       ├── _redis.tpl
    │           │   │   │   │   │       └── _validations.tpl
    │           │   │   │   │   └── values.yaml
    │           │   │   │   └── redis/
    │           │   │   │       ├── .helmignore
    │           │   │   │       ├── Chart.yaml
    │           │   │   │       ├── README.md
    │           │   │   │       ├── charts/
    │           │   │   │       │   └── common/
    │           │   │   │       │       ├── .helmignore
    │           │   │   │       │       ├── Chart.yaml
    │           │   │   │       │       ├── README.md
    │           │   │   │       │       ├── templates/
    │           │   │   │       │       │   ├── _affinities.tpl
    │           │   │   │       │       │   ├── _capabilities.tpl
    │           │   │   │       │       │   ├── _errors.tpl
    │           │   │   │       │       │   ├── _images.tpl
    │           │   │   │       │       │   ├── _ingress.tpl
    │           │   │   │       │       │   ├── _labels.tpl
    │           │   │   │       │       │   ├── _names.tpl
    │           │   │   │       │       │   ├── _secrets.tpl
    │           │   │   │       │       │   ├── _storage.tpl
    │           │   │   │       │       │   ├── _tplvalues.tpl
    │           │   │   │       │       │   ├── _utils.tpl
    │           │   │   │       │       │   ├── _warnings.tpl
    │           │   │   │       │       │   └── validations/
    │           │   │   │       │       │       ├── _cassandra.tpl
    │           │   │   │       │       │       ├── _mariadb.tpl
    │           │   │   │       │       │       ├── _mongodb.tpl
    │           │   │   │       │       │       ├── _postgresql.tpl
    │           │   │   │       │       │       ├── _redis.tpl
    │           │   │   │       │       │       └── _validations.tpl
    │           │   │   │       │       └── values.yaml
    │           │   │   │       ├── ci/
    │           │   │   │       │   ├── extra-flags-values.yaml
    │           │   │   │       │   ├── sentinel-values.yaml
    │           │   │   │       │   └── standalone-values.yaml
    │           │   │   │       ├── templates/
    │           │   │   │       │   ├── NOTES.txt
    │           │   │   │       │   ├── _helpers.tpl
    │           │   │   │       │   ├── configmap.yaml
    │           │   │   │       │   ├── extra-list.yaml
    │           │   │   │       │   ├── headless-svc.yaml
    │           │   │   │       │   ├── health-configmap.yaml
    │           │   │   │       │   ├── master/
    │           │   │   │       │   │   ├── psp.yaml
    │           │   │   │       │   │   ├── service.yaml
    │           │   │   │       │   │   └── statefulset.yaml
    │           │   │   │       │   ├── metrics-svc.yaml
    │           │   │   │       │   ├── networkpolicy.yaml
    │           │   │   │       │   ├── pdb.yaml
    │           │   │   │       │   ├── prometheusrule.yaml
    │           │   │   │       │   ├── replicas/
    │           │   │   │       │   │   ├── hpa.yaml
    │           │   │   │       │   │   ├── service.yaml
    │           │   │   │       │   │   └── statefulset.yaml
    │           │   │   │       │   ├── role.yaml
    │           │   │   │       │   ├── rolebinding.yaml
    │           │   │   │       │   ├── scripts-configmap.yaml
    │           │   │   │       │   ├── secret.yaml
    │           │   │   │       │   ├── sentinel/
    │           │   │   │       │   │   ├── service.yaml
    │           │   │   │       │   │   └── statefulset.yaml
    │           │   │   │       │   ├── serviceaccount.yaml
    │           │   │   │       │   ├── servicemonitor.yaml
    │           │   │   │       │   └── tls-secret.yaml
    │           │   │   │       ├── values.schema.json
    │           │   │   │       └── values.yaml
    │           │   │   ├── oauth2-manifests.yaml
    │           │   │   ├── templates/
    │           │   │   │   ├── NOTES.txt
    │           │   │   │   ├── _helpers.tpl
    │           │   │   │   ├── configmap.yaml
    │           │   │   │   ├── deployment.yaml
    │           │   │   │   ├── extra-list.yaml
    │           │   │   │   ├── ingress-route.yaml
    │           │   │   │   ├── ingress.yaml
    │           │   │   │   ├── pdb.yaml
    │           │   │   │   ├── secret-authenticated-emails-file.yaml
    │           │   │   │   ├── secret-google.yaml
    │           │   │   │   ├── secret-htpasswd-file.yaml
    │           │   │   │   ├── secret.yaml
    │           │   │   │   ├── service-account.yaml
    │           │   │   │   ├── service.yaml
    │           │   │   │   └── traefik-middlewares.yaml
    │           │   │   └── values.yaml
    │           │   └── traefik/
    │           │       ├── .helmignore
    │           │       ├── Chart.yaml
    │           │       ├── Guidelines.md
    │           │       ├── LICENSE
    │           │       ├── README.md
    │           │       ├── crds/
    │           │       │   ├── ingressroute.yaml
    │           │       │   ├── ingressroutetcp.yaml
    │           │       │   ├── ingressrouteudp.yaml
    │           │       │   ├── middlewares.yaml
    │           │       │   ├── middlewarestcp.yaml
    │           │       │   ├── serverstransports.yaml
    │           │       │   ├── tlsoptions.yaml
    │           │       │   ├── tlsstores.yaml
    │           │       │   └── traefikservices.yaml
    │           │       ├── templates/
    │           │       │   ├── _helpers.tpl
    │           │       │   ├── _podtemplate.tpl
    │           │       │   ├── daemonset.yaml
    │           │       │   ├── dashboard-hook-ingressroute.yaml
    │           │       │   ├── deployment.yaml
    │           │       │   ├── gateway.yaml
    │           │       │   ├── gatewayclass.yaml
    │           │       │   ├── hpa.yaml
    │           │       │   ├── ingressclass.yaml
    │           │       │   ├── poddisruptionbudget.yaml
    │           │       │   ├── pvc.yaml
    │           │       │   ├── rbac/
    │           │       │   │   ├── clusterrole.yaml
    │           │       │   │   ├── clusterrolebinding.yaml
    │           │       │   │   ├── podsecuritypolicy.yaml
    │           │       │   │   ├── role.yaml
    │           │       │   │   ├── rolebinding.yaml
    │           │       │   │   └── serviceaccount.yaml
    │           │       │   ├── service.yaml
    │           │       │   └── tlsoption.yaml
    │           │       ├── tests/
    │           │       │   ├── container-config_test.yaml
    │           │       │   ├── daemonset-config_test.yaml
    │           │       │   ├── default-install_test.yaml
    │           │       │   ├── deployment-config_test.yaml
    │           │       │   ├── gateway-config_test.yaml
    │           │       │   ├── gatewayclass-config_test.yaml
    │           │       │   ├── pod-config_test.yaml
    │           │       │   ├── poddisruptionbudget-config_test.yaml
    │           │       │   ├── podsecuritypolicy-config_test.yaml
    │           │       │   ├── ports-config_test.yaml
    │           │       │   ├── rbac-config_test.yaml
    │           │       │   ├── service-config_test.yaml
    │           │       │   └── traefik-config_test.yaml
    │           │       └── values.yaml
    │           ├── task_014__aws__traefik_kops_whoami_middleware/
    │           │   ├── ReadMe.md
    │           │   ├── middleware.yaml
    │           │   ├── traefik-resources.yaml
    │           │   ├── values.yaml
    │           │   └── whoami.yaml
    │           ├── task_015__aws__lets_encrypt_kops_cluster/
    │           │   ├── ReadMe.md
    │           │   ├── cluster-issuer.yaml
    │           │   ├── ingress.yaml
    │           │   ├── k8s-resources.yaml
    │           │   └── whoami.yaml
    │           ├── task_016__aws__k8s_cluster_using_kops/
    │           │   └── ReadMe.md
    │           ├── task_017__aws__updating_a_kops_cluster/
    │           │   └── ReadMe.md
    │           ├── task_018_aws__kong_ingress_on_eks/
    │           │   ├── ReadMe.md
    │           │   ├── echo-app/
    │           │   │   ├── dep.yaml
    │           │   │   ├── ingress-with-plugin.yaml
    │           │   │   ├── ingress.yaml
    │           │   │   ├── plugin.yaml
    │           │   │   ├── ratelimitplugin.yaml
    │           │   │   └── svc.yaml
    │           │   ├── global-plugins/
    │           │   │   └── ratelimitplugin.yaml
    │           │   ├── httpbin-app/
    │           │   │   ├── add-response-header-plugin.yaml
    │           │   │   ├── consumer.yaml
    │           │   │   ├── customizedKongIngress.yaml
    │           │   │   ├── dep.yaml
    │           │   │   ├── ingress.yaml
    │           │   │   ├── plugin-svc-http-auth.yaml
    │           │   │   ├── specific-consumer-plugin.yaml
    │           │   │   └── svc.yaml
    │           │   └── kong/
    │           │       └── values.yaml
    │           ├── task_019__gcp__elastic_search/
    │           │   └── ReadMe.md
    │           ├── task_020__gcp__basic_namespace_wide_kubeconfig/
    │           │   ├── README.md
    │           │   ├── admin-run.sh
    │           │   ├── client-run.sh
    │           │   ├── csr.cnf
    │           │   ├── csr.yaml
    │           │   ├── dev-ns.yaml
    │           │   ├── kubeconfig.tpl
    │           │   ├── reset.sh
    │           │   ├── role-binding.yaml
    │           │   ├── role.yaml
    │           │   └── www.yaml
    │           ├── task_021__gcp__intermediate_namespace_wide_kubeconfig/
    │           │   ├── README.md
    │           │   ├── admin-run.sh
    │           │   ├── client-run.sh
    │           │   ├── common-resources/
    │           │   │   ├── csr.cnf-template
    │           │   │   ├── csr.yaml
    │           │   │   ├── kubeconfig.tpl
    │           │   │   ├── role-binding.yaml-template
    │           │   │   ├── role-readonly.yaml-template
    │           │   │   └── role-readwrite.yaml-template
    │           │   ├── dev/
    │           │   │   ├── default/
    │           │   │   │   └── groupQA/
    │           │   │   │       ├── csr.yaml
    │           │   │   │       ├── dave.key
    │           │   │   │       ├── kubeconfig
    │           │   │   │       ├── role-binding.yaml
    │           │   │   │       └── role-readonly.yaml
    │           │   │   └── kube-system/
    │           │   │       └── groupDEV/
    │           │   │           ├── csr.yaml
    │           │   │           ├── dave.key
    │           │   │           ├── kubeconfig
    │           │   │           ├── role-binding.yaml
    │           │   │           └── role-readwrite.yaml
    │           │   ├── reset.sh
    │           │   ├── run-all.sh
    │           │   └── www.yaml
    │           ├── task_022__gcp__k8s_dashboard/
    │           │   ├── 00-namespace.yaml
    │           │   ├── 05-service-account.yaml
    │           │   ├── 10-service.yaml
    │           │   ├── 15-secret.yaml
    │           │   ├── 20-configmap.yaml
    │           │   ├── 25-role.yaml
    │           │   ├── 30-clusterRole.yaml
    │           │   ├── 35-roleBinding.yaml
    │           │   ├── 40-clusterRoleBinding.yaml
    │           │   ├── 45-deployment.yaml
    │           │   ├── 50-service-kubernetes-dashboard.yaml
    │           │   ├── 55-service-dashboard-metrics-scraper.yaml
    │           │   ├── 60-admin-service-account.yaml
    │           │   └── README.md
    │           ├── task_023__gcp__traefik_whoami/
    │           │   ├── 00-resource-crd-definition.yml
    │           │   ├── 05-traefik-rbac.yml
    │           │   ├── 10-service-account.yaml
    │           │   ├── 15-traefik-deployment.yaml
    │           │   ├── 16-traefik.toml
    │           │   ├── 20-traefik-service.yaml
    │           │   ├── 25-whoami-deployment.yaml
    │           │   ├── 30-whoami-service.yaml
    │           │   ├── 35-whoami-ingress-route.yaml
    │           │   └── ReadMe.md
    │           ├── task_024__gcp__traefik_whoami_tomlInConfigMap/
    │           │   ├── 00-resource-crd-definition.yml
    │           │   ├── 05-traefik-rbac.yml
    │           │   ├── 10-service-account.yaml
    │           │   ├── 15-traefik-deployment.yaml
    │           │   ├── 20-traefik-service.yaml
    │           │   ├── 24-traefik-configMap.yaml
    │           │   ├── 25-whoami-deployment.yaml
    │           │   ├── 30-whoami-service.yaml
    │           │   ├── 35-whoami-ingress-route.yaml
    │           │   └── ReadMe.md
    │           ├── task_025__gcp__traefik_whoami_lets_encrypt/
    │           │   ├── 00-resource-crd-definition.yml
    │           │   ├── 05-traefik-rbac.yml
    │           │   ├── 10-service-account.yaml
    │           │   ├── 15-traefik-deployment.yaml
    │           │   ├── 20-traefik-service.yaml
    │           │   ├── 25-whoami-deployment.yaml
    │           │   ├── 30-whoami-service.yaml
    │           │   ├── 35-ingress-route.yaml
    │           │   └── ReadMe.md
    │           ├── task_026__gcp__external_IP_to_access_Application_In_Cluster/
    │           │   ├── ReadMe.md
    │           │   └── service/
    │           │       └── load-balancer-example.yaml
    │           ├── task_027__gcp__intermediate_cluster_wide_kubeconfig/
    │           │   ├── README.md
    │           │   ├── admin-run.sh
    │           │   ├── client-run.sh
    │           │   ├── common-resources/
    │           │   │   ├── clusterRole-binding.yaml-template
    │           │   │   ├── clusterRole-readonly.yaml-template
    │           │   │   ├── clusterRole-readwrite.yaml-template
    │           │   │   ├── csr.cnf-template
    │           │   │   ├── csr.yaml
    │           │   │   └── kubeconfig.tpl
    │           │   ├── dev/
    │           │   │   ├── groupDEV/
    │           │   │   │   ├── clusterRole-binding.yaml
    │           │   │   │   ├── clusterRole-readwrite.yaml
    │           │   │   │   ├── csr.yaml
    │           │   │   │   ├── dave.key
    │           │   │   │   └── kubeconfig
    │           │   │   └── groupQA/
    │           │   │       ├── clusterRole-binding.yaml
    │           │   │       ├── clusterRole-readonly.yaml
    │           │   │       ├── csr.yaml
    │           │   │       ├── dave.key
    │           │   │       └── kubeconfig
    │           │   ├── reset.sh
    │           │   ├── run-all.sh
    │           │   └── www.yaml
    │           ├── task_028__gcp__configuring_datadog/
    │           │   ├── 00-clusterrole.yaml
    │           │   ├── 01-cluster-role.yaml
    │           │   ├── 05-serviceaccount.yaml
    │           │   ├── 06-service-account.yaml
    │           │   ├── 10-clusterrolebinding.yaml
    │           │   ├── 11-cluster-role-binding.yaml
    │           │   ├── 20-datadog-cluster-agent.yaml
    │           │   ├── 25-datadog-agent.yaml
    │           │   ├── 30-service.yaml
    │           │   ├── 35-deployment.yaml
    │           │   └── ReadMe.md
    │           ├── task_029__gcp__configuring_dns_with_static_IPs_k8_using_Ingress/
    │           │   ├── ReadMe.md
    │           │   ├── helloweb-deployment.yaml
    │           │   └── helloweb-ingress.yaml
    │           ├── task_030__gcp__PodSecurityPolicy/
    │           │   ├── ReadMe.md
    │           │   └── example-psp.yaml
    │           ├── task_031__gcp__kube_state_metrics/
    │           │   ├── ReadMe.md
    │           │   ├── cluster-role-binding.yaml
    │           │   ├── cluster-role.yaml
    │           │   ├── deployment.yaml
    │           │   ├── service-account.yaml
    │           │   └── service.yaml
    │           ├── task_032__gcp__traefik_whoami_tls_custom_certs/
    │           │   ├── 00-resource-crd-definition.yml
    │           │   ├── 05-traefik-rbac.yml
    │           │   ├── 10-service-account.yaml
    │           │   ├── 11-traefik-configmap.yaml
    │           │   ├── 12-secret.yaml
    │           │   ├── 15-traefik-deployment.yaml
    │           │   ├── 20-traefik-service.yaml
    │           │   ├── 25-whoami-deployment.yaml
    │           │   ├── 30-whoami-service.yaml
    │           │   ├── 35-whoami-ingress-route.yaml
    │           │   └── ReadMe.md
    │           ├── task_033__gcp__configuring_dns_with_static_IPs_k8_using_Service/
    │           │   ├── ReadMe.md
    │           │   ├── helloweb-deployment.yaml
    │           │   └── helloweb-service.yaml
    │           ├── task_034__gcp__metricbeat/
    │           │   ├── 00-service-account.yaml
    │           │   ├── 04-cluster-role.yaml
    │           │   ├── 08-cluster-role-binding.yaml
    │           │   ├── 12-configmap-metricbeat-deployment.yaml
    │           │   ├── 16-configmap-metricbeat-daemonset.yaml
    │           │   ├── 20-daemonset.yaml
    │           │   ├── 24-deployment.yaml
    │           │   └── ReadMe.md
    │           ├── task_035__gcp__journalbeat/
    │           │   ├── 00-service-account.yaml
    │           │   ├── 02-cluster-role.yaml
    │           │   ├── 03-cluster-role-binding.yaml
    │           │   ├── 04-pod-security-policy.yaml
    │           │   ├── 08-configmap.yaml
    │           │   ├── 12-daemonset.yaml
    │           │   └── ReadMe.md
    │           ├── task_036__gcp_vm__cert_manager_lets_encypt_http_validation/
    │           │   ├── ReadMe.md
    │           │   ├── cert-manager.yaml
    │           │   ├── certificate.yaml
    │           │   ├── cluster-issuer.yaml
    │           │   ├── dep-whoami.yaml
    │           │   ├── ingress.yaml
    │           │   └── service.yaml
    │           ├── task_037__gcp_k8s__cert_manager_lets_encypt_http_validation/
    │           │   ├── ReadMe.md
    │           │   ├── cert-manager.yaml
    │           │   ├── certificate.yaml
    │           │   ├── cluster-issuer.yaml
    │           │   ├── dep-whoami.yaml
    │           │   ├── ingress.yaml
    │           │   ├── service.yaml
    │           │   └── svc.yaml
    │           ├── task_038__local__kind__extramounts_for_pv_and_pvc/
    │           │   ├── ReadMe.md
    │           │   ├── kind_extramounts_config.yaml
    │           │   ├── pod.yaml
    │           │   ├── pv.yaml
    │           │   └── pvc.yaml
    │           ├── task_039__local__kind__prometheus_operator__kube_prometheus_grafana_alertmanager/
    │           │   ├── ReadMe.md
    │           │   └── kind-config.yaml
    │           ├── task_040__local__kind__bitnami_loki___using_39/
    │           │   ├── ReadMe.md
    │           │   ├── log-generator-pod.yaml
    │           │   └── loki.yaml
    │           ├── task_041__gcp_k8s__nginx_ingress/
    │           │   ├── ReadMe.md
    │           │   ├── base/
    │           │   │   ├── app/
    │           │   │   │   ├── dep_whoami.yaml
    │           │   │   │   ├── ingress_whoami.yaml
    │           │   │   │   └── svc_whoami.yaml
    │           │   │   └── ingress-nginx/
    │           │   │       ├── configmap_patch.yaml
    │           │   │       ├── deployment_patch.yaml
    │           │   │       ├── ingressclass_patch.yaml
    │           │   │       ├── kustomization.yaml
    │           │   │       ├── namespace.yaml
    │           │   │       └── service_patch.yaml
    │           │   ├── build/
    │           │   │   └── ingress_nginx_ext_all.yaml
    │           │   └── vendor/
    │           │       └── ingress-nginx/
    │           │           ├── ingress-nginx-ext-vendor.yaml
    │           │           └── kustomization.yaml
    │           ├── task_042__gcp_k8s__cert_manager_dns_validation___using_41/
    │           │   ├── ReadMe.md
    │           │   ├── base/
    │           │   │   ├── app/
    │           │   │   │   ├── dep_echo.yaml
    │           │   │   │   ├── dep_whoami.yaml
    │           │   │   │   ├── ingress_echo.yaml
    │           │   │   │   ├── ingress_whoami.yaml
    │           │   │   │   ├── kustomization.yaml
    │           │   │   │   ├── svc_echo.yaml
    │           │   │   │   └── svc_whoami.yaml
    │           │   │   └── cert-manager/
    │           │   │       ├── certificate-letsEncryptProd.yaml
    │           │   │       ├── certificate-letsEncryptStaging.yaml
    │           │   │       ├── clusterIssuer-letsEncryptProd.yaml
    │           │   │       ├── clusterIssuer-letsEncryptStaging.yaml
    │           │   │       ├── kustomization.yaml
    │           │   │       └── namespace.yaml
    │           │   ├── build/
    │           │   │   ├── app_all.yaml
    │           │   │   └── cert_manager_all.yaml
    │           │   └── vendor/
    │           │       └── cert-manager/
    │           │           ├── cert-manager-vendor.yaml
    │           │           └── kustomization.yaml
    │           ├── task_043_gcp_k8s__codecentric_keycloak__bitnami_postgres___using_41_42/
    │           │   ├── ReadMe.md
    │           │   ├── base/
    │           │   │   ├── keycloakx/
    │           │   │   │   ├── ingress_keycloak.yaml
    │           │   │   │   └── kustomization.yaml
    │           │   │   └── postgresql/
    │           │   │       └── namespace.yaml
    │           │   └── build/
    │           │       └── keycloakx_all.yaml
    │           ├── task_044_gcp_k8s__prometheus_operator__kube_prometheus_grafana_alertmanager___using_41_42_43/
    │           │   ├── ReadMe.md
    │           │   ├── base/
    │           │   │   └── kube_prometheus/
    │           │   │       ├── alertmanager_ingress.yaml
    │           │   │       ├── grafana_ingress.yaml
    │           │   │       ├── kustomization.yaml
    │           │   │       └── prometheus_ingress.yaml
    │           │   ├── build/
    │           │   │   └── kube_prometheus_all.yaml
    │           │   └── vendor/
    │           │       └── kube_prometheus/
    │           │           ├── kustomization.yaml
    │           │           └── manifests/
    │           │               ├── alertmanager-alertmanager.yaml
    │           │               ├── alertmanager-networkPolicy.yaml
    │           │               ├── alertmanager-podDisruptionBudget.yaml
    │           │               ├── alertmanager-prometheusRule.yaml
    │           │               ├── alertmanager-secret.yaml
    │           │               ├── alertmanager-service.yaml
    │           │               ├── alertmanager-serviceAccount.yaml
    │           │               ├── alertmanager-serviceMonitor.yaml
    │           │               ├── blackboxExporter-clusterRole.yaml
    │           │               ├── blackboxExporter-clusterRoleBinding.yaml
    │           │               ├── blackboxExporter-configuration.yaml
    │           │               ├── blackboxExporter-deployment.yaml
    │           │               ├── blackboxExporter-networkPolicy.yaml
    │           │               ├── blackboxExporter-service.yaml
    │           │               ├── blackboxExporter-serviceAccount.yaml
    │           │               ├── blackboxExporter-serviceMonitor.yaml
    │           │               ├── grafana-config.yaml
    │           │               ├── grafana-dashboardDatasources.yaml
    │           │               ├── grafana-dashboardDefinitions.yaml
    │           │               ├── grafana-dashboardSources.yaml
    │           │               ├── grafana-deployment.yaml
    │           │               ├── grafana-networkPolicy.yaml
    │           │               ├── grafana-prometheusRule.yaml
    │           │               ├── grafana-service.yaml
    │           │               ├── grafana-serviceAccount.yaml
    │           │               ├── grafana-serviceMonitor.yaml
    │           │               ├── kubePrometheus-prometheusRule.yaml
    │           │               ├── kubeStateMetrics-clusterRole.yaml
    │           │               ├── kubeStateMetrics-clusterRoleBinding.yaml
    │           │               ├── kubeStateMetrics-deployment.yaml
    │           │               ├── kubeStateMetrics-networkPolicy.yaml
    │           │               ├── kubeStateMetrics-prometheusRule.yaml
    │           │               ├── kubeStateMetrics-service.yaml
    │           │               ├── kubeStateMetrics-serviceAccount.yaml
    │           │               ├── kubeStateMetrics-serviceMonitor.yaml
    │           │               ├── kubernetesControlPlane-prometheusRule.yaml
    │           │               ├── kubernetesControlPlane-serviceMonitorApiserver.yaml
    │           │               ├── kubernetesControlPlane-serviceMonitorCoreDNS.yaml
    │           │               ├── kubernetesControlPlane-serviceMonitorKubeControllerManager.yaml
    │           │               ├── kubernetesControlPlane-serviceMonitorKubeScheduler.yaml
    │           │               ├── kubernetesControlPlane-serviceMonitorKubelet.yaml
    │           │               ├── nodeExporter-clusterRole.yaml
    │           │               ├── nodeExporter-clusterRoleBinding.yaml
    │           │               ├── nodeExporter-daemonset.yaml
    │           │               ├── nodeExporter-networkPolicy.yaml
    │           │               ├── nodeExporter-prometheusRule.yaml
    │           │               ├── nodeExporter-service.yaml
    │           │               ├── nodeExporter-serviceAccount.yaml
    │           │               ├── nodeExporter-serviceMonitor.yaml
    │           │               ├── prometheus-clusterRole.yaml
    │           │               ├── prometheus-clusterRoleBinding.yaml
    │           │               ├── prometheus-networkPolicy.yaml
    │           │               ├── prometheus-podDisruptionBudget.yaml
    │           │               ├── prometheus-prometheus.yaml
    │           │               ├── prometheus-prometheusRule.yaml
    │           │               ├── prometheus-roleBindingConfig.yaml
    │           │               ├── prometheus-roleBindingSpecificNamespaces.yaml
    │           │               ├── prometheus-roleConfig.yaml
    │           │               ├── prometheus-roleSpecificNamespaces.yaml
    │           │               ├── prometheus-service.yaml
    │           │               ├── prometheus-serviceAccount.yaml
    │           │               ├── prometheus-serviceMonitor.yaml
    │           │               ├── prometheusAdapter-apiService.yaml
    │           │               ├── prometheusAdapter-clusterRole.yaml
    │           │               ├── prometheusAdapter-clusterRoleAggregatedMetricsReader.yaml
    │           │               ├── prometheusAdapter-clusterRoleBinding.yaml
    │           │               ├── prometheusAdapter-clusterRoleBindingDelegator.yaml
    │           │               ├── prometheusAdapter-clusterRoleServerResources.yaml
    │           │               ├── prometheusAdapter-configMap.yaml
    │           │               ├── prometheusAdapter-deployment.yaml
    │           │               ├── prometheusAdapter-networkPolicy.yaml
    │           │               ├── prometheusAdapter-podDisruptionBudget.yaml
    │           │               ├── prometheusAdapter-roleBindingAuthReader.yaml
    │           │               ├── prometheusAdapter-service.yaml
    │           │               ├── prometheusAdapter-serviceAccount.yaml
    │           │               ├── prometheusAdapter-serviceMonitor.yaml
    │           │               ├── prometheusOperator-clusterRole.yaml
    │           │               ├── prometheusOperator-clusterRoleBinding.yaml
    │           │               ├── prometheusOperator-deployment.yaml
    │           │               ├── prometheusOperator-networkPolicy.yaml
    │           │               ├── prometheusOperator-prometheusRule.yaml
    │           │               ├── prometheusOperator-service.yaml
    │           │               ├── prometheusOperator-serviceAccount.yaml
    │           │               ├── prometheusOperator-serviceMonitor.yaml
    │           │               └── setup/
    │           │                   ├── 0alertmanagerConfigCustomResourceDefinition.yaml
    │           │                   ├── 0alertmanagerCustomResourceDefinition.yaml
    │           │                   ├── 0podmonitorCustomResourceDefinition.yaml
    │           │                   ├── 0probeCustomResourceDefinition.yaml
    │           │                   ├── 0prometheusCustomResourceDefinition.yaml
    │           │                   ├── 0prometheusagentCustomResourceDefinition.yaml
    │           │                   ├── 0prometheusruleCustomResourceDefinition.yaml
    │           │                   ├── 0scrapeconfigCustomResourceDefinition.yaml
    │           │                   ├── 0servicemonitorCustomResourceDefinition.yaml
    │           │                   ├── 0thanosrulerCustomResourceDefinition.yaml
    │           │                   └── namespace.yaml
    │           ├── task_045__local__kind__extra_port_mappings/
    │           │   ├── ReadMe.md
    │           │   ├── kind_nodeport_config.yaml
    │           │   └── pod.yaml
    │           ├── task_046__local__kind__nodeport_with_port_mapping/
    │           │   ├── ReadMe.md
    │           │   ├── kind_config_node_port.yaml
    │           │   ├── pod.yaml
    │           │   └── svc.yaml
    │           ├── task_047__local__kind__ingress_nginx/
    │           │   ├── ReadMe.md
    │           │   ├── ingress.yaml
    │           │   ├── kind_config_ingress_nginx.yaml
    │           │   ├── pod_bar_app.yaml
    │           │   ├── pod_foo_app.yaml
    │           │   ├── svc_bar.yaml
    │           │   └── svc_foo.yaml
    │           ├── task_048__local__kind__cilium__hubble_ui__nginx_ingress/
    │           │   ├── ReadMe.md
    │           │   ├── ingress.yaml
    │           │   └── kind-config.yaml
    │           ├── task_049__openshift__deploy_sample_backend_app/
    │           │   ├── ReadMe.md
    │           │   └── k8s-qotd-python/
    │           │       ├── deploymentconfig.yaml
    │           │       ├── ingress.yaml
    │           │       ├── quotes-deployment.yaml
    │           │       ├── route.yaml
    │           │       └── service.yaml
    │           ├── task_050__local__kind__headless_svc/
    │           │   ├── ReadMe.md
    │           │   ├── headless-svc.yaml
    │           │   └── nginx-pods.yaml
    │           ├── task_051__local__kind__linkerd/
    │           │   └── ReadMe.md
    │           ├── task_052__local__kind__linkerd_with_custom_certs/
    │           │   ├── ReadMe.md
    │           │   ├── ca.crt
    │           │   ├── ca.key
    │           │   ├── issuer.crt
    │           │   └── issuer.key
    │           ├── task_053__local__kind__linkerd_auto_rotate_control_plane_TLS_credentials/
    │           │   ├── ReadMe.md
    │           │   ├── ca.crt
    │           │   ├── ca.key
    │           │   ├── certificate.yaml
    │           │   └── issuer.yaml
    │           ├── task_054__local__kind__linkerd_auto_rotate_webhook_tls_credentials/
    │           │   ├── ReadMe.md
    │           │   ├── ca.crt
    │           │   ├── ca.key
    │           │   ├── certificate-linkerd-proxy-injector.yaml
    │           │   ├── certificate-linkerd-proxy-validator.yaml
    │           │   ├── certificate-linkerd-sp-validator.yaml
    │           │   ├── certificate-linkerd-tap-injector.yaml
    │           │   ├── certificate-tap.yaml
    │           │   ├── webhook-issuer-viz.yaml
    │           │   └── webhook-issuer.yaml
    │           ├── task_055__aws_eks__gcp_gke___istio_getting_started/
    │           │   ├── ReadMe.md
    │           │   ├── gateway.yaml
    │           │   └── virtualservice.yaml
    │           ├── task_056__aws_eks__gcp_gke__istio__request_routing/
    │           │   ├── ReadMe.md
    │           │   ├── concepts.md
    │           │   ├── destination-rule-all.yaml
    │           │   ├── virtual-service-all-v1.yaml
    │           │   └── virtual-service-reviews-test-v2.yaml
    │           ├── task_057__aws_eks__gcp_gke__istio__fault_injection__http_delay__http_abort/
    │           │   ├── ReadMe.md
    │           │   ├── destination-rule-all.yaml
    │           │   ├── virtual-service-all-v1.yaml
    │           │   ├── virtual-service-ratings-test-abort.yaml
    │           │   ├── virtual-service-ratings-test-delay.yaml
    │           │   └── virtual-service-reviews-test-v2.yaml
    │           ├── task_058__aws_eks__gcp_gke__istio__traffic_shifting/
    │           │   ├── ReadMe.md
    │           │   ├── destination-rule-all.yaml
    │           │   ├── virtual-service-all-v1.yaml
    │           │   ├── virtual-service-reviews-50-v3.yaml
    │           │   └── virtual-service-reviews-v3.yaml
    │           ├── task_059__aws_eks__gcp_gke__istio__request_timeouts/
    │           │   ├── ReadMe.md
    │           │   ├── destination-rule-all.yaml
    │           │   └── virtual-service-all-v1.yaml
    │           ├── task_060__gcp_gke__istio__tcp_traffic_shifting/
    │           │   ├── ReadMe.md
    │           │   ├── destination-rule-all.yaml
    │           │   └── virtual-service-all-v1.yaml
    │           ├── task_061__gcp_gke__istio__circuit_breaking/
    │           │   ├── ReadMe.md
    │           │   └── fortio-deploy.yaml
    │           ├── task_062__gcp_gke__istio__mirroring/
    │           │   ├── ReadMe.md
    │           │   └── fortio-deploy.yaml
    │           ├── task_063__gcp_gke__istio__ingress__ingress_gateways/
    │           │   └── ReadMe.md
    │           ├── task_064__gcp_gke__istio__ingres__secure_gateways__TLS__mTLS/
    │           │   ├── ReadMe.md
    │           │   └── helloworld.yaml
    │           ├── task_065__gcp_gke__ingress_gateway_without_TLS_Termination/
    │           │   ├── ReadMe.md
    │           │   └── nginx.conf
    │           ├── task_066__gcp_gke__ingress_kubernetes_ingress/
    │           │   └── ReadMe.md
    │           └── task_067__gcp_gke__egress__accessing_external_service/
    │               └── ReadMe.md
    ├── databases/
    │   ├── mongo/
    │   │   ├── ReadMe-static.md
    │   │   ├── ReadMe.md
    │   │   └── taskset_mongo_databases/
    │   │       ├── task_001_connecting_to_db/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_creating_db_inserting_data/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_mongodump/
    │   │       │   └── ReadMe.md
    │   │       └── task_004_mongorestore/
    │   │           └── ReadMe.md
    │   ├── mssql/
    │   │   ├── ReadMe.md
    │   │   ├── ReadMe_static.md
    │   │   └── taskset_mssql_databases/
    │   │       ├── ReadMe-static.md
    │   │       ├── task_000_docs_and_vscode_setup/
    │   │       │   ├── ReadMe.md
    │   │       │   └── settings.json
    │   │       ├── task_001_connecting_to_db/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_show_databases/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_drop_database/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_get_current_database/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_create_database/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_check_version/
    │   │       │   └── ReadMe.md
    │   │       ├── task_007_create_database__if_not_exists__vars_navchar/
    │   │       │   └── ReadMe.md
    │   │       ├── task_008_count_tables_in_database/
    │   │       │   └── ReadMe.md
    │   │       ├── task_009_switch_to_particular_db/
    │   │       │   └── ReadMe.md
    │   │       ├── task_010_create_table__if_not_exists/
    │   │       │   └── ReadMe.md
    │   │       ├── task_011_insert_records__if_not_exists/
    │   │       │   └── ReadMe.md
    │   │       ├── task_012_select_all_from_table/
    │   │       │   └── ReadMe.md
    │   │       ├── task_013_create_credential_and_select_credential/
    │   │       │   └── ReadMe.md
    │   │       ├── task_014_full_backup_to_s3_compatible_object_storage__with_format/
    │   │       │   └── ReadMe.md
    │   │       ├── task_015_get_connection_info__kill/
    │   │       │   └── ReadMe.md
    │   │       ├── task_016_full_backup_to_disk__with_format/
    │   │       │   └── ReadMe.md
    │   │       ├── task_017_show_all_tables_in_specific_database/
    │   │       │   └── ReadMe.md
    │   │       ├── task_018_inspect_backup_to_disk__with_init_and_differential/
    │   │       │   └── ReadMe.md
    │   │       ├── task_019_restore_full_backup__from_disk/
    │   │       │   └── ReadMe.md
    │   │       ├── task_020_full_backup_to_disk__with_init_and_differential/
    │   │       │   └── ReadMe.md
    │   │       ├── task_021_restore_from_full_backup_on_disk__with_init_and_differential/
    │   │       │   └── ReadMe.md
    │   │       ├── task_022_full_base_and_differential_backup_to_s3/
    │   │       │   └── ReadMe.md
    │   │       ├── task_023_restore_full_base_and_differential_backup_to_s3/
    │   │       │   └── ReadMe.md
    │   │       ├── task_024_get_current_date_and_time/
    │   │       │   └── ReadMe.md
    │   │       ├── task_025_licence_and_version/
    │   │       │   └── ReadMe.md
    │   │       ├── task_026_check_default_schema/
    │   │       │   └── ReadMe.md
    │   │       ├── task_027_stored_procedures/
    │   │       │   └── ReadMe.md
    │   │       ├── task_028_create_and_validate_jobs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_029_add_jobstep_and_validate/
    │   │       │   └── ReadMe.md
    │   │       ├── task_030_add_job_schedule_and_validate/
    │   │       │   └── ReadMe.md
    │   │       ├── task_031_attach_schedule_to_job_and_validate/
    │   │       │   └── ReadMe.md
    │   │       ├── task_032_add_job_to_server_and_validate/
    │   │       │   └── ReadMe.md
    │   │       ├── task_033_logical_backup/
    │   │       │   └── ReadMe.md
    │   │       ├── task_034_check_when_tables_in_given_database_were_last_updated/
    │   │       │   └── ReadMe.md
    │   │       ├── task_035_slow_queries/
    │   │       │   └── ReadMe.md
    │   │       └── task_036_monitoring_using_influxdb_telegraf_grafana/
    │   │           ├── ReadMe.md
    │   │           └── docker-compose.yaml
    │   ├── mysql/
    │   │   ├── ReadMe.md
    │   │   ├── ReadMe_static.md
    │   │   └── taskset_mysql_databases/
    │   │       ├── task_001_connecting_to_db/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_mysqldump/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_managing_databases/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_managing_user/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_set_transaction_isolation_levels/
    │   │       │   └── ReadMe.md
    │   │       └── task_006_managing_tables/
    │   │           └── ReadMe.md
    │   ├── oracle19c/
    │   │   ├── ReadMe.md
    │   │   └── taskset_oracle19c_databases/
    │   │       └── task_000_clients_setup/
    │   │           ├── ReadMe.md
    │   │           └── wallet-unzipped/
    │   │               ├── cwallet.sso
    │   │               ├── ewallet.p12
    │   │               ├── keystore.jks
    │   │               ├── ojdbc.properties
    │   │               ├── sqlnet.ora
    │   │               ├── tnsnames.ora
    │   │               └── truststore.jks
    │   └── postgreSQL/
    │       ├── ReadMe-static.md
    │       ├── ReadMe.md
    │       └── taskset_postgreSQL_databases/
    │           ├── task_001_connecting_to_db/
    │           │   └── ReadMe.md
    │           ├── task_002_managing_tables/
    │           │   └── ReadMe.md
    │           ├── task_003_managing_users/
    │           │   └── ReadMe.md
    │           ├── task_004_managing_database/
    │           │   └── ReadMe.md
    │           ├── task_005_managing_schemas/
    │           │   └── ReadMe.md
    │           ├── task_006_checking_deadlock/
    │           │   └── ReadMe.md
    │           └── task_007_set__show__transaction_isolation_levels/
    │               └── ReadMe.md
    ├── devops_blogs/
    │   └── ReadMe.md
    ├── infrastructure_as_code/
    │   ├── ansible/
    │   │   ├── README.md
    │   │   ├── ReadMe-static.md
    │   │   ├── install-ansible.sh
    │   │   └── taskset_ansible_infrastructure_as_code/
    │   │       ├── task_001_commons/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       └── playbook-install-commons.yaml
    │   │       ├── task_002_datadog_agent/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       ├── playbook-install-datadog.yaml
    │   │       │       └── roles/
    │   │       │           └── datadog-agent/
    │   │       │               ├── ReadMe.md
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               ├── handlers/
    │   │       │               │   └── main.yml
    │   │       │               ├── tasks/
    │   │       │               │   ├── agent-linux.yml
    │   │       │               │   ├── agent-win.yml
    │   │       │               │   ├── agent5-linux.yml
    │   │       │               │   ├── integration.yml
    │   │       │               │   ├── main.yml
    │   │       │               │   ├── os-check.yml
    │   │       │               │   ├── parse-version.yml
    │   │       │               │   ├── pkg-debian/
    │   │       │               │   │   ├── install-latest.yml
    │   │       │               │   │   └── install-pinned.yml
    │   │       │               │   ├── pkg-debian.yml
    │   │       │               │   ├── pkg-redhat/
    │   │       │               │   │   ├── install-latest.yml
    │   │       │               │   │   └── install-pinned.yml
    │   │       │               │   ├── pkg-redhat.yml
    │   │       │               │   ├── pkg-suse/
    │   │       │               │   │   ├── install-latest.yml
    │   │       │               │   │   └── install-pinned.yml
    │   │       │               │   ├── pkg-suse.yml
    │   │       │               │   ├── pkg-windows-opts.yml
    │   │       │               │   ├── pkg-windows.yml
    │   │       │               │   ├── set-parse-version.yml
    │   │       │               │   ├── win_agent_latest.yml
    │   │       │               │   └── win_agent_version.yml
    │   │       │               └── templates/
    │   │       │                   ├── checks.yaml.j2
    │   │       │                   ├── datadog.conf.j2
    │   │       │                   ├── datadog.yaml.j2
    │   │       │                   ├── system-probe.yaml.j2
    │   │       │                   └── zypper.repo.j2
    │   │       ├── task_003_user/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       ├── playbook-create-user.yaml
    │   │       │       └── roles/
    │   │       │           └── user/
    │   │       │               ├── ReadMe.md
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               └── tasks/
    │   │       │                   ├── main.yml
    │   │       │                   └── users.yml
    │   │       ├── task_004_directory/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       ├── playbook-create-directory.yaml
    │   │       │       └── roles/
    │   │       │           └── user/
    │   │       │               ├── ReadMe.md
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               └── tasks/
    │   │       │                   ├── main.yml
    │   │       │                   └── users.yml
    │   │       ├── task_005_docker/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── docker-compose-install.yml
    │   │       │       ├── docker-drone-ci-setup.yml
    │   │       │       ├── drone-ci.yml
    │   │       │       ├── drone-runner.yml
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       ├── monit-install.yml
    │   │       │       ├── playbook-create-directory.yaml
    │   │       │       ├── playbook-create-user.yaml
    │   │       │       ├── playbook-install-commons.yaml
    │   │       │       ├── playbook-install-datadog.yaml
    │   │       │       ├── playbook-install-docker_docker-compose.yaml
    │   │       │       ├── playbook-install-elastic-search-cluster-docker.yaml
    │   │       │       ├── playbook-install-jenkins-docker.yaml
    │   │       │       ├── playbook-install-kibana-docker.yaml
    │   │       │       ├── playbook-install-monit.yaml
    │   │       │       └── roles/
    │   │       │           └── docker/
    │   │       │               ├── README.md
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               ├── handlers/
    │   │       │               │   └── main.yml
    │   │       │               └── tasks/
    │   │       │                   ├── docker-compose.yml
    │   │       │                   ├── docker-users.yml
    │   │       │                   ├── main.yml
    │   │       │                   ├── setup-Debian.yml
    │   │       │                   └── setup-RedHat.yml
    │   │       ├── task_005_drone_ci/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── docker-drone-ci-setup.yml
    │   │       │       ├── drone-ci.yml
    │   │       │       ├── drone-runner.yml
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       └── roles/
    │   │       │           └── drone-ci/
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               ├── tasks/
    │   │       │               │   └── main.yml
    │   │       │               └── templates/
    │   │       │                   ├── conf/
    │   │       │                   │   ├── docker-compose.yml
    │   │       │                   │   └── server.env
    │   │       │                   └── system/
    │   │       │                       └── drone.service
    │   │       ├── task_006_elastic_search_cluster_docker/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       └── playbook-install-elastic-search-cluster-docker.yaml
    │   │       ├── task_007_jenkins_docker/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       ├── playbook-install-jenkins-docker.yaml
    │   │       │       └── roles/
    │   │       │           ├── commons/
    │   │       │           │   ├── ReadMe.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   └── tasks/
    │   │       │           │       ├── Debian/
    │   │       │           │       │   ├── install-atom-ide.yml
    │   │       │           │       │   ├── setup-Debian.yml
    │   │       │           │       │   └── setup-my-workstation.yml
    │   │       │           │       └── main.yml
    │   │       │           ├── directory/
    │   │       │           │   ├── ReadMe.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   └── tasks/
    │   │       │           │       ├── configure.yml
    │   │       │           │       └── main.yml
    │   │       │           ├── docker/
    │   │       │           │   ├── README.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   ├── handlers/
    │   │       │           │   │   └── main.yml
    │   │       │           │   └── tasks/
    │   │       │           │       ├── docker-compose.yml
    │   │       │           │       ├── docker-users.yml
    │   │       │           │       ├── main.yml
    │   │       │           │       ├── setup-Debian.yml
    │   │       │           │       └── setup-RedHat.yml
    │   │       │           ├── jenkins-docker/
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   ├── handlers/
    │   │       │           │   │   └── main.yaml
    │   │       │           │   ├── tasks/
    │   │       │           │   │   ├── install-jenkins.yaml
    │   │       │           │   │   ├── main.yml
    │   │       │           │   │   └── plugins.yml
    │   │       │           │   └── templates/
    │   │       │           │       ├── Caddyfile
    │   │       │           │       ├── docker-compose.yml
    │   │       │           │       ├── install-plugins.groovy
    │   │       │           │       └── plugins.txt
    │   │       │           └── user/
    │   │       │               ├── ReadMe.md
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               └── tasks/
    │   │       │                   ├── main.yml
    │   │       │                   └── users.yml
    │   │       ├── task_008_kibana_docker/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       ├── playbook-install-kibana-docker.yaml
    │   │       │       └── roles/
    │   │       │           ├── commons/
    │   │       │           │   ├── ReadMe.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   └── tasks/
    │   │       │           │       ├── Debian/
    │   │       │           │       │   ├── install-atom-ide.yml
    │   │       │           │       │   ├── setup-Debian.yml
    │   │       │           │       │   └── setup-my-workstation.yml
    │   │       │           │       └── main.yml
    │   │       │           ├── directory/
    │   │       │           │   ├── ReadMe.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   └── tasks/
    │   │       │           │       ├── configure.yml
    │   │       │           │       └── main.yml
    │   │       │           ├── docker/
    │   │       │           │   ├── README.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   ├── handlers/
    │   │       │           │   │   └── main.yml
    │   │       │           │   └── tasks/
    │   │       │           │       ├── docker-compose.yml
    │   │       │           │       ├── docker-users.yml
    │   │       │           │       ├── main.yml
    │   │       │           │       ├── setup-Debian.yml
    │   │       │           │       └── setup-RedHat.yml
    │   │       │           ├── kibana-docker/
    │   │       │           │   ├── ReadMe.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yaml
    │   │       │           │   ├── handlers/
    │   │       │           │   │   └── main.yaml
    │   │       │           │   ├── tasks/
    │   │       │           │   │   ├── install-kibana.yaml
    │   │       │           │   │   └── main.yaml
    │   │       │           │   └── templates/
    │   │       │           │       ├── docker-compose.yaml
    │   │       │           │       └── kibana.yml
    │   │       │           └── user/
    │   │       │               ├── ReadMe.md
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               └── tasks/
    │   │       │                   ├── main.yml
    │   │       │                   └── users.yml
    │   │       └── task_009_monit/
    │   │           └── playbooks/
    │   │               ├── ansible.cfg
    │   │               ├── inventory.ini
    │   │               ├── inventory.yml
    │   │               ├── monit-install.yml
    │   │               └── roles/
    │   │                   └── monit/
    │   │                       ├── ReadMe.md
    │   │                       ├── defaults/
    │   │                       │   └── main.yml
    │   │                       ├── handlers/
    │   │                       │   └── main.yml
    │   │                       ├── tasks/
    │   │                       │   ├── main.yml
    │   │                       │   ├── os-check.yml
    │   │                       │   ├── pkg-debian/
    │   │                       │   │   ├── install-monit-specific.yml
    │   │                       │   │   └── install-monit.yml
    │   │                       │   └── pkg-redhat/
    │   │                       │       └── install-monit.yaml
    │   │                       └── templates/
    │   │                           └── monit/
    │   │                               ├── conf.d/
    │   │                               │   ├── sshd.conf
    │   │                               │   └── system.conf
    │   │                               ├── monit.id
    │   │                               └── monitrc.conf
    │   └── terraform/
    │       ├── aws/
    │       │   ├── README.md
    │       │   ├── ReadMe-static.md
    │       │   ├── credentials.txt.example
    │       │   └── taskset_aws_terraform_infrastructure_as_code/
    │       │       ├── task_000_initialization_setup/
    │       │       │   └── ReadMe.md
    │       │       ├── task_001_vars_provider_ec2_dataSources/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 02-provider.tf
    │       │       │   ├── 05-instance.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_002_defaultVPC_sbnt_sg_kp_ec2/
    │       │       │   ├── 00-var.tf
    │       │       │   ├── 05-vpc.tf
    │       │       │   ├── 15-subnet.tf
    │       │       │   ├── 25-security-group.tf
    │       │       │   ├── 30-keypair.tf
    │       │       │   ├── 35-ec2-instance.tf
    │       │       │   └── README.md
    │       │       ├── task_003_defaultVPC_kp_sbnt_sg_ec2_script/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 07-vpc.tf
    │       │       │   ├── 10-key-pair.tf
    │       │       │   ├── 15-subnet.tf
    │       │       │   ├── 20-security-group.tf
    │       │       │   ├── 25-instance.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── script.sh
    │       │       │   └── versions.tf
    │       │       ├── task_004_vars_provider_ec2_output/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-instance.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── private_ips.txt
    │       │       │   └── versions.tf
    │       │       ├── task_005_vars_provider_ec2_remoteStateInS3/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-instance.tf
    │       │       │   ├── 15-backend.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_006_defaultVPC_defaultSbnt_modules_kp/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-default_vpc.tf
    │       │       │   ├── 15-modules.tf
    │       │       │   ├── 20-key.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── mykey
    │       │       │   ├── mykey.pub
    │       │       │   └── versions.tf
    │       │       ├── task_007_customVPC_igw_sbnt_rt_sg_kp_ec2/
    │       │       │   ├── 00-var.tf
    │       │       │   ├── 05-vpc.tf
    │       │       │   ├── 10-igw.tf
    │       │       │   ├── 15-subnet.tf
    │       │       │   ├── 20-route-tables.tf
    │       │       │   ├── 25-security-group.tf
    │       │       │   ├── 30-keypair.tf
    │       │       │   ├── 35-ec2-instance.tf
    │       │       │   ├── README.md
    │       │       │   └── versions.tf
    │       │       ├── task_008_customVPC_3PriSbnts_3PubSbnts_nat_igw_rt/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 20-nat.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_009_customVPC_3PriSbnts_3PubSbnts_nat_igw_rt_ec2_ebs/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 16-securitygroup.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 20-nat.tf
    │       │       │   ├── 25-instance.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_010_customVPC_3PriSbnts_3PubSbnts_nat_igw_rt_ec2_ebs_withMount/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 16-securitygroup.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 20-nat.tf
    │       │       │   ├── 22-cloudinit.tf
    │       │       │   ├── 25-instance.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── scripts/
    │       │       │   │   ├── init.cfg
    │       │       │   │   └── volumes.sh
    │       │       │   └── versions.tf
    │       │       ├── task_011_route53/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 250-r53-devopslink_zone.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_012_rds_vpc_ec2/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 18-securitygroup.tf
    │       │       │   ├── 20-instance.tf
    │       │       │   ├── 25-rds.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_013_IAM/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-iam.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_014_IAM_roles_s3_upload_to_s3/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-iam.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 18-securitygroup.tf
    │       │       │   ├── 20-instance.tf
    │       │       │   ├── 25-s3.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_015_autoscaling_cloudwatchAlarm_ec2_launchConfiguration/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 18-securitygroup.tf
    │       │       │   ├── 20-autoscalingpolicy.tf
    │       │       │   ├── 25-autoscaling.tf
    │       │       │   ├── 30-sns.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_016_ELB_autoscaling/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 18-securitygroup.tf
    │       │       │   ├── 19-elb.tf
    │       │       │   ├── 20-autoscaling.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_017_Elastic_Beanstalk/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-iam.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 18-securitygroup.tf
    │       │       │   ├── 25-rds.tf
    │       │       │   ├── 28-elasticbeanstalk.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_018_create_ECR_repo/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-ecr.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── output.tf
    │       │       │   └── versions.tf
    │       │       ├── task_019_ECS/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-iam.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 18-securitygroup.tf
    │       │       │   ├── 20-ecr.tf
    │       │       │   ├── 25-ecs.tf
    │       │       │   ├── 28-myapp.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── templates/
    │       │       │   │   └── app.json.tpl
    │       │       │   └── versions.tf
    │       │       ├── task_020_s3_iam_using_modules/
    │       │       │   ├── ReadMe.md
    │       │       │   └── s3-bucket.tf
    │       │       ├── task_021_k8s_cluster_typhoon/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 25-cluster.tf
    │       │       │   ├── 30-output.tf
    │       │       │   └── ReadMe.md
    │       │       ├── task_022_route53_ec2/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-instance.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-route53.tf
    │       │       │   ├── 250-r53-devopslink_zone.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_023_terragrunt_ec2/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-ec2.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── run.sh
    │       │       ├── task_024_certificate_manager/
    │       │       │   └── ReadMe.md
    │       │       ├── task_025_terragrunt_iam_user/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-iam-user.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── run.sh
    │       │       ├── task_026_terragrunt_s3_bucket/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-s3-bucket.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── hello.txt
    │       │       │   └── run.sh
    │       │       ├── task_027_terragrunt_cdn/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-cdn.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── index.html-rename-me-to-html
    │       │       │   ├── run.sh
    │       │       │   └── secret.tfvars.example
    │       │       ├── task_029_ec2_jenkins_instance_and_slave_instance/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-data.tf
    │       │       │   ├── 101-ec2-jenkins.tf
    │       │       │   ├── 102-ec2-jenkins-slave.tf
    │       │       │   ├── 105-sg.tf
    │       │       │   ├── 15-key-pair.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── jenkins.pem.pub
    │       │       │   └── run.sh
    │       │       ├── task_030_creating_eks/
    │       │       │   ├── README.md
    │       │       │   ├── eks-cluster.tf
    │       │       │   ├── kubernetes-dashboard-admin.rbac.yaml
    │       │       │   ├── kubernetes.tf
    │       │       │   ├── outputs.tf
    │       │       │   ├── run.sh
    │       │       │   ├── security-groups.tf
    │       │       │   ├── versions.tf
    │       │       │   └── vpc.tf
    │       │       └── task_031_creating_eks_spot/
    │       │           ├── README.md
    │       │           ├── eks-cluster.tf
    │       │           ├── kubernetes-dashboard-admin.rbac.yaml
    │       │           ├── kubernetes.tf
    │       │           ├── outputs.tf
    │       │           ├── run.sh
    │       │           ├── security-groups.tf
    │       │           ├── versions.tf
    │       │           └── vpc.tf
    │       ├── gcp/
    │       │   ├── ReadMe-auto-v2.md
    │       │   ├── ReadMe.md
    │       │   ├── taskset_gcp_terraform_infrastructure_as_code/
    │       │   │   ├── task_001_vpc_2inst_cloudshell/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   ├── instance/
    │       │   │   │   │   ├── main.tf
    │       │   │   │   │   └── variables.tf
    │       │   │   │   ├── mynetwork.tf
    │       │   │   │   └── provider.tf
    │       │   │   ├── task_002_1inst_dflt_vpc/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   └── main.tf
    │       │   │   ├── task_003_vars_and_resource_dependencies/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   ├── exp.tf
    │       │   │   │   ├── instance.tf
    │       │   │   │   ├── outputs.tf
    │       │   │   │   ├── provider.tf
    │       │   │   │   └── variables.tf
    │       │   │   ├── task_004_creating_remote_backend/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   └── main.tf
    │       │   │   ├── task_005_deploy_k8s_loadbalancer_service/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   ├── k8s.tf
    │       │   │   │   ├── main.tf
    │       │   │   │   ├── test.sh
    │       │   │   │   └── versions.tf
    │       │   │   ├── task_006_modular_load_balancing_regional_load_balancer/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   ├── apply.log
    │       │   │   │   ├── main.tf
    │       │   │   │   ├── outputs.tf
    │       │   │   │   ├── terraform-google-lb/
    │       │   │   │   │   └── examples/
    │       │   │   │   │       └── basic/
    │       │   │   │   │           ├── locals.tf
    │       │   │   │   │           ├── main.tf
    │       │   │   │   │           ├── network.tf
    │       │   │   │   │           ├── outputs.tf
    │       │   │   │   │           ├── provider.tf
    │       │   │   │   │           ├── templates/
    │       │   │   │   │           │   └── gceme.sh.tpl
    │       │   │   │   │           ├── variables.tf
    │       │   │   │   │           └── versions.tf
    │       │   │   │   ├── variables.tf
    │       │   │   │   └── versions.tf
    │       │   │   ├── task_007_cloud_sql/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   ├── main.tf
    │       │   │   │   ├── outputs.tf
    │       │   │   │   └── variables.tf
    │       │   │   └── task_008_building_a_vpn_between_gcp_and_aws/
    │       │   │       ├── ReadMe.md
    │       │   │       └── autonetdeploy-multicloudvpn/
    │       │   │           ├── aws_set_credentials.sh
    │       │   │           ├── create_instance.sh
    │       │   │           ├── gcp_set_credentials.sh
    │       │   │           ├── gcp_set_project.sh
    │       │   │           ├── get_terraform.sh
    │       │   │           ├── migrate_sa_roles.sh
    │       │   │           └── terraform/
    │       │   │               ├── aws_compute.tf
    │       │   │               ├── aws_networking.tf
    │       │   │               ├── aws_outputs.tf
    │       │   │               ├── aws_security.tf
    │       │   │               ├── aws_variables.tf
    │       │   │               ├── gcp_compute.tf
    │       │   │               ├── gcp_networking.tf
    │       │   │               ├── gcp_outputs.tf
    │       │   │               ├── gcp_security.tf
    │       │   │               ├── gcp_variables.tf
    │       │   │               ├── main.tf
    │       │   │               ├── run_graph.sh
    │       │   │               └── vm_userdata.sh
    │       │   └── update-readme.php
    │       └── oci/
    │           ├── ReadMe-static.md
    │           ├── ReadMe.md
    │           └── taskset_oci_terraform_infrastructure_as_code/
    │               ├── task_000_initialization_setup/
    │               │   ├── 00-vars.tf
    │               │   ├── ReadMe.md
    │               │   ├── availability-domains.tf
    │               │   ├── output.tf
    │               │   └── provider.tf
    │               ├── task_001_create_a_compartment/
    │               │   ├── 00-vars.tf
    │               │   ├── 01-provider.tf
    │               │   ├── 02-compartments.tf
    │               │   ├── 03-outputs.tf
    │               │   └── ReadMe.md
    │               ├── task_002_create_vcn/
    │               │   ├── 00-vars.tf
    │               │   ├── 01-provider.tf
    │               │   ├── 02-vcn-module.tf
    │               │   ├── 05-private-security-list.tf
    │               │   ├── 06-public-security-list.tf
    │               │   ├── 08-private-subnet.tf
    │               │   ├── 09-public-subnet.tf
    │               │   ├── 10-outputs.tf
    │               │   └── ReadMe.md
    │               └── task_003_create_instance/
    │                   ├── 00-vars.tf
    │                   ├── 01-provider.tf
    │                   ├── 02-compartments.tf
    │                   ├── 03-outputs.tf
    │                   ├── 04-compute.tf
    │                   ├── ReadMe.md
    │                   └── availability-domains.tf
    ├── interview/
    │   ├── ReadMe-static.md
    │   ├── ReadMe.md
    │   └── coding_assignments/
    │       ├── ReadMe.md
    │       └── taskset_coding_assignments_interview/
    │           ├── ReadMe.md
    │           ├── task_001_nodejs_docker_app/
    │           │   ├── ReadMe.md
    │           │   └── node_project/
    │           │       ├── .dockerignore
    │           │       ├── Dockerfile
    │           │       ├── app.js
    │           │       ├── package.json
    │           │       └── views/
    │           │           ├── css/
    │           │           │   └── styles.css
    │           │           ├── index.html
    │           │           └── sharks.html
    │           ├── task_002_nodejs_mongo_docker/
    │           │   ├── ReadMe.md
    │           │   └── node_project/
    │           │       ├── .dockerignore
    │           │       ├── .gitignore
    │           │       ├── Dockerfile
    │           │       ├── app.js
    │           │       ├── controllers/
    │           │       │   └── sharks.js
    │           │       ├── db.js
    │           │       ├── models/
    │           │       │   └── sharks.js
    │           │       ├── package.json
    │           │       ├── routes/
    │           │       │   ├── index.js
    │           │       │   └── sharks.js
    │           │       └── views/
    │           │           ├── css/
    │           │           │   └── styles.css
    │           │           ├── getshark.html
    │           │           ├── index.html
    │           │           └── sharks.html
    │           ├── task_003_nodejs_mongo_docker_compose/
    │           │   ├── README.md
    │           │   └── node_project/
    │           │       ├── .dockerignore
    │           │       ├── .gitignore
    │           │       ├── Dockerfile
    │           │       ├── app.js
    │           │       ├── controllers/
    │           │       │   └── sharks.js
    │           │       ├── db.js
    │           │       ├── docker-compose.yaml
    │           │       ├── models/
    │           │       │   └── sharks.js
    │           │       ├── package.json
    │           │       ├── routes/
    │           │       │   ├── index.js
    │           │       │   └── sharks.js
    │           │       ├── views/
    │           │       │   ├── css/
    │           │       │   │   └── styles.css
    │           │       │   ├── getshark.html
    │           │       │   ├── index.html
    │           │       │   └── sharks.html
    │           │       └── wait-for.sh
    │           ├── task_004_nodejs_mongo_k8s/
    │           │   ├── README.md
    │           │   ├── db-deployment.yaml
    │           │   ├── db-service.yaml
    │           │   ├── dbdata-persistentvolumeclaim.yaml
    │           │   ├── node_project/
    │           │   │   ├── .dockerignore
    │           │   │   ├── .gitignore
    │           │   │   ├── Dockerfile
    │           │   │   ├── app.js
    │           │   │   ├── controllers/
    │           │   │   │   └── sharks.js
    │           │   │   ├── db.js
    │           │   │   ├── docker-compose.yaml
    │           │   │   ├── models/
    │           │   │   │   └── sharks.js
    │           │   │   ├── package.json
    │           │   │   ├── routes/
    │           │   │   │   ├── index.js
    │           │   │   │   └── sharks.js
    │           │   │   ├── views/
    │           │   │   │   ├── css/
    │           │   │   │   │   └── styles.css
    │           │   │   │   ├── getshark.html
    │           │   │   │   ├── index.html
    │           │   │   │   └── sharks.html
    │           │   │   └── wait-for.sh
    │           │   ├── nodejs-deployment.yaml
    │           │   ├── nodejs-env-configmap.yaml
    │           │   ├── nodejs-service.yaml
    │           │   └── secret.yaml
    │           ├── task_005_nodejs_mongo_k8s_helm_scale/
    │           │   ├── README.md
    │           │   ├── mongodb-values.yaml
    │           │   ├── node_project/
    │           │   │   ├── .dockerignore
    │           │   │   ├── .gitignore
    │           │   │   ├── Dockerfile
    │           │   │   ├── app.js
    │           │   │   ├── controllers/
    │           │   │   │   └── sharks.js
    │           │   │   ├── db.js
    │           │   │   ├── docker-compose.yaml
    │           │   │   ├── models/
    │           │   │   │   └── sharks.js
    │           │   │   ├── package.json
    │           │   │   ├── routes/
    │           │   │   │   ├── index.js
    │           │   │   │   └── sharks.js
    │           │   │   ├── views/
    │           │   │   │   ├── css/
    │           │   │   │   │   └── styles.css
    │           │   │   │   ├── getshark.html
    │           │   │   │   ├── index.html
    │           │   │   │   └── sharks.html
    │           │   │   └── wait-for.sh
    │           │   ├── nodeapp/
    │           │   │   ├── .helmignore
    │           │   │   ├── Chart.yaml
    │           │   │   ├── templates/
    │           │   │   │   ├── NOTES.txt
    │           │   │   │   ├── _helpers.tpl
    │           │   │   │   ├── configmap.yaml
    │           │   │   │   ├── deployment.yaml
    │           │   │   │   ├── hpa.yaml
    │           │   │   │   ├── ingress.yaml
    │           │   │   │   ├── secret.yaml
    │           │   │   │   ├── service.yaml
    │           │   │   │   ├── serviceaccount.yaml
    │           │   │   │   └── tests/
    │           │   │   │       └── test-connection.yaml
    │           │   │   └── values.yaml
    │           │   ├── resources-app.yaml
    │           │   ├── resources-db.yaml
    │           │   └── secret.yaml
    │           ├── task_006_nginx_docker/
    │           │   ├── Dockerfile
    │           │   ├── ReadMe.md
    │           │   ├── conf.d/
    │           │   │   └── default.conf
    │           │   └── html/
    │           │       └── index.html
    │           ├── task_007_eks_on_demand/
    │           │   ├── README.md
    │           │   ├── credentials.txt.example
    │           │   ├── eks-cluster.tf
    │           │   ├── kubernetes-dashboard-admin.rbac.yaml
    │           │   ├── kubernetes.tf
    │           │   ├── outputs.tf
    │           │   ├── run.sh
    │           │   ├── security-groups.tf
    │           │   ├── versions.tf
    │           │   └── vpc.tf
    │           ├── task_008_k8s_nginx/
    │           │   ├── ReadMe.md
    │           │   ├── dep.yaml
    │           │   ├── hpa.yaml
    │           │   ├── ingress.yaml
    │           │   └── nginx-svc-nodeport.yaml
    │           ├── task_009_eks_spot_and_on_demand/
    │           │   ├── README.md
    │           │   ├── credentials.txt.example
    │           │   ├── eks-cluster.tf
    │           │   ├── kubernetes-dashboard-admin.rbac.yaml
    │           │   ├── kubernetes.tf
    │           │   ├── outputs.tf
    │           │   ├── run.sh
    │           │   ├── security-groups.tf
    │           │   ├── versions.tf
    │           │   └── vpc.tf
    │           └── task_010_logging_and_monitoring/
    │               ├── ReadMe.md
    │               ├── nginx.yaml
    │               └── values.yaml
    ├── observability/
    │   ├── ReadMe.md
    │   ├── metrics/
    │   │   ├── README.md
    │   │   └── taskset_metrics_observability/
    │   │       ├── task_001_host/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_system/
    │   │       │   └── ReadMe.md
    │   │       └── task_003_kubernetes/
    │   │           └── ReadMe.md
    │   ├── opentelemetry/
    │   │   ├── ReadMe.md
    │   │   └── taskset_opentelemetry_observability/
    │   │       ├── task_001_go_dice__traces_and_metrics_to_console/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── go.mod
    │   │       │   ├── go.sum
    │   │       │   ├── main.go
    │   │       │   ├── otel.go
    │   │       │   └── rolldice.go
    │   │       └── task_002_go__traces_gRPC_OTLP__jaeger/
    │   │           ├── ReadMe.md
    │   │           ├── go.mod
    │   │           ├── go.sum
    │   │           └── main.go
    │   └── prometheus/
    │       ├── ReadMe.md
    │       └── taskset_prometheus_observability/
    │           ├── task_001_getting_started_with_prometheus/
    │           │   ├── ReadMe.md
    │           │   ├── prometheus_1.yml
    │           │   └── prometheus_2.yml
    │           ├── task_002_understanding_metric_types/
    │           │   └── ReadMe.md
    │           └── task_003_instrumenting_http_server_in_go/
    │               ├── ReadMe.md
    │               ├── go.mod
    │               ├── go.sum
    │               ├── prometheus.yml
    │               └── server.go
    ├── os_and_concepts/
    │   ├── ReadMe.md
    │   ├── commands_linux/
    │   │   ├── ReadMe.md
    │   │   └── taskset_commands_linux_os_and_concepts/
    │   │       ├── task_001_arp/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_awk/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_chage/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_chmod/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_chown/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_cksum/
    │   │       │   └── ReadMe.md
    │   │       ├── task_007_clear/
    │   │       │   └── ReadMe.md
    │   │       ├── task_008_cp/
    │   │       │   └── ReadMe.md
    │   │       ├── task_009_crontab/
    │   │       │   └── ReadMe.md
    │   │       ├── task_010_curl/
    │   │       │   └── ReadMe.md
    │   │       ├── task_011_cut/
    │   │       │   └── ReadMe.md
    │   │       ├── task_012_df/
    │   │       │   └── ReadMe.md
    │   │       ├── task_013_diff/
    │   │       │   └── ReadMe.md
    │   │       ├── task_014_dig/
    │   │       │   └── ReadMe.md
    │   │       ├── task_015_dir/
    │   │       │   └── ReadMe.md
    │   │       ├── task_016_dos2unix/
    │   │       │   └── ReadMe.md
    │   │       ├── task_017_du/
    │   │       │   └── ReadMe.md
    │   │       ├── task_018_export/
    │   │       │   └── ReadMe.md
    │   │       ├── task_019_fc/
    │   │       │   └── ReadMe.md
    │   │       ├── task_020_find/
    │   │       │   └── ReadMe.md
    │   │       ├── task_021_firewall_cmd/
    │   │       │   └── ReadMe.md
    │   │       ├── task_022_free/
    │   │       │   └── ReadMe.md
    │   │       ├── task_023_ftp/
    │   │       │   └── ReadMe.md
    │   │       ├── task_024_git/
    │   │       │   └── ReadMe.md
    │   │       ├── task_025_gunzip_gzip/
    │   │       │   └── ReadMe.md
    │   │       ├── task_026_head/
    │   │       │   └── ReadMe.md
    │   │       ├── task_027_history/
    │   │       │   └── ReadMe.md
    │   │       ├── task_028_host/
    │   │       │   └── ReadMe.md
    │   │       ├── task_029_hostname/
    │   │       │   └── ReadMe.md
    │   │       ├── task_030_ifconfig/
    │   │       │   └── ReadMe.md
    │   │       ├── task_031_ip/
    │   │       │   └── ReadMe.md
    │   │       ├── task_032_jar/
    │   │       │   └── ReadMe.md
    │   │       ├── task_033_jobs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_034_jq/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── example1.json
    │   │       │   ├── example2.json
    │   │       │   ├── example3.json
    │   │       │   └── example4.json
    │   │       ├── task_035_jstack/
    │   │       │   └── ReadMe.md
    │   │       ├── task_036_keytool/
    │   │       │   └── ReadMe.md
    │   │       ├── task_037_ln/
    │   │       │   └── ReadMe.md
    │   │       ├── task_038_lsof/
    │   │       │   └── ReadMe.md
    │   │       ├── task_039_mail/
    │   │       │   └── ReadMe.md
    │   │       ├── task_040_mkdir/
    │   │       │   └── ReadMe.md
    │   │       ├── task_041_mount/
    │   │       │   └── ReadMe.md
    │   │       ├── task_042_nc/
    │   │       │   └── ReadMe.md
    │   │       ├── task_043_netstat/
    │   │       │   └── ReadMe.md
    │   │       ├── task_044_nmap/
    │   │       │   └── ReadMe.md
    │   │       ├── task_045_nohup/
    │   │       │   └── ReadMe.md
    │   │       ├── task_046_nslookup/
    │   │       │   └── ReadMe.md
    │   │       ├── task_047_openssl/
    │   │       │   └── ReadMe.md
    │   │       ├── task_048_passwd/
    │   │       │   └── ReadMe.md
    │   │       ├── task_049_ping/
    │   │       │   └── ReadMe.md
    │   │       ├── task_050_ps/
    │   │       │   └── ReadMe.md
    │   │       ├── task_051_rm/
    │   │       │   └── ReadMe.md
    │   │       ├── task_052_route/
    │   │       │   └── ReadMe.md
    │   │       ├── task_053_rsync/
    │   │       │   └── ReadMe.md
    │   │       ├── task_054_scp/
    │   │       │   └── ReadMe.md
    │   │       ├── task_055_sed/
    │   │       │   └── ReadMe.md
    │   │       ├── task_056_sh/
    │   │       │   └── ReadMe.md
    │   │       ├── task_057_setenforce/
    │   │       │   └── ReadMe.md
    │   │       ├── task_058_sort/
    │   │       │   └── ReadMe.md
    │   │       ├── task_059_ssh/
    │   │       │   └── ReadMe.md
    │   │       ├── task_060_sudo/
    │   │       │   └── ReadMe.md
    │   │       ├── task_061_sysctl/
    │   │       │   └── ReadMe.md
    │   │       ├── task_062_system/
    │   │       │   └── ReadMe.md
    │   │       ├── task_063_systemctl/
    │   │       │   └── ReadMe.md
    │   │       ├── task_064_tail/
    │   │       │   └── ReadMe.md
    │   │       ├── task_065_tar/
    │   │       │   └── ReadMe.md
    │   │       ├── task_066_tee/
    │   │       │   └── ReadMe.md
    │   │       ├── task_067_telnet/
    │   │       │   └── ReadMe.md
    │   │       ├── task_068_gradle/
    │   │       │   └── ReadMe.md
    │   │       ├── task_069_tr/
    │   │       │   └── ReadMe.md
    │   │       ├── task_070_traceroute/
    │   │       │   └── ReadMe.md
    │   │       ├── task_071_top/
    │   │       │   └── ReadMe.md
    │   │       ├── task_072_tty/
    │   │       │   └── ReadMe.md
    │   │       ├── task_073_ulimit/
    │   │       │   └── ReadMe.md
    │   │       ├── task_074_umask/
    │   │       │   └── ReadMe.md
    │   │       ├── task_075_uname/
    │   │       │   └── ReadMe.md
    │   │       ├── task_076_uniq/
    │   │       │   └── ReadMe.md
    │   │       ├── task_077_unzip/
    │   │       │   └── ReadMe.md
    │   │       ├── task_078_uptime/
    │   │       │   └── ReadMe.md
    │   │       ├── task_079_vi/
    │   │       │   └── ReadMe.md
    │   │       ├── task_080_vmstat/
    │   │       │   └── ReadMe.md
    │   │       ├── task_081_wall/
    │   │       │   └── ReadMe.md
    │   │       ├── task_082_wc/
    │   │       │   └── ReadMe.md
    │   │       ├── task_083_wget/
    │   │       │   └── ReadMe.md
    │   │       ├── task_084_whatis/
    │   │       │   └── ReadMe.md
    │   │       ├── task_085_whereis/
    │   │       │   └── ReadMe.md
    │   │       ├── task_086_which/
    │   │       │   └── ReadMe.md
    │   │       ├── task_087_xargs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_088_zcat/
    │   │       │   └── ReadMe.md
    │   │       ├── task_089_zip/
    │   │       │   └── ReadMe.md
    │   │       ├── task_090_ansible/
    │   │       │   └── ReadMe.md
    │   │       ├── task_091_terraform/
    │   │       │   └── ReadMe.md
    │   │       ├── task_092_kubectl/
    │   │       │   ├── ReadMe-static.md
    │   │       │   ├── ReadMe-table.md
    │   │       │   └── ReadMe.md
    │   │       ├── task_093_kustomize/
    │   │       │   └── ReadMe.md
    │   │       ├── task_094_helm/
    │   │       │   └── ReadMe.md
    │   │       ├── task_095_7z/
    │   │       │   └── ReadMe.md
    │   │       ├── task_096_grep/
    │   │       │   └── ReadMe.md
    │   │       ├── task_097_egrep/
    │   │       │   └── ReadMe.md
    │   │       ├── task_098_growpart/
    │   │       │   └── ReadMe.md
    │   │       ├── task_099_resize2fs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_100_lsblk/
    │   │       │   └── ReadMe.md
    │   │       ├── task_101_kops/
    │   │       │   └── ReadMe.md
    │   │       ├── task_102_mongo/
    │   │       │   └── ReadMe.md
    │   │       ├── task_103_mongorestore/
    │   │       │   └── ReadMe.md
    │   │       ├── task_104_mysql/
    │   │       │   └── ReadMe.md
    │   │       ├── task_105_mysqldump/
    │   │       │   └── ReadMe.md
    │   │       ├── task_106_ssh_keygen/
    │   │       │   └── ReadMe.md
    │   │       ├── task_107_iptables/
    │   │       │   └── ReadMe.md
    │   │       ├── task_108_adduser/
    │   │       │   └── ReadMe.md
    │   │       ├── task_109_chgrp/
    │   │       │   └── ReadMe.md
    │   │       ├── task_110_sqlcmd/
    │   │       │   └── ReadMe.md
    │   │       ├── task_111_tcpdump/
    │   │       │   └── ReadMe.md
    │   │       ├── task_112_step/
    │   │       │   └── ReadMe.md
    │   │       ├── task_113_set/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── called_script.sh
    │   │       │   ├── caller_script.sh
    │   │       │   ├── using_set_eu_with_pipefail.sh
    │   │       │   ├── with_pipefail.sh
    │   │       │   └── without_pipefail.sh
    │   │       ├── task_114_mvn/
    │   │       │   └── ReadMe.md
    │   │       ├── task_115_source/
    │   │       │   ├── 1.sh
    │   │       │   ├── 2.sh
    │   │       │   └── ReadMe.md
    │   │       ├── task_116_whoami/
    │   │       │   └── ReadMe.md
    │   │       ├── task_117_who/
    │   │       │   └── ReadMe.md
    │   │       ├── task_118_last/
    │   │       │   └── ReadMe.md
    │   │       ├── task_119_az/
    │   │       │   └── ReadMe.md
    │   │       ├── task_120_dpkg/
    │   │       │   └── ReadMe.md
    │   │       ├── task_121_cat/
    │   │       │   └── ReadMe.md
    │   │       ├── task_122_tar/
    │   │       │   └── ReadMe.md
    │   │       ├── task_123_code/
    │   │       │   └── ReadMe.md
    │   │       ├── task_124_unset/
    │   │       │   └── ReadMe.md
    │   │       ├── task_125_ssh_keygen/
    │   │       │   └── ReadMe.md
    │   │       ├── task_126_command/
    │   │       │   └── ReadMe.md
    │   │       ├── task_127_shasum/
    │   │       │   └── ReadMe.md
    │   │       ├── task_128_sh/
    │   │       │   └── ReadMe.md
    │   │       ├── task_129_yq/
    │   │       │   └── ReadMe.md
    │   │       ├── task_130_basename/
    │   │       │   └── ReadMe.md
    │   │       └── task_131_readlink/
    │   │           └── ReadMe.md
    │   ├── commands_windows/
    │   │   ├── ReadMe-static.md
    │   │   ├── ReadMe.md
    │   │   └── taskset_commands_windows_os_and_concepts/
    │   │       ├── task_001_systeminfo/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_dir/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_findstr/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_del/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_rmdir/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_echo/
    │   │       │   └── ReadMe.md
    │   │       └── task_007_setx/
    │   │           └── ReadMe.md
    │   └── concepts_linux/
    │       ├── ReadMe.md
    │       └── taskset_concepts_linux_os_and_concepts/
    │           ├── task_001_etc_os_release_file/
    │           │   └── ReadMe.md
    │           ├── task_002_etc_passwd/
    │           │   └── ReadMe.md
    │           ├── task_003_etc_group/
    │           │   └── ReadMe.md
    │           ├── task_003_etc_sudoers/
    │           │   └── ReadMe.md
    │           ├── task_004_etc_hosts/
    │           │   └── ReadMe.md
    │           ├── task_005_etc_resolv.conf/
    │           │   └── ReadMe.md
    │           ├── task_006_proc_sys_net_ipv4_ip_forward/
    │           │   └── ReadMe.md
    │           ├── task_007_etc_sysctl.conf/
    │           │   └── ReadMe.md
    │           ├── task_008_special_variables/
    │           │   └── ReadMe.md
    │           ├── task_009_etc_fstab/
    │           │   └── ReadMe.md
    │           ├── task_010_shebang_character/
    │           │   └── ReadMe.md
    │           ├── task_011_redirection/
    │           │   └── ReadMe.md
    │           ├── task_012_eof_here_doc/
    │           │   └── ReadMe.md
    │           └── task_013_referring_documentation/
    │               └── ReadMe.md
    ├── productivity_tools/
    │   ├── ReadMe-static.md
    │   ├── ReadMe.md
    │   └── taskset_productivity_tools/
    │       ├── task_000_setting_up_terminal/
    │       │   └── ReadMe.md
    │       ├── task_001_visualizing_subnets_in_vpc/
    │       │   └── ReadMe.md
    │       ├── task_002_visualizing_k8s_using_dashboard/
    │       │   └── ReadMe.md
    │       ├── task_003_if_IP_belongs_to_CIDR/
    │       │   └── ReadMe.md
    │       ├── task_004_virtual_box/
    │       │   └── ReadMe.md
    │       └── task_005_productivity_shortcuts/
    │           ├── ReadMe-bkp.md
    │           └── ReadMe.md
    ├── security/
    │   └── trivy/
    │       ├── ReadMe.md
    │       └── taskset_trivy_security/
    │           └── task_001_scans/
    │               └── ReadMe.md
    └── web_servers/
        └── nginx/
            ├── ReadMe.md
            └── taskset_nginx_web_servers/
                ├── task_001_running_nginx/
                │   └── running-nginx.md
                ├── task_002_nginx_docker_compose_hello_world/
                │   ├── docker-compose.yaml
                │   ├── nginx-docker-compose-hello-world.md
                │   └── src/
                │       └── index.html
                ├── task_003_nginx_conf/
                │   ├── ReadMe.md
                │   ├── conf.d/
                │   │   └── default.conf
                │   └── html/
                │       └── index.html
                └── task_004_return_different_http_codes/
                    ├── Dockerfile
                    ├── ReadMe.md
                    ├── conf.d/
                    │   └── default.conf
                    └── html/
                        └── index.html

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
.idea
.aws-credentials
.terraform
*terraform.tfvars
*.tfstate
*.tfstate.backup
*.terraform.tfstate.lock.info
credentials.txt
.terraform.lock.hcl
*.tfvars
*.pem

### docker-compose kitchen
.data
hsperfdata_root

### Ignore till reviewd
to-be-reviewed




### coding-tasks

node_modules
package-lock.json


### ansible-kitchen

.vagrant
*.retry
.venv

# pre and post tasks folders (user defined)
pre_tasks/
post_tasks/
.kitchen/
.kitchen.local.yml
.bundle


## python
__pycache__


## go
pkg
bin

## node
.env

## python
venv

## Temp
home/infrastructure-as-code/terraform/oci/task-004-kubernetes-cluster/
home/infrastructure-as-code/terraform/oci/task-005-set-up-resource-discovery/

## tmp
tmp

## Private
.private

================================================
FILE: README.md
================================================
# Home

> [Auto](https://github.com/codeaprendiz/learn_fullstack/blob/main/home/php/intermediate/taskset_intermediate_php/task_004_createGlobalMarkdownTable/generate-readme.php) generated ReadMe. Number of tasks: 473

- [cloud certifications](#cloud_certifications)
- [cloud providers](#cloud_providers)
- [containers](#containers)
- [databases](#databases)
- [devops blogs](#devops_blogs)
- [infrastructure as code](#infrastructure_as_code)
- [interview](#interview)
- [observability](#observability)
- [os and concepts](#os_and_concepts)
- [productivity tools](#productivity_tools)
- [security](#security)
- [web servers](#web_servers)

## cloud_certifications

| aws                                       |
|-------------------------------------------|
| [Tasks: 1](home/cloud_certifications/aws) |

## cloud_providers

| aws                                  | azure                                   | gcp                                   | oci                                  |
|--------------------------------------|-----------------------------------------|---------------------------------------|--------------------------------------|
| [Tasks: 9](home/cloud_providers/aws) | [Tasks: 11](home/cloud_providers/azure) | [Tasks: 42](home/cloud_providers/gcp) | [Tasks: 3](home/cloud_providers/oci) |

## containers

| docker                              | docker_compose                              | kubernetes                              |
|-------------------------------------|---------------------------------------------|-----------------------------------------|
| [Tasks: 33](home/containers/docker) | [Tasks: 16](home/containers/docker_compose) | [Tasks: 67](home/containers/kubernetes) |

## databases

| mongo                            | mssql                             | mysql                            | oracle19c                            | postgreSQL                            |
|----------------------------------|-----------------------------------|----------------------------------|--------------------------------------|---------------------------------------|
| [Tasks: 4](home/databases/mongo) | [Tasks: 38](home/databases/mssql) | [Tasks: 6](home/databases/mysql) | [Tasks: 1](home/databases/oracle19c) | [Tasks: 7](home/databases/postgreSQL) |

## devops_blogs


## infrastructure_as_code

| ansible                                          | aws_terraform                                          | gcp_terraform                                         | oci_terraform                                         |
|--------------------------------------------------|--------------------------------------------------------|-------------------------------------------------------|-------------------------------------------------------|
| [Tasks: 10](home/infrastructure_as_code/ansible) | [Tasks: 31](home/infrastructure_as_code/terraform/aws) | [Tasks: 8](home/infrastructure_as_code/terraform/gcp) | [Tasks: 4](home/infrastructure_as_code/terraform/oci) |

## interview

| coding_assignments                             |
|------------------------------------------------|
| [Tasks: 11](home/interview/coding_assignments) |

## observability

| metrics                                | opentelemetry                                | prometheus                                |
|----------------------------------------|----------------------------------------------|-------------------------------------------|
| [Tasks: 3](home/observability/metrics) | [Tasks: 2](home/observability/opentelemetry) | [Tasks: 3](home/observability/prometheus) |

## os_and_concepts

| commands_linux                                    | commands_windows                                  | concepts_linux                                   |
|---------------------------------------------------|---------------------------------------------------|--------------------------------------------------|
| [Tasks: 131](home/os_and_concepts/commands_linux) | [Tasks: 7](home/os_and_concepts/commands_windows) | [Tasks: 14](home/os_and_concepts/concepts_linux) |

## productivity_tools

|                                     |
|-------------------------------------|
| [Tasks: 6](home/productivity_tools) |

## security

| trivy                           |
|---------------------------------|
| [Tasks: 1](home/security/trivy) |

## web_servers

| nginx                              |
|------------------------------------|
| [Tasks: 4](home/web_servers/nginx) |


================================================
FILE: ReadMe_static.md
================================================
# ToDos

- SAST
- DAST
- IAST

- Checkmarx
- Trivy
- SonarQube


================================================
FILE: _config.yml
================================================
theme: jekyll-theme-cayman

================================================
FILE: home/cloud_certifications/aws/ReadMe.md
================================================
# taskset_aws_cloud_certifications

> [Auto](https://github.com/codeaprendiz/learn_fullstack/blob/main/home/php/intermediate/taskset_intermediate_php/task_004_createGlobalMarkdownTable/generate-readme.php) generated ReadMe. Number of tasks: 1

| Task     | Description                                                                                                                                         |
|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| task_001 | [task_001_aws_certified_solutions_architect_professional](taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional) |


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/ReadMe.md
================================================
[Cheat Sheet - AWS Pro Path](https://tutorialsdojo.com/aws-certified-solutions-architect-professional)

[Free AWS Learning Plan](https://explore.skillbuilder.aws/learn/signin)

[Comparision of AWS Services](https://tutorialsdojo.com/comparison-of-aws-services)

- [API Gateway](apiGateway.md)
- [Application DiscoveryService](applicationDiscoveryService.md)
- [Aurora](aurora.md)
- [Backup](backup.md)
- [Batch](batch.md)
- [Best Practices](bestPractices.md)
- [Billing And Cost Management](billingAndCostManagement.md)
- [Certificate Manager](certificateManager.md)
- [Cloud Adoption Readiness Tool  CART](cloudAdoptionReadinessTool.md)
- [Cloud Formation](cloudFormation.md)
- [Cloud Front](cloudFront.md)
- [CloudHSM](cloudHSM.md)
- [CloudSearch](cloudSearch.md)
- [CloudTrail](cloudTrail.md)
- [CloudWatch](cloudwatch.md)
- [CloudWatchLogs](cloudWatchLogs.md)
- [CodeBuild](codeBuild.md)
- [CodeCommit](codeCommit.md)
- [CodeDeploy](codeDeploy.md)
- [CodePipeline](codePipeline.md)
- [Cognito](cognito.md)
- [Command Line Interface](commandLineInterface.md)
- [Config](config.md)
- [Connect](connect.md)
- [ControlTower](awsControlTower.md)
- [Data Migration Service](dataMigrationService.md)
- [DeveloperToolsConsole](developerToolsConsole.md)
- [Direct Connect](directConnect.md)
- [Dynamo DB](dynamodb.md)
- [EC2](ec2.md)
- [EC2 Autoscaling](ec2AutoScaling.md)
- [ECS](ecs.md)
- [ElasticBeanStalk](elasticBeanStalk.md)
- [Event Bridge](eventBridge.md)
- [Elastic Cache](elasticCache.md)
- [Elastic File System](elasticFileSystem.md)
- [Elastic Load Balancing](elasticLoadBalancing.md)
- [Guard Duty](guardDuty.md)
- [IAM](iam.md)
- [Inspector](inspector.md)
- [Kinesis](kinesis.md)
- [Lambda](lambda.md)
- [Lex](lex.md)
- [Macie](macie.md)
- [Mechanical Turk](mechanicalTurk.md)
- [Migration Hub](migrationHub.md)
- [OpsWorks](opsworks.md)
- [Organization](organizations.md)
- [Quick Sight](quickSight.md)
- [RDS](rds.md)
- [Redshift](redShift.md)
- [Rekognition](rekognition.md)
- [Resource Access Manager](resourceAccessManager.md)
- [Route53](route53.md)
- [S3](s3.md)
- [SageMaker](sageMaker.md)
- [Schema Conversion Tool](schemaConversionTool.md)
- [Secrets Manager](secretsManager.md)
- [Security Token Service](securityTokenService.md)
- [Serverless Application Model](serverlessApplicationModel.md)
- [Server Migration Service](serverMigrationService.md)
- [Service Catalog](serviceCatalog.md)
- [Shield](shield.md)
- [Simple Notification Service](simpleNotificationService.md)
- [Simple Queue Service](simpleQueueService.md)
- [Simple Workflow Service](simpleWorkflowService.md)
- [Single Sing-On](singleSignOn.md)
- [Snowball](snowball.md)
- [Snowball Edge](snowballEdge.md)
- [Storage Gatway](storageGateway.md)
- [System Manager](systemManager.md)
- [Transcribe](transcribe.md)
- [VPC](vpc.md)
- [WAF](waf.md)
- [Web Identify Federation](webIdentifyFederation.md)
- [Well-Architected](wellArchitected.md)
- [Whitepapers](whitepapers.md)

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/apiGateway.md
================================================
# API Gateway

- [CheatSheet - API Gateway](https://tutorialsdojo.com/amazon-api-gateway)
- [CheatSheet - How to invalidate API gateway cache](https://tutorialsdojo.com/how-to-invalidate-api-gateway-cache)
- [FAQs - API Gateway](https://aws.amazon.com/api-gateway/faqs)

## Enabling API caching to enhance responsiveness

[Enabling API caching to enhance responsiveness](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html)

- You can enable API caching in Amazon API Gateway to cache your endpoint's responses.
- With caching, you can reduce the number of calls made to your endpoint and also improve the latency of requests to your API.
- When you enable caching for a stage, API Gateway caches responses from your endpoint for a specified time-to-live (TTL) period, in seconds.
- API Gateway then responds to the request by looking up the endpoint response from the cache instead of making a request to your endpoint
- The default TTL value for API caching is 300 seconds. The maximum TTL value is 3600 seconds. TTL=0 means caching is disabled.

## Working with WebSocket APIs

[Working with WebSocket APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api.html)

- A WebSocket API in API Gateway is a collection of WebSocket routes that are integrated with backend HTTP endpoints, Lambda functions, or other AWS services.
- API Gateway WebSocket APIs are bidirectional. A client can send messages to a service, and services can independently send messages to clients
- This bidirectional behavior enables richer client/service interactions because services can push data to clients without requiring clients to make an explicit request
- WebSocket APIs are often used in real-time applications such as chat applications, collaboration platforms, multiplayer games, and financial trading platforms.


### Use @connections commands in your backend service

[Use @connections commands in your backend service](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-how-to-call-websocket-api-connections.html)

Your backend service can use the following WebSocket connection HTTP requests to send a callback message to a connected client, get connection information, or disconnect the client

```bash
POST https://{api-id}.execute-api.us-east-1.amazonaws.com/{stage}/@connections/{connection_id}
```

### Lambda Integration

#### Understand API Gateway Lambda proxy integration

[Understand API Gateway Lambda proxy integration](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html)

- Amazon API Gateway Lambda proxy integration is a simple, powerful, and nimble mechanism to build an API with a setup of a single API method
- The Lambda proxy integration allows the client to call a single Lambda function in the backend. 
- The function accesses many resources or features of other AWS services, including calling other Lambda functions.


## Tutorials

### Tutorial: Create a REST API as an Amazon Kinesis proxy in API Gateway

[Tutorial: Create a REST API as an Amazon Kinesis proxy in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-kinesis.html)


## Notes

- Lambda can scale faster than the regular Auto Scaling feature of Amazon EC2, Amazon Elastic Beanstalk, or Amazon ECS. This is because AWS Lambda is more lightweight than other computing services

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/applicationDiscoveryService.md
================================================
# AWS Application Discovery Service

[What Is AWS Application Discovery Service?](https://docs.aws.amazon.com/application-discovery/latest/userguide/what-is-appdiscovery.html)

- AWS Application Discovery Service helps you plan your migration to the AWS cloud by collecting usage and configuration data about your on-premises servers.
- Application Discovery Service is integrated with AWS Migration Hub, which simplifies your migration tracking as it aggregates your migration status information into a single console. 
- You can view the discovered servers, group them into applications, and then track the migration status of each application from the Migration Hub console in your home region.
- All discovered data is stored in your AWS Migration Hub home region. 
- Therefore, you must set your home region in the Migration Hub console or with CLI commands before performing any discovery and migration activities. 
- Your data can be exported for analysis in Microsoft Excel or AWS analysis tools such as Amazon Athena and Amazon QuickSight.
- Application Discovery Service offers two ways of performing discovery and collecting data about your on-premises servers:
  - Agentless discovery can be performed by deploying the AWS Agentless Discovery Connector (OVA file) through your VMware vCenter
  - Agent-based discovery can be performed by deploying the AWS Application Discovery Agent on each of your VMs and physical servers.


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/aurora.md
================================================
# Aurora

[Cheat Sheet - RDS](https://tutorialsdojo.com/amazon-relational-database-service-amazon-rds)

[What is Amazon Aurora?](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)

- Amazon Aurora (Aurora) is a fully managed relational database engine that's compatible with MySQL and PostgreSQL
- The code, tools, and applications you use today with your existing MySQL and PostgreSQL databases can be used with Aurora.
- With some workloads, Aurora can deliver up to five times the throughput of MySQL and up to three times the throughput of PostgreSQL without requiring changes to most of your existing applications.

## Amazon Aurora DB clusters

[Amazon Aurora DB clusters](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.html)

- An Amazon Aurora DB cluster consists of one or more DB instances and a cluster volume that manages the data for those DB instances.
- An Aurora cluster volume is a virtual database storage volume that spans multiple Availability Zones, with each Availability Zone having a copy of the DB cluster data.
  - Primary DB instance – Supports read and write operations, and performs all of the data modifications to the cluster volume. Each Aurora DB cluster has one primary DB instance.
  - Aurora Replica – Connects to the same storage volume as the primary DB instance and supports only read operations. Each Aurora DB cluster can have up to 15 Aurora Replicas in addition to the primary DB instance

### Amazon Aurora storage and reliability

[Amazon Aurora storage and reliability](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.StorageReliability.html)

- Aurora data is stored in the cluster volume, which is a single, virtual volume that uses solid state drives (SSDs).
- A cluster volume consists of copies of the data across three Availability Zones in a single AWS Region
- Aurora cluster volumes automatically grow as the amount of data in your database increases. 
- An Aurora cluster volume can grow to a maximum size of 128 tebibytes (TiB). 
- Even though an Aurora cluster volume can grow up to 128 tebibytes (TiB), you are only charged for the space that you use in an Aurora cluster volume.

### High availability for Amazon Aurora

[High availability for Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraHighAvailability.html)

- The Amazon Aurora architecture involves separation of storage and compute
- The data remains safe even if some or all of the DB instances in the cluster become unavailable.


## Managing DB instance

[Working with storage for Amazon RDS DB instances](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html)

- To specify how you want your data stored in Amazon RDS, choose a storage type and provide a storage size when you create or modify a DB instance.
- Later, you can increase the amount or change the type of storage by modifying the DB instance.

### Overview of Amazon Aurora global databases

[Overview of Amazon Aurora global databases](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html#aurora-global-database-overview)

- Amazon Aurora global databases span multiple AWS Regions, enabling low latency global reads and providing fast recovery from the rare outage that might affect an entire AWS Region. 
- An Aurora global database has a primary DB cluster in one Region, and up to five secondary DB clusters in different Regions.

### Connecting to an Amazon Aurora global database

How you connect to an Aurora global database depends on whether you need to write to the database or read from the database:
- For read-only requests or queries, you connect to the reader endpoint for the Aurora cluster in your AWS Region.
- To run data manipulation language (DML) or data definition language (DDL) statements, you connect to the cluster endpoint for the primary cluster. This endpoint might be in a different AWS Region than your application.

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/awsControlTower.md
================================================
# ControlTower

- AWS Organizations is an account management service that lets you consolidate multiple AWS accounts into an organization that you create and centrally manage
- With Organizations, you can create member accounts and invite existing accounts to join your organization. 
- You can organize those accounts into groups and attach policy-based controls
- In AWS Control Tower, Organizations helps centrally manage billing; control access, compliance, and security; and share resources across your member AWS accounts. 
- Accounts are grouped into logical groups, called organizational units (OUs)

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/backup.md
================================================
# AWS Backup

## Restoring a Storage Gateway volume

[Restoring a Storage Gateway volume](https://docs.aws.amazon.com/aws-backup/latest/devguide/restoring-storage-gateway.html)

- If you are restoring an AWS Storage Gateway volume snapshot, you can choose to restore the snapshot as an Storage Gateway volume or as an Amazon EBS volume.

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/batch.md
================================================
# Batch

[What Is AWS Batch?](https://docs.aws.amazon.com/batch/latest/userguide/what-is-batch.html)

[Cheat Sheet - AWS Batch](https://tutorialsdojo.com/aws-batch)

- helps you to run batch computing workloads on the AWS Cloud
- is a common way for developers, scientists, and engineers to access large amounts of compute resources
- removes the undifferentiated heavy lifting of configuring and managing the required infrastructure, similar to traditional batch computing software
- This service can efficiently provision resources in response to jobs submitted in order to eliminate capacity constraints, reduce compute costs, and deliver results quickly.


## Compute environment

[Compute environment](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html)

- Job queues are mapped to one or more compute environments. 
- Compute environments contain the Amazon ECS container instances that are used to run containerized batch jobs



## Use Cases

[AWS Batch Use cases](https://aws.amazon.com/batch/use-cases)


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/bestPractices.md
================================================
# Best Practices

## Migration Strategies

[CheatSheet - aws-migration-strategies-the-6-rs](https://tutorialsdojo.com/aws-migration-strategies-the-6-rs)

[Phase 2: Plan](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-database-migration/planning-phase.html)


6 Application Migration Strategies: “The 6 R’s”

- Rehosting : Otherwise known as `lift-and-shift`.
  - large legacy migration scenario where the organization is looking to scale its migration quickly to meet a business case, we find that the majority of applications are rehosted.
- Replatforming : I sometimes call this `lift-tinker-and-shift`.
  - Here you might make a few cloud (or other) optimizations in order to achieve some tangible benefit, but you aren’t otherwise changing the core architecture of the application.
  - You may be looking to reduce the amount of time you spend managing database instances by migrating to a database-as-a-service platform like Amazon Relational Database Service (Amazon RDS), or migrating your application to a fully managed platform like Amazon Elastic Beanstalk.

- Repurchasing : Moving to a different product.
  - I most commonly see repurchasing as a move to a SaaS platform. 
- Refactoring / Re-architecting : Re-imagining how the application is architected and developed, typically using cloud-native features.
  - This is typically driven by a strong business need to add features, scale, or performance that would otherwise be difficult to achieve in the application’s existing environment.
- Retire : Get rid of.
  - Once you’ve discovered everything in your environment, you might ask each functional area who owns each application. 
  - We’ve found that as much as 10% (I’ve seen 20%) of an enterprise IT portfolio is no longer useful, and can simply be turned off. 
- Retain : Usually this means “revisit” or do nothing (for now).
  - Maybe you’re still riding out some depreciation, aren’t ready to prioritize an application that was recently upgraded, or are otherwise not inclined to migrate some applications. 
  - You should only migrate what makes sense for the business;

## Disaster Recovery

[Disaster Recovery Slides](https://www.slideshare.net/AmazonWebServices/disaster-recovery-options-with-aws)

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/billingAndCostManagement.md
================================================
# Billing And Cost Management

[What is AWS Billing?](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-what-is.html)

[CheatSheet - AWS Billing And Cost Management](https://tutorialsdojo.com/aws-billing-and-cost-management)


## Consolidated billing for AWS Organization

### Reserved Instances

#### Turning off reserved instances and Savings Plans discount sharing

- The management account of an organization can turn off Reserved Instance (RI) discount and Savings Plans discount sharing for any accounts in that organization, including the management account
- This means that RIs and Savings Plans discounts aren't shared between any accounts that have sharing turned off. 
- To share an RI or Savings Plans discount with an account, both accounts must have sharing turned on

[Cost Alloc Tags](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)
- After you activate cost allocation tags, AWS uses the cost allocation tags


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/certificateManager.md
================================================
# Certificate Manager

[AWS Certificate Manager](https://aws.amazon.com/certificate-manager)

- AWS Certificate Manager is a service that lets you easily provision, manage, and deploy public and private Secure Sockets Layer/Transport Layer Security (SSL/TLS) certificates for use with AWS services and your internal connected resources. 
- SSL/TLS certificates are used to secure network communications and establish the identity of websites over the Internet as well as resources on private networks.


> To use a certificate with Elastic Load Balancing for the same site (the same fully qualified domain name, or FQDN, or set of FQDNs) in a different Region, you must request a new certificate for each Region in which you plan to use it.

> Two use an ACM certificate with Amazon CloudFront, you must request the certificate in the US East (N. Virginia) region.


### Services integrated with AWS Certificate Manager


[Services integrated with AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/acm-services.html)

## FAQs

[FAQs](https://aws.amazon.com/certificate-manager/faqs)

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudAdoptionReadinessTool.md
================================================
# AWS Cloud Adoption Readiness Tool (CART)

[AWS Cloud Adoption Readiness Tool (CART)](https://cloudreadiness.amazonaws.com/#/cart)


- Assess your organization’s cloud migration readiness with sixteen questions and set a path for cloud adoption success.
- The AWS Cloud Adoption Readiness Tool (CART) helps organizations of all sizes develop efficient and effective plans for cloud adoption and enterprise cloud migrations. 
- This 16-question online survey and assessment report details your cloud migration readiness across six perspectives including business, people, process, platform, operations, and security.


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudFormation.md
================================================
# CloudFormation

[What is AWS CloudFormation?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)

[Cheat Sheet - AWS CloudFormation](https://tutorialsdojo.com/aws-cloudformation)

[Cheat Sheet - aws-cloudformation-stacksets-and-nested-stacks](https://tutorialsdojo.com/aws-cloudformation-stacksets-and-nested-stacks)

[Cheat Sheet - Elastic Beanstalk vs CloudFormation vs OpsWorks vs CodeDeploy](https://tutorialsdojo.com/elastic-beanstalk-vs-cloudformation-vs-opsworks-vs-codedeploy)

- AWS CloudFormation is a service that helps you model and set up your AWS resources so that you can spend less time managing those resources and more time focusing on your applications that run in AWS.
- You create a template that describes all the AWS resources that you want (like Amazon EC2 instances or Amazon RDS DB instances), and CloudFormation takes care of provisioning and configuring those resources for you.



### Working with AWS CloudFormation StackSets

[AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)

- AWS CloudFormation StackSets extends the functionality of stacks by enabling you to create, update, or delete stacks across multiple accounts and Regions with a single operation.

### Updating stacks using change sets

[Updating stacks using change sets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html)

- When you need to update a stack, understanding how your changes will affect running resources before you implement them can help you update stacks with confidence
- Change sets allow you to preview how proposed changes to a stack might impact your running resources, for example, whether your changes will delete or replace any critical resources, AWS CloudFormation makes the changes to your stack only when you decide to execute the change set, allowing you to decide whether to proceed with your proposed changes or explore other changes by creating another change set.

```bash
 CloudFormation CLI create-change-set
```

### Conditionally create resources for a production, development, or test stack

[Conditionally create resources for a production, development, or test stack](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-sample-templates.html)

- In some cases, you might want to create stacks that are similar but with minor tweaks. 
- For example, you might have a template that you use for production applications. 
- You want to create the same production stack so that you can use it for development or testing.

### Exporting stack output values

[Exporting stack output values](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html)

- To share information between stacks, export a stack's output values. 
- Other stacks that are in the same AWS account and region can import the exported values.

### Listing stacks that import an exported output value

[Listing stacks that import an exported output value](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-imports.html)

- When you export an output value, stacks that are in the same AWS account and region can import that value. 
- To see which stacks are importing a particular output value, use the list import action.


### DeletionPolicy attribute

[DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html)

- With the DeletionPolicy attribute you can preserve, and in some cases, backup a resource when its stack is deleted. 
- You specify a DeletionPolicy attribute for each resource that you want to control. 
- If a resource has no DeletionPolicy attribute, AWS CloudFormation deletes the resource by default.

> The default policy is Snapshot for AWS::RDS::DBCluster resources and for AWS::RDS::DBInstance resources that don't specify the DBClusterIdentifier property.


**DeletionPolicy options**

- Delete
  - CloudFormation deletes the resource and all its content if applicable during stack deletion
  - By default, if you don't specify a DeletionPolicy, CloudFormation deletes your resources.
- Retain
  - CloudFormation keeps the resource without deleting the resource or its contents when its stack is deleted.
- Snapshot
  - For resources that support snapshots, CloudFormation creates a snapshot for the resource before deleting it


### UpdateReplacePolicy attribute

[UpdateReplacePolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatereplacepolicy.html)

- Use the UpdateReplacePolicy attribute to retain or, in some cases, backup the existing physical instance of a resource when it's replaced during a stack update operation.
- When you initiate a stack update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template and parameters. 
- If you update a resource property that requires that the resource be replaced, CloudFormation recreates the resource during the update. 
- Recreating the resource generates a new physical ID.


### Walkthrough: Refer to resource outputs in another AWS CloudFormation stack

[Walkthrough: Refer to resource outputs in another AWS CloudFormation stack](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-crossstackref.html)

- To export resources from one AWS CloudFormation stack to another, create a cross-stack reference. Cross-stack references let you use a layered or service-oriented architecture. 
- Instead of including all resources in a single stack, you create related AWS resources in separate stacks; then you can refer to required resource outputs from other stacks. 
- By restricting cross-stack references to outputs, you control the parts of a stack that are referenced by other stacks.


- There are some limitations if there is a cross-stack reference
  between two CloudFormation stacks. Stack A cannot be deleted if it has a resource output
  that is referenced by stack B.
- You cannot modify the output value that is referenced by
  another stack
- you can update stack B to remove the cross-stack reference.


### Custom resources

[Custom resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html)


- Custom resources enable you to write custom provisioning logic in templates that AWS CloudFormation runs anytime you create, update (if you changed the custom resource), or delete stacks. 
-  For example, you might want to include resources that aren't available as AWS CloudFormation resource types. 
- You can include those resources by using custom resources.

**How custom resources work**

- The template developer defines a custom resource in their template, which includes a service token and any input data parameters. Depending on the custom resource, the input data might be required; however, the service token is always required.
- The service token specifies where AWS CloudFormation sends requests to, such as an Amazon SNS topic ARN or an AWS Lambda function ARN


  
## Intrinsic Functions

[Intrinsic function reference](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html)

- AWS CloudFormation provides several built-in functions that help you manage your stacks. Use intrinsic functions in your templates to assign values to properties that are not available until runtime.


### Using dynamic references to specify template values


[Using dynamic references to specify template values](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html)

- Dynamic references provide a compact, powerful way for you to specify external values that are stored and managed in other services, such as the Systems Manager Parameter Store, in your stack templates. 
- When you use a dynamic reference, CloudFormation retrieves the value of the specified reference when necessary during stack and change set operations.
- CloudFormation currently supports the following dynamic reference patterns:
  - ssm, for plaintext values stored in AWS Systems Manager Parameter Store.
  - ssm-secure, for secure strings stored in AWS Systems Manager Parameter Store.
  - secretsmanager, for entire secrets or specific secret values that are stored in AWS Secrets Manager.



### Fn::GetAtt

[Fn::GetAtt](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html)

- The Fn::GetAtt intrinsic function returns the value of an attribute from a resource in the template

## Blogs

[Use CloudFormation StackSets to Provision Resources Across Multiple AWS Accounts and Regions](https://aws.amazon.com/blogs/aws/use-cloudformation-stacksets-to-provision-resources-across-multiple-aws-accounts-and-regions)




================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudFront.md
================================================
# Cloudfront

[Cheat Sheet - Cloudfront](https://tutorialsdojo.com/amazon-cloudfront)

[geoproximity-routing-vs-geolocation-routing](https://tutorialsdojo.com/latency-routing-vs-geoproximity-routing-vs-geolocation-routing)

## What is Amazon CloudFront?

[What is Amazon CloudFront?](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html)

- Amazon CloudFront is a web service that speeds up distribution of your static and dynamic web content, such as .html, .css, .js, and image files, to your users. 
- CloudFront delivers your content through a worldwide network of data centers called edge locations. 
- When a user requests content that you're serving with CloudFront, the request is routed to the edge location that provides the lowest latency (time delay), so that content is delivered with the best possible performance.

- If the content is already in the edge location with the lowest latency, CloudFront delivers it immediately.

- If the content is not in that edge location, CloudFront retrieves it from an origin that you've defined—such as an Amazon S3 bucket, a MediaPackage channel, or an HTTP server (for example, a web server) that you have identified as the source for the definitive version of your content.


## Restricting the geographic distribution of your content

[Restricting the geographic distribution of your content](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/georestrictions.html)

- You can use geo restriction, also known as geo blocking, to prevent users in specific geographic locations from accessing content that you're distributing through a CloudFront distribution. 
- To use geo restriction, you have two options:

  - Use the CloudFront geo restriction feature. 
  - Use this option to restrict access to all of the files that are associated with a distribution and to restrict access at the country level.

  - Use a third-party geolocation service. Use this option to restrict access to a subset of the files that are associated with a distribution or to restrict access at a finer granularity than the country level.

## Optimizing Caching and availability

### Optimizing high availability with CloudFront origin failover

[Optimizing high availability with CloudFront origin failover](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/high_availability_origin_failover.html)


- You can set up CloudFront with origin failover for scenarios that require high availability. 
- To get started, you create an origin group with two origins: a primary and a secondary. 
- If the primary origin is unavailable, or returns specific HTTP response status codes that indicate a failure, CloudFront automatically switches to the secondary origin.


## Configuring secure access and restricting access to content

### Using field-level encryption to help protect sensitive data

[Using field-level encryption to help protect sensitive data](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html)

- With Amazon CloudFront, you can enforce secure end-to-end connections to origin servers by using HTTPS
- Field-level encryption adds an additional layer of security that lets you protect specific data throughout system processing so that only certain applications can see it.
- Field-level encryption allows you to enable your users to securely upload sensitive information to your web servers.
- The sensitive information provided by your users is encrypted at the edge, close to the user, and remains encrypted throughout your entire application stack. 
- This encryption ensures that only applications that need the data and have the credentials to decrypt it are able to do so.
- To use field-level encryption, when you configure your CloudFront distribution, specify the set of fields in POST requests that you want to be encrypted, and the public key to use to encrypt them. 
- You can encrypt up to 10 data fields in a request


### Using AWS WAF to control access to your content

[Using AWS WAF to control access to your content](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-awswaf.html)

- AWS WAF is a web application firewall that lets you monitor the HTTP and HTTPS requests that are forwarded to CloudFront, and lets you control access to your content
- Based on conditions that you specify, such as the values of query strings or the IP addresses that requests originate from, CloudFront responds to requests either with the requested content or with an HTTP status code 403 (Forbidden). 

### Restricting access to Amazon S3 content by using an origin access identity (OAI)

[Restricting access to Amazon S3 content by using an origin access identity (OAI)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)

To restrict access to content that you serve from Amazon S3 buckets, follow these steps:
- Create a special CloudFront user called an origin access identity (OAI) and associate it with your distribution
- Configure your S3 bucket permissions so that CloudFront can use the OAI to access the files in your bucket and serve them to your users. Make sure that users can’t use a direct URL to the S3 bucket to access a file there.

### Restricting access to files on custom origins

[Restricting access to files on custom origins](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-overview.html#forward-custom-headers-restrict-access)

- If you use a custom origin, you can optionally set up custom headers to restrict access. 
- But by using custom headers, you can further restrict access to your content so that users can access it only through CloudFront, not directly. 
- To require that users access content through CloudFront, change the following settings in your CloudFront distributions:
  - Origin Custom Headers: Configure CloudFront to forward custom headers to your origin.

## Serving private content with signed URLs and signed cookies

[Serving private content with signed URLs and signed cookies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html)

- Many companies that distribute content over the internet want to restrict access to documents, business data, media streams, or content that is intended for selected users, for example, users who have paid a fee.
  - Require that your users access your private content by using special CloudFront signed URLs or signed cookies.
  - Require that your users access your content by using CloudFront URLs, not URLs that access content directly on the origin server (for example, Amazon S3 or a private HTTP server).

## Optimizing caching and availability

### Increasing the proportion of requests that are served directly from the CloudFront caches (cache hit ratio)

[Increasing the proportion of requests that are served directly from the CloudFront caches (cache hit ratio)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cache-hit-ratio.html)

- You can improve performance by increasing the proportion of your viewer requests that are served directly from the CloudFront cache instead of going to your origin servers for content. 
- This is known as improving the cache hit ratio.

- Specifying how long CloudFront caches your objects
  - To increase your cache hit ratio, you can configure your origin to add a Cache-Control max-age directive to your objects, and specify the longest practical value for max-age


### Requiring HTTPS for communication between viewers and CloudFront

[Requiring HTTPS for communication between viewers and CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-viewers-to-cloudfront.html)

- You can configure one or more cache behaviors in your CloudFront distribution to require HTTPS for communication between viewers and CloudFront. 
- You also can configure one or more cache behaviors to allow both HTTP and HTTPS, so that CloudFront requires HTTPS for some objects but not for others. 
- The configuration steps depend on which domain name you're using in object URLs:

  - If you're using the domain name that CloudFront assigned to your distribution, such as d111111abcdef8.cloudfront.net, you change the Viewer Protocol Policy setting for one or more cache behaviors to require HTTPS communication. In that configuration, CloudFront provides the SSL/TLS certificate.
  - If you're using your own domain name, such as example.com, you need to change several CloudFront settings. You also need to use an SSL/TLS certificate provided by AWS Certificate Manager (ACM), or import a certificate from a third-party certificate authority into ACM or the IAM certificate store.


### Managing how long content stays in the cache (expiration)

[Managing how long content stays in the cache (expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html)

- You can control how long your files stay in a CloudFront cache before CloudFront forwards another request to your origin
  - If the CloudFront cache already has the latest version, the origin returns a status code 304 Not Modified.
  - If the CloudFront cache does not have the latest version, the origin returns a status code 200 OK and the latest version of the file.



## Customizing at the edge with Lambda@Edge

[Customizing at the edge with Lambda@Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html)

- Lambda@Edge is an extension of AWS Lambda, a compute service that lets you execute functions that customize the content that CloudFront delivers.

- When you associate a CloudFront distribution with a Lambda@Edge function, CloudFront intercepts requests and responses at CloudFront edge locations. You can execute Lambda functions when the following CloudFront events occur:
  - When CloudFront receives a request from a viewer (viewer request)
  - Before CloudFront forwards a request to the origin (origin request)
  - When CloudFront receives a response from the origin (origin response)
  - Before CloudFront returns the response to the viewer (viewer response)

[Get started creating and using Lambda@Edge functions](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works.html)


## Request and response behavior for custom origins

### User-Agent header

[User-Agent header](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html#request-custom-user-agent-header)

- If you want CloudFront to cache different versions of your objects based on the device that a user is using to view your content, we recommend that you configure CloudFront to forward one or more of the following headers to your custom origin:
  - CloudFront-Is-Desktop-Viewer
  - CloudFront-Is-Mobile-Viewer
  - CloudFront-Is-SmartTV-Viewer
  - CloudFront-Is-Tablet-Viewer

## Blogs

[How do I use CloudFront to serve a static website hosted on Amazon S3?](https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-serve-static-website)



================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudHSM.md
================================================
# CloudHSM

[AWS CloudHSM](https://aws.amazon.com/cloudhsm)


- AWS CloudHSM is a cloud-based hardware security module (HSM) that enables you to easily generate and use your own encryption keys on the AWS Cloud


## Improve Your Web Server's Security with SSL/TLS Offload in AWS CloudHSM

[Improve Your Web Server's Security with SSL/TLS Offload in AWS CloudHSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/ssl-offload.html)

- Web servers and their clients (web browsers) can use Secure Sockets Layer (SSL) or Transport Layer Security (TLS). 
- These protocols confirm the identity of the web server and establish a secure connection to send and receive webpages or other data over the internet. This is commonly known as HTTPS.


### How SSL/TLS Offload with AWS CloudHSM Works


[How SSL/TLS Offload with AWS CloudHSM Works](https://docs.aws.amazon.com/cloudhsm/latest/userguide/ssl-offload-overview.html)



================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudTrail.md
================================================
# CloudTrail

[Cheat Sheet - AWS CloudTrail](https://tutorialsdojo.com/aws-cloudtrail)

## What Is AWS CloudTrail?


[What Is AWS CloudTrail?](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)

- AWS CloudTrail is an AWS service that helps you enable governance, compliance, and operational and risk auditing of your AWS account. 
- Actions taken by a user, role, or an AWS service are recorded as events in CloudTrail. 
- Events include actions taken in the AWS Management Console, AWS Command Line Interface, and AWS SDKs and APIs.


### Global service events 

[Global service events](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-concepts.html#cloudtrail-concepts-global-service-events)

- For most services, events are recorded in the region where the action occurred. 
- For global services such as AWS Identity and Access Management (IAM), AWS STS, and Amazon CloudFront, events are delivered to any trail **that includes global services**.

## Identities

### Logging IAM and AWS STS API calls with AWS CloudTrail

[Logging IAM and AWS STS API calls with AWS CloudTrail](https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html)

- IAM and AWS STS are integrated with AWS CloudTrail, a service that provides a record of actions taken by an IAM user or role. 
- CloudTrail captures all API calls for IAM and AWS STS as events, including calls from the console and from API calls. 
- If you create a trail, you can enable continuous delivery of CloudTrail events to an Amazon S3 bucket. 
- If you don't configure a trail, you can still view the most recent events in the CloudTrail console in Event history

## Blogs

- [How to Audit Cross-Account Roles Using AWS CloudTrail and Amazon CloudWatch Events](https://aws.amazon.com/blogs/security/how-to-audit-cross-account-roles-using-aws-cloudtrail-and-amazon-cloudwatch-events)

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudWatchLogs.md
================================================
# CloudWatch Logs

- You can use Amazon CloudWatch Logs to monitor, store, and access your log files from Amazon Elastic Compute Cloud (Amazon EC2) instances, AWS CloudTrail, Route 53, and other sources.
- CloudWatch Logs enables you to centralize the logs from all of your systems, applications, and AWS services that you use, in a single, highly scalable service. 
- CloudWatch Logs enables you to see all of your logs, regardless of their source, as a single and consistent flow of events ordered by time, and you can query them and sort them based on other dimensions, group them by specific fields, create custom computations with a powerful query language, and visualize log data in dashboards.


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudsearch.md
================================================
# CloudSearch

[Amazon CloudSearch](https://aws.amazon.com/cloudsearch)

[Cheat Sheet - Amazon CloudSearch](https://tutorialsdojo.com/amazon-cloudsearch)

- Amazon CloudSearch is a managed service in the AWS Cloud that makes it simple and cost-effective to set up, manage, and scale a search solution for your website or application.

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudwatch.md
================================================
# CloudWatch

[Cheat Sheet - CloudWatch](https://tutorialsdojo.com/amazon-cloudwatch)

[cloudwatch-agent-vs-ssm-agent-vs-custom-daemon-scripts](https://tutorialsdojo.com/cloudwatch-agent-vs-ssm-agent-vs-custom-daemon-scripts)

## Schedule Expressions for Rules

[Schedule Expressions for Rules](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html)

- You can create rules that self-trigger on an automated schedule in CloudWatch Events using cron or rate expressions. 
- All scheduled events use UTC time zone and the minimum precision for schedules is 1 minute.

## Analyzing log data with CloudWatch Logs Insights

[Analyzing log data with CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)

- CloudWatch Logs Insights enables you to interactively search and analyze your log data in Amazon CloudWatch Logs
- You can perform queries to help you more efficiently and effectively respond to operational issues
-  If an issue occurs, you can use CloudWatch Logs Insights to identify potential causes and validate deployed fixes


### Installing the CloudWatch agent on on-premises servers

[Installing the CloudWatch agent on on-premises servers](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-premise.html)

- If you have downloaded the CloudWatch agent on one computer and created the agent configuration file you want, you can use that configuration file to install the agent on other on-premises servers.

## Using Amazon CloudWatch alarms

[Using Amazon CloudWatch alarms](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)

- You can create both metric alarms and composite alarms in CloudWatch.
  - A metric alarm 
    - watches a single CloudWatch metric or the result of a math expression based on CloudWatch metrics. 
    - The alarm performs one or more actions based on the value of the metric or expression relative to a threshold over a number of time periods. 
    - The action can be sending a notification to an Amazon SNS topic, performing an Amazon EC2 action or an Amazon EC2 Auto Scaling action, or creating an OpsItem or incident in Systems Manager
  - A composite alarm 
    - includes a rule expression that takes into account the alarm states of other alarms that you have created. 
    - The composite alarm goes into ALARM state only if all conditions of the rule are met. 
    - The alarms specified in a composite alarm's rule expression can include metric alarms and other composite alarms.


## Creating metrics from log events using filters

- You can search and filter the log data coming into CloudWatch Logs by creating one or more metric filters. 
- Metric filters define the terms and patterns to look for in log data as it is sent to CloudWatch Logs. 
- CloudWatch Logs uses these metric filters to turn log data into numerical CloudWatch metrics that you can graph or set an alarm on.

### Creating metric filters

[Creating metric filters](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringPolicyExamples.html)



[Monitoring deployments with Amazon CloudWatch Events](https://docs.aws.amazon.com/codedeploy/latest/userguide/monitoring-cloudwatch-events.html)


- You can use Amazon CloudWatch Events to detect and react to changes in the state of an instance or a deployment (an "event") in your CodeDeploy operations. 
- Then, based on rules you create, CloudWatch Events will invoke one or more target actions when a deployment or instance enters the state you specify in a rule. 
- Depending on the type of state change, you might want to send notifications, capture state information, take corrective action, initiate events, or take other actions. 
- You can select the following types of targets when using CloudWatch Events as part of your CodeDeploy operations:
  - AWS Lambda functions
  - Kinesis streams
  - Amazon SQS queues
  
Built-in targets (EC2 CreateSnapshot API call, EC2 RebootInstances API call, EC2 StopInstances API call , and EC2 TerminateInstances API call)

Amazon SNS topics


```bash
The following are some use cases:
Use a Lambda function to pass a notification to a Slack channel whenever deployments fail.
Push data about deployments or instances to a Kinesis stream to support comprehensive, real-time status monitoring.
Use CloudWatch alarm actions to automatically stop, terminate, reboot, or recover Amazon EC2 instances when a deployment or instance event you specify occurs.
```

[dynamic-dns-for-route-53](https://aws.amazon.com/blogs/compute/building-a-dynamic-dns-for-route-53-using-cloudwatch-events-and-lambda/)

[Real-time processing of log data with subscriptions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html)

- You can use subscriptions to get access to a real-time feed of log events from CloudWatch Logs and have it delivered to other services such as an Amazon Kinesis stream, an Amazon Kinesis Data Firehose stream, or AWS Lambda for custom processing, analysis, or loading to other systems

[Sending and Receiving Events Between AWS Accounts](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEvents-CrossAccountEventDelivery.html)


The overall process is as follows:

- On the receiver account, edit the permissions on the default event bus to allow specified AWS accounts, an organization, or all AWS accounts to send events to the receiver account.
- On the sender account, set up one or more rules that have the receiver account's default event bus as the target.
- On the receiver account, set up one or more rules that match events that come from the sender account.


#### Creating metrics for log events using filter

##### Filter and Pattern Syntax

[Filter and pattern syntax](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)

- You can use metric filters to search for and match terms, phrases, or values in your log events. When a metric filter finds one of the terms, phrases, or values in your log events, you can increment the value of a CloudWatch metric. For example, you can create a metric filter to search for and count the occurrence of the word ERROR in your log events.
- When a metric filter finds one of the matching terms, phrases, or values in your log events, it increments the count in the CloudWatch metric by the amount you specify for Metric Value. The metric value is aggregated and reported every minute.

##### Example: Count HTTP 404 codes

- Example: Count HTTP 404 codes
```bash
For Filter Pattern, type [IP, UserInfo, User, Timestamp, RequestInfo, StatusCode=404, Bytes]. 
```


#### Publishing custom metrics

[Publishing custom metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html)

[put-metric-data¶](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/put-metric-data.html)

- You can publish your own metrics to CloudWatch using the AWS CLI or an API. You can view statistical graphs of your published metrics with the AWS Management Console.

- instead of calling put-metric-data multiple times for three data points that are within 3 seconds of each other, you can aggregate the data into a statistic set that you publish with one call, using the --statistic-values parameter.

```bash
aws cloudwatch put-metric-data --metric-name PageViewCount --namespace MyService --statistic-values Sum=11,Minimum=2,Maximum=5,SampleCount=3 --timestamp 2016-10-14T12:00:00.000Z
```


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/codeBuild.md
================================================

### CodeBuild

[Create a build project (console)](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project-console.html)

- We recommend that you store an environment variable with a sensitive value, such as an AWS access key ID, an AWS secret access key, or a password as a parameter in Amazon EC2 Systems Manager Parameter Store or AWS Secrets Manager.

[Docker images provided by CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-available.html)

[Extending AWS CodeBuild with Custom Build Environments](https://aws.amazon.com/blogs/devops/extending-aws-codebuild-with-custom-build-environments/)

- Build environments are Docker images that include a complete file system with everything required to build and test your project.
  To use a custom build environment in a CodeBuild project, you build a container image for your platform that contains your build tools,
  push it to a Docker container registry such as Amazon EC2 Container Registry (ECR), and reference it in the project configuration. When
  building your application, CodeBuild will retrieve the Docker image from the container registry specified in the project configuration
  and use the environment to compile your source code, run your tests, and package your application.

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/codeCommit.md
================================================
> Revision Count: 1

# CodeCommit

[Cheat Sheet -  AWS CodeCommit](https://tutorialsdojo.com/aws-codecommit)

## Manage triggers for a repository

[Manage triggers for an AWS CodeCommit repository](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-notify.html)

- You can configure a CodeCommit repository so that code pushes or other events trigger actions, such as sending a notification from Amazon Simple Notification Service (Amazon SNS) or invoking a function in AWS Lambda. 
- You can create up to 10 triggers for each CodeCommit repository.
- Data in AWS CodeCommit repositories is already encrypted in transit as well as at rest.

### Example: Create an AWS CodeCommit trigger for an Amazon SNS topic

[Example: Create an AWS CodeCommit trigger for an Amazon SNS topic](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-notify-sns.html)

- You can create a trigger for a CodeCommit repository so that events in that repository trigger notifications from an Amazon Simple Notification Service (Amazon SNS) topic


### Example: Create an AWS CodeCommit trigger for an AWS Lambda function

[Example: Create an AWS CodeCommit trigger for an AWS Lambda function](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-notify-lambda.html)

- You can create a trigger for a CodeCommit repository so that events in the repository invoke a Lambda function. 


### Example: auth-and-access-control-iam-identity-based-access-control

[auth-and-access-control-iam-identity-based-access-control](https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control-iam-identity-based-access-control.html#identity-based-policies-example-4)

- To restrict push to master

```json
{ "Effect": "Allow",
"Action": [
"codecommit:GitPush",
"codecommit:Merge*" ],
"Resource": [ "arn:aws:codecommit:*:*:the-repo-name" ],
"Condition": {
"StringNotEquals": {
"codecommit:References": [ "refs/heads/master" ] }
}
}
```


### Migrate a Git repository to AWS CodeCommit


[Share the CodeCommit repository](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-migrate-repository-existing.html#how-to-migrate-existing-share)

- When you create a repository in CodeCommit, two endpoints are generated: one for HTTPS connections and one for SSH connections. 
- Both provide secure connections over a network

### Using identity-based policies (IAM Policies) for CodeCommit

[Using identity-based policies (IAM Policies) for CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control-iam-identity-based-access-control.html)
- An account administrator can attach permissions policies to IAM identities (users, groups, and roles) to grant permissions to perform operations on CodeCommit resources.
- AWS manage policy AWSCodeCommitPowerUser allows users access to CodeCommit but disallows the action of deleting
  CodeCommit repositories.

### Cross-account repository access: Actions for the administrator in AccountA


[Cross-account repository access: Actions for the administrator in AccountA](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account-administrator-a.html)

To allow users or groups in AccountB to access a repository in AccountA, an AccountA administrator must:
- Create a policy in AccountA that grants access to the repository.
- Create a role in AccountA that can be assumed by IAM users and groups in AccountB.
- Attach the policy to the role.

[Cross-account repository access: Actions for the administrator in AccountB](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account-administrator-b.html)

To allow users or groups in AccountB to access a repository in AccountA, the AccountB
administrator must create a group in AccountB. This group must be configured with a policy having
action `"sts:AssumeRole` that allows group members to assume the role created by the AccountA administrator

### Setup steps for SSH connections to AWS CodeCommit repositories on Linux, macOS, or Unix

[Setup steps for SSH connections to AWS CodeCommit repositories on Linux, macOS, or Unix](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-ssh-unixes.html)

- After you upload the SSH public key for the IAM user, the user can establish SSH connections to the CodeCommit repositories:

#### Supported Operations

[Change branch settings in AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-change-branch.html)

- You can change which branch to use as the default branch in the AWS CodeCommit console or with the AWS CLI. 
- For example, if you created your first commit using a Git client that set the default branch to master, you could create a branch named main, and then change the branch settings so that the new branch is set as the default branch for the repository.
- To change other branch settings, you can use Git from a local repo connected to the CodeCommit repository.

### Merge a pull request in an AWS CodeCommit repository

[Merge a pull request in an AWS CodeCommit repository](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-merge-pull-request.html)

- After your code has been reviewed and all approval rules (if any) on the pull request have been satisfied, you can merge a pull request in one of several ways:  
  - You can use the console to merge your source branch to the destination branch using one of the available merge strategies, which also closes the pull request.
  - You can use the AWS CLI to merge and close the pull request using the fast-forward, squash, or 3-way merge strategy.
  - On your local computer, you can use the git merge command to merge the source branch into the destination branch, and then push your merged code to the destination branch

#### Working with pull requests

[Edit or delete an approval rule for a pull request](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-edit-delete-pull-request-approval-rule.html)

- When you have an approval rule on a pull request, you cannot merge that pull request until its conditions have been met. 
- You can change the approval rules for pull requests to make it easier to satisfy their conditions, or to increase the rigor of reviews. You can change the number of users who must approve a pull request.

#### Working with approval rule templates

[Working with approval rule templates](https://docs.aws.amazon.com/codecommit/latest/userguide/approval-rule-templates.html)

- You can create approval rules for pull requests. To automatically apply approval rules to some or all of the pull requests created in repositories, use approval rule templates. Approval rule templates help you customize your development workflows across repositories so that different branches have appropriate levels of approvals and control. You can define different rules for production and development branches. Those rules are applied every time a pull request that matches the rule conditions is created.

#### Working with branches

[Limit pushes and merges to branches in AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-conditional-branch.html)

- By default, any CodeCommit repository user who has sufficient permissions to push code to the repository can contribute to any branch in that repository.

- For example, this policy denies pushing commits, merging branches, deleting branches, merging pull requests, and adding files to a branch named main and a branch named prod in a repository named MyDemoRepo:

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "codecommit:GitPush",
                "codecommit:DeleteBranch",
                "codecommit:PutFile",
                "codecommit:MergeBranchesByFastForward",
                "codecommit:MergeBranchesBySquash",
                "codecommit:MergeBranchesByThreeWay",
                "codecommit:MergePullRequestByFastForward",
                "codecommit:MergePullRequestBySquash",
                "codecommit:MergePullRequestByThreeWay"
            ],
            "Resource": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo",
            "Condition": {
                "StringEqualsIfExists": {
                    "codecommit:References": [
                        "refs/heads/main", 
                        "refs/heads/prod"
                     ]
                },
                "Null": {
                    "codecommit:References": "false"
                }
            }
        }
    ]
}
```




##### Configuring notifications for events in an AWS CodeCommit repository

[Configuring notifications for events in an AWS CodeCommit repository](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-repository-email.html)

- You can set up notification rules for a repository so that repository users receive emails about the repository event types you specify. 
- Notifications are sent when events match the notification rule settings. 
- You can create an Amazon SNS topic to use for notifications or use an existing one in your Amazon Web Services account

#### Security

[Using identity-based policies (IAM Policies) for CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control-iam-identity-based-access-control.html#identity-based-policies-example-4)

- identity-based policies demonstrate how an account administrator can attach permissions policies to IAM identities (users, groups, and roles) to grant permissions to perform operations on CodeCommit resources.

- Example

```josn
{
  "Version": "2012-10-17",
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : [
        "codecommit:BatchGetRepositories"
      ],
      "Resource" : [
        "arn:aws:codecommit:us-east-2:111111111111:MyDestinationRepo",
        "arn:aws:codecommit:us-east-2:111111111111:MyDemo*"
      ]
    }
  ]
}
```



================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/codeDeploy.md
================================================
## Code Deploy

[Register an on-premises instance with CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/on-premises-instances-register.html)

[Use the register command (IAM user ARN) to register an on-premises instance](https://docs.aws.amazon.com/codedeploy/latest/userguide/instances-on-premises-register-instance.html)

The register command can create an IAM user for the server and register the server with CodeDeploy

```bash
aws deploy register --instance-name AssetTag234AESDD --tags
Key=Name,Value=CodeDeployDemo-OnPremise --region eu-west-1
```

[Manually remove on-premises instance tags from an on-premises instance](https://docs.aws.amazon.com/codedeploy/latest/userguide/on-premises-instances-operations-remove-tags.html)

Typically, you remove an on-premises instance tag from an on-premises instance when that tag is no longer being used, or you want to remove the on-premises instance from any deployment groups that rely on that tag. You can use the AWS CLI or the AWS CodeDeploy console to remove on-premises instance tags from on-premises instances.

[Create a deployment group for an in-place deployment (console)]()

[Deployment configurations on an AWS Lambda compute platform](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html#deployment-configuration-lambda)

There are three ways traffic can shift during a deployment:

- Canary: Traffic is shifted in two increments. You can choose from predefined canary options that specify the percentage of traffic shifted to your updated Lambda function version in the first increment and the interval, in minutes, before the remaining traffic is shifted in the second increment.
- Linear: Traffic is shifted in equal increments with an equal number of minutes between each increment. You can choose from predefined linear options that specify the percentage of traffic shifted in each increment and the number of minutes between each increment.
- All-at-once: All traffic is shifted from the original Lambda function to the updated Lambda function version all at once.


### Working with Deployments

[Stop a deployment with CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployments-stop.html)

- You can use the CodeDeploy console, the AWS CLI, or the CodeDeploy APIs to stop deployments associated with your AWS account.

[Redeploy and roll back a deployment with CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployments-rollback-and-redeploy.html#deployments-rollback-and-redeploy-manual-rollbacks)

- CodeDeploy rolls back deployments by redeploying a previously deployed revision of an application as a new deployment. These rolled-back deployments are technically new deployments, with new deployment IDs, rather than restored versions of a previous deployment.
- For an ongoing deployment, you can choose “Stop deployment” or “Stop and roll back deployment” for a deployment.

[Working with deployment configurations in CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html)

- A deployment configuration is a set of rules and success and failure conditions used by CodeDeploy during a deployment. These rules and conditions are different, depending on whether you deploy to an EC2/On-Premises compute platform, AWS Lambda compute platform, or Amazon ECS compute platform.

**Predefined deployment configurations for an EC2/on-premises compute platform**
- Consider an example of 9 instances
  - CodeDeployDefault.AllAtOnce	
    - In-place deployments: 
      - attempts to deploy to all nine instances at once
      - The overall deployment succeeds if deployment to even a single instance is successful.
      - It fails only if deployments to all nine instances fail.
    - BlueGreen
      - Deployment to replacement environment: Follows the same deployment rules as CodeDeployDefault.AllAtOnce for in-place deployments.
      - Traffic rerouting: 
        - Routes traffic to all instances in the replacement environment at once. 
        - Succeeds if traffic is successfully rerouted to at least one instance. 
        - Fails after rerouting to all instances fails.
  - CodeDeployDefault.HalfAtATime	
  - CodeDeployDefault.OneAtATime	

**Deployment configurations on an AWS Lambda compute platform**

- When you deploy to an AWS Lambda compute platform, the deployment configuration specifies the way traffic is shifted to the new Lambda function versions in your application
  - Canary: Traffic is shifted in two increments. You can choose from predefined canary options that specify the percentage of traffic shifted to your updated Lambda function version in the first increment and the interval, in minutes, before the remaining traffic is shifted in the second increment. 
  - Linear: Traffic is shifted in equal increments with an equal number of minutes between each increment. You can choose from predefined linear options that specify the percentage of traffic shifted in each increment and the number of minutes between each increment. 
  - All-at-once: All traffic is shifted from the original Lambda function to the updated Lambda function version all at once.

Predefined deployment configurations for an AWS Lambda compute platform (for all please refer the documentation)
- CodeDeployDefault.LambdaCanary10Percent5Minutes: Shifts 10 percent of traffic in the first increment. The remaining 90 percent is deployed five minutes later.
- CodeDeployDefault.LambdaLinear10PercentEvery3Minutes : Shifts 10 percent of traffic every three minutes until all traffic is shifted.
- CodeDeployDefault.LambdaAllAtOnce: Shifts all traffic to the updated Lambda functions at once.


### Supported By

**CanaryDeployment**
- AWS Lambda
- ECS


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/codePipeline.md
================================================

### CodePipeline

[Grant approval permissions to an IAM user in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-iam-permissions.html)

- attaching the AWSCodePipelineApproverAccess managed policy to an IAM user

[Approve or reject an approval action in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-approve-or-reject.html)

[Invoke an AWS Lambda function in a pipeline in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html)

- Do not log the JSON event that CodePipeline sends to Lambda because this can result in user credentials being logged in CloudWatch Logs. The CodePipeline role uses a JSON event to pass temporary credentials to Lambda in the artifactCredentials field.

[CodePipeline pipeline structure reference](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html)

- To specify parallel actions, use the same integer for each action you want to run in parallel. In the console, you can specify a serial sequence for an action by choosing Add action group at the level in the stage where you want it to run, or you can specify a parallel sequence by choosing Add action. Action group refers to a run order of one or more actions at the same level
- different action groups have different runOrder values and their actions do not run in parallel.

[Configure server-side encryption for artifacts stored in Amazon S3 for CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html)

```json
{
    "Version": "2012-10-17",
    "Id": "SSEAndSSLPolicy",
    "Statement": [
        {
            "Sid": "DenyUnEncryptedObjectUploads",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::codepipeline-us-west-2-89050EXAMPLE/*",
            "Condition": {
                "StringNotEquals": {
                    "s3:x-amz-server-side-encryption": "aws:kms"
                }
            }
        },
        {
            "Sid": "DenyInsecureConnections",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::codepipeline-us-west-2-89050EXAMPLE/*",
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "false"
                }
            }
        }
    ]
}
```


[FAQ](https://aws.amazon.com/codepipeline/faqs/)

- Pipeline actions occur in a specified order, in serial or in parallel, as determined in the configuration of the stage


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cognito.md
================================================
> Revision Count: 0

# AWS Cognito

[What Is Amazon Cognito?](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html)

[Cheat Sheet - Cognito](https://tutorialsdojo.com/amazon-cognito)

[Cheat Sheet - Amazon Cognito User and Identity Pools Explained](https://tutorialsdojo.com/amazon-cognito-user-pools-and-identity-pools-explained)

- Amazon Cognito provides authentication, authorization, and user management for your web and mobile apps. 
- Your users can sign in directly with a user name and password, or through a third party such as Facebook, Amazon, Google or Apple.
- The two main components of Amazon Cognito are user pools and identity pools. 
  - User pools are user directories that provide sign-up and sign-in options for your app users. 
  - Identity pools enable you to grant your users access to other AWS services. 
- You can use identity pools and user pools separately or together.


## Amazon Cognito Identity Pools (Federated Identities)

[Amazon Cognito Identity Pools (Federated Identities)](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html)

- Amazon Cognito identity pools (federated identities) enable you to create unique identities for your users and federate them with identity providers.
- With an identity pool, you can obtain temporary, limited-privilege AWS credentials to access other AWS services

### Identity Pools (Federated Identities) External Identity Providers

[Identity Pools (Federated Identities) External Identity Providers](https://docs.aws.amazon.com/cognito/latest/developerguide/external-identity-providers.html)

- Using the logins property, you can set credentials received from an identity provider. 
- Moreover, you can associate an identity pool with multiple identity providers.
- For example, you could set both the Facebook and Google tokens in the logins property, so that the unique Amazon Cognito identity would be associated with both identity provider logins
- No matter which account the end user uses for authentication, Amazon Cognito returns the same user identifier.

#### Open ID Connect Providers (Identity Pools)

[Open ID Connect Providers (Identity Pools](https://docs.aws.amazon.com/cognito/latest/developerguide/open-id.html)

- OpenID Connect is an open standard for authentication that is supported by a number of login providers
- Amazon Cognito supports linking of identities with OpenID Connect providers that are configured through AWS Identity and Access Management.

## Integrating Amazon Cognito with web and mobile apps

[Integrating Amazon Cognito with web and mobile apps](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-integrate-apps.html)

[simplifying-token-vending-machine-deployment-with-aws-cloudformation](https://aws.amazon.com/blogs/mobile/simplifying-token-vending-machine-deployment-with-aws-cloudformation)

- By integrating Amazon Cognito with your client code, you connect your app to backend AWS functionality that aids authentication and authorization workflows.
- Your app will use the Amazon Cognito API to, for example, create new users in your user pool, retrieve user pool tokens, and obtain temporary credentials from your identity pool. 
- To integrate Amazon Cognito with your web or mobile app, use the SDKs and libraries that the AWS Amplify framework provides.


### Amazon Cognito user pools

[Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html)

- A user pool is a user directory in Amazon Cognito. 
- With a user pool, your users can sign in to your web or mobile app through Amazon Cognito. 
- Your users can also sign in through social identity providers like Google, Facebook, Amazon, or Apple, and through SAML identity providers. 
- Whether your users sign in directly or through a third party, all members of the user pool have a directory profile that you can access through a Software Development Kit (SDK).

## SSO FAQs

[Single Sign On FAQs](https://aws.amazon.com/single-sign-on/faqs)


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/commandLineInterface.md
================================================
# Command Line Interface


## Configuration AWS CLI

### Using an HTTP proxy

[Using an HTTP proxy](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-proxy.html)

- To access AWS through proxy servers, you can configure the HTTP_PROXY and HTTPS_PROXY environment variables with either the DNS domain names or IP addresses and port numbers that your proxy servers use.

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/config.md
================================================
# Config

[What Is AWS Config?](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)

- AWS Config provides a detailed view of the configuration of AWS resources in your AWS account. This includes how the resources are related to one another and how they were configured in the past so that you can see how the configurations and relationships change over time

[Cheat Sheet - AWS Config](https://tutorialsdojo.com/aws-config)

- AWS Config provides a detailed view of the configuration of AWS resources in your AWS account.
- This includes how the resources are related to one another and how they were configured in the past so that you can see how the configurations and relationships change over time.
- An AWS resource is an entity you can work with in AWS, such as an Amazon Elastic Compute Cloud (EC2) instance, an Amazon Elastic Block Store (EBS) volume, a security group, or an Amazon Virtual Private Cloud (VPC). 

With AWS Config, you can do the following:

- Evaluate your AWS resource configurations for desired settings.
- Get a snapshot of the current configurations of the supported resources that are associated with your AWS account.
- Retrieve configurations of one or more resources that exist in your account.
- Retrieve historical configurations of one or more resources.
- Receive a notification whenever a resource is created, modified, or deleted.
- View relationships between resources. For example, you might want to find all resources that use a particular security group.

[AWS Config](https://aws.amazon.com/config/)

- AWS Config is a service that enables you to assess, audit, and evaluate the configurations of your AWS resources.
- Config continuously monitors and records your AWS resource configurations and allows you to automate the evaluation of recorded configurations against desired configurations. 
- With Config, you can review changes in configurations and relationships between AWS resources, dive into detailed resource configuration histories, and determine your overall compliance against the configurations specified in your internal guidelines.

## AWS Config Managed Rules

[AWS Config Managed Rules](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html)

- AWS Config provides AWS managed rules, which are predefined, customizable rules that AWS Config uses to evaluate whether your AWS resources comply with common best practices.
- For example, you could use a managed rule to quickly start assessing whether your Amazon Elastic Block Store (Amazon EBS) volumes are encrypted or whether specific tags are applied to your resources
- You can set up and activate these rules without writing the code to create an AWS Lambda function, which is required if you want to create custom rules.
- The AWS Config console guides you through the process of configuring and activating a managed rule.

The evaluation triggers are defined as part of the rule, and they can include the following types:

- Configuration changes
    - AWS Config triggers the evaluation when any resource that matches the rule's scope changes in configuration. The evaluation runs after AWS Config sends a configuration item change notification.
- Periodic
    - AWS Config runs evaluations for the rule at a frequency that you choose (for example, every 24 hours).


### Managed Rules

[List of AWS Config Managed Rules](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html)

- [approved-amis-by-id](https://docs.aws.amazon.com/config/latest/developerguide/approved-amis-by-id.html)
  - Checks if running instances are using specified AMIs. Specify a list of approved AMI IDs. Running instances with AMIs that are not on this list are NON_COMPLIANT.


---







### Viewing Compliance History Timeline for Resources

[Viewing Compliance History Timeline for Resources](https://docs.aws.amazon.com/config/latest/developerguide/view-compliance-history.html)

- AWS Config supports storing compliance state changes of resources as evaluated by AWS Config Rules. The resource compliance history is presented in the form of a timeline. The timeline captures changes as ConfigurationItems over a period of time for a specific resource.

### AWS Config Rules

#### Specifying Triggers

[Specifying Triggers for AWS Config Rules](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config-rules.html)

- When you add a rule to your account, you can specify when you want AWS Config to run the rule; this is called a trigger. AWS Config evaluates your resource configurations against the rule when the trigger occurs.
- There are two types of triggers:
  - Configuration changes
  - Periodic

#### Managing Rules

##### restricted-ssh

[restricted-ssh](https://docs.aws.amazon.com/config/latest/developerguide/restricted-ssh.html)

- Checks if the incoming SSH traffic for the security groups is accessible. The rule is COMPLIANT when IP addresses of the incoming SSH traffic in the security groups are restricted (CIDR other than 0.0.0.0/0). This rule applies only to IPv4.

#### Remediating Noncompliant AWS Resources by AWS Config Rules

[Remediating Noncompliant AWS Resources by AWS Config Rules](https://docs.aws.amazon.com/config/latest/developerguide/remediation.html)

- AWS Config allows you to remediate noncompliant resources that are evaluated by AWS Config Rules. AWS Config applies remediation using AWS Systems Manager Automation documents. These documents define the actions to be performed on noncompliant AWS resources evaluated by AWS Config Rules.



================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/connect.md
================================================
# Connect


[Amazon Connect](https://aws.amazon.com/connect)

- Provide superior customer service at a lower cost with an easy-to-use omnichannel cloud contact center


## Blogs

[Easily set up interactive messages for your Amazon Connect chatbot](https://aws.amazon.com/blogs/contact-center/easily-set-up-interactive-messages-for-your-amazon-connect-chatbot)

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/dataMigrationService.md
================================================
# Data Migration Service

[AWS Data Migration Service](https://aws.amazon.com/dms)


[Cheatsheet - AWS Data Migration Service](https://tutorialsdojo.com/aws-database-migration-service)

- AWS Database Migration Service (AWS DMS) helps you migrate databases to AWS quickly and securely. 
- The source database remains fully operational during the migration, minimizing downtime to applications that rely on the database. 
- The AWS Database Migration Service can migrate your data to and from the most widely used commercial and open-source databases.
- AWS Database Migration Service supports homogeneous migrations such as Oracle to Oracle, as well as heterogeneous migrations between different database platforms, such as Oracle or Microsoft SQL Server to Amazon Aurora


## How AWS Database Migration Service works

[How AWS Database Migration Service works](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.html)

- AWS Database Migration Service (AWS DMS) is a web service that you can use to migrate data from a source data store to a target data store. 
- These two data stores are called endpoints. 
- You can migrate between source and target endpoints that use the same database engine, such as from an Oracle database to an Oracle database. 
- You can also migrate between source and target endpoints that use different database engines, such as from an Oracle database to a PostgreSQL database. 
- The only requirement to use AWS DMS is that one of your endpoints must be on an AWS service.

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/developerToolsConsole.md
================================================
### DeveloperToolsConsole

[Security for features of the Developer Tools console](https://docs.aws.amazon.com/dtconsole/latest/userguide/security.html#security-notifications)

- You can choose to limit the details included in notifications to only what is included in an event. This is referred to as the Basic detail type. These events contain exactly the same information as is sent to Amazon EventBridge and Amazon CloudWatch Events.

[Create a notification rule for a repository](https://docs.aws.amazon.com/dtconsole/latest/userguide/getting-started-repository.html)

- You can create notification rules to send notifications about repository events that are important to you.


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/directConnect.md
================================================
# Direct Connect

[Cheat Sheet - Direct Connect](https://tutorialsdojo.com/aws-direct-connect)

[AWS Whitepapaer - AWS Direct Connect](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/aws-direct-connect.html)

[How can I configure VPN as a backup for my AWS Direct Connect connection?](https://aws.amazon.com/premiumsupport/knowledge-center/configure-vpn-backup-dx)

- AWS Direct Connect makes it easy to establish a dedicated connection from an on-premises network to one or more VPCs in the same region

### Working with Direct Connect gateways

[Working with Direct Connect gateways](https://docs.aws.amazon.com/directconnect/latest/UserGuide/direct-connect-gateways.html)


## Blogs


[Which type of virtual interface should I use to connect different resources in AWS?](https://aws.amazon.com/premiumsupport/knowledge-center/public-private-interface-dx)

- AWS Direct Connect (DX) provides three types of virtual interfaces: public, private, and transit. How do I determine which type I should use to connect different resources (public or private) in AWS?

  - To connect to AWS resources that are reachable by a public IP address (such as an Amazon Simple Storage Service bucket) or AWS public endpoints, use a public virtual interface
  - To connect to your resources hosted in an Amazon Virtual Private Cloud (Amazon VPC) using their private IP addresses, use a private virtual interface. 
  - To connect to your resources hosted in an Amazon VPC (using their private IP addresses) through a transit gateway, use a transit virtual interface


  [New – AWS Direct Connect Gateway – Inter-Region VPC Access](https://aws.amazon.com/blogs/aws/new-aws-direct-connect-gateway-inter-region-vpc-access/)



================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/dynamodb.md
================================================
> Revision Count: 0

# Dynamodb

[Cheatsheet - Dynamodb](https://tutorialsdojo.com/amazon-dynamodb)

- fast
- highly scalable
- highly available, 
- cost-effective 
- non-relational database service



[Introduction](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)

What Is Amazon DynamoDB?

Amazon DynamoDB is a fully managed NoSQL database service that provides fast and predictable performance with seamless scalability. DynamoDB lets you offload the administrative burdens of operating and scaling a distributed database so that you don't have to worry about hardware provisioning, setup and configuration, replication, software patching, or cluster scaling. DynamoDB also offers encryption at rest, which eliminates the operational burden and complexity involved in protecting sensitive data

[Best Practices for Storing Large Items and Attributes](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-use-s3-too.html)

- Amazon DynamoDB currently limits the size of each item that you store in a table (see Service, Account, and Table Quotas in Amazon DynamoDB). If your application needs to store more data in an item than the DynamoDB size limit permits, you can try compressing one or more large attributes or breaking the item into multiple items (efficiently indexed by sort keys). You can also store the item as an object in Amazon Simple Storage Service (Amazon S3) and store the Amazon S3 object identifier in your DynamoDB item.


**High Availability and Durability**

- DynamoDB automatically spreads the data and traffic for your tables over a sufficient number of servers to handle your throughput and storage requirements, while maintaining consistent and fast performance. All of your data is stored on solid-state disks (SSDs) and is automatically replicated across multiple Availability Zones in an AWS Region, providing built-in high availability and data durability
- You can use global tables to keep DynamoDB tables in sync across AWS Regions



[Dynamodb best practices](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices.html)


### Global Tables


[Global Tables: Multi-Region Replication with DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html)

- Amazon DynamoDB global tables provide a fully managed solution for deploying a multiregion, multi-active database, without having to build and maintain your own replication solution.
- With global tables you can specify the AWS Regions where you want the table to be available.
- DynamoDB performs all of the necessary tasks to create identical tables in these Regions and propagate ongoing data changes to all of them.

[Amazon DynamoDB global tables](https://aws.amazon.com/dynamodb/global-tables/)

## Security

### Identity and Access Management in Amazon DynamoDB

[Identity and Access Management in Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/authentication-and-access-control.html)

- Access to Amazon DynamoDB requires credentials. Those credentials must have permissions to access AWS resources, such as an Amazon DynamoDB table or an Amazon Elastic Compute Cloud (Amazon EC2) instance.
  - Authentication
  - Access Control


## Error Handling with DynamoDB

[Error Handling with DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.Errors.html)




## Note

- RDS MySQL is not as scalable and cost-effective as DynamoDB.
- It is not recommended to store authorization tokens permanently on DynamoDB tables. These tokens should be generated upon user authentication and then temporarily saved on a DynamoDB for a fixed session length.


## Blogs

[New – Auto Scaling for Amazon DynamoDB](https://aws.amazon.com/blogs/aws/new-auto-scaling-for-amazon-dynamodb)

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/ec2.md
================================================
# EC2

[Cheat Sheet - EBS](https://tutorialsdojo.com/amazon-ebs)

[EC2](https://tutorialsdojo.com/amazon-elastic-compute-cloud-amazon-ec2)


[dedicated-hosts](https://aws.amazon.com/ec2/dedicated-hosts)

- Network Load Balancers do not use security groups.

[iam-roles-for-amazon-ec2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)

- The AWS SDKs assume the IAM roles attached in the instances and get temporary credentials by interacting with the AWS STS service.

[security-group-load-balancer](https://aws.amazon.com/premiumsupport/knowledge-center/security-group-load-balancer/)

[How do I stop and start Amazon EC2 instances at regular intervals using Lambda?](https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch)

To stop and start EC2 instances at regular intervals using Lambda, do the following:
- Create a custom AWS Identity and Access Management (IAM) policy and execution role for your Lambda function. 
- Create Lambda functions that stop and start your EC2 instances. 
- Test your Lambda functions. 
- Create CloudWatch Events rules that trigger your function on a schedule.

This example setup is a simple solution. For a more robust solution, use the AWS Instance Scheduler


## EC2 Spot

### Getting Started with Amazon EC2 Spot Instances

[Getting Started with Amazon EC2 Spot Instances](https://aws.amazon.com/ec2/spot/getting-started/)


#### No Spot capacity available

[Why am I receiving a "no Spot capacity available" error when trying to launch an Amazon EC2 Spot Instance?](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-spot-instance-insufficient-capacity/)

- Be flexible about which instance types you request and which Availability Zones you deploy your workload in


[Spot Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html)


### Elastic network interfaces

[Elastic network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)

- An elastic network interface is a logical networking component in a VPC that represents a virtual network card.

### Multiple IP addresses

[Multiple IP addresses](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/MultipleIP.html)

- You can specify multiple private IPv4 and IPv6 addresses for your instances. 
- The number of network interfaces and private IPv4 and IPv6 addresses that you can specify for an instance depends on the instance type.

## Fleets

### Example 5: Launch a Spot Fleet using the diversified allocation strategy

[Example 5: Launch a Spot Fleet using the diversified allocation strategy](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-examples.html#fleet-config5)

- A best practice to increase the chance that a spot request can be fulfilled by EC2 capacity in the event of an outage in one of the Availability Zones is to diversify across zones.
- For this scenario, include each Availability Zone available to you in the launch specification. And, instead of using the same subnet each time, use three unique subnets (each mapping to a different zone).

### Dedicated Instances

[Dedicated Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)

- Dedicated Instances are Amazon EC2 instances that run in a virtual private cloud (VPC) on hardware that's dedicated to a single customer. 

```bash
Tenancy type to be dedicated host.
```

## Storage

### Amazon EBS volume types

[Amazon EBS volume types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html)

- Solid state drives (SSD) — Optimized for transactional workloads involving frequent read/write operations with small I/O size, where the dominant performance attribute is IOPS.
- Hard disk drives (HDD) — Optimized for large streaming workloads where the dominant performance attribute is throughput.
- Previous generation — Hard disk drives that can be used for workloads with small datasets where data is accessed infrequently and performance is not of primary importance

There are several factors that can affect the performance of EBS volumes, such as instance configuration, I/O characteristics, and workload demand


[Comparision of varios block storage types](https://aws.amazon.com/ebs/features)


## Instances

### Reserved Instances

[Reserved Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-reserved-instances.html)

- Reserved Instances provide you with significant savings on your Amazon EC2 costs compared to On-Demand Instance pricing. 
- Reserved Instances are not physical instances, but rather a billing discount applied to the use of On-Demand Instances in your account.


## Security

#### Supported resource-level permissions for Amazon EC2 API actions

[Supported resource-level permissions for Amazon EC2 API actions](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policy-structure.html#ec2-supported-iam-actions-resources)

- Resource-level permissions refers to the ability to specify which resources users are allowed to perform actions on. 
- Amazon EC2 has partial support for resource-level permissions. 
- This means that for certain Amazon EC2 actions, you can control when users are allowed to use those actions based on conditions that have to be fulfilled, or specific resources that users are allowed to use. 
- For example, you can grant users permissions to launch instances, but only of a specific type, and only using a specific AMI.


## VM Import/Export

[VM Import/Export](https://aws.amazon.com/ec2/vm-import)

- VM Import/Export enables you to easily import virtual machine images from your existing environment to Amazon EC2 instances and export them back to your on-premises environment


## Dynamic Scaling

### Scaling based on Amazon SQS

[Scaling based on Amazon SQS](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-using-sqs-queue.html)


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/ec2AutoScaling.md
================================================
# EC2 Autoscaling


[Scheduled scaling for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/schedule_time.html)

- cooldown timer does not influence the scheduled activity

[Cooldown](https://docs.aws.amazon.com/autoscaling/ec2/userguide/Cooldown.html)

- even if the cooldown timer is running, the scheduled action takes high priority and executes immediately

[Amazon EC2 Auto Scaling lifecycle hooks](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)

- When a scale-out event occurs, your newly launched instance completes its startup sequence and transitions to a wait state. 
- While the instance is in a wait state, it runs a script to download and install the needed software packages for your application, 
  making sure that your instance is fully ready before it starts receiving traffic. 
- When the script is finished installing software, it sends the complete-lifecycle-action command to continue.

[AutoScalingReplacingUpdate policy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html)

To specify how AWS CloudFormation handles replacement updates for an Auto Scaling group, use the AutoScalingReplacingUpdate policy. This policy enables you to specify whether AWS CloudFormation replaces an Auto Scaling group with a new one or replaces only the instances in the Auto Scaling group.

### Supports Following Deployment Methods

- AllAtOnce
- HalfAtATime
- OneAtATime. 


But it does not support the canary type.

### Auto Scaling groups with multiple instance types and purchase options

- You can launch and automatically scale a fleet of On-Demand Instances and Spot Instances within a single Auto Scaling group. In addition to receiving discounts for using Spot Instances, you can use Reserved Instances or a Savings Plan to receive discounted rates of the regular On-Demand Instance pricing.




## Autoscaling Groups

[What is Amazon EC2 Auto Scaling?](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html)

- Amazon EC2 Auto Scaling helps you ensure that you have the correct number of Amazon EC2 instances available to handle the load for your application. 
- You create collections of EC2 instances, called Auto Scaling groups
- You can specify the minimum number of instances in each Auto Scaling group, and Amazon EC2 Auto Scaling ensures that your group never goes below this size. 
- You can specify the maximum number of instances in each Auto Scaling group, and Amazon EC2 Auto Scaling ensures that your group never goes above this size.


### Elastic Load Balancing and Amazon EC2 Auto Scaling

[Elastic Load Balancing and Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-load-balancer.html)

- Elastic Load Balancing automatically distributes your incoming application traffic across all the EC2 instances that you are running. 
- Elastic Load Balancing helps to manage incoming requests by optimally routing traffic so that no one instance is overwhelmed.
- To use Elastic Load Balancing with your Auto Scaling group, attach the load balancer to your Auto Scaling group.
- This registers the group with the load balancer, which acts as a single point of contact for all incoming web traffic to your Auto Scaling group.

## Elastic Load Balancing

### Attaching a load balancer to your Auto Scaling group

[Attaching a load balancer to your Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/attach-load-balancer-asg.html)

- Amazon EC2 Auto Scaling integrates with Elastic Load Balancing to help you to insert an Application Load Balancer, Network Load Balancer, Classic Load Balancer, or Gateway Load Balancer in front of your Auto Scaling group.
- When you attach an Application Load Balancer, Network Load Balancer, or Gateway Load Balancer, you attach a target group. 
- Amazon EC2 Auto Scaling adds instances to the attached target group when they are launched. 
- You can attach one or multiple target groups, and configure health checks on a per target group basis.

### Scaling based on Amazon SQS

[Scaling based on Amazon SQS](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-using-sqs-queue.html)

- There are some scenarios where you might think about scaling in response to activity in an Amazon SQS queue. 
- For example, suppose that you have a web app that lets users upload images and use them online.

### Temporarily removing instances from your Auto Scaling group

[Temporarily removing instances from your Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-enter-exit-standby.html)

- You can put an instance that is in the InService state into the Standby state, update or troubleshoot the instance, and then return the instance to service. Instances that are on standby are still part of the Auto Scaling group, but they do not actively handle load balancer traffic.
- Amazon EC2 Auto Scaling does not perform health checks on instances that are in a standby state.

```bash
aws autoscaling enter-standby --instance-ids i-05b4f7d5be44822a6 \
  --auto-scaling-group-name my-asg --should-decrement-desired-capacity
```


### Monitoring

#### Health checks for Auto Scaling instances

[Health checks for Auto Scaling instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/healthcheck.html)

The health status of an Auto Scaling instance is either healthy or unhealthy. All instances in your Auto Scaling group start in the healthy state. Instances are assumed to be healthy unless Amazon EC2 Auto Scaling receives notification that they are unhealthy. This notification can come from one or more of the following sources: Amazon EC2, Elastic Load Balancing (ELB), or a custom health check.

**Instance health status**

Amazon EC2 Auto Scaling can determine the health status of an instance using one or more of the following:

- Status checks provided by Amazon EC2 to identify hardware and software issues that may impair an instance. The default health checks for an Auto Scaling group are EC2 status checks only.
- Health checks provided by Elastic Load Balancing (ELB). These health checks are disabled by default but can be enabled.
- Your custom health checks.

Using custom health checks

```bash
aws autoscaling set-instance-health --instance-id i-123abc45d --health-status Unhealthy
```

Health check grace period

- By default, the health check grace period is 300 seconds when you create an Auto Scaling group from the AWS Management Console. Its default value is 0 seconds when you create an Auto Scaling group using the AWS CLI or an SDK.
- If you add a lifecycle hook, the grace period does not start until the lifecycle hook actions are completed and the instance enters the InService state.




================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/ecs.md
================================================
# ECS

[Cheetsheet - ECS](https://tutorialsdojo.com/amazon-elastic-container-service-amazon-ecs/)

[CheatSheet - Elastic Container Service (ECS) vs Lambda](https://tutorialsdojo.com/ec2-container-service-ecs-vs-lambda)

[CheatSheet - AWS Fargate](https://tutorialsdojo.com/aws-fargate)

[What is Amazon Elastic Container Service?](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)

- highly scalable, fast container management service that makes it easy to run, stop, and manage containers on a cluster
- Your containers are defined in a task definition that you use to run individual tasks or tasks within a service
- In this context, a service is a configuration that enables you to run and maintain a specified number of tasks simultaneously in a cluster. 
- You can run your tasks and services on a serverless infrastructure that is managed by AWS Fargate. Alternatively, for more control over your infrastructure, you can run your tasks and services on a cluster of Amazon EC2 instances that you manage.

[What is ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)

[Target tracking scaling policies](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-autoscaling-targettracking.html)

[How do I troubleshoot Amazon ECS tasks that take a long time to stop when the container instance is set to DRAINING?](https://aws.amazon.com/premiumsupport/knowledge-center/ecs-tasks-stop-delayed-draining/)

[service_definition_parameters](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html)

- If a service is using the rolling update (ECS) deployment type, the minimumHealthyPercent represents a lower limit on the number of your service's tasks that must remain in the RUNNING state during a deployment
- Minimum healthy percent represents a lower limit on the tasks. When the parameter is set to 100, the number of the service's running tasks would be equal or
  more than the desired count of tasks during a rolling update.

[Blue/Green deployment with CodeDeploy](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-bluegreen.html)

- You must configure the service to use either an Application Load Balancer or Network Load Balancer. Classic Load Balancers aren't supported

> The Fargate launch type is unnecessary for the blue/green deployment type. The EC2 launch type is also supported.

- When you initially create a CodeDeploy application and deployment group, you must specify the following:
  You must define two target groups for the load balancer

## Using Spot Instances

- A Spot Instance is an unused Amazon EC2 instance that is available for less than the On-Demand price.
- The hourly price for a Spot Instance is called a Spot price


### Spot Instance Draining

- Amazon EC2 terminates, stops, or hibernates your Spot Instance when the Spot price exceeds the maximum price for your request or capacity is no longer available
- Amazon EC2 provides a Spot Instance interruption notice, which gives the instance a two-minute warning before it is interrupted.
- If Amazon ECS Spot Instance draining is enabled on the instance, ECS receives the Spot Instance interruption notice and places the instance in DRAINING status.
- When a container instance is set to DRAINING, Amazon ECS prevents new tasks from being scheduled for placement on the container instance. 
- Service tasks on the draining container instance that are in the PENDING state are stopped immediately
- If there are container instances in the cluster that are available, replacement service tasks are started on them.

```bash
# To enable Spot Instance draining for an existing container instance
# Edit the /etc/ecs/ecs.config file and add the following:

ECS_ENABLE_SPOT_INSTANCE_DRAINING=true
```


[Four Steps to Run ECS Clusters on EC2 Spot Instances](https://aws.amazon.com/ec2/spot/containers-for-less/get-started/)


## Task Definations

Amazon ECS enables you to inject sensitive data into your containers by storing your sensitive data in either AWS Secrets Manager secrets or AWS Systems Manager Parameter Store parameters and then referencing them in your container definition.

- Store the database credentials using the AWS Secrets Manager
- encrypt them using AWS KMS
- Create an IAM Role for your Amazon ECS task execution role
  - and reference it with your task definition which allows access to both KMS and AWS Secrets Manager
- Within your container definition, specify secrets with the name of the environment variable to set in the container and the full ARN of the Secrets Manager secret which contains the sensitive data, to present to the container.
> Systems Manager Parameter Store service doesn't provide dedicated storage with lifecycle management and key rotation, unlike Secrets Manager.


### Amazon ECS task networking

[Amazon ECS task networking](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html)

- The networking behavior of Amazon ECS tasks hosted on Amazon EC2 instances is dependent on the network mode defined in the task definition. The following are the available network modes. Amazon ECS recommends using the awsvpc network mode unless you have a specific need to use a different network mode.
  - awsvpc — The task is allocated its own elastic network interface (ENI) and a primary private IPv4 address. This gives the task the same networking properties as Amazon EC2 instances.
  - bridge — The task utilizes Docker's built-in virtual network which runs inside each Amazon EC2 instance hosting the task.
  - host — The task bypasses Docker's built-in virtual network and maps container ports directly to the ENI of the Amazon EC2 instance hosting the task. As a result, you can't run multiple instantiations of the same task on a single Amazon EC2 instance when port mappings are used.
  - none — The task has no external network connectivity.

- In order for you to use security groups and network monitoring tools at a more granular level within your ECS tasks, you have to use the awsvpc network mode

## Troubleshooting

### CannotPullContainer task errors

[CannotPullContainer task errors](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_cannot_pull_image.html)

[How can I resolve the Amazon ECR error "CannotPullContainerError: API error" in Amazon ECS?
](https://aws.amazon.com/premiumsupport/knowledge-center/ecs-pull-container-api-error-ecr)

- One reason : because a route to the internet doesn't exist:


## Amazon ECS on AWS Fargate

[Amazon ECS on AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)

- AWS Fargate is a technology that you can use with Amazon ECS to run containers without having to manage servers or clusters of Amazon EC2 instances. 
- With AWS Fargate, you no longer have to provision, configure, or scale clusters of virtual machines to run containers

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/elasticBeanStalk.md
================================================
# ElasticBeanStalk


[using-features.rolling-version-deploy](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html)

- AWS Elastic Beanstalk provides several options for how deployments are processed, including deployment policies (All at once, Rolling, Rolling with additional batch, Immutable, and Traffic splitting)
- If you use blue/green deployment stratergy then two environments are required.

[Blue/Green deployments with Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html)


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/elasticCache.md
================================================
# Elastic Cache

[Cheat Sheet - ElasticCache](https://tutorialsdojo.com/amazon-elasticache)


## What is Amazon ElastiCache for Memcached?

[What is Amazon ElastiCache for Memcached?](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html)

- Amazon ElastiCache is a web service that makes it easy to set up, manage, and scale a distributed in-memory data store or cache environment in the cloud. 
- It provides a high-performance, scalable, and cost-effective caching solution. At the same time, it helps remove the complexity associated with deploying and managing a distributed cache environment.


[Elastic Cache - How it works](https://aws.amazon.com/elasticache/)

- fully managed, in-memory caching service supporting flexible, real-time use cases.
- You can use ElastiCache for caching, which accelerates application and database performance, or as a primary data store for use cases that don't require durability like session stores, gaming leaderboards, streaming, and analytics.
- ElastiCache is compatible with Redis and Memcached. 

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/elasticFileSystem.md
================================================
# Elastic File System

[Cheat Sheet - AWS Elastic File System](https://tutorialsdojo.com/amazon-efs)

[What is Amazon Elastic File System?](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)

- Amazon Elastic File System (Amazon EFS) provides a simple, serverless, set-and-forget elastic file system for use with AWS Cloud services and on-premises resources
- It is built to scale on demand to petabytes without disrupting applications, growing and shrinking automatically as you add and remove files, eliminating the need to provision and manage capacity to accommodate growth
- Amazon EFS supports the Network File System version 4 (NFSv4.1 and NFSv4.0) protocol, so the applications and tools that you use today work seamlessly with Amazon EFS. 
- Multiple compute instances, including Amazon EC2, Amazon ECS, and AWS Lambda, can access an Amazon EFS file system at the same time, providing a common data source for workloads and applications running on more than one compute instance or server.

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/elasticLoadBalancing.md
================================================
# Elastic Load Balancing

[Cheat Sheet - ALB vs NLB vs CLB](https://tutorialsdojo.com/application-load-balancer-vs-network-load-balancer-vs-classic-load-balancer)

### Health checks for your target groups

[Health checks for your target groups](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html)

- Your Application Load Balancer periodically sends requests to its registered targets to test their status. These tests are called health checks.

> If a target group contains only unhealthy registered targets, the load balancer routes requests to all those targets, regardless of their health status.

## Network LoadBalancer

[Troubleshoot your Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-troubleshooting.html)


### Target security groups

[Target security groups](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-register-targets.html#target-security-groups)

- When you register EC2 instances as targets, you must ensure that the security groups for these instances allow traffic on both the listener port and the health check port.


[Deregistration delay](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#deregistration-delay)



## Notes

-  Network Load Balancers don't have associated security groups.


## Blogs

- [How do I attach a security group to my Elastic Load Balancer?](https://aws.amazon.com/premiumsupport/knowledge-center/security-group-load-balancer)

- [AWS Elastic Load Balancing: Support for SSL Termination](https://aws.amazon.com/blogs/aws/elastic-load-balancer-support-for-ssl-termination)



================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/eventBridge.md
================================================
# Event Bridge

### What is event bridge
[What Is Amazon EventBridge?](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)
[Video - Intro to Event Bridge](https://youtu.be/TXh5oU_yo9M)

Amazon EventBridge is a serverless event bus service that you can use to connect your applications with data from a variety of sources. EventBridge delivers a stream of real-time data from your applications, software as a service (SaaS) applications, and AWS services to targets such as AWS Lambda functions, HTTP invocation endpoints using API destinations, or event buses in other AWS accounts.

#### Getting started with Amazon EventBridge

[Getting started with Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html)

To create a rule for events, you specify an action to take when EventBridge receives an event that matches the event pattern in the rule. When an event matches, EventBridge sends the event to the specified target and triggers the action defined in the rule.

#### Event buses
[Amazon EventBridge event buses](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-bus.html)

An event bus is a pipeline that receives events. Rules associated with the event bus evaluate events as they arrive. Each rule checks whether an event matches the rule's criteria. You associate a rule with a specific event bus, so the rule only applies to events received by that event bus.

[Video - The following video describes what event buses are and explains some of the basics of them](https://youtu.be/LkEBBgWRKkI)

[The following video covers the different event buses and when to use them](https://youtu.be/cB5-GTSJNqc)

#### Receiving events from a SaaS partner
[Receiving events from a SaaS partner with Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-saas.html)

[Video - The following video covers SaaS integrations with EventBridge](https://youtu.be/zxFrM6z8Wdg)

#### Targets

[Sending and receiving Amazon EventBridge events between AWS accounts](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-cross-account.html)

You can configure EventBridge to send and receive events between AWS accounts. When you configure EventBridge to send or receive events between accounts, you can specify which AWS accounts can send events to or receive events from the event bus in your account. 

[Video - The following video covers routing events between accounts](https://youtu.be/pX_xIW_EuCE)


#### Decoupling larger applications with Amazon EventBridge
[Decoupling larger applications with Amazon EventBridge](https://aws.amazon.com/blogs/compute/decoupling-larger-applications-with-amazon-eventbridge/)

- you can use an event-based architecture to decouple services and functional areas of applications.


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/guardDuty.md
================================================
# AWS GuardDuty


[What is Amazon GuardDuty?](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html)

- Amazon GuardDuty is a continuous security monitoring service that analyzes and processes the following Data sources: VPC Flow Logs, AWS CloudTrail management event logs, CloudTrail S3 data event logs, and DNS logs. It uses threat intelligence feeds, such as lists of malicious IP addresses and domains, and machine learning to identify unexpected and potentially unauthorized and malicious activity within your AWS environment. This can include issues like escalations of privileges, uses of exposed credentials, or communication with malicious IP addresses, or domains. For example, GuardDuty can detect compromised EC2 instances serving malware or mining bitcoin.

[How to get started with security response automation on AWS](https://aws.amazon.com/blogs/security/how-get-started-security-response-automation-aws/)


### Finding Types

#### EC2 finding types

- Recon:EC2/Portscan
  - Data source: VPC Flow Logs : This finding informs you that the listed EC2 instance in your AWS environment is engaged in a possible port scan attack because it is trying to connect to multiple ports over a short period of time. 



================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/iam.md
================================================
> Revision Count: 1


# Identify And Access Management

[Cheat Sheet - Identify And Access Management](https://tutorialsdojo.com/aws-identity-and-access-management-iam)

[Cheat Sheet - SCP vs IAM](https://tutorialsdojo.com/service-control-policies-scp-vs-iam-policies)

[Cheat Sheet - security-identity-services](https://tutorialsdojo.com/aws-cheat-sheets-security-identity-services)

### Identity providers and federation

[Enabling SAML 2.0 federated users to access the AWS Management Console](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-saml.html)

- You can use a role to configure your SAML 2.0-compliant identity provider (IdP) and AWS to permit your federated users to access the AWS Management Console. 
- The role grants the user permissions to carry out tasks in the console.

### Enabling custom identity broker access to the AWS console

[Enabling custom identity broker access to the AWS console](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html)

- You can write and run code to create a URL that lets users who sign in to your organization's network securely access the AWS Management Console. 
- The URL includes a sign-in token that you get from AWS and that authenticates the user to AWS.

## Logging IAM and AWS STS API calls with AWS CloudTrail

[Logging IAM and AWS STS API calls with AWS CloudTrail](https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html)

- IAM and AWS STS are integrated with AWS CloudTrail, a service that provides a record of actions taken by an IAM user or role.
- CloudTrail captures all API calls for IAM and AWS STS as events, including calls from the console and from API calls. 
- If you create a trail, you can enable continuous delivery of CloudTrail events to an Amazon S3 bucket. 
- If you don't configure a trail, you can still view the most recent events in the CloudTrail console in Event history



## How IAM roles differ from resource-based policies

[How IAM roles differ from resource-based policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_compare-resource-policies.html)

- For some AWS services, you can grant cross-account access to your resources.
- To do this, you attach a policy directly to the resource that you want to share, instead of using a role as a proxy.
- The resource that you want to share must support resource-based policies. 
-  Unlike an identity-based policy, a resource-based policy specifies who (which principal) can access that resource.


### Temporary security credentials in IAM

[Temporary security credentials in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)

- You can use the AWS Security Token Service (AWS STS) to create and provide trusted users with temporary security credentials that can control access to your AWS resources.
  - Temporary security credentials are short-term, as the name implies. They can be configured to last for anywhere from a few minutes to several hours
  - Temporary security credentials are not stored with the user but are generated dynamically and provided to the user when requested.


## Actions

[UploadServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UploadServerCertificate.html)

- Uploads a server certificate entity for the AWS account. The server certificate entity includes a public key certificate, a private key, and an optional certificate chain, which should all be PEM-encoded.

## Using an IAM role to grant permissions to applications running on Amazon EC2 instances

[Using an IAM role to grant permissions to applications running on Amazon EC2 instances](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html#roles-usingrole-ec2instance-roles)
- The administrator uses IAM to create the Get-pics role. 
- In the role's trust policy, the administrator specifies that only EC2 instances can assume the role
- In the role's permission policy, the administrator specifies read-only permissions for the photos bucket.
- A developer launches an EC2 instance and assigns the Get-pics role to that instance.
- When the application runs, it obtains temporary security credentials from Amazon EC2 instance metadata,
- Using the retrieved temporary credentials, the application accesses the photo bucket. 
- Because of the policy attached to the Get-pics role, the application has read-only permissions.

## Tutorials

### IAM tutorial: Delegate access across AWS accounts using IAM roles

[IAM tutorial: Delegate access across AWS accounts using IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)

The above tutorial teaches you how to use a role to delegate access to resources in different AWS accounts that you own called Production and Development

- Step 1: Create a role in the Production Account
  - First, you use the AWS Management Console to establish trust between the Production account (ID number 999999999999) and the Development account (ID number 111111111111). 
  - You start by creating an IAM role named UpdateApp. 
  - When you create the role, you define the Development account as a trusted entity and specify a permissions policy that allows trusted users to update the productionapp bucket.
  

### Providing access to an IAM user in another AWS account that you own

[Providing access to an IAM user in another AWS account that you own](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)

- You can grant your IAM users permission to switch to roles within your AWS account or to roles defined in other AWS accounts that you own.


## Controlling access to AWS resources using tags

[Controlling access to AWS resources using tags](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)

- You can use tags to control access to your AWS resources that support tagging, including IAM resources. 
- Imagine that you have Amazon EC2 instances that are critical to your organization. 
- Instead of directly granting your users permission to terminate the instances, you can create a role with those privileges.

- Example scenario using separate development and production accounts
  - In the production account, an administrator uses IAM to create the UpdateApp role in that account. 
    - In the role, the administrator defines a trust policy that specifies the development account as a Principal, meaning that authorized users from the development account can use the UpdateApp role. 
    - The administrator also defines a permissions policy for the role that specifies the read and write permissions to the Amazon S3 bucket named productionapp.
  - In the development account, an administrator grants members of the Developers group permission to switch to the role. 
    - This is done by granting the Developers group permission to call the AWS Security Token Service (AWS STS) AssumeRole API for the UpdateApp role.
  - The user requests switches to the role
  - AWS STS returns temporary credentials
  - The temporary credentials allow access to the AWS resource


## Using an IAM role to grant permissions to applications running on Amazon EC2 instances

### Using instance profiles

[Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)

- Use an instance profile to pass an IAM role to an EC2 instance.
- you can and should use an IAM role to manage temporary credentials for applications that run on an EC2 instance

## Identity federation in AWS

[Identity federation in AWS](https://aws.amazon.com/identity/federation)

- Identity federation is a system of trust between two parties for the purpose of authenticating users and conveying information needed to authorize their access to resources. 
- In this system, an identity provider (IdP) is responsible for user authentication, and a service provider (SP), such as a service or an application, controls access to resources.
- By administrative agreement and configuration, the SP trusts the IdP to authenticate users and relies on the information provided by the IdP about them. 
- After authenticating a user, the IdP sends the SP a message, called an assertion, containing the user's sign-in name and other attributes that the SP needs to establish a session with the user and to determine the scope of resource access that the SP should grant. 
 

## Identity providers and federation

- If you already manage user identities outside of AWS, you can use IAM identity providers instead of creating IAM users in your AWS account. 
- With an identity provider (IdP), you can manage your user identities outside of AWS and give these external user identities permissions to use AWS resources in your account


## Providing access to externally authenticated users (identity federation)

[Providing access to externally authenticated users (identity federation)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)

- Your users might already have identities outside of AWS, such as in your corporate directory. 
- If those users need to work with AWS resources (or work with applications that access those resources), then those users also need AWS security credentials. 
- You can use an IAM role to specify permissions for users whose identity is federated from your organization or a third-party identity provider (IdP).

### Federating users of a mobile or web-based app with Amazon Cognito

- If you create a mobile or web-based app that accesses AWS resources, the app needs security credentials in order to make programmatic requests to AWS. 
- For most mobile application scenarios, we recommend that you use Amazon Cognito.
- for more advanced scenarios, you can work directly with a third-party service like Login with Amazon, Facebook, Google, or any IdP that is compatible with OpenID Connect (OIDC).


### Federating users with SAML 2.0

- If your organization already uses an identity provider software package that supports SAML 2.0 (Security Assertion Markup Language 2.0), you can create trust between your organization as an identity provider (IdP) and AWS as the service provider.
- You can then use SAML to provide your users with federated single-sign on (SSO) to the AWS Management Console or federated access to call AWS API operations.

### Federating users by creating a custom identity broker application

- If your identity store is not compatible with SAML 2.0, then you can build a custom identity broker application to perform a similar function. 
- The broker application authenticates users, requests temporary credentials for users from AWS, and then provides them to the user to access AWS resources.



## Premium Support

[What's the difference between an AWS Organizations service control policy and an IAM policy?](https://console.aws.amazon.com/console/home?nc2=h_ct&src=header-signin&hashArgs=%23)

## Blog

[How to Establish Federated Access to Your AWS Resources by Using Active Directory User Attributes](https://aws.amazon.com/blogs/security/how-to-establish-federated-access-to-your-aws-resources-by-using-active-directory-user-attributes)








================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/inspector.md
================================================
# AWS Inspector

### Amazon Inspector rules packages and rules

#### Common vulnerabilities and exposures

[Common vulnerabilities and exposures](https://docs.aws.amazon.com/inspector/latest/userguide/inspector_cves.html)

- The rules in this package help verify whether the EC2 instances in your assessment targets are exposed to common vulnerabilities and exposures (CVEs). Attacks can exploit unpatched vulnerabilities to compromise the confidentiality, integrity, or availability of your service or data. The CVE system provides a reference method for publicly known information security vulnerabilities and exposures.


[Security best practices for Amazon Inspector](https://docs.aws.amazon.com/inspector/latest/userguide/inspector_security-best-practices.html)

- Use Amazon Inspector rules to help determine whether your systems are configured securely.



================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/kinesis.md
================================================
# Kinesis

[CheatSheet - Amazon Kinesis](https://tutorialsdojo.com/amazon-kinesis)

## Getting started with Amazon Kinesis Data Streams

[Getting started with Amazon Kinesis Data Streams
](https://aws.amazon.com/kinesis/data-streams/getting-started)

- Amazon Kinesis Data Streams is a massively scalable, highly durable data ingestion and processing service optimized for streaming data. 
- You can configure hundreds of thousands of data producers to continuously put data into a Kinesis data stream. 
- Data will be available within milliseconds to your Amazon Kinesis applications, and those applications will receive data records in the order they were generated.

## What Is Amazon Kinesis Data Streams?

[What Is Amazon Kinesis Data Streams?](https://docs.aws.amazon.com/streams/latest/dev/introduction.html)

- You can use Amazon Kinesis Data Streams to collect and process large streams of data records in real time.
- You can create data-processing applications, known as Kinesis Data Streams applications. A typical Kinesis Data Streams application reads data from a data stream as data records.
- You can send the processed records to dashboards, use them to generate alerts, dynamically change pricing and advertising strategies, or send data to a variety of other AWS services. 


### What Can I Do with Kinesis Data Streams?

[What Can I Do with Kinesis Data Streams?](https://docs.aws.amazon.com/streams/latest/dev/introduction.html)

- Accelerated log and data feed intake and processing
  - You can have producers push data directly into a stream. 
  - For example, push system and application logs and they are available for processing in seconds. 
  - This prevents the log data from being lost if the front end or application server fails


  ## Examples

  - [Capturing Web Page Scroll Progress with Amazon Kinesis](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/kinesis-examples-capturing-page-scrolling.html)

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/lambda.md
================================================
# Lambda

[Cheat Sheet - AWS Lambda](https://tutorialsdojo.com/aws-lambda)

[What is AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

- Lambda is a compute service that lets you run code without provisioning or managing servers. 
- Lambda runs your code on a high-availability compute infrastructure and performs all of the administration of the compute resources, including server and operating system maintenance, capacity provisioning and automatic scaling, code monitoring and logging. 
- With Lambda, you can run code for virtually any type of application or backend service. 
- All you need to do is supply your code in one of the languages that Lambda supports.


## Using AWS Lambda with CloudFront Lambda@Edge

[Using AWS Lambda with CloudFront Lambda@Edge](https://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html)

- Lambda@Edge lets you run Node.js and Python Lambda functions to customize content that CloudFront delivers, executing the functions in AWS locations closer to the viewer. 
- The functions run in response to CloudFront events, without provisioning or managing servers. You can use Lambda functions to change CloudFront requests and responses at the following points:
  - After CloudFront receives a request from a viewer (viewer request)
  - Before CloudFront forwards the request to the origin (origin request)
  - After CloudFront receives the response from the origin (origin response)
  - Before CloudFront forwards the response to the viewer (viewer respo


## AWS Lambda Pricing

[AWS Lambda Pricing](https://aws.amazon.com/lambda/pricing)

- Lambda counts a request each time it starts executing in response to an event notification trigger, such as from Amazon Simple Notification Service (SNS) or Amazon EventBridge, or an invoke call, such as from Amazon API Gateway, or via the AWS SDK, including test invokes from the AWS Console.
- Duration is calculated from the time your code begins executing until it returns or otherwise terminates, rounded up to the nearest 1 ms*. The price depends on the amount of memory you allocate to your function.

## Lambda function scaling

[Lambda function scaling](https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html#concurrent-execution-safety-limit)

- The first time you invoke your function, AWS Lambda creates an instance of the function and runs its handler method to process the event.
- When the function returns a response, it stays active and waits to process additional events.
- If you invoke the function again while the first event is being processed, Lambda initializes another instance, and the function processes the two events concurrently
- As more events come in, Lambda routes them to available instances and creates new instances as needed. 
- When the number of requests decreases, Lambda stops unused instances to free up scaling capacity for other functions.
- The default regional concurrency limit starts at 1,000

## Managing function

### Managing Lambda reserved concurrency

[Managing Lambda reserved concurrency](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html)

- Concurrency is the number of requests that your function is serving at any given time. 
- When your function is invoked, Lambda allocates an instance of it to process the event. 
- When the function code finishes running, it can handle another request. 
- If the function is invoked again while a request is still being processed, another instance is allocated, which increases the function's concurrency. 
- The total concurrency for all of the functions in your account is subject to a per-region quota.

There are two types of concurrency controls available:
- Reserved concurrency – Reserved concurrency guarantees the maximum number of concurrent instances for the function. When a function has reserved concurrency, no other function can use that concurrency. No charge for this
- Provisioned concurrency – Provisioned concurrency initializes a requested number of execution environments so that they are prepared to respond immediately to your function's invocations. Note that configuring provisioned concurrency incurs charges to your AWS account.

## Notes

- AWS Lambda is suited for creating serverless/stateless APIs and costs cheaper than AWS Fargate.

## Blogs

[How do I troubleshoot Lambda function throttling with "Rate exceeded" and 429 "TooManyRequestsException" errors?](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-troubleshoot-throttling)

- Lambda functions are sometimes throttled to protect your resources and downstream applications. Even though Lambda automatically scales to accommodate incoming traffic, your function can still be throttled for various reasons


[Understanding and Managing AWS Lambda Function Concurrency](https://aws.amazon.com/blogs/compute/managing-aws-lambda-function-concurrency)


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/lex.md
================================================
# Lex

[Amazon Lex](https://aws.amazon.com/lex)

[Cheat Sheet - Amazon Lex](https://tutorialsdojo.com/amazon-lex)

- Build chatbots with conversational AI


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/macie.md
================================================

> Revision Count: 1

# Macie

[Macie](https://aws.amazon.com/macie/)

[Cheat Sheet - Macie](https://tutorialsdojo.com/amazon-macie)

- Amazon Macie is a fully managed data security and data privacy service that uses machine learning and pattern matching to discover and protect your sensitive data in AWS.

- As organizations manage growing volumes of data, identifying and protecting their sensitive data at scale can become increasingly complex, expensive, and time-consuming. 
- Amazon Macie automates the discovery of sensitive data at scale and lowers the cost of protecting your data. 
- Macie automatically provides an inventory of Amazon S3 buckets including a list of unencrypted buckets, publicly accessible buckets, and buckets shared with AWS accounts outside those you have defined in AWS Organizations. 
- Then, Macie applies machine learning and pattern matching techniques to the buckets you select to identify and alert you to sensitive data, such as personally identifiable information (PII). 

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/mechanicalTurk.md
================================================
# Mechanical Turk

[What is Mechanical Turk](https://docs.aws.amazon.com/AWSMechTurk/latest/AWSMechanicalTurkRequester/WhatIs.html)

[Cheat Sheet - Mechanical Turk](https://tutorialsdojo.com/amazon-mechanical-turk)

- Is a crowdsourcing marketplace that connects you with an on-demand, scalable, human workforce to complete tasks.
- Using Mechanical Turk, you can programmatically direct tasks to the Mechanical Turk marketplace, where they can be completed by workers around the world.
- Mechanical Turk allows you to access the intelligence, skills, and insights of a global workforce for tasks as varied as data categorization, moderation, data collection and analysis, behavioral studies, and image annotation.
- Mechanical Turk is built around the concept of microtasks, which are small, atomic tasks that workers can complete in their web browser.
- When you submit work to Mechanical Turk, you typically start by breaking it into smaller tasks on which workers can work independently. 
- In this way, a project involving categorizing 10,000 images becomes 10,000 individual microtasks that workers can complete.

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/migrationHub.md
================================================
# AWS Migration Hub

[AWS Migration Services](https://tutorialsdojo.com/aws-cheat-sheets-migration-services)

[What Is AWS Migration Hub?](https://docs.aws.amazon.com/migrationhub/latest/ug/whatishub.html)

- AWS Migration Hub (Migration Hub) provides a single place to discover your existing servers, plan migrations, and track the status of each application migration. 
- The Migration Hub provides visibility into your application portfolio and streamlines planning and tracking. 
- You can visualize the connections and the status of the servers and databases that make up each of the applications you are migrating, regardless of which migration tool you are using.
- Migration Hub supports migration status updates from the following tools:
  - AWS Application Migration Service (AWS MGN)–AWS Application Migration Service is the primary migration service recommended for lift-and-shift migrations to AWS
  - AWS Server Migration Service (AWS SMS)
  - AWS Database Migration Service (AWS DMS)
  - The ATADATA ATAmotion partner tool
[Getting started with AWS Migration Hub](https://docs.aws.amazon.com/migrationhub/latest/ug/getting-started.html)



================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/opswork.md
================================================


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/opsworks.md
================================================
# OpsWorks

[Cheat Sheet - AWS OpsWorks](https://tutorialsdojo.com/aws-opsworks/)

- AWS OpsWorks is a configuration management service that provides managed instances of Chef and Puppet. 
- Chef and Puppet are automation platforms that allow you to use code to automate the configurations of your servers. 
- OpsWorks lets you use Chef and Puppet to automate how servers are configured, deployed, and managed across your Amazon EC2 instances or on-premises compute environments.



[How to set up AWS OpsWorks Stacks auto healing notifications in Amazon CloudWatch Events](https://aws.amazon.com/blogs/mt/how-to-set-up-aws-opsworks-stacks-auto-healing-notifications-in-amazon-cloudwatch-events/)

- Save the following event pattern as a file named OpsWorksAutoHealingPattern.json

```json
{
  "source": [
    "aws.opsworks"
  ],
  "detail": {
    "initiated_by": [
      "auto-healing"
    ]
  }
}
```

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/organizations.md
================================================
# Organizations

[Cheat Sheet - AWS Organization](https://tutorialsdojo.com/aws-organizations)

[Cheat Sheet - Multi-Account Multi-Region Data Aggregation On AWS Config
](https://tutorialsdojo.com/multi-account-multi-region-data-aggregation-on-aws-config)

[service-control-policies-scp-vs-iam-policies](https://tutorialsdojo.com/service-control-policies-scp-vs-iam-policies/)

[What is AWS Organizations?](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)

- AWS Organizations is an account management service that enables you to consolidate multiple AWS accounts into an organization that you create and centrally manage. 
- AWS Organizations includes account management and consolidated billing capabilities that enable you to better meet the budgetary, security, and compliance needs of your business. 
- As an administrator of an organization, you can create accounts in your organization and invite existing accounts to join the organization.


## Using AWS Services


### Using AWS Organizations with other AWS services

[Using AWS Organizations with other AWS services](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html)

- You can use trusted access to enable a supported AWS service that you specify, called the trusted service, to perform tasks in your organization and its accounts on your behalf. 
- This involves granting permissions to the trusted service but does not otherwise affect the permissions for IAM users or roles. 
- When you enable access, the trusted service can create an IAM role called a service-linked role in every account in your organization whenever that role is needed. 
- That role has a permissions policy that allows the trusted service to do the tasks that are described in that service's documentation
- The trusted service only creates service-linked roles when it needs to perform management actions on accounts, and not necessarily in all accounts of the organization.

#### AWS Resource Access Manager and AWS Organizations

- AWS Resource Access Manager (AWS RAM) enables you to share specified AWS resources that you own with other AWS accounts. 
- It's a centralized service that provides a consistent experience for sharing different types of AWS resources across multiple accounts.

Service-linked roles created when you enable integration

- The following service-linked role is automatically created in your organization's management account when you enable trusted access. 
- This role allows AWS RAM to perform supported operations within your organization's accounts in your organization.
- You can delete or modify this role only if you disable trusted access between AWS RAM and Organizations, or if you remove the member account from the organization.

```bash
  AWSServiceRoleForResourceAccessManager
```  


## Managing Policies

### Service control policies

[Service control policies (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)

- Service control policies (SCPs) are a type of organization policy that you can use to manage permissions in your organization.
- SCPs offer central control over the maximum available permissions for all accounts in your organization.
- SCPs help you to ensure your accounts stay within your organization’s access control guidelines. 
- SCPs are available only in an organization that has all features enabled
- An SCP defines a guardrail, or sets limits, on the actions that the account's administrator can delegate to the IAM users and roles in the affected accounts. 
- The administrator must still attach identity-based or resource-based policies to IAM users or roles, or to the resources in your accounts to actually grant permissions

> AWS strongly recommends that you don't attach SCPs to the root of your organization without thoroughly testing the impact that the policy has on accounts.

> SCPs do not affect any service-linked role. Service-linked roles enable other AWS services to integrate with AWS Organizations and can't be restricted by SCPs.


## Tutorial: Monitor important changes to your organization with CloudWatch Events

[Tutorial: Monitor important changes to your organization with CloudWatch Events](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_cwe.html)

- You start by configuring a rule that is triggered when users invoke specific AWS Organizations operations. 
- Next, you configure CloudWatch Events to run an AWS Lambda function when the rule is triggered, 
- and you configure Amazon SNS to send an email with details about the event.


## Using other AWS Services

### AWS Config and AWS Organizations

[AWS Config and AWS Organizations
](https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-config.html)

- Multi-account, multi-region data aggregation in AWS Config enables you to aggregate AWS Config data from multiple accounts and AWS Regions into a single account.
- An aggregator is a resource type in AWS Config that collects AWS Config data from multiple source accounts and Regions. 
- Create an aggregator in the Region where you want to see the aggregated AWS Config data. 
- While creating an aggregator, you can choose to add either individual account IDs or your organization

## Managing organizational units (OUs)

[Managing organizational units (OUs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_ous.html)

- You can use organizational units (OUs) to group accounts together to administer as a single unit.
- you can attach a policy-based control to an OU, and all accounts within the OU automatically inherit the policy. 
- You can create multiple OUs within a single organization, and you can create OUs within other OUs. 
- Each OU can contain multiple accounts, and you can move accounts from one OU to another. 
- However, OU names must be unique within a parent OU or root.


## Blogs

[What's the difference between an AWS Organizations service control policy and an IAM policy?](https://aws.amazon.com/premiumsupport/knowledge-center/iam-policy-service-control-policy)


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/quickSight.md
================================================



### Quicksight

[Quicksight](https://aws.amazon.com/quicksight/)

QuickSight lets you easily create and publish interactive BI dashboards as well as receive answers in seconds through natural langauge queries. QuickSight dashboards can be accessed from any device, and seamlessly embedded into your applications, portals, and websites.


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/rds.md
================================================
# RDS

[Cheat Sheet - RDS](https://tutorialsdojo.com/amazon-relational-database-service-amazon-rds)

[RDS Read Replicas](https://aws.amazon.com/rds/features/read-replicas)

- provide enhanced performance and durability for RDS database (DB) instances
- They make it easy to elastically scale out beyond the capacity constraints of a single DB instance for read-heavy database workloads.
- You can create one or more replicas of a given source DB Instance and serve high-volume application read traffic from multiple copies of your data
- Read replicas can also be promoted when needed to become standalone DB instances
- Read replicas are available in Amazon RDS for MySQL, MariaDB, PostgreSQL, Oracle, and SQL Server as well as Amazon Aurora.
- You can reduce the load on your source DB instance by routing read queries from your applications to the read replica

[Working with read replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html)


### Multi-AZ deployments for high availability

[Multi-AZ deployments for high availability](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html)

- Multi-AZ deployments can have one standby or two standby DB instances. 
- When the deployment has one standby DB instance, it's called a Multi-AZ DB instance deployment. 
  - A Multi-AZ DB instance deployment has one standby DB instance that provides failover support, but doesn't serve read traffic. 
- When the deployment has two standby DB instances, it's called a Multi-AZ DB cluster deployment. 
  - A Multi-AZ DB cluster deployment has standby DB instances that provide failover support and can also serve read traffic.


## Backing up and restoring an Amazon RDS DB instance

[Backing up and restoring an Amazon RDS DB instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_CommonTasks.BackupRestore.html)

### Restoring a DB instance to a specified time

- You can restore a DB instance to a specific point in time, creating a new DB instance.
- RDS uploads transaction logs for DB instances to Amazon S3 every 5 minutes.
- To see the latest restorable time for a DB instance, use the AWS CLI describe-db-instances command and look at the value returned in the LatestRestorableTime field for the DB instance.
- To see the latest restorable time for each DB instance in the Amazon RDS console, choose Automated backups.

### Amazon RDS DB instance storage

[Amazon RDS DB instance storage](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)

- DB instances for Amazon RDS for MySQL, MariaDB, PostgreSQL, Oracle, and Microsoft SQL Server use Amazon Elastic Block Store (Amazon EBS) volumes for database and log storage.
- Amazon RDS provides three storage types: General Purpose SSD (also known as gp2), Provisioned IOPS SSD (also known as io1), and magnetic (also known as standard)
  - General Purpose SSD – General Purpose SSD volumes offer cost-effective storage that is ideal for a broad range of workloads. 
  - Provisioned IOPS – Provisioned IOPS storage is designed to meet the needs of I/O-intensive workloads, particularly database workloads, that require low I/O latency and consistent I/O throughput.
  - Magnetic – Amazon RDS also supports magnetic storage for backward compatibility. We recommend that you use General Purpose SSD or Provisioned IOPS for any new storage needs.

### Setting the JVM TTL for DNS name lookups

- The failover mechanism automatically changes the Domain Name System (DNS) record of the DB instance to point to the standby DB instance. As a result, you need to re-establish any existing connections to your DB instance. In a Java virtual machine (JVM) environment, due to how the Java DNS caching mechanism works, you might need to reconfigure JVM settings.
- Because AWS resources use DNS name entries that occasionally change, we recommend that you configure your JVM with a TTL value of no more than 60 seconds.

## NOTES

- The Amazon RDS MySQL does not have a single reader endpoint for read replicas. You must use Amazon Aurora for MySQL to support this. Creating read replicas is recommended to increase the read performance of an RDS cluster.
- Amazon RDS does not support certain features in Oracle such as Multitenant Database, Real Application Clusters (RAC), Unified Auditing, Database Vault, Recovery Manager (RMAN)

## Blogs

- [Understanding Burst vs. Baseline Performance with Amazon RDS and GP2](https://aws.amazon.com/blogs/database/understanding-burst-vs-baseline-performance-with-amazon-rds-and-gp2/)

- [How to use CloudWatch metrics to decide between General Purpose or Provisioned IOPS for your RDS database](https://aws.amazon.com/blogs/database/how-to-use-cloudwatch-metrics-to-decide-between-general-purpose-or-provisioned-iops-for-your-rds-database)

- [Amazon RDS Multi-AZ Deployments](https://aws.amazon.com/rds/features/multi-az)

- [Amazon RDS – Multi-AZ Deployments For Enhanced Availability & Reliability](https://aws.amazon.com/blogs/aws/amazon-rds-multi-az-deployment)

- [Implementing a disaster recovery strategy with Amazon RDS](https://aws.amazon.com/blogs/database/implementing-a-disaster-recovery-strategy-with-amazon-rds)

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/redShift.md
================================================
# RedShift



================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/rekognition.md
================================================
# Rekognition

[CheatSheet - AWS Rekognition](https://tutorialsdojo.com/amazon-rekognition)

[What is Amazon Rekognition?](https://docs.aws.amazon.com/rekognition/latest/dg/what-is.html)


## What is Amazon Rekognition?

- Amazon Rekognition makes it easy to add image and video analysis to your applications. You just provide an image or video to the Amazon Rekognition API, and the service can identify objects, people, text, scenes, and activities. 
- It can detect any inappropriate content as well

## Searching faces in a collection

[Searching faces in a collection](https://docs.aws.amazon.com/rekognition/latest/dg/collections.html)

- Amazon Rekognition can store information about detected faces in server-side containers known as collections
-  You can use the facial information that's stored in a collection to search for known faces in images, stored videos, and streaming videos. 

## Text detection

- Extract skewed and distorted text from images and videos of street signs, social media posts, and product packaging.


================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/resourceAccessManager.md
================================================
# Resource Access Manager

[What is AWS Resource Access Manager?](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html)

- AWS Resource Access Manager (AWS RAM) helps you securely share the AWS resources that you create in one AWS account with other AWS accounts
- If you have multiple AWS accounts, you can create a resource once and use AWS RAM to make that resource accessible to those other accounts.
- If your account is managed by AWS Organizations, then you can share resources with all of the other accounts in the organization, or only those contained by one or more specified organizational units (OUs).
- You can also share with specific AWS accounts by account ID, regardless of whether the account is part of an organization.

## Sharing your AWS resources

[Sharing your AWS resources](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html)

- Enable resource sharing within AWS Organizations (optional)
```bash
aws ram enable-sharing-with-aws-organization
```

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/route53.md
================================================
# Route53

[Cheat Sheet - AWS Route53](https://tutorialsdojo.com/amazon-route-53)

[Cheat Sheet - AWS Database Migration Service](https://tutorialsdojo.com/aws-database-migration-service)


## Working with hosted zones

[Working with hosted zones](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html)

- A hosted zone is a container for records, and records contain information about how you want to route traffic for a specific domain, such as example.com, and its subdomains (acme.example.com, zenith.example.com). A hosted zone and the corresponding domain have the same name. 

  - Public hosted zones contain records that specify how you want to route traffic on the internet.
  - Private hosted zones contain records that specify how you want to route traffic in an Amazon VPC

[How do I associate a Route 53 private hosted zone with a VPC in a different AWS account or Region?
](https://aws.amazon.com/premiumsupport/knowledge-center/route53-private-hosted-zone)

### Working with a private hosted zone

#### Associating more VPCs with a private hosted zone

[Associating more VPCs with a private hosted zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-associate-vpcs.html)

- You can use the Amazon Route 53 console to associate more VPCs with a private hosted zone if you created the hosted zone and the VPCs by using the same AWS account.

#### Associating an Amazon VPC and a private hosted zone that you created with different AWS accounts

[Associating an Amazon VPC and a private hosted zone that you created with different AWS accounts](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-associate-vpcs-different-accounts.html)



## Routing internet traffic to your AWS resources

### Routing traffic to an ELB load balancer

- To route domain traffic to an ELB load balancer, use Amazon Route 53 to create an alias record that points to your load balancer.
- An alias record is a Route 53 extension to DNS. It's similar to a CNAME record, but you can create an alias record both for the root domain, such as example.com, and for subdomains, such as www.example.com.


### Routing traffic to a website that is hosted in an Amazon S3 bucket

[Routing traffic to a website that is hosted in an Amazon S3 bucket](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/RoutingToS3Bucket.html)

- To route domain traffic to an S3 bucket, use Amazon Route 53 to create an alias record that points to your bucket.


### Configuring a static website using a custom domain registered with Route 53

[Configuring a static website using a custom domain registered with Route 53](https://docs.aws.amazon.com/AmazonS3/latest/userguide/website-hosting-custom-domain-walkthrough.html)


## Creating Amazon Route 53 health checks and configuring DNS failover

[Creating Amazon Route 53 health checks and configuring DNS failover](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html)

- Amazon Route 53 health checks monitor the health and performance of your web applications, web servers, and other resources. Each health check that you create can monitor one of the following:
  - The health of a specified resource, such as a web server.
  - The status of other health checks.
  - The status of an Amazon CloudWatch alarm.
  - With Amazon Route 53 Application Recovery Controller, you can set up routing control health checks with DNS failover records to manage traffic failover for your application. 


## Choosing a routing policy

[Choosing a routing policy](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html)

- Simple routing policy – Use for a single resource that performs a given function for your domain, for example, a web server that serves content for the example.com website.
- Failover routing policy – Use when you want to configure active-passive failover.
- Geolocation routing policy – Use when you want to route traffic based on the location of your users.
- Geoproximity routing policy – Use when you want to route traffic based on the location of your resources and, optionally, shift traffic from resources in one location to resources in another.
- Latency routing policy – Use when you have resources in multiple AWS Regions and you want to route traffic to the Region that provides the best latency with less round-trip time.
- Multivalue answer routing policy – Use when you want Route 53 to respond to DNS queries with up to eight healthy records selected at random.
- Weighted routing policy – Use to route traffic to multiple resources in proportions that you specify





### Configuring DNSSEC for a domain

[Configuring DNSSEC for a domain](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-configure-dnssec.html)

- Attackers sometimes hijack traffic to internet endpoints such as web servers by intercepting DNS queries and returning their own IP addresses to DNS resolvers in place of the actual IP addresses for those endpoints
- Users are then routed to the IP addresses provided by the attackers in the spoofed response, for example, to fake websites.
- You can protect your domain from this type of attack, known as DNS spoofing or a man-in-the-middle attack, by configuring Domain Name System Security Extensions (DNSSEC), a protocol for securing DNS traffic.


## Configuring DNS Failover

### Active-active and active-passive failover

[Active-active and active-passive failover](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-types.html)

- You can use Route 53 health checking to configure active-active and active-passive failover configurations. 
  - You configure active-active failover using any routing policy (or combination of routing policies) other than failover, 
  - and you configure active-passive failover using the failover routing policy.

## Resolving DNS queries between VPCs and your network

[Resolving DNS queries between VPCs and your network](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html)

- When you create a VPC using Amazon VPC, Route 53 Resolver automatically uses a Resolver on the VPC to answer DNS queries for local Amazon VPC domain names for EC2 instances (ec2-192-0-2-44.compute-1.amazonaws.com) and records in private hosted zones (acme.example.com). 
- For all other domain names, Resolver performs recursive lookups against public name servers.

- You also can integrate DNS resolution between Resolver and DNS resolvers on your network by configuring forwarding rules. Your network can include any network that is reachable from your VPC, such as the following:
  - The VPC itself
  - Another peered VPC
  - An on-premises network that is connected to AWS with AWS Direct Connect, a VPN, or a network address translation (NAT) gateway
- Before you start to forward queries, you create Resolver inbound and/or outbound endpoints in the connected VPC. These endpoints provide a path for inbound or outbound queries:
  - Inbound endpoint: DNS resolvers on your network can forward DNS queries to Route 53 Resolver via this endpoint
    - This allows your DNS resolvers to easily resolve domain names for AWS resources such as EC2 instances or records in a Route 53 private hosted zone.
  - Outbound endpoint: Resolver conditionally forwards queries to resolvers on your network via this endpoint
    - To forward selected queries, you create Resolver rules that specify the domain names for the DNS queries that you want to forward (such as example.com), and the IP addresses of the DNS resolvers on your network that you want to forward the queries to

[How do I configure a Route 53 Resolver inbound endpoint to resolve DNS records in my private hosted zone from my remote network?](https://aws.amazon.com/premiumsupport/knowledge-center/route53-resolve-with-inbound-endpoint)


### Values specific for simple alias records

[Values specific for simple alias records](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-alias.html)

- When you create alias records, you specify the following values
  - Routing policy
  - Record name
  - Value/route traffic to
  - Record type
  - Evaluate target health


### Choosing between alias and non-alias records

[Choosing between alias and non-alias records](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html)

- Amazon Route 53 alias records provide a Route 53–specific extension to DNS functionality. 
- Alias records let you route traffic to selected AWS resources, such as CloudFront distributions and Amazon S3 buckets. 
- They also let you route traffic from one record in a hosted zone to another record.
- Unlike a CNAME record, you can create an alias record at the top node of a DNS namespace, also known as the zone apex.


## Blogs

[Simplify DNS management in a multi-account environment with Route 53 Resolver](https://aws.amazon.com/blogs/security/simplify-dns-management-in-a-multiaccount-environment-with-route-53-resolver)

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/s3.md
================================================
# S3

[Cheat Sheet - AWS S3](https://tutorialsdojo.com/amazon-s3)

[Cheat Sheet - Amazon Glacier](https://tutorialsdojo.com/amazon-sqs)

[Cheat Sheet - s3-pre-signed-urls-vs-cloudfront-signed-urls-vs-origin-access-identity-oai](https://tutorialsdojo.com/s3-pre-signed-urls-vs-cloudfront-signed-urls-vs-origin-access-identity-oai)

[Cheat Sheet - s3-transfer-acceleration-vs-direct-connect-vs-vpn-vs-snowball-vs-snowmobile](https://tutorialsdojo.com/s3-transfer-acceleration-vs-direct-connect-vs-vpn-vs-snowball-vs-snowmobile)

[What is Amazon S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)

- Amazon Simple Storage Service (Amazon S3) is an object storage service that offers industry-leading scalability, data availability, security, and performance. 

[object-lifecycle-mgmt](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)

- storing logs in Amazon S3, and use lifecycle policies to archive to Amazon
  Glacier

## Amazon S3 Event Notifications

[Amazon S3 Event Notifications](https://docs.aws.amazon.com/AmazonS3/latest/userguide/NotificationHowTo.html)

- You can use the Amazon S3 Event Notifications feature to receive notifications when certain events happen in your S3 bucket.
- To enable notifications, you must first add a notification configuration that identifies the events you want Amazon S3 to publish and the destinations where you want Amazon S3 to send the notifications.
- You store this configuration in the notification subresource that is associated with a bucket.

[Tutorial: Using an Amazon S3 trigger to invoke a Lambda function](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html#with-s3-example-configure-event-source)


### Replicating objects

[Replicating objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html)

- Replication enables automatic, asynchronous copying of objects across Amazon S3 buckets
- Buckets that are configured for object replication can be owned by the same AWS account or by different accounts.
- Objects may be replicated to a single destination bucket or multiple destination buckets. 
- By default, replication only supports copying new Amazon S3 objects after it is enabled. 
- You can use replication to copy existing objects and clone them to a different bucket, but in order to do so, you must contact AWS Support Center



## Hosting a static website using Amazon S3

[Hosting a static website using Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html)

- You can use Amazon S3 to host a static website. On a static website, individual webpages include static content. They might also contain client-side scripts.


## Server Side Encryption

### Protecting data using server-side encryption

[Protecting data using server-side encryption](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)

- Server-side encryption is the encryption of data at its destination by the application or service that receives it.
- Amazon S3 encrypts your data at the object level as it writes it to disks in its data centers and decrypts it for you when you access it. 
- As long as you authenticate your request and you have access permissions, there is no difference in the way you access encrypted or unencrypted objects. 

You have three mutually exclusive options, depending on how you choose to manage the encryption keys.
- Server-Side Encryption with Amazon S3-Managed Keys (SSE-S3)
- Server-Side Encryption with KMS keys Stored in AWS Key Management Service (SSE-KMS)
- Server-Side Encryption with Customer-Provided Keys (SSE-C)



### Protecting data using server-side encryption with customer-provided encryption keys (SSE-C)

[Protecting data using server-side encryption with customer-provided encryption keys (SSE-C)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html)

- Server-side encryption is about protecting data at rest. 
- Server-side encryption encrypts only the object data, not object metadata.
- Using server-side encryption with customer-provided encryption keys (SSE-C) allows you to set your own encryption keys
- The only thing you do is manage the encryption keys you provide.

### Protecting data using server-side encryption with Amazon S3-managed encryption keys (SSE-S3)

[Protecting data using server-side encryption with Amazon S3-managed encryption keys (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)

- Server-side encryption protects data at rest. 
- Amazon S3 encrypts each object with a unique key. 
- As an additional safeguard, it encrypts the key itself with a key that it rotates regularly. 

## Working with Buckets

### Using Requester Pays buckets for storage transfers and usage

[Using Requester Pays buckets for storage transfers and usage](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html)

- In general, bucket owners pay for all Amazon S3 storage and data transfer costs that are associated with their bucket. 
- However, you can configure a bucket to be a Requester Pays bucket. 
- With Requester Pays buckets, the requester instead of the bucket owner pays the cost of the request and the data download from the bucket.


### Using versioning in S3 buckets

[Using versioning in S3 buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)

- Versioning in Amazon S3 is a means of keeping multiple variants of an object in the same bucket. 
- You can use the S3 Versioning feature to preserve, retrieve, and restore every version of every object stored in your buckets. 

### Configuring fast, secure file transfers using Amazon S3 Transfer Acceleration

[Configuring fast, secure file transfers using Amazon S3 Transfer Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration.html)

- Amazon S3 Transfer Acceleration is a bucket-level feature that enables fast, easy, and secure transfers of files over long distances between your client and an S3 bucket. 
- Transfer Acceleration takes advantage of the globally distributed edge locations in Amazon CloudFront. 
- As the data arrives at an edge location, the data is routed to Amazon S3 over an optimized network path.

**Why use Transfer Acceleration?**
- Your customers upload to a centralized bucket from all over the world.
- You transfer gigabytes to terabytes of data on a regular basis across continents.
- You can't use all of your available bandwidth over the internet when uploading to Amazon S3.


### Uploading and copying objects using multipart upload

[Uploading and copying objects using multipart upload](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)

[How can I optimize performance when I upload large files to Amazon S3?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-upload-large-files)

- Multipart upload allows you to upload a single object as a set of parts. 
- Each part is a contiguous portion of the object's data. 
- You can upload these object parts independently and in any order
- If transmission of any part fails, you can retransmit that part without affecting other parts. 
- After all parts of your object are uploaded, Amazon S3 assembles these parts and creates the object. 
- In general, when your object size reaches 100 MB, you should consider using multipart uploads instead of uploading the object in a single operation.

## Uploading objects using presigned URLs

[Uploading objects using presigned URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PresignedUrlUploadObject.html)


- A presigned URL gives you access to the object identified in the URL, provided that the creator of the presigned URL has permissions to access that object.
- All objects and buckets by default are private. 
- The presigned URLs are useful if you want your user/customer to be able to upload a specific object to your bucket, but you don't require them to have AWS security credentials or permissions.

## Managing your storage lifecycle

[Managing your storage lifecycle](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)


## Amazon S3 Glacier storage classes

[Amazon S3 Glacier storage classes](https://aws.amazon.com/s3/storage-classes/glacier)

- The Amazon S3 Glacier storage classes are purpose-built for data archiving, providing you with the highest performance, most retrieval flexibility, and the lowest cost archive storage in the cloud

## Notes

[I accidentally denied everyone access to my Amazon S3 bucket. How do I regain access?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-accidentally-denied-access/)

- To get access to your bucket again, sign in to the Amazon S3 console as the AWS account root user, and then delete the bucket policy.


#### put-bucket-policy

[put-bucket-policy](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-policy.html)

- This example allows all users to retrieve any object in MyBucket except those in the MySecretFolder. It also grants put and delete permission to the root user of the AWS account 1234-5678-9012

```bash
aws s3api put-bucket-policy --bucket MyBucket --policy file://policy.json
```


```json
{
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": "*",
         "Action": "s3:GetObject",
         "Resource": "arn:aws:s3:::MyBucket/*"
      },
      {
         "Effect": "Deny",
         "Principal": "*",
         "Action": "s3:GetObject",
         "Resource": "arn:aws:s3:::MyBucket/MySecretFolder/*"
      },
      {
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::123456789012:root"
         },
         "Action": [
            "s3:DeleteObject",
            "s3:PutObject"
         ],
         "Resource": "arn:aws:s3:::MyBucket/*"
      }
   ]
}
```

### Managing Storage

#### 

[How can I retrieve an Amazon S3 object that was deleted in a versioning-enabled bucket?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-undelete-configuration/)

- When you delete an object from a version-enabled bucket, Amazon S3 creates a delete marker for the object. The delete marker becomes the current version of the object, and the actual object becomes the previous version. With a delete marker, Amazon S3 responds to requests for the object as though the object was deleted. For example, if you send a GET request for the object, then Amazon S3 returns an error.


## Blogs

- [Building and Maintaining an Amazon S3 Metadata Index without Servers](https://aws.amazon.com/blogs/big-data/building-and-maintaining-an-amazon-s3-metadata-index-without-servers)

  - Amazon S3 is a simple key-based object store whose scalability and low cost make it ideal for storing large datasets
  - Its design enables S3 to provide excellent performance for storing and retrieving objects based on a known key.
  - Finding objects based on other attributes, however, requires doing a linear search using the LIST operation. 
  - Because each listing can return at most 1000 keys, it may require many requests before finding the object. 
  - Because of these additional requests, implementing attribute-based queries in S3 alone can be challenging.
  - A common solution is to build an external index that maps queryable attributes to the S3 object key
  - approach for building such an index using Amazon DynamoDB and AWS Lambda

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/sageMaker.md
================================================
# SageMaker

[Cheat Sheet - SageMaker](https://tutorialsdojo.com/amazon-sagemaker)
## What Is Amazon SageMaker?

[What Is Amazon SageMaker?](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html)

- Amazon SageMaker is a fully managed machine learning service. 
- With SageMaker, data scientists and developers can quickly and easily build and train machine learning models, and then directly deploy them into a production-ready hosted environment
- It provides an integrated Jupyter authoring notebook instance for easy access to your data sources for exploration and analysis, so you don't have to manage servers. - It also provides common machine learning algorithms that are optimized to run efficiently against extremely large data in a distributed environment. 




## Blogs

- [Enable self-service, secured data science using Amazon SageMaker notebooks and AWS Service Catalog](https://aws.amazon.com/blogs/mt/enable-self-service-secured-data-science-using-amazon-sagemaker-notebooks-and-aws-service-catalog)



================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/schemaConversionTool.md
================================================
# Schema Conversion Tool

[What Is the AWS Schema Conversion Tool?](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)

- You can use the AWS Schema Conversion Tool (AWS SCT) to convert your existing database schema from one database engine to another. 
- You can convert relational OLTP schema, or data warehouse schema. 
- Your converted schema is suitable for an Amazon Relational Database Service (Amazon RDS) MySQL, MariaDB, Oracle, SQL Server, PostgreSQL DB, an Amazon Aurora DB cluster, or an Amazon Redshift cluster. 
- The converted schema can also be used with a database on an Amazon EC2 instance or stored as data on an Amazon S3 bucket.

## Migrating data from an on-premises data warehouse to Amazon Redshift

- You can use an AWS SCT agent to extract data from your on-premises data warehouse and migrate it to Amazon Redshift. The agent extracts your data and uploads the data to either Amazon S3 
- or, for large-scale migrations, an AWS Snowball Edge device. 
- You can then use AWS SCT to copy the data to Amazon Redshift.

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/secretsManager.md
================================================
# Secrets Manager

[Cheat Sheet - Secrets Manager](https://tutorialsdojo.com/aws-secrets-manager/)


- AWS Secrets Manager helps you protect secrets needed to access your applications, services, and IT resources. 
- The service enables you to easily rotate, manage, and retrieve database credentials, API keys, and other secrets throughout their lifecycle. 
- Users and applications retrieve secrets with a call to Secrets Manager APIs, eliminating the need to hardcode sensitive information in plain text. 
- Secrets Manager offers secret rotation with built-in integration for Amazon RDS, Amazon Redshift, and Amazon DocumentDB. 
- Also, the service is extensible to other types of secrets, including API keys and OAuth tokens


## Automate secret creation in AWS CloudFormation

[Automate secret creation in AWS CloudFormation](https://docs.aws.amazon.com/secretsmanager/latest/userguide/integrating_cloudformation.html)

[How to create and retrieve secrets managed in AWS Secrets Manager using AWS CloudFormation templates](https://aws.amazon.com/blogs/security/how-to-create-and-retrieve-secrets-managed-in-aws-secrets-manager-using-aws-cloudformation-template)

- You can use AWS CloudFormation to create and reference secrets from within your AWS CloudFormation stack template. 
- You can create a secret and then reference it from another part of the template. 
- For example, you can retrieve the user name and password from the new secret and then use that to define the user name and password for a new database. 
- You can create and attach resource-based policies to a secret. 
- You can also configure rotation by defining a Lambda function in your template and associating the function with your new secret as its rotation Lambda function.

- Secrets Manager provides the following resource types that you can use to create secrets in an AWS CloudFormation template:

  - AWS::SecretsManager::Secret – Creates a secret and stores it in Secrets Manager. You can specify a password or Secrets Manager can generate one for you.
  - AWS::SecretsManager::ResourcePolicy – Creates a resource-based policy and attaches it to the secret. A resource-based policy controls who can perform actions on the secret.
  - AWS::SecretsManager::RotationSchedule – Configures a secret to perform automatic periodic rotation using the specified Lambda rotation function.
  - AWS::SecretsManager::SecretTargetAttachment – Configures the secret with the details about the service or database that Secrets Manager needs to rotate the secret. For example, for an Amazon RDS DB instance, Secrets Manager adds the connection details and database engine type as entries in the SecureString property of the secret.

  

================================================
FILE: home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/securityTokenService.md
================================================
# Security Token Service

## Actions

### AssumeRole

[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)

- Returns a set of temporary security credentials that you can us
Download .txt
gitextract_25g9uy8m/

├── .gitignore
├── README.md
├── ReadMe_static.md
├── _config.yml
└── home/
    ├── cloud_certifications/
    │   └── aws/
    │       ├── ReadMe.md
    │       └── taskset_aws_cloud_certifications/
    │           └── task_001_aws_certified_solutions_architect_professional/
    │               ├── ReadMe.md
    │               ├── apiGateway.md
    │               ├── applicationDiscoveryService.md
    │               ├── aurora.md
    │               ├── awsControlTower.md
    │               ├── backup.md
    │               ├── batch.md
    │               ├── bestPractices.md
    │               ├── billingAndCostManagement.md
    │               ├── certificateManager.md
    │               ├── cloudAdoptionReadinessTool.md
    │               ├── cloudFormation.md
    │               ├── cloudFront.md
    │               ├── cloudHSM.md
    │               ├── cloudTrail.md
    │               ├── cloudWatchLogs.md
    │               ├── cloudsearch.md
    │               ├── cloudwatch.md
    │               ├── codeBuild.md
    │               ├── codeCommit.md
    │               ├── codeDeploy.md
    │               ├── codePipeline.md
    │               ├── cognito.md
    │               ├── commandLineInterface.md
    │               ├── config.md
    │               ├── connect.md
    │               ├── dataMigrationService.md
    │               ├── developerToolsConsole.md
    │               ├── directConnect.md
    │               ├── dynamodb.md
    │               ├── ec2.md
    │               ├── ec2AutoScaling.md
    │               ├── ecs.md
    │               ├── elasticBeanStalk.md
    │               ├── elasticCache.md
    │               ├── elasticFileSystem.md
    │               ├── elasticLoadBalancing.md
    │               ├── eventBridge.md
    │               ├── guardDuty.md
    │               ├── iam.md
    │               ├── inspector.md
    │               ├── kinesis.md
    │               ├── lambda.md
    │               ├── lex.md
    │               ├── macie.md
    │               ├── mechanicalTurk.md
    │               ├── migrationHub.md
    │               ├── opswork.md
    │               ├── opsworks.md
    │               ├── organizations.md
    │               ├── quickSight.md
    │               ├── rds.md
    │               ├── redShift.md
    │               ├── rekognition.md
    │               ├── resourceAccessManager.md
    │               ├── route53.md
    │               ├── s3.md
    │               ├── sageMaker.md
    │               ├── schemaConversionTool.md
    │               ├── secretsManager.md
    │               ├── securityTokenService.md
    │               ├── serverMigrationService.md
    │               ├── serverlessApplicationModel.md
    │               ├── serviceCatalog.md
    │               ├── shield.md
    │               ├── simpleNotificationService.md
    │               ├── simpleQueueService.md
    │               ├── simpleWorkflowService.md
    │               ├── singleSignOn.md
    │               ├── snowball.md
    │               ├── snowballEdge.md
    │               ├── storageGateway.md
    │               ├── systemManager.md
    │               ├── transcribe.md
    │               ├── vpc.md
    │               ├── waf.md
    │               ├── webIdentifyFederation.md
    │               ├── wellArchitected.md
    │               └── whitepapers.md
    ├── cloud_providers/
    │   ├── aws/
    │   │   ├── ReadMe-static.md
    │   │   ├── ReadMe.md
    │   │   └── taskset_aws_cloud_providers/
    │   │       ├── task_001_kms/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_monitoring_msk/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_redirection_using_s3_cloudfront/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_trigger_codebuild_PR_events__eventbridge__static_branc/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_trigger_codebuild_PR_events__eventbridge__lambda__dynamic_branches/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── buildspec.yaml
    │   │       │   └── lambda.py
    │   │       ├── task_006_codebuild_codecommit_test_reports_gradle/
    │   │       │   ├── ReadMe-static.md
    │   │       │   ├── ReadMe.md
    │   │       │   └── buildspec.yaml
    │   │       ├── task_007_codebuild_codecommit_test_reports_mvn/
    │   │       │   ├── ReadMe.md
    │   │       │   └── buildspec.yaml
    │   │       ├── task_008_trigger_lambda_from_codecommit_using_event_bridge/
    │   │       │   └── ReadMe.md
    │   │       └── task_009_pass_vars_dynamically_from_codebuild_to_codepipeline/
    │   │           └── ReadMe.md
    │   ├── azure/
    │   │   ├── ReadMe.md
    │   │   └── taskset_azure_cloud_providers/
    │   │       ├── task_001_capture_web_app_logs_with_app_service_diagnostics_logging/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_devbox/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_create_a_windows_virtual_machine/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_connect_to_windows_virtual_machine_via_rdp/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_create_a_generalized_image/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_create_a_new_virtual_machine_from_a_managed_image/
    │   │       │   └── ReadMe.md
    │   │       ├── task_007_create_an_image_of_azure_vm_from_az_cli_and_provision_a_new_vm/
    │   │       │   └── ReadMe.md
    │   │       ├── task_008_create_an_azure_virtual_machine/
    │   │       │   └── ReadMe.md
    │   │       ├── task_009_configure_network_access/
    │   │       │   └── ReadMe.md
    │   │       ├── task_010_create_a_storage_blob/
    │   │       │   └── ReadMe.md
    │   │       └── task_011_deploy_a_container_app/
    │   │           └── ReadMe.md
    │   ├── gcp/
    │   │   ├── ReadMe-static.md
    │   │   ├── ReadMe.md
    │   │   └── taskset_gcp_cloud_providers/
    │   │       ├── task_001_create_budget__and_alerts/
    │   │       │   └── ReadMe.md
    │   │       ├── task_001_intro_console_projects_iam_apis/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_getting_started_with_cloud_market_place/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_getting_started_with_cloud_market_place__lamp_stack/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_vpc_networking_and_google_compute_engine/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_getting_started_with_cloud_storage_and_cloud_sql__php/
    │   │       │   ├── ReadMe.md
    │   │       │   └── index.php
    │   │       ├── task_005_getting_started_with_gke__nginx/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_hello_cloud_run__node/
    │   │       │   ├── ReadMe.md
    │   │       │   └── hello-world-node/
    │   │       │       ├── Dockerfile
    │   │       │       ├── index.js
    │   │       │       └── package.json
    │   │       ├── task_007_building_a_devops_pipeline__python/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── main.py
    │   │       │   ├── requirements.txt
    │   │       │   └── templates/
    │   │       │       ├── index.html
    │   │       │       └── layout.html
    │   │       ├── task_008_deploying_app_to_app_engine_and_gke_and_cloudrun/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── app.yaml
    │   │       │   ├── k8s-manifests.yaml
    │   │       │   ├── main.py
    │   │       │   ├── requirements.txt
    │   │       │   └── templates/
    │   │       │       ├── index.html
    │   │       │       └── layout.html
    │   │       ├── task_008_deploying_app_to_app_engine_and_gke_and_cloudrun__python/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── app.yaml
    │   │       │   ├── k8s-manifests.yaml
    │   │       │   ├── main.py
    │   │       │   ├── requirements.txt
    │   │       │   └── templates/
    │   │       │       ├── index.html
    │   │       │       └── layout.html
    │   │       ├── task_009_monitoring_applications_in_gcp__python/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── app.yaml
    │   │       │   ├── main.py
    │   │       │   ├── requirements.txt
    │   │       │   └── templates/
    │   │       │       ├── index.html
    │   │       │       └── layout.html
    │   │       ├── task_010_alerting_in_google_cloud/
    │   │       │   └── ReadMe.md
    │   │       ├── task_010_alerting_in_google_cloud__python/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── app-engine-error-percent-policy.json
    │   │       │   ├── app.yaml
    │   │       │   ├── main.py
    │   │       │   ├── requirements.txt
    │   │       │   └── templates/
    │   │       │       ├── index.html
    │   │       │       └── layout.html
    │   │       ├── task_011_service_monitoring__node/
    │   │       │   └── ReadMe.md
    │   │       ├── task_011_service_monitoring__node_app/
    │   │       │   └── ReadMe.md
    │   │       ├── task_012_monitoring_and_dashboarding_multiple_projects_from_a_single_workspace/
    │   │       │   └── ReadMe.md
    │   │       ├── task_012_monitoring_and_dashboarding_multiple_projects_from_a_single_workspace__nginx/
    │   │       │   └── ReadMe.md
    │   │       ├── task_013_compute_logging_and_monitoring/
    │   │       │   └── ReadMe.md
    │   │       ├── task_014_log_analysis/
    │   │       │   └── ReadMe.md
    │   │       ├── task_014_log_analysis_cloud_run__node/
    │   │       │   └── ReadMe.md
    │   │       ├── task_015_cloud_audit_logs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_015_cloud_storage_audit_logs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_016_analyzing_network_traffic_with_vpc_flow_logs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_017_application_performance_management/
    │   │       │   └── ReadMe.md
    │   │       ├── task_017_application_performance_management__python_and_nodejs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_018_2inst_2buckets_2iam/
    │   │       │   └── ReadMe.md
    │   │       ├── task_019_working_with_cloud_build/
    │   │       │   └── ReadMe.md
    │   │       ├── task_020_deploying_google_kubernetes_engine/
    │   │       │   └── ReadMe.md
    │   │       ├── task_021_creating_google_kubernetes_engine_deployments/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── nginx-canary.yaml
    │   │       │   ├── nginx-deployment.yaml
    │   │       │   ├── nginx-svc-session-affinity.yaml
    │   │       │   └── service-nginx.yaml
    │   │       ├── task_022_configuring_persistent_storage_for_google_kubernetes_engine/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── pod-volume-demo.yaml
    │   │       │   ├── pvc-demo.yaml
    │   │       │   └── statefulset-demo.yaml
    │   │       ├── task_023_anthos_service_mesh_walkthrough/
    │   │       │   └── ReadMe.md
    │   │       ├── task_024_observing_anthos_services/
    │   │       │   └── ReadMe.md
    │   │       ├── task_025_managing_traffic_with_anthos_service_mesh/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── conditional-routing-labels.yaml
    │   │       │   ├── conditional-routing-req-headers.yaml
    │   │       │   ├── fault-injection-aborts.yaml
    │   │       │   ├── fault-injection-delays.yaml
    │   │       │   ├── manifests/
    │   │       │   │   ├── destinationrule--productpage-circuit-breaker.yaml
    │   │       │   │   ├── destinationrule-all.yaml
    │   │       │   │   ├── gateway--bookinfo-gateway-port-80-http.yaml
    │   │       │   │   ├── virtualService-2-or-1-second-delay-to-calls-to-ratings-service.yaml
    │   │       │   │   ├── virtualservice--all-to-v1.yaml
    │   │       │   │   ├── virtualservice--bookinfo-based-on-exact-and-prefix-uri-match.yaml
    │   │       │   │   ├── virtualservice--half-second-timeout-for-calls-to-reviews.yaml
    │   │       │   │   ├── virtualservice--productpage-per-try-timeout-2s.yaml
    │   │       │   │   ├── virtualservice--reviews-v2-based-on-header.yaml
    │   │       │   │   ├── virtualservice--reviews-v3.yaml
    │   │       │   │   ├── virtualservice--route-req-to-v2-reviews.yaml
    │   │       │   │   └── virtualservice-reviews-50-v3-and-50-v1.yaml
    │   │       │   ├── retry.yaml
    │   │       │   ├── timeouts.yaml
    │   │       │   └── traffic-splitting.yaml
    │   │       ├── task_026_securing_traffic_through_anthos_service_mesh/
    │   │       │   ├── PeerAuthentication--mesh-wide-mtls.yaml
    │   │       │   ├── PeerAuthentication--restricted-mtls.yaml
    │   │       │   ├── ReadMe.md
    │   │       │   └── manifests/
    │   │       │       ├── AuthorizationPolicy--require-jwt-v2.yaml
    │   │       │       ├── AuthorizationPolicy--require-jwt.yaml
    │   │       │       ├── RequestAuthentication--jwt-example.yaml
    │   │       │       ├── httpbin.yaml
    │   │       │       └── sleep.yaml
    │   │       ├── task_027_cloud_source_repositories_overview/
    │   │       │   └── ReadMe.md
    │   │       ├── task_028_managing_deployments_using_kubernetes_engine/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── cleanup.sh
    │   │       │   ├── deployments/
    │   │       │   │   ├── auth.yaml
    │   │       │   │   ├── frontend.yaml
    │   │       │   │   ├── hello-canary.yaml
    │   │       │   │   ├── hello-green.yaml
    │   │       │   │   └── hello.yaml
    │   │       │   ├── nginx/
    │   │       │   │   ├── frontend.conf
    │   │       │   │   └── proxy.conf
    │   │       │   ├── pods/
    │   │       │   │   ├── healthy-monolith.yaml
    │   │       │   │   ├── monolith.yaml
    │   │       │   │   └── secure-monolith.yaml
    │   │       │   └── services/
    │   │       │       ├── auth.yaml
    │   │       │       ├── frontend.yaml
    │   │       │       ├── hello-blue.yaml
    │   │       │       ├── hello-green.yaml
    │   │       │       ├── hello.yaml
    │   │       │       └── monolith.yaml
    │   │       ├── task_029_trouble_shooting_workloads_on_gke_for_sre/
    │   │       │   └── ReadMe.md
    │   │       ├── task_030_minimal_nodejs_app_dockerize_google_artifact_registry/
    │   │       │   ├── ReadMe.md
    │   │       │   └── test/
    │   │       │       ├── Dockerfile
    │   │       │       └── app.js
    │   │       ├── task_031_hello_node_kubernetes__node/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   └── server.js
    │   │       ├── task_032_setting_up_jenkins_on_kubernetes_engine/
    │   │       │   ├── ReadMe.md
    │   │       │   └── values.yaml
    │   │       └── task_033_continuous_delivery_with_jenkins_in_kubernetes_engine/
    │   │           ├── Jenkinsfile
    │   │           ├── ReadMe.md
    │   │           └── values.yaml
    │   └── oci/
    │       ├── ReadMe.md
    │       └── taskset_oci_cloud_providers/
    │           ├── task_000_set_up_oci_cli/
    │           │   └── ReadMe.md
    │           ├── task_001_oci_cli_commands/
    │           │   └── ReadMe.md
    │           └── task_002_create_k8s_quick_create/
    │               └── ReadMe.md
    ├── containers/
    │   ├── docker/
    │   │   ├── ReadMe.md
    │   │   └── taskset_docker_containers/
    │   │       ├── task_000_commands/
    │   │       │   └── ReadMe.md
    │   │       ├── task_001_docker_overview/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_docker_run__detached_vs_foreground/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_getting_started/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_docker_run__pid_setting_and_choosing_image_with_tag/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_docker_run__assign_name_and_allocate_pseudo_tty/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_docker_run__expose_port_and_pull_policy_and_environment_vars/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_run_commands_in_container/
    │   │       │   └── ReadMe.md
    │   │       ├── task_007_docker_run__full_container_capabilities_and_set_working_dir_and_volume_mounts/
    │   │       │   └── ReadMe.md
    │   │       ├── task_008_docker_run__hostsfile_ulimit_mem_limit/
    │   │       │   └── ReadMe.md
    │   │       ├── task_008_docker_run__metadata_and_network_and_attach_to_stdout/
    │   │       │   └── ReadMe.md
    │   │       ├── task_009_docker_attach/
    │   │       │   └── ReadMe.md
    │   │       ├── task_010_docker_build/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   └── index.html
    │   │       ├── task_011_mongo/
    │   │       │   └── ReadMe.md
    │   │       ├── task_012_postgres/
    │   │       │   └── ReadMe.md
    │   │       ├── task_013_prometheus_blackbox_exporter/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── blackbox.yml
    │   │       │   └── prometheus.yml
    │   │       ├── task_014_elastic_search/
    │   │       │   └── ReadMe.md
    │   │       ├── task_015_elastic_search_bkp_restore/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── register.json
    │   │       │   ├── restoresnapshot.json
    │   │       │   └── snapshotsetting.json
    │   │       ├── task_016_elastic_search_backup_restore_sample_data/
    │   │       │   ├── Dockerfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── createdata.json
    │   │       │   ├── register.json
    │   │       │   ├── restoresnapshot.json
    │   │       │   └── snapshotsetting.json
    │   │       ├── task_017_mem_and_cpu_limit_container/
    │   │       │   └── ReadMe.md
    │   │       ├── task_018_mysql/
    │   │       │   └── ReadMe.md
    │   │       ├── task_019_nginx_https_domain_test/
    │   │       │   └── ReadMe.md
    │   │       ├── task_020_docker_commit/
    │   │       │   └── ReadMe.md
    │   │       ├── task_021_kibana/
    │   │       │   └── ReadMe.md
    │   │       ├── task_022_sample_app/
    │   │       │   ├── ReadMe.md
    │   │       │   └── app/
    │   │       │       ├── Dockerfile
    │   │       │       ├── package.json
    │   │       │       ├── spec/
    │   │       │       │   ├── persistence/
    │   │       │       │   │   └── sqlite.spec.js
    │   │       │       │   └── routes/
    │   │       │       │       ├── addItem.spec.js
    │   │       │       │       ├── deleteItem.spec.js
    │   │       │       │       ├── getItems.spec.js
    │   │       │       │       └── updateItem.spec.js
    │   │       │       └── src/
    │   │       │           ├── index.js
    │   │       │           ├── persistence/
    │   │       │           │   ├── index.js
    │   │       │           │   ├── mysql.js
    │   │       │           │   └── sqlite.js
    │   │       │           ├── routes/
    │   │       │           │   ├── addItem.js
    │   │       │           │   ├── deleteItem.js
    │   │       │           │   ├── getItems.js
    │   │       │           │   └── updateItem.js
    │   │       │           └── static/
    │   │       │               ├── css/
    │   │       │               │   ├── font-awesome/
    │   │       │               │   │   ├── fa-brands-400.svg#fontawesome
    │   │       │               │   │   ├── fa-regular-400.svg#fontawesome
    │   │       │               │   │   └── fa-solid-900.svg#fontawesome
    │   │       │               │   └── styles.css
    │   │       │               ├── index.html
    │   │       │               └── js/
    │   │       │                   ├── app.js
    │   │       │                   └── react-bootstrap.js
    │   │       ├── task_023_update_sample_app/
    │   │       │   ├── ReadMe.md
    │   │       │   └── app/
    │   │       │       ├── Dockerfile
    │   │       │       ├── package.json
    │   │       │       ├── spec/
    │   │       │       │   ├── persistence/
    │   │       │       │   │   └── sqlite.spec.js
    │   │       │       │   └── routes/
    │   │       │       │       ├── addItem.spec.js
    │   │       │       │       ├── deleteItem.spec.js
    │   │       │       │       ├── getItems.spec.js
    │   │       │       │       └── updateItem.spec.js
    │   │       │       └── src/
    │   │       │           ├── index.js
    │   │       │           ├── persistence/
    │   │       │           │   ├── index.js
    │   │       │           │   ├── mysql.js
    │   │       │           │   └── sqlite.js
    │   │       │           ├── routes/
    │   │       │           │   ├── addItem.js
    │   │       │           │   ├── deleteItem.js
    │   │       │           │   ├── getItems.js
    │   │       │           │   └── updateItem.js
    │   │       │           └── static/
    │   │       │               ├── css/
    │   │       │               │   ├── font-awesome/
    │   │       │               │   │   ├── fa-brands-400.svg#fontawesome
    │   │       │               │   │   ├── fa-regular-400.svg#fontawesome
    │   │       │               │   │   └── fa-solid-900.svg#fontawesome
    │   │       │               │   └── styles.css
    │   │       │               ├── index.html
    │   │       │               └── js/
    │   │       │                   ├── app.js
    │   │       │                   └── react-bootstrap.js
    │   │       ├── task_024_sample_app_persist_db/
    │   │       │   ├── ReadMe.md
    │   │       │   └── app/
    │   │       │       ├── Dockerfile
    │   │       │       ├── package.json
    │   │       │       ├── spec/
    │   │       │       │   ├── persistence/
    │   │       │       │   │   └── sqlite.spec.js
    │   │       │       │   └── routes/
    │   │       │       │       ├── addItem.spec.js
    │   │       │       │       ├── deleteItem.spec.js
    │   │       │       │       ├── getItems.spec.js
    │   │       │       │       └── updateItem.spec.js
    │   │       │       └── src/
    │   │       │           ├── index.js
    │   │       │           ├── persistence/
    │   │       │           │   ├── index.js
    │   │       │           │   ├── mysql.js
    │   │       │           │   └── sqlite.js
    │   │       │           ├── routes/
    │   │       │           │   ├── addItem.js
    │   │       │           │   ├── deleteItem.js
    │   │       │           │   ├── getItems.js
    │   │       │           │   └── updateItem.js
    │   │       │           └── static/
    │   │       │               ├── css/
    │   │       │               │   ├── font-awesome/
    │   │       │               │   │   ├── fa-brands-400.svg#fontawesome
    │   │       │               │   │   ├── fa-regular-400.svg#fontawesome
    │   │       │               │   │   └── fa-solid-900.svg#fontawesome
    │   │       │               │   └── styles.css
    │   │       │               ├── index.html
    │   │       │               └── js/
    │   │       │                   ├── app.js
    │   │       │                   └── react-bootstrap.js
    │   │       ├── task_025_sonarqube__keycloak__saml/
    │   │       │   ├── .gitignore
    │   │       │   └── ReadMe.md
    │   │       ├── task_026_mssql/
    │   │       │   └── ReadMe.md
    │   │       ├── task_027_docker_openvpn/
    │   │       │   ├── Readme.md
    │   │       │   └── setup_vpn.sh
    │   │       ├── task_028_docker_engine__networking__overview/
    │   │       │   └── ReadMe.md
    │   │       ├── task_029_docker_engine__networking__bridge_network_tutorial/
    │   │       │   └── ReadMe.md
    │   │       └── task_030_docker_engine__networking__host_networking_tutorial/
    │   │           └── ReadMe.md
    │   ├── docker_compose/
    │   │   ├── ReadMe.md
    │   │   └── taskset_docker_compose_containers/
    │   │       ├── task_001__gcp__traefik_letsEncrypt_tls_challenge/
    │   │       │   ├── ReadMe.md
    │   │       │   └── docker-compose.yaml
    │   │       ├── task_002__gcp__traefik_letsEncrypt_http_challenge/
    │   │       │   ├── ReadMe.md
    │   │       │   └── docker-compose.yaml
    │   │       ├── task_003__gcp__datadog/
    │   │       │   ├── ReadMe.md
    │   │       │   └── docker-compose.yaml
    │   │       ├── task_004__local__elastic_search_backup_restore_local_with_sample_data/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── docker-compose.yml
    │   │       │   ├── elasticsearch.yml
    │   │       │   ├── restoresnapshot.json
    │   │       │   └── snapshotsetting.json
    │   │       ├── task_005__local__elastic_search_kibana/
    │   │       │   ├── ReadMe.md
    │   │       │   └── docker-compose.yml
    │   │       ├── task_006__local__logstash/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── conf/
    │   │       │   │   └── filter.conf
    │   │       │   ├── docker-compose.yml
    │   │       │   ├── log-sample/
    │   │       │   │   └── access.log
    │   │       │   └── logstash.yml
    │   │       ├── task_007__local__prometheus_blackboxexporter_alertmanager/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── alertmanager/
    │   │       │   │   └── configuration.yml
    │   │       │   ├── blackboxexporter/
    │   │       │   │   └── config.yml
    │   │       │   ├── docker-compose.yml
    │   │       │   └── prometheus/
    │   │       │       ├── alert.rules.yml
    │   │       │       └── prometheus.yml
    │   │       ├── task_008__local__mongodb_metricbeat_elasticsearch_kibana/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── docker/
    │   │       │   │   └── metricbeat/
    │   │       │   │       ├── Dockerfile
    │   │       │   │       ├── entrypoint.sh
    │   │       │   │       └── metricbeat.yml
    │   │       │   └── docker-compose.yml
    │   │       ├── task_009__local__natsStreaming_metricbeat_elasticsearch_kibana/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── docker/
    │   │       │   │   └── metricbeat/
    │   │       │   │       ├── Dockerfile
    │   │       │   │       ├── entrypoint.sh
    │   │       │   │       └── metricbeat.yml
    │   │       │   └── docker-compose.yml
    │   │       ├── task_010__local__mysql_metricbeat_elasticsearch_kibana/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── docker/
    │   │       │   │   └── metricbeat/
    │   │       │   │       ├── Dockerfile
    │   │       │   │       ├── entrypoint.sh
    │   │       │   │       └── metricbeat.yml
    │   │       │   └── docker-compose.yml
    │   │       ├── task_011__gcp__nginx_https_domain_test/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── certs/
    │   │       │   │   ├── star_domain.com.key
    │   │       │   │   └── star_domain_com.chained.crt
    │   │       │   ├── docker-compose.yml
    │   │       │   └── nginx.conf
    │   │       ├── task_012__local__caddy_https_domain_test_with_custom_certs/
    │   │       │   ├── Caddyfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── certs/
    │   │       │   │   ├── star_domain.com.key
    │   │       │   │   └── star_domain_com.chained.crt
    │   │       │   ├── docker-compose.yml
    │   │       │   ├── index.html-renameme-to-html
    │   │       │   └── password-generation.yml
    │   │       ├── task_013__local__caddy_https_acme_and_save_certs/
    │   │       │   ├── Caddyfile
    │   │       │   ├── ReadMe.md
    │   │       │   └── docker-compose.yml
    │   │       ├── task_014__local__reverse_proxy_nginx_home_using_caddy/
    │   │       │   ├── Caddyfile
    │   │       │   ├── ReadMe.md
    │   │       │   ├── certs/
    │   │       │   │   ├── chained-cert.crt
    │   │       │   │   └── private-key.key
    │   │       │   ├── docker-compose.yml
    │   │       │   ├── index.html-rename-me-to-html
    │   │       │   ├── nginx-home/
    │   │       │   │   └── index.html
    │   │       │   └── password-generation.yml
    │   │       ├── task_015__local__mem_and_cpu_limit_nginx_container/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── docker-compose-v2.4.yaml
    │   │       │   └── docker-compose-v3.8.yaml
    │   │       └── task_016__gcp_local__grafana__tempo__prometheus__xk6_client_tracing/
    │   │           ├── ReadMe.md
    │   │           ├── docker-compose.yaml
    │   │           └── shared/
    │   │               ├── grafana-datasources.yaml
    │   │               ├── prometheus.yaml
    │   │               └── tempo.yaml
    │   └── kubernetes/
    │       ├── README.md
    │       ├── concepts/
    │       │   ├── ReadMe.md
    │       │   ├── task_001_blue_green_deployment/
    │       │   │   └── ReadMe.md
    │       │   └── task_002_networking/
    │       │       └── ReadMe.md
    │       └── taskset_kubernetes_containers/
    │           ├── task_001__local__configure_default_CPU_requests_and_limits_for_a_namespace/
    │           │   ├── ReadMe.md
    │           │   ├── limitrange-object.yaml
    │           │   ├── pod-limit-cpu.yaml
    │           │   ├── pod-no-limit-specified.yaml
    │           │   └── pod-request-cpu.yaml
    │           ├── task_002__local__configure_default_memory_requests_and_limits_for_a_namespace/
    │           │   ├── ReadMe.md
    │           │   ├── limitrange-object.yaml
    │           │   ├── pod-limit-memory.yaml
    │           │   ├── pod-no-limit-specified.yaml
    │           │   └── pod-request-memory.yaml
    │           ├── task_003__local__understanding_k8s_port_forward/
    │           │   └── ReadMe.md
    │           ├── task_004__local__expose_svc_via_nodeport/
    │           │   └── ReadMe.md
    │           ├── task_005__local__access_svc_nodeport_via_ingress/
    │           │   ├── ReadMe.md
    │           │   └── ingress.yaml
    │           ├── task_006__local__access_svc_clusterip_via_ingress/
    │           │   ├── ReadMe.md
    │           │   └── ingress.yaml
    │           ├── task_007__local__jenkins_k8s/
    │           │   ├── ReadMe.md
    │           │   ├── jenkins-agent.Dockerfile
    │           │   ├── jenkins-controller.Dockerfile
    │           │   ├── jenkins-k8s-manifests.yaml
    │           │   └── values.yaml
    │           ├── task_008__local__kafka/
    │           │   ├── ReadMe.md
    │           │   ├── kafka-manifests.yaml
    │           │   └── values.yaml
    │           ├── task_009__local__kafdrop/
    │           │   ├── ReadMe.md
    │           │   ├── kafdrop-manifests.yaml
    │           │   └── values.yaml
    │           ├── task_010__aws__deploy_traefik_kops_k8s_helm/
    │           │   ├── ReadMe.md
    │           │   ├── traefik-resources.yaml
    │           │   └── values.yaml
    │           ├── task_011__aws__traefik_kops_whoami/
    │           │   ├── ReadMe.md
    │           │   ├── traefik-resources.yaml
    │           │   ├── values.yaml
    │           │   └── whoami.yaml
    │           ├── task_012__aws__kops_with_traefik_customization/
    │           │   ├── ReadMe.md
    │           │   ├── echo-app/
    │           │   │   ├── dep.yaml
    │           │   │   ├── ingress.yaml
    │           │   │   └── svc.yaml
    │           │   ├── httpbin-app/
    │           │   │   ├── dep.yaml
    │           │   │   ├── ingress.yaml
    │           │   │   └── svc.yaml
    │           │   ├── traefik-custom-image/
    │           │   │   ├── Dockerfile
    │           │   │   ├── middleware/
    │           │   │   │   └── middleware.yaml
    │           │   │   └── traefik-add-trace-id/
    │           │   │       ├── .traefik.yml
    │           │   │       ├── README.md
    │           │   │       ├── go.mod
    │           │   │       ├── go.sum
    │           │   │       ├── rand-utils.go
    │           │   │       ├── trace-id.go
    │           │   │       └── trace-id_test.go
    │           │   └── traefik-helm-chart/
    │           │       ├── .helmignore
    │           │       ├── Chart.yaml
    │           │       ├── Guidelines.md
    │           │       ├── LICENSE
    │           │       ├── README.md
    │           │       ├── crds/
    │           │       │   ├── ingressroute.yaml
    │           │       │   ├── ingressroutetcp.yaml
    │           │       │   ├── ingressrouteudp.yaml
    │           │       │   ├── middlewares.yaml
    │           │       │   ├── middlewarestcp.yaml
    │           │       │   ├── serverstransports.yaml
    │           │       │   ├── tlsoptions.yaml
    │           │       │   ├── tlsstores.yaml
    │           │       │   └── traefikservices.yaml
    │           │       ├── templates/
    │           │       │   ├── _helpers.tpl
    │           │       │   ├── _podtemplate.tpl
    │           │       │   ├── daemonset.yaml
    │           │       │   ├── dashboard-hook-ingressroute.yaml
    │           │       │   ├── deployment.yaml
    │           │       │   ├── gateway.yaml
    │           │       │   ├── gatewayclass.yaml
    │           │       │   ├── hpa.yaml
    │           │       │   ├── ingressclass.yaml
    │           │       │   ├── poddisruptionbudget.yaml
    │           │       │   ├── pvc.yaml
    │           │       │   ├── rbac/
    │           │       │   │   ├── clusterrole.yaml
    │           │       │   │   ├── clusterrolebinding.yaml
    │           │       │   │   ├── podsecuritypolicy.yaml
    │           │       │   │   ├── role.yaml
    │           │       │   │   ├── rolebinding.yaml
    │           │       │   │   └── serviceaccount.yaml
    │           │       │   ├── service.yaml
    │           │       │   └── tlsoption.yaml
    │           │       ├── tests/
    │           │       │   ├── container-config_test.yaml
    │           │       │   ├── daemonset-config_test.yaml
    │           │       │   ├── default-install_test.yaml
    │           │       │   ├── deployment-config_test.yaml
    │           │       │   ├── gateway-config_test.yaml
    │           │       │   ├── gatewayclass-config_test.yaml
    │           │       │   ├── pod-config_test.yaml
    │           │       │   ├── poddisruptionbudget-config_test.yaml
    │           │       │   ├── podsecuritypolicy-config_test.yaml
    │           │       │   ├── ports-config_test.yaml
    │           │       │   ├── rbac-config_test.yaml
    │           │       │   ├── service-config_test.yaml
    │           │       │   └── traefik-config_test.yaml
    │           │       ├── traefik-manifests.yaml
    │           │       └── values.yaml
    │           ├── task_013__aws__oauth2_proxy/
    │           │   ├── ReadMe.md
    │           │   ├── kafdrop-chart/
    │           │   │   ├── .helmignore
    │           │   │   ├── Chart.yaml
    │           │   │   ├── kafdrop-manifests.yaml
    │           │   │   ├── templates/
    │           │   │   │   ├── NOTES.txt
    │           │   │   │   ├── _helpers.tpl
    │           │   │   │   ├── deployment.yaml
    │           │   │   │   ├── ingress.yaml
    │           │   │   │   ├── ingressroute.yaml
    │           │   │   │   ├── service.yaml
    │           │   │   │   └── traefik-middleware.yaml
    │           │   │   └── values.yaml
    │           │   ├── oauth2-proxy/
    │           │   │   ├── .helmignore
    │           │   │   ├── Chart.yaml
    │           │   │   ├── README.md
    │           │   │   ├── charts/
    │           │   │   │   ├── common/
    │           │   │   │   │   ├── .helmignore
    │           │   │   │   │   ├── Chart.yaml
    │           │   │   │   │   ├── README.md
    │           │   │   │   │   ├── templates/
    │           │   │   │   │   │   ├── _affinities.tpl
    │           │   │   │   │   │   ├── _capabilities.tpl
    │           │   │   │   │   │   ├── _errors.tpl
    │           │   │   │   │   │   ├── _images.tpl
    │           │   │   │   │   │   ├── _ingress.tpl
    │           │   │   │   │   │   ├── _labels.tpl
    │           │   │   │   │   │   ├── _names.tpl
    │           │   │   │   │   │   ├── _secrets.tpl
    │           │   │   │   │   │   ├── _storage.tpl
    │           │   │   │   │   │   ├── _tplvalues.tpl
    │           │   │   │   │   │   ├── _utils.tpl
    │           │   │   │   │   │   ├── _warnings.tpl
    │           │   │   │   │   │   └── validations/
    │           │   │   │   │   │       ├── _cassandra.tpl
    │           │   │   │   │   │       ├── _mariadb.tpl
    │           │   │   │   │   │       ├── _mongodb.tpl
    │           │   │   │   │   │       ├── _postgresql.tpl
    │           │   │   │   │   │       ├── _redis.tpl
    │           │   │   │   │   │       └── _validations.tpl
    │           │   │   │   │   └── values.yaml
    │           │   │   │   └── redis/
    │           │   │   │       ├── .helmignore
    │           │   │   │       ├── Chart.yaml
    │           │   │   │       ├── README.md
    │           │   │   │       ├── charts/
    │           │   │   │       │   └── common/
    │           │   │   │       │       ├── .helmignore
    │           │   │   │       │       ├── Chart.yaml
    │           │   │   │       │       ├── README.md
    │           │   │   │       │       ├── templates/
    │           │   │   │       │       │   ├── _affinities.tpl
    │           │   │   │       │       │   ├── _capabilities.tpl
    │           │   │   │       │       │   ├── _errors.tpl
    │           │   │   │       │       │   ├── _images.tpl
    │           │   │   │       │       │   ├── _ingress.tpl
    │           │   │   │       │       │   ├── _labels.tpl
    │           │   │   │       │       │   ├── _names.tpl
    │           │   │   │       │       │   ├── _secrets.tpl
    │           │   │   │       │       │   ├── _storage.tpl
    │           │   │   │       │       │   ├── _tplvalues.tpl
    │           │   │   │       │       │   ├── _utils.tpl
    │           │   │   │       │       │   ├── _warnings.tpl
    │           │   │   │       │       │   └── validations/
    │           │   │   │       │       │       ├── _cassandra.tpl
    │           │   │   │       │       │       ├── _mariadb.tpl
    │           │   │   │       │       │       ├── _mongodb.tpl
    │           │   │   │       │       │       ├── _postgresql.tpl
    │           │   │   │       │       │       ├── _redis.tpl
    │           │   │   │       │       │       └── _validations.tpl
    │           │   │   │       │       └── values.yaml
    │           │   │   │       ├── ci/
    │           │   │   │       │   ├── extra-flags-values.yaml
    │           │   │   │       │   ├── sentinel-values.yaml
    │           │   │   │       │   └── standalone-values.yaml
    │           │   │   │       ├── templates/
    │           │   │   │       │   ├── NOTES.txt
    │           │   │   │       │   ├── _helpers.tpl
    │           │   │   │       │   ├── configmap.yaml
    │           │   │   │       │   ├── extra-list.yaml
    │           │   │   │       │   ├── headless-svc.yaml
    │           │   │   │       │   ├── health-configmap.yaml
    │           │   │   │       │   ├── master/
    │           │   │   │       │   │   ├── psp.yaml
    │           │   │   │       │   │   ├── service.yaml
    │           │   │   │       │   │   └── statefulset.yaml
    │           │   │   │       │   ├── metrics-svc.yaml
    │           │   │   │       │   ├── networkpolicy.yaml
    │           │   │   │       │   ├── pdb.yaml
    │           │   │   │       │   ├── prometheusrule.yaml
    │           │   │   │       │   ├── replicas/
    │           │   │   │       │   │   ├── hpa.yaml
    │           │   │   │       │   │   ├── service.yaml
    │           │   │   │       │   │   └── statefulset.yaml
    │           │   │   │       │   ├── role.yaml
    │           │   │   │       │   ├── rolebinding.yaml
    │           │   │   │       │   ├── scripts-configmap.yaml
    │           │   │   │       │   ├── secret.yaml
    │           │   │   │       │   ├── sentinel/
    │           │   │   │       │   │   ├── service.yaml
    │           │   │   │       │   │   └── statefulset.yaml
    │           │   │   │       │   ├── serviceaccount.yaml
    │           │   │   │       │   ├── servicemonitor.yaml
    │           │   │   │       │   └── tls-secret.yaml
    │           │   │   │       ├── values.schema.json
    │           │   │   │       └── values.yaml
    │           │   │   ├── oauth2-manifests.yaml
    │           │   │   ├── templates/
    │           │   │   │   ├── NOTES.txt
    │           │   │   │   ├── _helpers.tpl
    │           │   │   │   ├── configmap.yaml
    │           │   │   │   ├── deployment.yaml
    │           │   │   │   ├── extra-list.yaml
    │           │   │   │   ├── ingress-route.yaml
    │           │   │   │   ├── ingress.yaml
    │           │   │   │   ├── pdb.yaml
    │           │   │   │   ├── secret-authenticated-emails-file.yaml
    │           │   │   │   ├── secret-google.yaml
    │           │   │   │   ├── secret-htpasswd-file.yaml
    │           │   │   │   ├── secret.yaml
    │           │   │   │   ├── service-account.yaml
    │           │   │   │   ├── service.yaml
    │           │   │   │   └── traefik-middlewares.yaml
    │           │   │   └── values.yaml
    │           │   └── traefik/
    │           │       ├── .helmignore
    │           │       ├── Chart.yaml
    │           │       ├── Guidelines.md
    │           │       ├── LICENSE
    │           │       ├── README.md
    │           │       ├── crds/
    │           │       │   ├── ingressroute.yaml
    │           │       │   ├── ingressroutetcp.yaml
    │           │       │   ├── ingressrouteudp.yaml
    │           │       │   ├── middlewares.yaml
    │           │       │   ├── middlewarestcp.yaml
    │           │       │   ├── serverstransports.yaml
    │           │       │   ├── tlsoptions.yaml
    │           │       │   ├── tlsstores.yaml
    │           │       │   └── traefikservices.yaml
    │           │       ├── templates/
    │           │       │   ├── _helpers.tpl
    │           │       │   ├── _podtemplate.tpl
    │           │       │   ├── daemonset.yaml
    │           │       │   ├── dashboard-hook-ingressroute.yaml
    │           │       │   ├── deployment.yaml
    │           │       │   ├── gateway.yaml
    │           │       │   ├── gatewayclass.yaml
    │           │       │   ├── hpa.yaml
    │           │       │   ├── ingressclass.yaml
    │           │       │   ├── poddisruptionbudget.yaml
    │           │       │   ├── pvc.yaml
    │           │       │   ├── rbac/
    │           │       │   │   ├── clusterrole.yaml
    │           │       │   │   ├── clusterrolebinding.yaml
    │           │       │   │   ├── podsecuritypolicy.yaml
    │           │       │   │   ├── role.yaml
    │           │       │   │   ├── rolebinding.yaml
    │           │       │   │   └── serviceaccount.yaml
    │           │       │   ├── service.yaml
    │           │       │   └── tlsoption.yaml
    │           │       ├── tests/
    │           │       │   ├── container-config_test.yaml
    │           │       │   ├── daemonset-config_test.yaml
    │           │       │   ├── default-install_test.yaml
    │           │       │   ├── deployment-config_test.yaml
    │           │       │   ├── gateway-config_test.yaml
    │           │       │   ├── gatewayclass-config_test.yaml
    │           │       │   ├── pod-config_test.yaml
    │           │       │   ├── poddisruptionbudget-config_test.yaml
    │           │       │   ├── podsecuritypolicy-config_test.yaml
    │           │       │   ├── ports-config_test.yaml
    │           │       │   ├── rbac-config_test.yaml
    │           │       │   ├── service-config_test.yaml
    │           │       │   └── traefik-config_test.yaml
    │           │       └── values.yaml
    │           ├── task_014__aws__traefik_kops_whoami_middleware/
    │           │   ├── ReadMe.md
    │           │   ├── middleware.yaml
    │           │   ├── traefik-resources.yaml
    │           │   ├── values.yaml
    │           │   └── whoami.yaml
    │           ├── task_015__aws__lets_encrypt_kops_cluster/
    │           │   ├── ReadMe.md
    │           │   ├── cluster-issuer.yaml
    │           │   ├── ingress.yaml
    │           │   ├── k8s-resources.yaml
    │           │   └── whoami.yaml
    │           ├── task_016__aws__k8s_cluster_using_kops/
    │           │   └── ReadMe.md
    │           ├── task_017__aws__updating_a_kops_cluster/
    │           │   └── ReadMe.md
    │           ├── task_018_aws__kong_ingress_on_eks/
    │           │   ├── ReadMe.md
    │           │   ├── echo-app/
    │           │   │   ├── dep.yaml
    │           │   │   ├── ingress-with-plugin.yaml
    │           │   │   ├── ingress.yaml
    │           │   │   ├── plugin.yaml
    │           │   │   ├── ratelimitplugin.yaml
    │           │   │   └── svc.yaml
    │           │   ├── global-plugins/
    │           │   │   └── ratelimitplugin.yaml
    │           │   ├── httpbin-app/
    │           │   │   ├── add-response-header-plugin.yaml
    │           │   │   ├── consumer.yaml
    │           │   │   ├── customizedKongIngress.yaml
    │           │   │   ├── dep.yaml
    │           │   │   ├── ingress.yaml
    │           │   │   ├── plugin-svc-http-auth.yaml
    │           │   │   ├── specific-consumer-plugin.yaml
    │           │   │   └── svc.yaml
    │           │   └── kong/
    │           │       └── values.yaml
    │           ├── task_019__gcp__elastic_search/
    │           │   └── ReadMe.md
    │           ├── task_020__gcp__basic_namespace_wide_kubeconfig/
    │           │   ├── README.md
    │           │   ├── admin-run.sh
    │           │   ├── client-run.sh
    │           │   ├── csr.cnf
    │           │   ├── csr.yaml
    │           │   ├── dev-ns.yaml
    │           │   ├── kubeconfig.tpl
    │           │   ├── reset.sh
    │           │   ├── role-binding.yaml
    │           │   ├── role.yaml
    │           │   └── www.yaml
    │           ├── task_021__gcp__intermediate_namespace_wide_kubeconfig/
    │           │   ├── README.md
    │           │   ├── admin-run.sh
    │           │   ├── client-run.sh
    │           │   ├── common-resources/
    │           │   │   ├── csr.cnf-template
    │           │   │   ├── csr.yaml
    │           │   │   ├── kubeconfig.tpl
    │           │   │   ├── role-binding.yaml-template
    │           │   │   ├── role-readonly.yaml-template
    │           │   │   └── role-readwrite.yaml-template
    │           │   ├── dev/
    │           │   │   ├── default/
    │           │   │   │   └── groupQA/
    │           │   │   │       ├── csr.yaml
    │           │   │   │       ├── dave.key
    │           │   │   │       ├── kubeconfig
    │           │   │   │       ├── role-binding.yaml
    │           │   │   │       └── role-readonly.yaml
    │           │   │   └── kube-system/
    │           │   │       └── groupDEV/
    │           │   │           ├── csr.yaml
    │           │   │           ├── dave.key
    │           │   │           ├── kubeconfig
    │           │   │           ├── role-binding.yaml
    │           │   │           └── role-readwrite.yaml
    │           │   ├── reset.sh
    │           │   ├── run-all.sh
    │           │   └── www.yaml
    │           ├── task_022__gcp__k8s_dashboard/
    │           │   ├── 00-namespace.yaml
    │           │   ├── 05-service-account.yaml
    │           │   ├── 10-service.yaml
    │           │   ├── 15-secret.yaml
    │           │   ├── 20-configmap.yaml
    │           │   ├── 25-role.yaml
    │           │   ├── 30-clusterRole.yaml
    │           │   ├── 35-roleBinding.yaml
    │           │   ├── 40-clusterRoleBinding.yaml
    │           │   ├── 45-deployment.yaml
    │           │   ├── 50-service-kubernetes-dashboard.yaml
    │           │   ├── 55-service-dashboard-metrics-scraper.yaml
    │           │   ├── 60-admin-service-account.yaml
    │           │   └── README.md
    │           ├── task_023__gcp__traefik_whoami/
    │           │   ├── 00-resource-crd-definition.yml
    │           │   ├── 05-traefik-rbac.yml
    │           │   ├── 10-service-account.yaml
    │           │   ├── 15-traefik-deployment.yaml
    │           │   ├── 16-traefik.toml
    │           │   ├── 20-traefik-service.yaml
    │           │   ├── 25-whoami-deployment.yaml
    │           │   ├── 30-whoami-service.yaml
    │           │   ├── 35-whoami-ingress-route.yaml
    │           │   └── ReadMe.md
    │           ├── task_024__gcp__traefik_whoami_tomlInConfigMap/
    │           │   ├── 00-resource-crd-definition.yml
    │           │   ├── 05-traefik-rbac.yml
    │           │   ├── 10-service-account.yaml
    │           │   ├── 15-traefik-deployment.yaml
    │           │   ├── 20-traefik-service.yaml
    │           │   ├── 24-traefik-configMap.yaml
    │           │   ├── 25-whoami-deployment.yaml
    │           │   ├── 30-whoami-service.yaml
    │           │   ├── 35-whoami-ingress-route.yaml
    │           │   └── ReadMe.md
    │           ├── task_025__gcp__traefik_whoami_lets_encrypt/
    │           │   ├── 00-resource-crd-definition.yml
    │           │   ├── 05-traefik-rbac.yml
    │           │   ├── 10-service-account.yaml
    │           │   ├── 15-traefik-deployment.yaml
    │           │   ├── 20-traefik-service.yaml
    │           │   ├── 25-whoami-deployment.yaml
    │           │   ├── 30-whoami-service.yaml
    │           │   ├── 35-ingress-route.yaml
    │           │   └── ReadMe.md
    │           ├── task_026__gcp__external_IP_to_access_Application_In_Cluster/
    │           │   ├── ReadMe.md
    │           │   └── service/
    │           │       └── load-balancer-example.yaml
    │           ├── task_027__gcp__intermediate_cluster_wide_kubeconfig/
    │           │   ├── README.md
    │           │   ├── admin-run.sh
    │           │   ├── client-run.sh
    │           │   ├── common-resources/
    │           │   │   ├── clusterRole-binding.yaml-template
    │           │   │   ├── clusterRole-readonly.yaml-template
    │           │   │   ├── clusterRole-readwrite.yaml-template
    │           │   │   ├── csr.cnf-template
    │           │   │   ├── csr.yaml
    │           │   │   └── kubeconfig.tpl
    │           │   ├── dev/
    │           │   │   ├── groupDEV/
    │           │   │   │   ├── clusterRole-binding.yaml
    │           │   │   │   ├── clusterRole-readwrite.yaml
    │           │   │   │   ├── csr.yaml
    │           │   │   │   ├── dave.key
    │           │   │   │   └── kubeconfig
    │           │   │   └── groupQA/
    │           │   │       ├── clusterRole-binding.yaml
    │           │   │       ├── clusterRole-readonly.yaml
    │           │   │       ├── csr.yaml
    │           │   │       ├── dave.key
    │           │   │       └── kubeconfig
    │           │   ├── reset.sh
    │           │   ├── run-all.sh
    │           │   └── www.yaml
    │           ├── task_028__gcp__configuring_datadog/
    │           │   ├── 00-clusterrole.yaml
    │           │   ├── 01-cluster-role.yaml
    │           │   ├── 05-serviceaccount.yaml
    │           │   ├── 06-service-account.yaml
    │           │   ├── 10-clusterrolebinding.yaml
    │           │   ├── 11-cluster-role-binding.yaml
    │           │   ├── 20-datadog-cluster-agent.yaml
    │           │   ├── 25-datadog-agent.yaml
    │           │   ├── 30-service.yaml
    │           │   ├── 35-deployment.yaml
    │           │   └── ReadMe.md
    │           ├── task_029__gcp__configuring_dns_with_static_IPs_k8_using_Ingress/
    │           │   ├── ReadMe.md
    │           │   ├── helloweb-deployment.yaml
    │           │   └── helloweb-ingress.yaml
    │           ├── task_030__gcp__PodSecurityPolicy/
    │           │   ├── ReadMe.md
    │           │   └── example-psp.yaml
    │           ├── task_031__gcp__kube_state_metrics/
    │           │   ├── ReadMe.md
    │           │   ├── cluster-role-binding.yaml
    │           │   ├── cluster-role.yaml
    │           │   ├── deployment.yaml
    │           │   ├── service-account.yaml
    │           │   └── service.yaml
    │           ├── task_032__gcp__traefik_whoami_tls_custom_certs/
    │           │   ├── 00-resource-crd-definition.yml
    │           │   ├── 05-traefik-rbac.yml
    │           │   ├── 10-service-account.yaml
    │           │   ├── 11-traefik-configmap.yaml
    │           │   ├── 12-secret.yaml
    │           │   ├── 15-traefik-deployment.yaml
    │           │   ├── 20-traefik-service.yaml
    │           │   ├── 25-whoami-deployment.yaml
    │           │   ├── 30-whoami-service.yaml
    │           │   ├── 35-whoami-ingress-route.yaml
    │           │   └── ReadMe.md
    │           ├── task_033__gcp__configuring_dns_with_static_IPs_k8_using_Service/
    │           │   ├── ReadMe.md
    │           │   ├── helloweb-deployment.yaml
    │           │   └── helloweb-service.yaml
    │           ├── task_034__gcp__metricbeat/
    │           │   ├── 00-service-account.yaml
    │           │   ├── 04-cluster-role.yaml
    │           │   ├── 08-cluster-role-binding.yaml
    │           │   ├── 12-configmap-metricbeat-deployment.yaml
    │           │   ├── 16-configmap-metricbeat-daemonset.yaml
    │           │   ├── 20-daemonset.yaml
    │           │   ├── 24-deployment.yaml
    │           │   └── ReadMe.md
    │           ├── task_035__gcp__journalbeat/
    │           │   ├── 00-service-account.yaml
    │           │   ├── 02-cluster-role.yaml
    │           │   ├── 03-cluster-role-binding.yaml
    │           │   ├── 04-pod-security-policy.yaml
    │           │   ├── 08-configmap.yaml
    │           │   ├── 12-daemonset.yaml
    │           │   └── ReadMe.md
    │           ├── task_036__gcp_vm__cert_manager_lets_encypt_http_validation/
    │           │   ├── ReadMe.md
    │           │   ├── cert-manager.yaml
    │           │   ├── certificate.yaml
    │           │   ├── cluster-issuer.yaml
    │           │   ├── dep-whoami.yaml
    │           │   ├── ingress.yaml
    │           │   └── service.yaml
    │           ├── task_037__gcp_k8s__cert_manager_lets_encypt_http_validation/
    │           │   ├── ReadMe.md
    │           │   ├── cert-manager.yaml
    │           │   ├── certificate.yaml
    │           │   ├── cluster-issuer.yaml
    │           │   ├── dep-whoami.yaml
    │           │   ├── ingress.yaml
    │           │   ├── service.yaml
    │           │   └── svc.yaml
    │           ├── task_038__local__kind__extramounts_for_pv_and_pvc/
    │           │   ├── ReadMe.md
    │           │   ├── kind_extramounts_config.yaml
    │           │   ├── pod.yaml
    │           │   ├── pv.yaml
    │           │   └── pvc.yaml
    │           ├── task_039__local__kind__prometheus_operator__kube_prometheus_grafana_alertmanager/
    │           │   ├── ReadMe.md
    │           │   └── kind-config.yaml
    │           ├── task_040__local__kind__bitnami_loki___using_39/
    │           │   ├── ReadMe.md
    │           │   ├── log-generator-pod.yaml
    │           │   └── loki.yaml
    │           ├── task_041__gcp_k8s__nginx_ingress/
    │           │   ├── ReadMe.md
    │           │   ├── base/
    │           │   │   ├── app/
    │           │   │   │   ├── dep_whoami.yaml
    │           │   │   │   ├── ingress_whoami.yaml
    │           │   │   │   └── svc_whoami.yaml
    │           │   │   └── ingress-nginx/
    │           │   │       ├── configmap_patch.yaml
    │           │   │       ├── deployment_patch.yaml
    │           │   │       ├── ingressclass_patch.yaml
    │           │   │       ├── kustomization.yaml
    │           │   │       ├── namespace.yaml
    │           │   │       └── service_patch.yaml
    │           │   ├── build/
    │           │   │   └── ingress_nginx_ext_all.yaml
    │           │   └── vendor/
    │           │       └── ingress-nginx/
    │           │           ├── ingress-nginx-ext-vendor.yaml
    │           │           └── kustomization.yaml
    │           ├── task_042__gcp_k8s__cert_manager_dns_validation___using_41/
    │           │   ├── ReadMe.md
    │           │   ├── base/
    │           │   │   ├── app/
    │           │   │   │   ├── dep_echo.yaml
    │           │   │   │   ├── dep_whoami.yaml
    │           │   │   │   ├── ingress_echo.yaml
    │           │   │   │   ├── ingress_whoami.yaml
    │           │   │   │   ├── kustomization.yaml
    │           │   │   │   ├── svc_echo.yaml
    │           │   │   │   └── svc_whoami.yaml
    │           │   │   └── cert-manager/
    │           │   │       ├── certificate-letsEncryptProd.yaml
    │           │   │       ├── certificate-letsEncryptStaging.yaml
    │           │   │       ├── clusterIssuer-letsEncryptProd.yaml
    │           │   │       ├── clusterIssuer-letsEncryptStaging.yaml
    │           │   │       ├── kustomization.yaml
    │           │   │       └── namespace.yaml
    │           │   ├── build/
    │           │   │   ├── app_all.yaml
    │           │   │   └── cert_manager_all.yaml
    │           │   └── vendor/
    │           │       └── cert-manager/
    │           │           ├── cert-manager-vendor.yaml
    │           │           └── kustomization.yaml
    │           ├── task_043_gcp_k8s__codecentric_keycloak__bitnami_postgres___using_41_42/
    │           │   ├── ReadMe.md
    │           │   ├── base/
    │           │   │   ├── keycloakx/
    │           │   │   │   ├── ingress_keycloak.yaml
    │           │   │   │   └── kustomization.yaml
    │           │   │   └── postgresql/
    │           │   │       └── namespace.yaml
    │           │   └── build/
    │           │       └── keycloakx_all.yaml
    │           ├── task_044_gcp_k8s__prometheus_operator__kube_prometheus_grafana_alertmanager___using_41_42_43/
    │           │   ├── ReadMe.md
    │           │   ├── base/
    │           │   │   └── kube_prometheus/
    │           │   │       ├── alertmanager_ingress.yaml
    │           │   │       ├── grafana_ingress.yaml
    │           │   │       ├── kustomization.yaml
    │           │   │       └── prometheus_ingress.yaml
    │           │   ├── build/
    │           │   │   └── kube_prometheus_all.yaml
    │           │   └── vendor/
    │           │       └── kube_prometheus/
    │           │           ├── kustomization.yaml
    │           │           └── manifests/
    │           │               ├── alertmanager-alertmanager.yaml
    │           │               ├── alertmanager-networkPolicy.yaml
    │           │               ├── alertmanager-podDisruptionBudget.yaml
    │           │               ├── alertmanager-prometheusRule.yaml
    │           │               ├── alertmanager-secret.yaml
    │           │               ├── alertmanager-service.yaml
    │           │               ├── alertmanager-serviceAccount.yaml
    │           │               ├── alertmanager-serviceMonitor.yaml
    │           │               ├── blackboxExporter-clusterRole.yaml
    │           │               ├── blackboxExporter-clusterRoleBinding.yaml
    │           │               ├── blackboxExporter-configuration.yaml
    │           │               ├── blackboxExporter-deployment.yaml
    │           │               ├── blackboxExporter-networkPolicy.yaml
    │           │               ├── blackboxExporter-service.yaml
    │           │               ├── blackboxExporter-serviceAccount.yaml
    │           │               ├── blackboxExporter-serviceMonitor.yaml
    │           │               ├── grafana-config.yaml
    │           │               ├── grafana-dashboardDatasources.yaml
    │           │               ├── grafana-dashboardDefinitions.yaml
    │           │               ├── grafana-dashboardSources.yaml
    │           │               ├── grafana-deployment.yaml
    │           │               ├── grafana-networkPolicy.yaml
    │           │               ├── grafana-prometheusRule.yaml
    │           │               ├── grafana-service.yaml
    │           │               ├── grafana-serviceAccount.yaml
    │           │               ├── grafana-serviceMonitor.yaml
    │           │               ├── kubePrometheus-prometheusRule.yaml
    │           │               ├── kubeStateMetrics-clusterRole.yaml
    │           │               ├── kubeStateMetrics-clusterRoleBinding.yaml
    │           │               ├── kubeStateMetrics-deployment.yaml
    │           │               ├── kubeStateMetrics-networkPolicy.yaml
    │           │               ├── kubeStateMetrics-prometheusRule.yaml
    │           │               ├── kubeStateMetrics-service.yaml
    │           │               ├── kubeStateMetrics-serviceAccount.yaml
    │           │               ├── kubeStateMetrics-serviceMonitor.yaml
    │           │               ├── kubernetesControlPlane-prometheusRule.yaml
    │           │               ├── kubernetesControlPlane-serviceMonitorApiserver.yaml
    │           │               ├── kubernetesControlPlane-serviceMonitorCoreDNS.yaml
    │           │               ├── kubernetesControlPlane-serviceMonitorKubeControllerManager.yaml
    │           │               ├── kubernetesControlPlane-serviceMonitorKubeScheduler.yaml
    │           │               ├── kubernetesControlPlane-serviceMonitorKubelet.yaml
    │           │               ├── nodeExporter-clusterRole.yaml
    │           │               ├── nodeExporter-clusterRoleBinding.yaml
    │           │               ├── nodeExporter-daemonset.yaml
    │           │               ├── nodeExporter-networkPolicy.yaml
    │           │               ├── nodeExporter-prometheusRule.yaml
    │           │               ├── nodeExporter-service.yaml
    │           │               ├── nodeExporter-serviceAccount.yaml
    │           │               ├── nodeExporter-serviceMonitor.yaml
    │           │               ├── prometheus-clusterRole.yaml
    │           │               ├── prometheus-clusterRoleBinding.yaml
    │           │               ├── prometheus-networkPolicy.yaml
    │           │               ├── prometheus-podDisruptionBudget.yaml
    │           │               ├── prometheus-prometheus.yaml
    │           │               ├── prometheus-prometheusRule.yaml
    │           │               ├── prometheus-roleBindingConfig.yaml
    │           │               ├── prometheus-roleBindingSpecificNamespaces.yaml
    │           │               ├── prometheus-roleConfig.yaml
    │           │               ├── prometheus-roleSpecificNamespaces.yaml
    │           │               ├── prometheus-service.yaml
    │           │               ├── prometheus-serviceAccount.yaml
    │           │               ├── prometheus-serviceMonitor.yaml
    │           │               ├── prometheusAdapter-apiService.yaml
    │           │               ├── prometheusAdapter-clusterRole.yaml
    │           │               ├── prometheusAdapter-clusterRoleAggregatedMetricsReader.yaml
    │           │               ├── prometheusAdapter-clusterRoleBinding.yaml
    │           │               ├── prometheusAdapter-clusterRoleBindingDelegator.yaml
    │           │               ├── prometheusAdapter-clusterRoleServerResources.yaml
    │           │               ├── prometheusAdapter-configMap.yaml
    │           │               ├── prometheusAdapter-deployment.yaml
    │           │               ├── prometheusAdapter-networkPolicy.yaml
    │           │               ├── prometheusAdapter-podDisruptionBudget.yaml
    │           │               ├── prometheusAdapter-roleBindingAuthReader.yaml
    │           │               ├── prometheusAdapter-service.yaml
    │           │               ├── prometheusAdapter-serviceAccount.yaml
    │           │               ├── prometheusAdapter-serviceMonitor.yaml
    │           │               ├── prometheusOperator-clusterRole.yaml
    │           │               ├── prometheusOperator-clusterRoleBinding.yaml
    │           │               ├── prometheusOperator-deployment.yaml
    │           │               ├── prometheusOperator-networkPolicy.yaml
    │           │               ├── prometheusOperator-prometheusRule.yaml
    │           │               ├── prometheusOperator-service.yaml
    │           │               ├── prometheusOperator-serviceAccount.yaml
    │           │               ├── prometheusOperator-serviceMonitor.yaml
    │           │               └── setup/
    │           │                   ├── 0alertmanagerConfigCustomResourceDefinition.yaml
    │           │                   ├── 0alertmanagerCustomResourceDefinition.yaml
    │           │                   ├── 0podmonitorCustomResourceDefinition.yaml
    │           │                   ├── 0probeCustomResourceDefinition.yaml
    │           │                   ├── 0prometheusCustomResourceDefinition.yaml
    │           │                   ├── 0prometheusagentCustomResourceDefinition.yaml
    │           │                   ├── 0prometheusruleCustomResourceDefinition.yaml
    │           │                   ├── 0scrapeconfigCustomResourceDefinition.yaml
    │           │                   ├── 0servicemonitorCustomResourceDefinition.yaml
    │           │                   ├── 0thanosrulerCustomResourceDefinition.yaml
    │           │                   └── namespace.yaml
    │           ├── task_045__local__kind__extra_port_mappings/
    │           │   ├── ReadMe.md
    │           │   ├── kind_nodeport_config.yaml
    │           │   └── pod.yaml
    │           ├── task_046__local__kind__nodeport_with_port_mapping/
    │           │   ├── ReadMe.md
    │           │   ├── kind_config_node_port.yaml
    │           │   ├── pod.yaml
    │           │   └── svc.yaml
    │           ├── task_047__local__kind__ingress_nginx/
    │           │   ├── ReadMe.md
    │           │   ├── ingress.yaml
    │           │   ├── kind_config_ingress_nginx.yaml
    │           │   ├── pod_bar_app.yaml
    │           │   ├── pod_foo_app.yaml
    │           │   ├── svc_bar.yaml
    │           │   └── svc_foo.yaml
    │           ├── task_048__local__kind__cilium__hubble_ui__nginx_ingress/
    │           │   ├── ReadMe.md
    │           │   ├── ingress.yaml
    │           │   └── kind-config.yaml
    │           ├── task_049__openshift__deploy_sample_backend_app/
    │           │   ├── ReadMe.md
    │           │   └── k8s-qotd-python/
    │           │       ├── deploymentconfig.yaml
    │           │       ├── ingress.yaml
    │           │       ├── quotes-deployment.yaml
    │           │       ├── route.yaml
    │           │       └── service.yaml
    │           ├── task_050__local__kind__headless_svc/
    │           │   ├── ReadMe.md
    │           │   ├── headless-svc.yaml
    │           │   └── nginx-pods.yaml
    │           ├── task_051__local__kind__linkerd/
    │           │   └── ReadMe.md
    │           ├── task_052__local__kind__linkerd_with_custom_certs/
    │           │   ├── ReadMe.md
    │           │   ├── ca.crt
    │           │   ├── ca.key
    │           │   ├── issuer.crt
    │           │   └── issuer.key
    │           ├── task_053__local__kind__linkerd_auto_rotate_control_plane_TLS_credentials/
    │           │   ├── ReadMe.md
    │           │   ├── ca.crt
    │           │   ├── ca.key
    │           │   ├── certificate.yaml
    │           │   └── issuer.yaml
    │           ├── task_054__local__kind__linkerd_auto_rotate_webhook_tls_credentials/
    │           │   ├── ReadMe.md
    │           │   ├── ca.crt
    │           │   ├── ca.key
    │           │   ├── certificate-linkerd-proxy-injector.yaml
    │           │   ├── certificate-linkerd-proxy-validator.yaml
    │           │   ├── certificate-linkerd-sp-validator.yaml
    │           │   ├── certificate-linkerd-tap-injector.yaml
    │           │   ├── certificate-tap.yaml
    │           │   ├── webhook-issuer-viz.yaml
    │           │   └── webhook-issuer.yaml
    │           ├── task_055__aws_eks__gcp_gke___istio_getting_started/
    │           │   ├── ReadMe.md
    │           │   ├── gateway.yaml
    │           │   └── virtualservice.yaml
    │           ├── task_056__aws_eks__gcp_gke__istio__request_routing/
    │           │   ├── ReadMe.md
    │           │   ├── concepts.md
    │           │   ├── destination-rule-all.yaml
    │           │   ├── virtual-service-all-v1.yaml
    │           │   └── virtual-service-reviews-test-v2.yaml
    │           ├── task_057__aws_eks__gcp_gke__istio__fault_injection__http_delay__http_abort/
    │           │   ├── ReadMe.md
    │           │   ├── destination-rule-all.yaml
    │           │   ├── virtual-service-all-v1.yaml
    │           │   ├── virtual-service-ratings-test-abort.yaml
    │           │   ├── virtual-service-ratings-test-delay.yaml
    │           │   └── virtual-service-reviews-test-v2.yaml
    │           ├── task_058__aws_eks__gcp_gke__istio__traffic_shifting/
    │           │   ├── ReadMe.md
    │           │   ├── destination-rule-all.yaml
    │           │   ├── virtual-service-all-v1.yaml
    │           │   ├── virtual-service-reviews-50-v3.yaml
    │           │   └── virtual-service-reviews-v3.yaml
    │           ├── task_059__aws_eks__gcp_gke__istio__request_timeouts/
    │           │   ├── ReadMe.md
    │           │   ├── destination-rule-all.yaml
    │           │   └── virtual-service-all-v1.yaml
    │           ├── task_060__gcp_gke__istio__tcp_traffic_shifting/
    │           │   ├── ReadMe.md
    │           │   ├── destination-rule-all.yaml
    │           │   └── virtual-service-all-v1.yaml
    │           ├── task_061__gcp_gke__istio__circuit_breaking/
    │           │   ├── ReadMe.md
    │           │   └── fortio-deploy.yaml
    │           ├── task_062__gcp_gke__istio__mirroring/
    │           │   ├── ReadMe.md
    │           │   └── fortio-deploy.yaml
    │           ├── task_063__gcp_gke__istio__ingress__ingress_gateways/
    │           │   └── ReadMe.md
    │           ├── task_064__gcp_gke__istio__ingres__secure_gateways__TLS__mTLS/
    │           │   ├── ReadMe.md
    │           │   └── helloworld.yaml
    │           ├── task_065__gcp_gke__ingress_gateway_without_TLS_Termination/
    │           │   ├── ReadMe.md
    │           │   └── nginx.conf
    │           ├── task_066__gcp_gke__ingress_kubernetes_ingress/
    │           │   └── ReadMe.md
    │           └── task_067__gcp_gke__egress__accessing_external_service/
    │               └── ReadMe.md
    ├── databases/
    │   ├── mongo/
    │   │   ├── ReadMe-static.md
    │   │   ├── ReadMe.md
    │   │   └── taskset_mongo_databases/
    │   │       ├── task_001_connecting_to_db/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_creating_db_inserting_data/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_mongodump/
    │   │       │   └── ReadMe.md
    │   │       └── task_004_mongorestore/
    │   │           └── ReadMe.md
    │   ├── mssql/
    │   │   ├── ReadMe.md
    │   │   ├── ReadMe_static.md
    │   │   └── taskset_mssql_databases/
    │   │       ├── ReadMe-static.md
    │   │       ├── task_000_docs_and_vscode_setup/
    │   │       │   ├── ReadMe.md
    │   │       │   └── settings.json
    │   │       ├── task_001_connecting_to_db/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_show_databases/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_drop_database/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_get_current_database/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_create_database/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_check_version/
    │   │       │   └── ReadMe.md
    │   │       ├── task_007_create_database__if_not_exists__vars_navchar/
    │   │       │   └── ReadMe.md
    │   │       ├── task_008_count_tables_in_database/
    │   │       │   └── ReadMe.md
    │   │       ├── task_009_switch_to_particular_db/
    │   │       │   └── ReadMe.md
    │   │       ├── task_010_create_table__if_not_exists/
    │   │       │   └── ReadMe.md
    │   │       ├── task_011_insert_records__if_not_exists/
    │   │       │   └── ReadMe.md
    │   │       ├── task_012_select_all_from_table/
    │   │       │   └── ReadMe.md
    │   │       ├── task_013_create_credential_and_select_credential/
    │   │       │   └── ReadMe.md
    │   │       ├── task_014_full_backup_to_s3_compatible_object_storage__with_format/
    │   │       │   └── ReadMe.md
    │   │       ├── task_015_get_connection_info__kill/
    │   │       │   └── ReadMe.md
    │   │       ├── task_016_full_backup_to_disk__with_format/
    │   │       │   └── ReadMe.md
    │   │       ├── task_017_show_all_tables_in_specific_database/
    │   │       │   └── ReadMe.md
    │   │       ├── task_018_inspect_backup_to_disk__with_init_and_differential/
    │   │       │   └── ReadMe.md
    │   │       ├── task_019_restore_full_backup__from_disk/
    │   │       │   └── ReadMe.md
    │   │       ├── task_020_full_backup_to_disk__with_init_and_differential/
    │   │       │   └── ReadMe.md
    │   │       ├── task_021_restore_from_full_backup_on_disk__with_init_and_differential/
    │   │       │   └── ReadMe.md
    │   │       ├── task_022_full_base_and_differential_backup_to_s3/
    │   │       │   └── ReadMe.md
    │   │       ├── task_023_restore_full_base_and_differential_backup_to_s3/
    │   │       │   └── ReadMe.md
    │   │       ├── task_024_get_current_date_and_time/
    │   │       │   └── ReadMe.md
    │   │       ├── task_025_licence_and_version/
    │   │       │   └── ReadMe.md
    │   │       ├── task_026_check_default_schema/
    │   │       │   └── ReadMe.md
    │   │       ├── task_027_stored_procedures/
    │   │       │   └── ReadMe.md
    │   │       ├── task_028_create_and_validate_jobs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_029_add_jobstep_and_validate/
    │   │       │   └── ReadMe.md
    │   │       ├── task_030_add_job_schedule_and_validate/
    │   │       │   └── ReadMe.md
    │   │       ├── task_031_attach_schedule_to_job_and_validate/
    │   │       │   └── ReadMe.md
    │   │       ├── task_032_add_job_to_server_and_validate/
    │   │       │   └── ReadMe.md
    │   │       ├── task_033_logical_backup/
    │   │       │   └── ReadMe.md
    │   │       ├── task_034_check_when_tables_in_given_database_were_last_updated/
    │   │       │   └── ReadMe.md
    │   │       ├── task_035_slow_queries/
    │   │       │   └── ReadMe.md
    │   │       └── task_036_monitoring_using_influxdb_telegraf_grafana/
    │   │           ├── ReadMe.md
    │   │           └── docker-compose.yaml
    │   ├── mysql/
    │   │   ├── ReadMe.md
    │   │   ├── ReadMe_static.md
    │   │   └── taskset_mysql_databases/
    │   │       ├── task_001_connecting_to_db/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_mysqldump/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_managing_databases/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_managing_user/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_set_transaction_isolation_levels/
    │   │       │   └── ReadMe.md
    │   │       └── task_006_managing_tables/
    │   │           └── ReadMe.md
    │   ├── oracle19c/
    │   │   ├── ReadMe.md
    │   │   └── taskset_oracle19c_databases/
    │   │       └── task_000_clients_setup/
    │   │           ├── ReadMe.md
    │   │           └── wallet-unzipped/
    │   │               ├── cwallet.sso
    │   │               ├── ewallet.p12
    │   │               ├── keystore.jks
    │   │               ├── ojdbc.properties
    │   │               ├── sqlnet.ora
    │   │               ├── tnsnames.ora
    │   │               └── truststore.jks
    │   └── postgreSQL/
    │       ├── ReadMe-static.md
    │       ├── ReadMe.md
    │       └── taskset_postgreSQL_databases/
    │           ├── task_001_connecting_to_db/
    │           │   └── ReadMe.md
    │           ├── task_002_managing_tables/
    │           │   └── ReadMe.md
    │           ├── task_003_managing_users/
    │           │   └── ReadMe.md
    │           ├── task_004_managing_database/
    │           │   └── ReadMe.md
    │           ├── task_005_managing_schemas/
    │           │   └── ReadMe.md
    │           ├── task_006_checking_deadlock/
    │           │   └── ReadMe.md
    │           └── task_007_set__show__transaction_isolation_levels/
    │               └── ReadMe.md
    ├── devops_blogs/
    │   └── ReadMe.md
    ├── infrastructure_as_code/
    │   ├── ansible/
    │   │   ├── README.md
    │   │   ├── ReadMe-static.md
    │   │   ├── install-ansible.sh
    │   │   └── taskset_ansible_infrastructure_as_code/
    │   │       ├── task_001_commons/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       └── playbook-install-commons.yaml
    │   │       ├── task_002_datadog_agent/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       ├── playbook-install-datadog.yaml
    │   │       │       └── roles/
    │   │       │           └── datadog-agent/
    │   │       │               ├── ReadMe.md
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               ├── handlers/
    │   │       │               │   └── main.yml
    │   │       │               ├── tasks/
    │   │       │               │   ├── agent-linux.yml
    │   │       │               │   ├── agent-win.yml
    │   │       │               │   ├── agent5-linux.yml
    │   │       │               │   ├── integration.yml
    │   │       │               │   ├── main.yml
    │   │       │               │   ├── os-check.yml
    │   │       │               │   ├── parse-version.yml
    │   │       │               │   ├── pkg-debian/
    │   │       │               │   │   ├── install-latest.yml
    │   │       │               │   │   └── install-pinned.yml
    │   │       │               │   ├── pkg-debian.yml
    │   │       │               │   ├── pkg-redhat/
    │   │       │               │   │   ├── install-latest.yml
    │   │       │               │   │   └── install-pinned.yml
    │   │       │               │   ├── pkg-redhat.yml
    │   │       │               │   ├── pkg-suse/
    │   │       │               │   │   ├── install-latest.yml
    │   │       │               │   │   └── install-pinned.yml
    │   │       │               │   ├── pkg-suse.yml
    │   │       │               │   ├── pkg-windows-opts.yml
    │   │       │               │   ├── pkg-windows.yml
    │   │       │               │   ├── set-parse-version.yml
    │   │       │               │   ├── win_agent_latest.yml
    │   │       │               │   └── win_agent_version.yml
    │   │       │               └── templates/
    │   │       │                   ├── checks.yaml.j2
    │   │       │                   ├── datadog.conf.j2
    │   │       │                   ├── datadog.yaml.j2
    │   │       │                   ├── system-probe.yaml.j2
    │   │       │                   └── zypper.repo.j2
    │   │       ├── task_003_user/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       ├── playbook-create-user.yaml
    │   │       │       └── roles/
    │   │       │           └── user/
    │   │       │               ├── ReadMe.md
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               └── tasks/
    │   │       │                   ├── main.yml
    │   │       │                   └── users.yml
    │   │       ├── task_004_directory/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       ├── playbook-create-directory.yaml
    │   │       │       └── roles/
    │   │       │           └── user/
    │   │       │               ├── ReadMe.md
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               └── tasks/
    │   │       │                   ├── main.yml
    │   │       │                   └── users.yml
    │   │       ├── task_005_docker/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── docker-compose-install.yml
    │   │       │       ├── docker-drone-ci-setup.yml
    │   │       │       ├── drone-ci.yml
    │   │       │       ├── drone-runner.yml
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       ├── monit-install.yml
    │   │       │       ├── playbook-create-directory.yaml
    │   │       │       ├── playbook-create-user.yaml
    │   │       │       ├── playbook-install-commons.yaml
    │   │       │       ├── playbook-install-datadog.yaml
    │   │       │       ├── playbook-install-docker_docker-compose.yaml
    │   │       │       ├── playbook-install-elastic-search-cluster-docker.yaml
    │   │       │       ├── playbook-install-jenkins-docker.yaml
    │   │       │       ├── playbook-install-kibana-docker.yaml
    │   │       │       ├── playbook-install-monit.yaml
    │   │       │       └── roles/
    │   │       │           └── docker/
    │   │       │               ├── README.md
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               ├── handlers/
    │   │       │               │   └── main.yml
    │   │       │               └── tasks/
    │   │       │                   ├── docker-compose.yml
    │   │       │                   ├── docker-users.yml
    │   │       │                   ├── main.yml
    │   │       │                   ├── setup-Debian.yml
    │   │       │                   └── setup-RedHat.yml
    │   │       ├── task_005_drone_ci/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── docker-drone-ci-setup.yml
    │   │       │       ├── drone-ci.yml
    │   │       │       ├── drone-runner.yml
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       └── roles/
    │   │       │           └── drone-ci/
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               ├── tasks/
    │   │       │               │   └── main.yml
    │   │       │               └── templates/
    │   │       │                   ├── conf/
    │   │       │                   │   ├── docker-compose.yml
    │   │       │                   │   └── server.env
    │   │       │                   └── system/
    │   │       │                       └── drone.service
    │   │       ├── task_006_elastic_search_cluster_docker/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       └── playbook-install-elastic-search-cluster-docker.yaml
    │   │       ├── task_007_jenkins_docker/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       ├── playbook-install-jenkins-docker.yaml
    │   │       │       └── roles/
    │   │       │           ├── commons/
    │   │       │           │   ├── ReadMe.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   └── tasks/
    │   │       │           │       ├── Debian/
    │   │       │           │       │   ├── install-atom-ide.yml
    │   │       │           │       │   ├── setup-Debian.yml
    │   │       │           │       │   └── setup-my-workstation.yml
    │   │       │           │       └── main.yml
    │   │       │           ├── directory/
    │   │       │           │   ├── ReadMe.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   └── tasks/
    │   │       │           │       ├── configure.yml
    │   │       │           │       └── main.yml
    │   │       │           ├── docker/
    │   │       │           │   ├── README.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   ├── handlers/
    │   │       │           │   │   └── main.yml
    │   │       │           │   └── tasks/
    │   │       │           │       ├── docker-compose.yml
    │   │       │           │       ├── docker-users.yml
    │   │       │           │       ├── main.yml
    │   │       │           │       ├── setup-Debian.yml
    │   │       │           │       └── setup-RedHat.yml
    │   │       │           ├── jenkins-docker/
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   ├── handlers/
    │   │       │           │   │   └── main.yaml
    │   │       │           │   ├── tasks/
    │   │       │           │   │   ├── install-jenkins.yaml
    │   │       │           │   │   ├── main.yml
    │   │       │           │   │   └── plugins.yml
    │   │       │           │   └── templates/
    │   │       │           │       ├── Caddyfile
    │   │       │           │       ├── docker-compose.yml
    │   │       │           │       ├── install-plugins.groovy
    │   │       │           │       └── plugins.txt
    │   │       │           └── user/
    │   │       │               ├── ReadMe.md
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               └── tasks/
    │   │       │                   ├── main.yml
    │   │       │                   └── users.yml
    │   │       ├── task_008_kibana_docker/
    │   │       │   └── playbooks/
    │   │       │       ├── ansible.cfg
    │   │       │       ├── inventory.ini
    │   │       │       ├── inventory.yml
    │   │       │       ├── playbook-install-kibana-docker.yaml
    │   │       │       └── roles/
    │   │       │           ├── commons/
    │   │       │           │   ├── ReadMe.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   └── tasks/
    │   │       │           │       ├── Debian/
    │   │       │           │       │   ├── install-atom-ide.yml
    │   │       │           │       │   ├── setup-Debian.yml
    │   │       │           │       │   └── setup-my-workstation.yml
    │   │       │           │       └── main.yml
    │   │       │           ├── directory/
    │   │       │           │   ├── ReadMe.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   └── tasks/
    │   │       │           │       ├── configure.yml
    │   │       │           │       └── main.yml
    │   │       │           ├── docker/
    │   │       │           │   ├── README.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yml
    │   │       │           │   ├── handlers/
    │   │       │           │   │   └── main.yml
    │   │       │           │   └── tasks/
    │   │       │           │       ├── docker-compose.yml
    │   │       │           │       ├── docker-users.yml
    │   │       │           │       ├── main.yml
    │   │       │           │       ├── setup-Debian.yml
    │   │       │           │       └── setup-RedHat.yml
    │   │       │           ├── kibana-docker/
    │   │       │           │   ├── ReadMe.md
    │   │       │           │   ├── defaults/
    │   │       │           │   │   └── main.yaml
    │   │       │           │   ├── handlers/
    │   │       │           │   │   └── main.yaml
    │   │       │           │   ├── tasks/
    │   │       │           │   │   ├── install-kibana.yaml
    │   │       │           │   │   └── main.yaml
    │   │       │           │   └── templates/
    │   │       │           │       ├── docker-compose.yaml
    │   │       │           │       └── kibana.yml
    │   │       │           └── user/
    │   │       │               ├── ReadMe.md
    │   │       │               ├── defaults/
    │   │       │               │   └── main.yml
    │   │       │               └── tasks/
    │   │       │                   ├── main.yml
    │   │       │                   └── users.yml
    │   │       └── task_009_monit/
    │   │           └── playbooks/
    │   │               ├── ansible.cfg
    │   │               ├── inventory.ini
    │   │               ├── inventory.yml
    │   │               ├── monit-install.yml
    │   │               └── roles/
    │   │                   └── monit/
    │   │                       ├── ReadMe.md
    │   │                       ├── defaults/
    │   │                       │   └── main.yml
    │   │                       ├── handlers/
    │   │                       │   └── main.yml
    │   │                       ├── tasks/
    │   │                       │   ├── main.yml
    │   │                       │   ├── os-check.yml
    │   │                       │   ├── pkg-debian/
    │   │                       │   │   ├── install-monit-specific.yml
    │   │                       │   │   └── install-monit.yml
    │   │                       │   └── pkg-redhat/
    │   │                       │       └── install-monit.yaml
    │   │                       └── templates/
    │   │                           └── monit/
    │   │                               ├── conf.d/
    │   │                               │   ├── sshd.conf
    │   │                               │   └── system.conf
    │   │                               ├── monit.id
    │   │                               └── monitrc.conf
    │   └── terraform/
    │       ├── aws/
    │       │   ├── README.md
    │       │   ├── ReadMe-static.md
    │       │   ├── credentials.txt.example
    │       │   └── taskset_aws_terraform_infrastructure_as_code/
    │       │       ├── task_000_initialization_setup/
    │       │       │   └── ReadMe.md
    │       │       ├── task_001_vars_provider_ec2_dataSources/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 02-provider.tf
    │       │       │   ├── 05-instance.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_002_defaultVPC_sbnt_sg_kp_ec2/
    │       │       │   ├── 00-var.tf
    │       │       │   ├── 05-vpc.tf
    │       │       │   ├── 15-subnet.tf
    │       │       │   ├── 25-security-group.tf
    │       │       │   ├── 30-keypair.tf
    │       │       │   ├── 35-ec2-instance.tf
    │       │       │   └── README.md
    │       │       ├── task_003_defaultVPC_kp_sbnt_sg_ec2_script/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 07-vpc.tf
    │       │       │   ├── 10-key-pair.tf
    │       │       │   ├── 15-subnet.tf
    │       │       │   ├── 20-security-group.tf
    │       │       │   ├── 25-instance.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── script.sh
    │       │       │   └── versions.tf
    │       │       ├── task_004_vars_provider_ec2_output/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-instance.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── private_ips.txt
    │       │       │   └── versions.tf
    │       │       ├── task_005_vars_provider_ec2_remoteStateInS3/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-instance.tf
    │       │       │   ├── 15-backend.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_006_defaultVPC_defaultSbnt_modules_kp/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-default_vpc.tf
    │       │       │   ├── 15-modules.tf
    │       │       │   ├── 20-key.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── mykey
    │       │       │   ├── mykey.pub
    │       │       │   └── versions.tf
    │       │       ├── task_007_customVPC_igw_sbnt_rt_sg_kp_ec2/
    │       │       │   ├── 00-var.tf
    │       │       │   ├── 05-vpc.tf
    │       │       │   ├── 10-igw.tf
    │       │       │   ├── 15-subnet.tf
    │       │       │   ├── 20-route-tables.tf
    │       │       │   ├── 25-security-group.tf
    │       │       │   ├── 30-keypair.tf
    │       │       │   ├── 35-ec2-instance.tf
    │       │       │   ├── README.md
    │       │       │   └── versions.tf
    │       │       ├── task_008_customVPC_3PriSbnts_3PubSbnts_nat_igw_rt/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 20-nat.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_009_customVPC_3PriSbnts_3PubSbnts_nat_igw_rt_ec2_ebs/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 16-securitygroup.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 20-nat.tf
    │       │       │   ├── 25-instance.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_010_customVPC_3PriSbnts_3PubSbnts_nat_igw_rt_ec2_ebs_withMount/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 16-securitygroup.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 20-nat.tf
    │       │       │   ├── 22-cloudinit.tf
    │       │       │   ├── 25-instance.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── scripts/
    │       │       │   │   ├── init.cfg
    │       │       │   │   └── volumes.sh
    │       │       │   └── versions.tf
    │       │       ├── task_011_route53/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 250-r53-devopslink_zone.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_012_rds_vpc_ec2/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 18-securitygroup.tf
    │       │       │   ├── 20-instance.tf
    │       │       │   ├── 25-rds.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_013_IAM/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-iam.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_014_IAM_roles_s3_upload_to_s3/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-iam.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 18-securitygroup.tf
    │       │       │   ├── 20-instance.tf
    │       │       │   ├── 25-s3.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_015_autoscaling_cloudwatchAlarm_ec2_launchConfiguration/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 18-securitygroup.tf
    │       │       │   ├── 20-autoscalingpolicy.tf
    │       │       │   ├── 25-autoscaling.tf
    │       │       │   ├── 30-sns.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_016_ELB_autoscaling/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 18-securitygroup.tf
    │       │       │   ├── 19-elb.tf
    │       │       │   ├── 20-autoscaling.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_017_Elastic_Beanstalk/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-iam.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 18-securitygroup.tf
    │       │       │   ├── 25-rds.tf
    │       │       │   ├── 28-elasticbeanstalk.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_018_create_ECR_repo/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 15-ecr.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── output.tf
    │       │       │   └── versions.tf
    │       │       ├── task_019_ECS/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-iam.tf
    │       │       │   ├── 15-vpc.tf
    │       │       │   ├── 17-key.tf
    │       │       │   ├── 18-securitygroup.tf
    │       │       │   ├── 20-ecr.tf
    │       │       │   ├── 25-ecs.tf
    │       │       │   ├── 28-myapp.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── templates/
    │       │       │   │   └── app.json.tpl
    │       │       │   └── versions.tf
    │       │       ├── task_020_s3_iam_using_modules/
    │       │       │   ├── ReadMe.md
    │       │       │   └── s3-bucket.tf
    │       │       ├── task_021_k8s_cluster_typhoon/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 25-cluster.tf
    │       │       │   ├── 30-output.tf
    │       │       │   └── ReadMe.md
    │       │       ├── task_022_route53_ec2/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-instance.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-route53.tf
    │       │       │   ├── 250-r53-devopslink_zone.tf
    │       │       │   ├── 30-output.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── versions.tf
    │       │       ├── task_023_terragrunt_ec2/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-ec2.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── run.sh
    │       │       ├── task_024_certificate_manager/
    │       │       │   └── ReadMe.md
    │       │       ├── task_025_terragrunt_iam_user/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-iam-user.tf
    │       │       │   ├── ReadMe.md
    │       │       │   └── run.sh
    │       │       ├── task_026_terragrunt_s3_bucket/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-s3-bucket.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── hello.txt
    │       │       │   └── run.sh
    │       │       ├── task_027_terragrunt_cdn/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-cdn.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── index.html-rename-me-to-html
    │       │       │   ├── run.sh
    │       │       │   └── secret.tfvars.example
    │       │       ├── task_029_ec2_jenkins_instance_and_slave_instance/
    │       │       │   ├── 00-vars.tf
    │       │       │   ├── 05-provider.tf
    │       │       │   ├── 10-data.tf
    │       │       │   ├── 101-ec2-jenkins.tf
    │       │       │   ├── 102-ec2-jenkins-slave.tf
    │       │       │   ├── 105-sg.tf
    │       │       │   ├── 15-key-pair.tf
    │       │       │   ├── ReadMe.md
    │       │       │   ├── jenkins.pem.pub
    │       │       │   └── run.sh
    │       │       ├── task_030_creating_eks/
    │       │       │   ├── README.md
    │       │       │   ├── eks-cluster.tf
    │       │       │   ├── kubernetes-dashboard-admin.rbac.yaml
    │       │       │   ├── kubernetes.tf
    │       │       │   ├── outputs.tf
    │       │       │   ├── run.sh
    │       │       │   ├── security-groups.tf
    │       │       │   ├── versions.tf
    │       │       │   └── vpc.tf
    │       │       └── task_031_creating_eks_spot/
    │       │           ├── README.md
    │       │           ├── eks-cluster.tf
    │       │           ├── kubernetes-dashboard-admin.rbac.yaml
    │       │           ├── kubernetes.tf
    │       │           ├── outputs.tf
    │       │           ├── run.sh
    │       │           ├── security-groups.tf
    │       │           ├── versions.tf
    │       │           └── vpc.tf
    │       ├── gcp/
    │       │   ├── ReadMe-auto-v2.md
    │       │   ├── ReadMe.md
    │       │   ├── taskset_gcp_terraform_infrastructure_as_code/
    │       │   │   ├── task_001_vpc_2inst_cloudshell/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   ├── instance/
    │       │   │   │   │   ├── main.tf
    │       │   │   │   │   └── variables.tf
    │       │   │   │   ├── mynetwork.tf
    │       │   │   │   └── provider.tf
    │       │   │   ├── task_002_1inst_dflt_vpc/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   └── main.tf
    │       │   │   ├── task_003_vars_and_resource_dependencies/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   ├── exp.tf
    │       │   │   │   ├── instance.tf
    │       │   │   │   ├── outputs.tf
    │       │   │   │   ├── provider.tf
    │       │   │   │   └── variables.tf
    │       │   │   ├── task_004_creating_remote_backend/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   └── main.tf
    │       │   │   ├── task_005_deploy_k8s_loadbalancer_service/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   ├── k8s.tf
    │       │   │   │   ├── main.tf
    │       │   │   │   ├── test.sh
    │       │   │   │   └── versions.tf
    │       │   │   ├── task_006_modular_load_balancing_regional_load_balancer/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   ├── apply.log
    │       │   │   │   ├── main.tf
    │       │   │   │   ├── outputs.tf
    │       │   │   │   ├── terraform-google-lb/
    │       │   │   │   │   └── examples/
    │       │   │   │   │       └── basic/
    │       │   │   │   │           ├── locals.tf
    │       │   │   │   │           ├── main.tf
    │       │   │   │   │           ├── network.tf
    │       │   │   │   │           ├── outputs.tf
    │       │   │   │   │           ├── provider.tf
    │       │   │   │   │           ├── templates/
    │       │   │   │   │           │   └── gceme.sh.tpl
    │       │   │   │   │           ├── variables.tf
    │       │   │   │   │           └── versions.tf
    │       │   │   │   ├── variables.tf
    │       │   │   │   └── versions.tf
    │       │   │   ├── task_007_cloud_sql/
    │       │   │   │   ├── ReadMe.md
    │       │   │   │   ├── main.tf
    │       │   │   │   ├── outputs.tf
    │       │   │   │   └── variables.tf
    │       │   │   └── task_008_building_a_vpn_between_gcp_and_aws/
    │       │   │       ├── ReadMe.md
    │       │   │       └── autonetdeploy-multicloudvpn/
    │       │   │           ├── aws_set_credentials.sh
    │       │   │           ├── create_instance.sh
    │       │   │           ├── gcp_set_credentials.sh
    │       │   │           ├── gcp_set_project.sh
    │       │   │           ├── get_terraform.sh
    │       │   │           ├── migrate_sa_roles.sh
    │       │   │           └── terraform/
    │       │   │               ├── aws_compute.tf
    │       │   │               ├── aws_networking.tf
    │       │   │               ├── aws_outputs.tf
    │       │   │               ├── aws_security.tf
    │       │   │               ├── aws_variables.tf
    │       │   │               ├── gcp_compute.tf
    │       │   │               ├── gcp_networking.tf
    │       │   │               ├── gcp_outputs.tf
    │       │   │               ├── gcp_security.tf
    │       │   │               ├── gcp_variables.tf
    │       │   │               ├── main.tf
    │       │   │               ├── run_graph.sh
    │       │   │               └── vm_userdata.sh
    │       │   └── update-readme.php
    │       └── oci/
    │           ├── ReadMe-static.md
    │           ├── ReadMe.md
    │           └── taskset_oci_terraform_infrastructure_as_code/
    │               ├── task_000_initialization_setup/
    │               │   ├── 00-vars.tf
    │               │   ├── ReadMe.md
    │               │   ├── availability-domains.tf
    │               │   ├── output.tf
    │               │   └── provider.tf
    │               ├── task_001_create_a_compartment/
    │               │   ├── 00-vars.tf
    │               │   ├── 01-provider.tf
    │               │   ├── 02-compartments.tf
    │               │   ├── 03-outputs.tf
    │               │   └── ReadMe.md
    │               ├── task_002_create_vcn/
    │               │   ├── 00-vars.tf
    │               │   ├── 01-provider.tf
    │               │   ├── 02-vcn-module.tf
    │               │   ├── 05-private-security-list.tf
    │               │   ├── 06-public-security-list.tf
    │               │   ├── 08-private-subnet.tf
    │               │   ├── 09-public-subnet.tf
    │               │   ├── 10-outputs.tf
    │               │   └── ReadMe.md
    │               └── task_003_create_instance/
    │                   ├── 00-vars.tf
    │                   ├── 01-provider.tf
    │                   ├── 02-compartments.tf
    │                   ├── 03-outputs.tf
    │                   ├── 04-compute.tf
    │                   ├── ReadMe.md
    │                   └── availability-domains.tf
    ├── interview/
    │   ├── ReadMe-static.md
    │   ├── ReadMe.md
    │   └── coding_assignments/
    │       ├── ReadMe.md
    │       └── taskset_coding_assignments_interview/
    │           ├── ReadMe.md
    │           ├── task_001_nodejs_docker_app/
    │           │   ├── ReadMe.md
    │           │   └── node_project/
    │           │       ├── .dockerignore
    │           │       ├── Dockerfile
    │           │       ├── app.js
    │           │       ├── package.json
    │           │       └── views/
    │           │           ├── css/
    │           │           │   └── styles.css
    │           │           ├── index.html
    │           │           └── sharks.html
    │           ├── task_002_nodejs_mongo_docker/
    │           │   ├── ReadMe.md
    │           │   └── node_project/
    │           │       ├── .dockerignore
    │           │       ├── .gitignore
    │           │       ├── Dockerfile
    │           │       ├── app.js
    │           │       ├── controllers/
    │           │       │   └── sharks.js
    │           │       ├── db.js
    │           │       ├── models/
    │           │       │   └── sharks.js
    │           │       ├── package.json
    │           │       ├── routes/
    │           │       │   ├── index.js
    │           │       │   └── sharks.js
    │           │       └── views/
    │           │           ├── css/
    │           │           │   └── styles.css
    │           │           ├── getshark.html
    │           │           ├── index.html
    │           │           └── sharks.html
    │           ├── task_003_nodejs_mongo_docker_compose/
    │           │   ├── README.md
    │           │   └── node_project/
    │           │       ├── .dockerignore
    │           │       ├── .gitignore
    │           │       ├── Dockerfile
    │           │       ├── app.js
    │           │       ├── controllers/
    │           │       │   └── sharks.js
    │           │       ├── db.js
    │           │       ├── docker-compose.yaml
    │           │       ├── models/
    │           │       │   └── sharks.js
    │           │       ├── package.json
    │           │       ├── routes/
    │           │       │   ├── index.js
    │           │       │   └── sharks.js
    │           │       ├── views/
    │           │       │   ├── css/
    │           │       │   │   └── styles.css
    │           │       │   ├── getshark.html
    │           │       │   ├── index.html
    │           │       │   └── sharks.html
    │           │       └── wait-for.sh
    │           ├── task_004_nodejs_mongo_k8s/
    │           │   ├── README.md
    │           │   ├── db-deployment.yaml
    │           │   ├── db-service.yaml
    │           │   ├── dbdata-persistentvolumeclaim.yaml
    │           │   ├── node_project/
    │           │   │   ├── .dockerignore
    │           │   │   ├── .gitignore
    │           │   │   ├── Dockerfile
    │           │   │   ├── app.js
    │           │   │   ├── controllers/
    │           │   │   │   └── sharks.js
    │           │   │   ├── db.js
    │           │   │   ├── docker-compose.yaml
    │           │   │   ├── models/
    │           │   │   │   └── sharks.js
    │           │   │   ├── package.json
    │           │   │   ├── routes/
    │           │   │   │   ├── index.js
    │           │   │   │   └── sharks.js
    │           │   │   ├── views/
    │           │   │   │   ├── css/
    │           │   │   │   │   └── styles.css
    │           │   │   │   ├── getshark.html
    │           │   │   │   ├── index.html
    │           │   │   │   └── sharks.html
    │           │   │   └── wait-for.sh
    │           │   ├── nodejs-deployment.yaml
    │           │   ├── nodejs-env-configmap.yaml
    │           │   ├── nodejs-service.yaml
    │           │   └── secret.yaml
    │           ├── task_005_nodejs_mongo_k8s_helm_scale/
    │           │   ├── README.md
    │           │   ├── mongodb-values.yaml
    │           │   ├── node_project/
    │           │   │   ├── .dockerignore
    │           │   │   ├── .gitignore
    │           │   │   ├── Dockerfile
    │           │   │   ├── app.js
    │           │   │   ├── controllers/
    │           │   │   │   └── sharks.js
    │           │   │   ├── db.js
    │           │   │   ├── docker-compose.yaml
    │           │   │   ├── models/
    │           │   │   │   └── sharks.js
    │           │   │   ├── package.json
    │           │   │   ├── routes/
    │           │   │   │   ├── index.js
    │           │   │   │   └── sharks.js
    │           │   │   ├── views/
    │           │   │   │   ├── css/
    │           │   │   │   │   └── styles.css
    │           │   │   │   ├── getshark.html
    │           │   │   │   ├── index.html
    │           │   │   │   └── sharks.html
    │           │   │   └── wait-for.sh
    │           │   ├── nodeapp/
    │           │   │   ├── .helmignore
    │           │   │   ├── Chart.yaml
    │           │   │   ├── templates/
    │           │   │   │   ├── NOTES.txt
    │           │   │   │   ├── _helpers.tpl
    │           │   │   │   ├── configmap.yaml
    │           │   │   │   ├── deployment.yaml
    │           │   │   │   ├── hpa.yaml
    │           │   │   │   ├── ingress.yaml
    │           │   │   │   ├── secret.yaml
    │           │   │   │   ├── service.yaml
    │           │   │   │   ├── serviceaccount.yaml
    │           │   │   │   └── tests/
    │           │   │   │       └── test-connection.yaml
    │           │   │   └── values.yaml
    │           │   ├── resources-app.yaml
    │           │   ├── resources-db.yaml
    │           │   └── secret.yaml
    │           ├── task_006_nginx_docker/
    │           │   ├── Dockerfile
    │           │   ├── ReadMe.md
    │           │   ├── conf.d/
    │           │   │   └── default.conf
    │           │   └── html/
    │           │       └── index.html
    │           ├── task_007_eks_on_demand/
    │           │   ├── README.md
    │           │   ├── credentials.txt.example
    │           │   ├── eks-cluster.tf
    │           │   ├── kubernetes-dashboard-admin.rbac.yaml
    │           │   ├── kubernetes.tf
    │           │   ├── outputs.tf
    │           │   ├── run.sh
    │           │   ├── security-groups.tf
    │           │   ├── versions.tf
    │           │   └── vpc.tf
    │           ├── task_008_k8s_nginx/
    │           │   ├── ReadMe.md
    │           │   ├── dep.yaml
    │           │   ├── hpa.yaml
    │           │   ├── ingress.yaml
    │           │   └── nginx-svc-nodeport.yaml
    │           ├── task_009_eks_spot_and_on_demand/
    │           │   ├── README.md
    │           │   ├── credentials.txt.example
    │           │   ├── eks-cluster.tf
    │           │   ├── kubernetes-dashboard-admin.rbac.yaml
    │           │   ├── kubernetes.tf
    │           │   ├── outputs.tf
    │           │   ├── run.sh
    │           │   ├── security-groups.tf
    │           │   ├── versions.tf
    │           │   └── vpc.tf
    │           └── task_010_logging_and_monitoring/
    │               ├── ReadMe.md
    │               ├── nginx.yaml
    │               └── values.yaml
    ├── observability/
    │   ├── ReadMe.md
    │   ├── metrics/
    │   │   ├── README.md
    │   │   └── taskset_metrics_observability/
    │   │       ├── task_001_host/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_system/
    │   │       │   └── ReadMe.md
    │   │       └── task_003_kubernetes/
    │   │           └── ReadMe.md
    │   ├── opentelemetry/
    │   │   ├── ReadMe.md
    │   │   └── taskset_opentelemetry_observability/
    │   │       ├── task_001_go_dice__traces_and_metrics_to_console/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── go.mod
    │   │       │   ├── go.sum
    │   │       │   ├── main.go
    │   │       │   ├── otel.go
    │   │       │   └── rolldice.go
    │   │       └── task_002_go__traces_gRPC_OTLP__jaeger/
    │   │           ├── ReadMe.md
    │   │           ├── go.mod
    │   │           ├── go.sum
    │   │           └── main.go
    │   └── prometheus/
    │       ├── ReadMe.md
    │       └── taskset_prometheus_observability/
    │           ├── task_001_getting_started_with_prometheus/
    │           │   ├── ReadMe.md
    │           │   ├── prometheus_1.yml
    │           │   └── prometheus_2.yml
    │           ├── task_002_understanding_metric_types/
    │           │   └── ReadMe.md
    │           └── task_003_instrumenting_http_server_in_go/
    │               ├── ReadMe.md
    │               ├── go.mod
    │               ├── go.sum
    │               ├── prometheus.yml
    │               └── server.go
    ├── os_and_concepts/
    │   ├── ReadMe.md
    │   ├── commands_linux/
    │   │   ├── ReadMe.md
    │   │   └── taskset_commands_linux_os_and_concepts/
    │   │       ├── task_001_arp/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_awk/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_chage/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_chmod/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_chown/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_cksum/
    │   │       │   └── ReadMe.md
    │   │       ├── task_007_clear/
    │   │       │   └── ReadMe.md
    │   │       ├── task_008_cp/
    │   │       │   └── ReadMe.md
    │   │       ├── task_009_crontab/
    │   │       │   └── ReadMe.md
    │   │       ├── task_010_curl/
    │   │       │   └── ReadMe.md
    │   │       ├── task_011_cut/
    │   │       │   └── ReadMe.md
    │   │       ├── task_012_df/
    │   │       │   └── ReadMe.md
    │   │       ├── task_013_diff/
    │   │       │   └── ReadMe.md
    │   │       ├── task_014_dig/
    │   │       │   └── ReadMe.md
    │   │       ├── task_015_dir/
    │   │       │   └── ReadMe.md
    │   │       ├── task_016_dos2unix/
    │   │       │   └── ReadMe.md
    │   │       ├── task_017_du/
    │   │       │   └── ReadMe.md
    │   │       ├── task_018_export/
    │   │       │   └── ReadMe.md
    │   │       ├── task_019_fc/
    │   │       │   └── ReadMe.md
    │   │       ├── task_020_find/
    │   │       │   └── ReadMe.md
    │   │       ├── task_021_firewall_cmd/
    │   │       │   └── ReadMe.md
    │   │       ├── task_022_free/
    │   │       │   └── ReadMe.md
    │   │       ├── task_023_ftp/
    │   │       │   └── ReadMe.md
    │   │       ├── task_024_git/
    │   │       │   └── ReadMe.md
    │   │       ├── task_025_gunzip_gzip/
    │   │       │   └── ReadMe.md
    │   │       ├── task_026_head/
    │   │       │   └── ReadMe.md
    │   │       ├── task_027_history/
    │   │       │   └── ReadMe.md
    │   │       ├── task_028_host/
    │   │       │   └── ReadMe.md
    │   │       ├── task_029_hostname/
    │   │       │   └── ReadMe.md
    │   │       ├── task_030_ifconfig/
    │   │       │   └── ReadMe.md
    │   │       ├── task_031_ip/
    │   │       │   └── ReadMe.md
    │   │       ├── task_032_jar/
    │   │       │   └── ReadMe.md
    │   │       ├── task_033_jobs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_034_jq/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── example1.json
    │   │       │   ├── example2.json
    │   │       │   ├── example3.json
    │   │       │   └── example4.json
    │   │       ├── task_035_jstack/
    │   │       │   └── ReadMe.md
    │   │       ├── task_036_keytool/
    │   │       │   └── ReadMe.md
    │   │       ├── task_037_ln/
    │   │       │   └── ReadMe.md
    │   │       ├── task_038_lsof/
    │   │       │   └── ReadMe.md
    │   │       ├── task_039_mail/
    │   │       │   └── ReadMe.md
    │   │       ├── task_040_mkdir/
    │   │       │   └── ReadMe.md
    │   │       ├── task_041_mount/
    │   │       │   └── ReadMe.md
    │   │       ├── task_042_nc/
    │   │       │   └── ReadMe.md
    │   │       ├── task_043_netstat/
    │   │       │   └── ReadMe.md
    │   │       ├── task_044_nmap/
    │   │       │   └── ReadMe.md
    │   │       ├── task_045_nohup/
    │   │       │   └── ReadMe.md
    │   │       ├── task_046_nslookup/
    │   │       │   └── ReadMe.md
    │   │       ├── task_047_openssl/
    │   │       │   └── ReadMe.md
    │   │       ├── task_048_passwd/
    │   │       │   └── ReadMe.md
    │   │       ├── task_049_ping/
    │   │       │   └── ReadMe.md
    │   │       ├── task_050_ps/
    │   │       │   └── ReadMe.md
    │   │       ├── task_051_rm/
    │   │       │   └── ReadMe.md
    │   │       ├── task_052_route/
    │   │       │   └── ReadMe.md
    │   │       ├── task_053_rsync/
    │   │       │   └── ReadMe.md
    │   │       ├── task_054_scp/
    │   │       │   └── ReadMe.md
    │   │       ├── task_055_sed/
    │   │       │   └── ReadMe.md
    │   │       ├── task_056_sh/
    │   │       │   └── ReadMe.md
    │   │       ├── task_057_setenforce/
    │   │       │   └── ReadMe.md
    │   │       ├── task_058_sort/
    │   │       │   └── ReadMe.md
    │   │       ├── task_059_ssh/
    │   │       │   └── ReadMe.md
    │   │       ├── task_060_sudo/
    │   │       │   └── ReadMe.md
    │   │       ├── task_061_sysctl/
    │   │       │   └── ReadMe.md
    │   │       ├── task_062_system/
    │   │       │   └── ReadMe.md
    │   │       ├── task_063_systemctl/
    │   │       │   └── ReadMe.md
    │   │       ├── task_064_tail/
    │   │       │   └── ReadMe.md
    │   │       ├── task_065_tar/
    │   │       │   └── ReadMe.md
    │   │       ├── task_066_tee/
    │   │       │   └── ReadMe.md
    │   │       ├── task_067_telnet/
    │   │       │   └── ReadMe.md
    │   │       ├── task_068_gradle/
    │   │       │   └── ReadMe.md
    │   │       ├── task_069_tr/
    │   │       │   └── ReadMe.md
    │   │       ├── task_070_traceroute/
    │   │       │   └── ReadMe.md
    │   │       ├── task_071_top/
    │   │       │   └── ReadMe.md
    │   │       ├── task_072_tty/
    │   │       │   └── ReadMe.md
    │   │       ├── task_073_ulimit/
    │   │       │   └── ReadMe.md
    │   │       ├── task_074_umask/
    │   │       │   └── ReadMe.md
    │   │       ├── task_075_uname/
    │   │       │   └── ReadMe.md
    │   │       ├── task_076_uniq/
    │   │       │   └── ReadMe.md
    │   │       ├── task_077_unzip/
    │   │       │   └── ReadMe.md
    │   │       ├── task_078_uptime/
    │   │       │   └── ReadMe.md
    │   │       ├── task_079_vi/
    │   │       │   └── ReadMe.md
    │   │       ├── task_080_vmstat/
    │   │       │   └── ReadMe.md
    │   │       ├── task_081_wall/
    │   │       │   └── ReadMe.md
    │   │       ├── task_082_wc/
    │   │       │   └── ReadMe.md
    │   │       ├── task_083_wget/
    │   │       │   └── ReadMe.md
    │   │       ├── task_084_whatis/
    │   │       │   └── ReadMe.md
    │   │       ├── task_085_whereis/
    │   │       │   └── ReadMe.md
    │   │       ├── task_086_which/
    │   │       │   └── ReadMe.md
    │   │       ├── task_087_xargs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_088_zcat/
    │   │       │   └── ReadMe.md
    │   │       ├── task_089_zip/
    │   │       │   └── ReadMe.md
    │   │       ├── task_090_ansible/
    │   │       │   └── ReadMe.md
    │   │       ├── task_091_terraform/
    │   │       │   └── ReadMe.md
    │   │       ├── task_092_kubectl/
    │   │       │   ├── ReadMe-static.md
    │   │       │   ├── ReadMe-table.md
    │   │       │   └── ReadMe.md
    │   │       ├── task_093_kustomize/
    │   │       │   └── ReadMe.md
    │   │       ├── task_094_helm/
    │   │       │   └── ReadMe.md
    │   │       ├── task_095_7z/
    │   │       │   └── ReadMe.md
    │   │       ├── task_096_grep/
    │   │       │   └── ReadMe.md
    │   │       ├── task_097_egrep/
    │   │       │   └── ReadMe.md
    │   │       ├── task_098_growpart/
    │   │       │   └── ReadMe.md
    │   │       ├── task_099_resize2fs/
    │   │       │   └── ReadMe.md
    │   │       ├── task_100_lsblk/
    │   │       │   └── ReadMe.md
    │   │       ├── task_101_kops/
    │   │       │   └── ReadMe.md
    │   │       ├── task_102_mongo/
    │   │       │   └── ReadMe.md
    │   │       ├── task_103_mongorestore/
    │   │       │   └── ReadMe.md
    │   │       ├── task_104_mysql/
    │   │       │   └── ReadMe.md
    │   │       ├── task_105_mysqldump/
    │   │       │   └── ReadMe.md
    │   │       ├── task_106_ssh_keygen/
    │   │       │   └── ReadMe.md
    │   │       ├── task_107_iptables/
    │   │       │   └── ReadMe.md
    │   │       ├── task_108_adduser/
    │   │       │   └── ReadMe.md
    │   │       ├── task_109_chgrp/
    │   │       │   └── ReadMe.md
    │   │       ├── task_110_sqlcmd/
    │   │       │   └── ReadMe.md
    │   │       ├── task_111_tcpdump/
    │   │       │   └── ReadMe.md
    │   │       ├── task_112_step/
    │   │       │   └── ReadMe.md
    │   │       ├── task_113_set/
    │   │       │   ├── ReadMe.md
    │   │       │   ├── called_script.sh
    │   │       │   ├── caller_script.sh
    │   │       │   ├── using_set_eu_with_pipefail.sh
    │   │       │   ├── with_pipefail.sh
    │   │       │   └── without_pipefail.sh
    │   │       ├── task_114_mvn/
    │   │       │   └── ReadMe.md
    │   │       ├── task_115_source/
    │   │       │   ├── 1.sh
    │   │       │   ├── 2.sh
    │   │       │   └── ReadMe.md
    │   │       ├── task_116_whoami/
    │   │       │   └── ReadMe.md
    │   │       ├── task_117_who/
    │   │       │   └── ReadMe.md
    │   │       ├── task_118_last/
    │   │       │   └── ReadMe.md
    │   │       ├── task_119_az/
    │   │       │   └── ReadMe.md
    │   │       ├── task_120_dpkg/
    │   │       │   └── ReadMe.md
    │   │       ├── task_121_cat/
    │   │       │   └── ReadMe.md
    │   │       ├── task_122_tar/
    │   │       │   └── ReadMe.md
    │   │       ├── task_123_code/
    │   │       │   └── ReadMe.md
    │   │       ├── task_124_unset/
    │   │       │   └── ReadMe.md
    │   │       ├── task_125_ssh_keygen/
    │   │       │   └── ReadMe.md
    │   │       ├── task_126_command/
    │   │       │   └── ReadMe.md
    │   │       ├── task_127_shasum/
    │   │       │   └── ReadMe.md
    │   │       ├── task_128_sh/
    │   │       │   └── ReadMe.md
    │   │       ├── task_129_yq/
    │   │       │   └── ReadMe.md
    │   │       ├── task_130_basename/
    │   │       │   └── ReadMe.md
    │   │       └── task_131_readlink/
    │   │           └── ReadMe.md
    │   ├── commands_windows/
    │   │   ├── ReadMe-static.md
    │   │   ├── ReadMe.md
    │   │   └── taskset_commands_windows_os_and_concepts/
    │   │       ├── task_001_systeminfo/
    │   │       │   └── ReadMe.md
    │   │       ├── task_002_dir/
    │   │       │   └── ReadMe.md
    │   │       ├── task_003_findstr/
    │   │       │   └── ReadMe.md
    │   │       ├── task_004_del/
    │   │       │   └── ReadMe.md
    │   │       ├── task_005_rmdir/
    │   │       │   └── ReadMe.md
    │   │       ├── task_006_echo/
    │   │       │   └── ReadMe.md
    │   │       └── task_007_setx/
    │   │           └── ReadMe.md
    │   └── concepts_linux/
    │       ├── ReadMe.md
    │       └── taskset_concepts_linux_os_and_concepts/
    │           ├── task_001_etc_os_release_file/
    │           │   └── ReadMe.md
    │           ├── task_002_etc_passwd/
    │           │   └── ReadMe.md
    │           ├── task_003_etc_group/
    │           │   └── ReadMe.md
    │           ├── task_003_etc_sudoers/
    │           │   └── ReadMe.md
    │           ├── task_004_etc_hosts/
    │           │   └── ReadMe.md
    │           ├── task_005_etc_resolv.conf/
    │           │   └── ReadMe.md
    │           ├── task_006_proc_sys_net_ipv4_ip_forward/
    │           │   └── ReadMe.md
    │           ├── task_007_etc_sysctl.conf/
    │           │   └── ReadMe.md
    │           ├── task_008_special_variables/
    │           │   └── ReadMe.md
    │           ├── task_009_etc_fstab/
    │           │   └── ReadMe.md
    │           ├── task_010_shebang_character/
    │           │   └── ReadMe.md
    │           ├── task_011_redirection/
    │           │   └── ReadMe.md
    │           ├── task_012_eof_here_doc/
    │           │   └── ReadMe.md
    │           └── task_013_referring_documentation/
    │               └── ReadMe.md
    ├── productivity_tools/
    │   ├── ReadMe-static.md
    │   ├── ReadMe.md
    │   └── taskset_productivity_tools/
    │       ├── task_000_setting_up_terminal/
    │       │   └── ReadMe.md
    │       ├── task_001_visualizing_subnets_in_vpc/
    │       │   └── ReadMe.md
    │       ├── task_002_visualizing_k8s_using_dashboard/
    │       │   └── ReadMe.md
    │       ├── task_003_if_IP_belongs_to_CIDR/
    │       │   └── ReadMe.md
    │       ├── task_004_virtual_box/
    │       │   └── ReadMe.md
    │       └── task_005_productivity_shortcuts/
    │           ├── ReadMe-bkp.md
    │           └── ReadMe.md
    ├── security/
    │   └── trivy/
    │       ├── ReadMe.md
    │       └── taskset_trivy_security/
    │           └── task_001_scans/
    │               └── ReadMe.md
    └── web_servers/
        └── nginx/
            ├── ReadMe.md
            └── taskset_nginx_web_servers/
                ├── task_001_running_nginx/
                │   └── running-nginx.md
                ├── task_002_nginx_docker_compose_hello_world/
                │   ├── docker-compose.yaml
                │   ├── nginx-docker-compose-hello-world.md
                │   └── src/
                │       └── index.html
                ├── task_003_nginx_conf/
                │   ├── ReadMe.md
                │   ├── conf.d/
                │   │   └── default.conf
                │   └── html/
                │       └── index.html
                └── task_004_return_different_http_codes/
                    ├── Dockerfile
                    ├── ReadMe.md
                    ├── conf.d/
                    │   └── default.conf
                    └── html/
                        └── index.html
Download .txt
SYMBOL INDEX (958 symbols across 42 files)

FILE: home/cloud_providers/aws/taskset_aws_cloud_providers/task_005_trigger_codebuild_PR_events__eventbridge__lambda__dynamic_branches/lambda.py
  function lambda_handler (line 4) | def lambda_handler(event, context):

FILE: home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_007_building_a_devops_pipeline__python/main.py
  function main (line 4) | def main():

FILE: home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun/main.py
  function main (line 4) | def main():

FILE: home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun__python/main.py
  function main (line 4) | def main():

FILE: home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_009_monitoring_applications_in_gcp__python/main.py
  function main (line 7) | def main():

FILE: home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_010_alerting_in_google_cloud__python/main.py
  function home (line 9) | def home():
  function sleepy200 (line 15) | def sleepy200():
  function random500 (line 23) | def random500():

FILE: home/containers/docker/taskset_docker_containers/task_022_sample_app/app/spec/persistence/sqlite.spec.js
  constant ITEM (line 5) | const ITEM = {

FILE: home/containers/docker/taskset_docker_containers/task_022_sample_app/app/spec/routes/addItem.spec.js
  constant ITEM (line 3) | const ITEM = { id: 12345 };

FILE: home/containers/docker/taskset_docker_containers/task_022_sample_app/app/spec/routes/deleteItem.spec.js
  constant ITEM (line 3) | const ITEM = { id: 12345 };

FILE: home/containers/docker/taskset_docker_containers/task_022_sample_app/app/spec/routes/getItems.spec.js
  constant ITEMS (line 3) | const ITEMS = [{ id: 12345 }];

FILE: home/containers/docker/taskset_docker_containers/task_022_sample_app/app/spec/routes/updateItem.spec.js
  constant ITEM (line 3) | const ITEM = { id: 12345 };

FILE: home/containers/docker/taskset_docker_containers/task_022_sample_app/app/src/persistence/mysql.js
  function init (line 18) | async function init() {
  function teardown (line 48) | async function teardown() {
  function getItems (line 57) | async function getItems() {
  function getItem (line 72) | async function getItem(id) {
  function storeItem (line 87) | async function storeItem(item) {
  function updateItem (line 100) | async function updateItem(id, item) {
  function removeItem (line 113) | async function removeItem(id) {

FILE: home/containers/docker/taskset_docker_containers/task_022_sample_app/app/src/persistence/sqlite.js
  function init (line 7) | function init() {
  function teardown (line 31) | async function teardown() {
  function getItems (line 40) | async function getItems() {
  function getItem (line 55) | async function getItem(id) {
  function storeItem (line 70) | async function storeItem(item) {
  function updateItem (line 83) | async function updateItem(id, item) {
  function removeItem (line 96) | async function removeItem(id) {

FILE: home/containers/docker/taskset_docker_containers/task_022_sample_app/app/src/static/js/app.js
  function App (line 1) | function App() {
  function TodoListCard (line 14) | function TodoListCard() {
  function AddItemForm (line 70) | function AddItemForm({ onNewItem }) {
  function ItemDisplay (line 117) | function ItemDisplay({ item, onItemUpdate, onItemRemoval }) {

FILE: home/containers/docker/taskset_docker_containers/task_022_sample_app/app/src/static/js/react-bootstrap.js
  function __webpack_require__ (line 16) | function __webpack_require__(moduleId) {
  function classNames (line 135) | function classNames() {
  function _assertThisInitialized (line 179) | function _assertThisInitialized(self) {
  function _defineProperty (line 193) | function _defineProperty(obj, key, value) {
  function _interopRequireDefault (line 214) | function _interopRequireDefault(obj) {
  function _interopRequireWildcard (line 244) | function _interopRequireWildcard(obj) {
  function _interopRequireDefault (line 269) | function _interopRequireDefault(obj) {
  function _extends (line 275) | function _extends() {
  function _objectWithoutPropertiesLoose (line 293) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 308) | function _inheritsLoose(subClass, superClass) {
  function uncontrollable (line 314) | function uncontrollable(Component, controlledValues, methods) {
  function _interopRequireDefault (line 483) | function _interopRequireDefault(obj) {
  function useEventCallback (line 489) | function useEventCallback(fn) {
  function qsa (line 511) | function qsa(element, selector) {
  function style (line 572) | function style(node, property, value) {
  function _interopRequireDefault (line 626) | function _interopRequireDefault(obj) {
  function _interopRequireWildcard (line 632) | function _interopRequireWildcard(obj) {
  function _objectWithoutPropertiesLoose (line 657) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 672) | function _inheritsLoose(subClass, superClass) {
  function Transition (line 784) | function Transition(props, context) {
  function noop (line 1088) | function noop() {}
  function isRequiredForA11y (line 1126) | function isRequiredForA11y(validator) {
  function _extends (line 1149) | function _extends() {
  function _interopRequireWildcard (line 1183) | function _interopRequireWildcard(obj) {
  function _extends (line 1208) | function _extends() {
  function _objectWithoutPropertiesLoose (line 1226) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _toPropertyKey (line 1241) | function _toPropertyKey(arg) {
  function _toPrimitive (line 1247) | function _toPrimitive(input, hint) {
  function useUncontrolled (line 1260) | function useUncontrolled(props, config) {
  function ownerDocument (line 1312) | function ownerDocument(node) {
  function _inheritsLoose (line 1322) | function _inheritsLoose(subClass, superClass) {
  function scrollbarSize (line 1346) | function scrollbarSize(recalc) {
  function _interopRequireDefault (line 1398) | function _interopRequireDefault(obj) {
  function _interopRequireDefault (line 1435) | function _interopRequireDefault(obj) {
  function validate (line 1441) | function validate(props, propName, componentName, location, propFullName) {
  function fallback (line 1558) | function fallback(context, node) {
  function onEnd (line 1583) | function onEnd(node, handler, duration) {
  function parseDuration (line 1610) | function parseDuration(node) {
  function getTransitionProperties (line 1758) | function getTransitionProperties() {
  function createChainableTypeChecker (line 1820) | function createChainableTypeChecker(validate) {
  function _interopRequireDefault (line 1868) | function _interopRequireDefault(obj) {
  function elementType (line 1874) | function elementType(props, propName, componentName, location, propFullN...
  function _interopRequireDefault (line 1903) | function _interopRequireDefault(obj) {
  function Manager (line 2010) | function Manager() {
  function InnerPopper (line 2096) | function InnerPopper() {
  function Popper (line 2257) | function Popper(_ref) {
  function InnerReference (line 2287) | function InnerReference() {
  function Reference (line 2316) | function Reference(props) {
  function _interopRequireDefault (line 2347) | function _interopRequireDefault(obj) {
  function forwardRef (line 2353) | function forwardRef(renderFn, _temp) {
  function camelize (line 2386) | function camelize(string) {
  function _interopRequireDefault (line 2410) | function _interopRequireDefault(obj) {
  function all (line 2416) | function all() {
  function _interopRequireDefault (line 2468) | function _interopRequireDefault(obj) {
  function _objectWithoutPropertiesLoose (line 2474) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _extends (line 2489) | function _extends() {
  function _inheritsLoose (line 2507) | function _inheritsLoose(subClass, superClass) {
  function DropdownMenu (line 2518) | function DropdownMenu() {
  function _interopRequireDefault (line 2741) | function _interopRequireDefault(obj) {
  function DropdownToggle (line 2766) | function DropdownToggle(_ref) {
  function _interopRequireDefault (line 2810) | function _interopRequireDefault(obj) {
  function findIndexOf (line 2816) | function findIndexOf(arr, cb) {
  function ModalManager (line 2836) | function ModalManager(_temp) {
  function microtaskDebounce (line 3016) | function microtaskDebounce(fn) {
  function taskDebounce (line 3031) | function taskDebounce(fn) {
  function isFunction (line 3064) | function isFunction(functionToCheck) {
  function getStyleComputedProperty (line 3077) | function getStyleComputedProperty(element, property) {
  function getParentNode (line 3096) | function getParentNode(element) {
  function getScrollParent (line 3112) | function getScrollParent(element) {
  function isIE (line 3150) | function isIE(version) {
  function getOffsetParent (line 3170) | function getOffsetParent(element) {
  function isOffsetContainer (line 3198) | function isOffsetContainer(element) {
  function getRoot (line 3216) | function getRoot(node) {
  function findCommonOffsetParent (line 3233) | function findCommonOffsetParent(element1, element2) {
  function getScroll (line 3276) | function getScroll(element) {
  function includeScroll (line 3300) | function includeScroll(rect, element) {
  function getBordersSize (line 3322) | function getBordersSize(styles, axis) {
  function getSize (line 3328) | function getSize(axis, body, html, computedStyle) {
  function getWindowSizes (line 3332) | function getWindowSizes(document) {
  function defineProperties (line 3349) | function defineProperties(target, props) {
  function getClientRect (line 3403) | function getClientRect(offsets) {
  function getBoundingClientRect (line 3418) | function getBoundingClientRect(element) {
  function getOffsetRectRelativeToArbitraryNode (line 3462) | function getOffsetRectRelativeToArbitraryNode(children, parent) {
  function getViewportOffsetRectRelativeToArtbitraryNode (line 3509) | function getViewportOffsetRectRelativeToArtbitraryNode(element) {
  function isFixed (line 3535) | function isFixed(element) {
  function getFixedPositionOffsetParent (line 3563) | function getFixedPositionOffsetParent(element) {
  function getBoundaries (line 3590) | function getBoundaries(popper, reference, padding, boundariesElement) {
  function getArea (line 3644) | function getArea(_ref) {
  function computeAutoPlacement (line 3660) | function computeAutoPlacement(placement, refRect, popper, reference, bou...
  function getReferenceOffsets (line 3716) | function getReferenceOffsets(state, popper, reference) {
  function getOuterSizes (line 3730) | function getOuterSizes(element) {
  function getOppositePlacement (line 3750) | function getOppositePlacement(placement) {
  function getPopperOffsets (line 3773) | function getPopperOffsets(popper, referenceOffsets, placement) {
  function find (line 3809) | function find(arr, check) {
  function findIndex (line 3829) | function findIndex(arr, prop, value) {
  function runModifiers (line 3855) | function runModifiers(modifiers, data, ends) {
  function update (line 3885) | function update() {
  function isModifierEnabled (line 3930) | function isModifierEnabled(modifiers, modifierName) {
  function getSupportedPropertyName (line 3946) | function getSupportedPropertyName(property) {
  function destroy (line 3968) | function destroy() {
  function getWindow (line 3998) | function getWindow(element) {
  function attachToScrollParents (line 4003) | function attachToScrollParents(scrollParent, event, callback, scrollPare...
  function setupEventListeners (line 4024) | function setupEventListeners(reference, options, state, updateBound) {
  function enableEventListeners (line 4045) | function enableEventListeners() {
  function removeEventListeners (line 4058) | function removeEventListeners(reference, state) {
  function disableEventListeners (line 4081) | function disableEventListeners() {
  function isNumeric (line 4096) | function isNumeric(n) {
  function setStyles (line 4109) | function setStyles(element, styles) {
  function setAttributes (line 4130) | function setAttributes(element, attributes) {
  function applyStyle (line 4152) | function applyStyle(data) {
  function applyStyleOnLoad (line 4180) | function applyStyleOnLoad(reference, popper, options, modifierOptions, s...
  function getRoundedOffsets (line 4216) | function getRoundedOffsets(data, shouldRound) {
  function computeStyle (line 4252) | function computeStyle(data, options) {
  function isModifierRequired (line 4349) | function isModifierRequired(modifiers, requestingName, requestedName) {
  function arrow (line 4376) | function arrow(data, options) {
  function getOppositeVariation (line 4450) | function getOppositeVariation(variation) {
  function clockwise (line 4506) | function clockwise(placement) {
  function flip (line 4526) | function flip(data, options) {
  function keepTogether (line 4615) | function keepTogether(data) {
  function toValue (line 4650) | function toValue(str, measurement, popperOffsets, referenceOffsets) {
  function parseOffset (line 4706) | function parseOffset(offset, popperOffsets, referenceOffsets, basePlacem...
  function offset (line 4776) | function offset(data, _ref) {
  function preventOverflow (line 4817) | function preventOverflow(data, options) {
  function shift (line 4884) | function shift(data) {
  function hide (line 4914) | function hide(data) {
  function inner (line 4953) | function inner(data) {
  function Popper (line 5450) | function Popper(reference, popper) {
  function _interopRequireDefault (line 5598) | function _interopRequireDefault(obj) {
  function readOnlyPropType (line 5606) | function readOnlyPropType(handler, name) {
  function uncontrolledPropTypes (line 5616) | function uncontrolledPropTypes(controlledValues, displayName) {
  function isProp (line 5627) | function isProp(props, prop) {
  function defaultKey (line 5631) | function defaultKey(key) {
  function canAcceptRef (line 5644) | function canAcceptRef(component) {
  function camelizeStyleName (line 5670) | function camelizeStyleName(string) {
  function _interopRequireDefault (line 5721) | function _interopRequireDefault(obj) {
  function _inheritsLoose (line 5727) | function _inheritsLoose(subClass, superClass) {
  function _assertThisInitialized (line 5733) | function _assertThisInitialized(self) {
  function isLeftClickEvent (line 5745) | function isLeftClickEvent(event) {
  function isModifiedEvent (line 5749) | function isModifiedEvent(event) {
  function RootCloseWrapper (line 5765) | function RootCloseWrapper(props, context) {
  function _interopRequireDefault (line 5953) | function _interopRequireDefault(obj) {
  function _default (line 5959) | function _default(componentOrElement) {
  function _interopRequireDefault (line 5977) | function _interopRequireDefault(obj) {
  function forwardRef (line 5983) | function forwardRef(renderFn, _ref) {
  function hasClass (line 6020) | function hasClass(element, className) {
  function _interopRequireDefault (line 6046) | function _interopRequireDefault(obj) {
  function _inheritsLoose (line 6052) | function _inheritsLoose(subClass, superClass) {
  function Portal (line 6069) | function Portal() {
  function _interopRequireDefault (line 6126) | function _interopRequireDefault(obj) {
  function _assertThisInitialized (line 6132) | function _assertThisInitialized(self) {
  function _inheritsLoose (line 6140) | function _inheritsLoose(subClass, superClass) {
  function WaitForContainer (line 6160) | function WaitForContainer() {
  function _interopRequireDefault (line 6232) | function _interopRequireDefault(obj) {
  function getContainer (line 6238) | function getContainer(container, defaultContainer) {
  function _interopRequireWildcard (line 6301) | function _interopRequireWildcard(obj) {
  function _interopRequireDefault (line 6326) | function _interopRequireDefault(obj) {
  function _objectWithoutPropertiesLoose (line 6332) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _extends (line 6347) | function _extends() {
  function _inheritsLoose (line 6365) | function _inheritsLoose(subClass, superClass) {
  function Dropdown (line 6468) | function Dropdown(props, context) {
  function _objectWithoutPropertiesLoose (line 6653) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _interopRequireDefault (line 6687) | function _interopRequireDefault(obj) {
  function _interopRequireDefault (line 6710) | function _interopRequireDefault(obj) {
  function _extends (line 6716) | function _extends() {
  function $mapContextToProps (line 6743) | function $mapContextToProps(_ref, Component) {
  function mapContextToProps (line 6798) | function mapContextToProps(maybeOpts, mapToProps, Component) {
  function _interopRequireDefault (line 6842) | function _interopRequireDefault(obj) {
  function _extends (line 6848) | function _extends() {
  function _objectWithoutPropertiesLoose (line 6866) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 6881) | function _inheritsLoose(subClass, superClass) {
  function _assertThisInitialized (line 6887) | function _assertThisInitialized(self) {
  function omitProps (line 6897) | function omitProps(props, propTypes) {
  function Modal (line 6934) | function Modal() {
  function _interopRequireDefault (line 7394) | function _interopRequireDefault(obj) {
  function _extends (line 7400) | function _extends() {
  function _objectWithoutPropertiesLoose (line 7418) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 7433) | function _inheritsLoose(subClass, superClass) {
  function _assertThisInitialized (line 7439) | function _assertThisInitialized(self) {
  function Overlay (line 7457) | function Overlay(props, context) {
  function emptyFunction (line 7776) | function emptyFunction() {}
  function emptyFunctionWithReset (line 7778) | function emptyFunctionWithReset() {}
  function shim (line 7783) | function shim(props, propName, componentName, location, propFullName, se...
  function getShim (line 7797) | function getShim() {
  function hyphenateStyleName (line 7868) | function hyphenateStyleName(string) {
  function hyphenate (line 7885) | function hyphenate(string) {
  function _getComputedStyle (line 7908) | function _getComputedStyle(node) {
  function removeStyle (line 7951) | function removeStyle(node, key) {
  function isTransform (line 7968) | function isTransform(property) {
  function componentWillMount (line 7987) | function componentWillMount() {
  function componentWillReceiveProps (line 7996) | function componentWillReceiveProps(nextProps) {
  function componentWillUpdate (line 8008) | function componentWillUpdate(nextProps, nextState) {
  function polyfill (line 8028) | function polyfill(Component) {
  function _interopRequireDefault (line 8120) | function _interopRequireDefault(obj) {
  function _interopRequireDefault (line 8147) | function _interopRequireDefault(obj) {
  function deprecated (line 8155) | function deprecated(validator, reason) {
  function _resetWarned (line 8176) | function _resetWarned() {
  function t (line 8256) | function t(a) {
  function v (line 8292) | function v(a) {
  function useCommittedRef (line 8377) | function useCommittedRef(value) {
  function matches (line 8406) | function matches(node, selector) {
  function ie8MatchesSelector (line 8418) | function ie8MatchesSelector(node, selector) {
  function _interopRequireDefault (line 8456) | function _interopRequireDefault(obj) {
  function _classCallCheck (line 8462) | function _classCallCheck(instance, Constructor) {
  function _possibleConstructorReturn (line 8468) | function _possibleConstructorReturn(self, call) {
  function _inherits (line 8476) | function _inherits(subClass, superClass) {
  function objectIs (line 8495) | function objectIs(x, y) {
  function createEventEmitter (line 8503) | function createEventEmitter(value) {
  function onlyChild (line 8526) | function onlyChild(children) {
  function createReactContext (line 8530) | function createReactContext(defaultValue, calculateChangedBits) {
  function makeEmptyFunction (line 8718) | function makeEmptyFunction(arg) {
  function _interopRequireDefault (line 8761) | function _interopRequireDefault(obj) {
  function _extends (line 8767) | function _extends() {
  function $mapContextToProps (line 8794) | function $mapContextToProps(_ref, Component) {
  function mapContextToProps (line 8849) | function mapContextToProps(maybeOpts, mapToProps, Component) {
  function filterEvents (line 8873) | function filterEvents(selector, handler) {
  function activeElement (line 8900) | function activeElement(doc) {
  function addClass (line 8958) | function addClass(element, className) {
  function replaceClassName (line 8971) | function replaceClassName(origClass, classToRemove) {
  function _interopRequireDefault (line 8993) | function _interopRequireDefault(obj) {
  function isBody (line 8999) | function isBody(node) {
  function bodyIsOverflowing (line 9003) | function bodyIsOverflowing(node) {
  function isOverflowing (line 9009) | function isOverflowing(container) {
  function getWindow (line 9026) | function getWindow(node) {
  function ariaHidden (line 9060) | function ariaHidden(show, node) {
  function hideSiblings (line 9070) | function hideSiblings(container, _ref2) {
  function showSiblings (line 9078) | function showSiblings(container, _ref3) {
  function _extends (line 9094) | function _extends() {
  function _objectWithoutPropertiesLoose (line 9112) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 9143) | function _inheritsLoose(subClass, superClass) {
  function ThemeProvider (line 9168) | function ThemeProvider() {
  function useBootstrapPrefix (line 9202) | function useBootstrapPrefix(prefix, defaultPrefix) {
  function createBootstrapComponent (line 9207) | function createBootstrapComponent(Component, opts) {
  function triggerBrowserReflow (line 9312) | function triggerBrowserReflow(node) {
  function createChainedFunction (line 9325) | function createChainedFunction() {
  function getDimensionValue (line 9371) | function getDimensionValue(dimension, elem) {
  function Collapse (line 9478) | function Collapse() {
  function createWithBsPrefix (line 9715) | function createWithBsPrefix(prefix, _temp) {
  function Fade (line 9852) | function Fade() {
  function _assertThisInitialized (line 9944) | function _assertThisInitialized(self) {
  function isTrivialHref (line 9980) | function isTrivialHref(href) {
  function SafeAnchor (line 9997) | function SafeAnchor(props, context) {
  function map (line 10833) | function map(children, func) {
  function forEach (line 10847) | function forEach(children, func) {
  function Carousel (line 10999) | function Carousel(props, context) {
  function DropdownToggle (line 11674) | function DropdownToggle() {
  function Image (line 12928) | function Image() {
  function InputGroup (line 13087) | function InputGroup() {
  function Jumbotron (line 13206) | function Jumbotron() {
  function AbstractNav (line 13271) | function AbstractNav() {
  function ListGroupItem (line 13534) | function ListGroupItem() {
  function ListGroup (line 13653) | function ListGroup() {
  function BootstrapModalManager (line 13942) | function BootstrapModalManager() {
  function DialogTransition (line 14184) | function DialogTransition(props) {
  function BackdropTransition (line 14194) | function BackdropTransition(props) {
  function Modal (line 14211) | function Modal(_props, context) {
  function Navbar (line 15012) | function Navbar() {
  function NavDropdown (line 15176) | function NavDropdown() {
  function wrapRefs (line 15334) | function wrapRefs(props, arrowProps) {
  function Overlay_Overlay (line 15347) | function Overlay_Overlay(_ref) {
  function RefHolder (line 15403) | function RefHolder() {
  function OverlayTrigger (line 15484) | function OverlayTrigger(props, context) {
  function PageItem (line 15707) | function PageItem(_ref) {
  function createButton (line 15749) | function createButton(name, defaultValue, label) {
  function Pagination (line 15829) | function Pagination() {
  function Popover (line 15932) | function Popover(_ref) {
  function onlyProgressBar (line 16000) | function onlyProgressBar(props, propName, componentName) {
  function getPercentage (line 16103) | function getPercentage(now, min, max) {
  function ProgressBar (line 16113) | function ProgressBar() {
  function ResponsiveEmbed (line 16246) | function ResponsiveEmbed() {
  function Row (line 16294) | function Row() {
  function Spinner (line 16351) | function Spinner() {
  function SplitButton (line 16449) | function SplitButton() {
  function TabContainer (line 16590) | function TabContainer() {
  function TabContent (line 16760) | function TabContent() {
  function useTabContext (line 16886) | function useTabContext(props) {
  function Tab (line 16992) | function Tab() {
  function Table (line 17027) | function Table() {
  function getDefaultActiveKey (line 17209) | function getDefaultActiveKey(children) {
  function Tabs (line 17224) | function Tabs() {
  function ToggleButton (line 17377) | function ToggleButton() {
  function ToggleButtonGroup (line 17522) | function ToggleButtonGroup() {
  function Tooltip (line 17656) | function Tooltip(_ref) {

FILE: home/containers/docker/taskset_docker_containers/task_023_update_sample_app/app/spec/persistence/sqlite.spec.js
  constant ITEM (line 5) | const ITEM = {

FILE: home/containers/docker/taskset_docker_containers/task_023_update_sample_app/app/spec/routes/addItem.spec.js
  constant ITEM (line 3) | const ITEM = { id: 12345 };

FILE: home/containers/docker/taskset_docker_containers/task_023_update_sample_app/app/spec/routes/deleteItem.spec.js
  constant ITEM (line 3) | const ITEM = { id: 12345 };

FILE: home/containers/docker/taskset_docker_containers/task_023_update_sample_app/app/spec/routes/getItems.spec.js
  constant ITEMS (line 3) | const ITEMS = [{ id: 12345 }];

FILE: home/containers/docker/taskset_docker_containers/task_023_update_sample_app/app/spec/routes/updateItem.spec.js
  constant ITEM (line 3) | const ITEM = { id: 12345 };

FILE: home/containers/docker/taskset_docker_containers/task_023_update_sample_app/app/src/persistence/mysql.js
  function init (line 18) | async function init() {
  function teardown (line 48) | async function teardown() {
  function getItems (line 57) | async function getItems() {
  function getItem (line 72) | async function getItem(id) {
  function storeItem (line 87) | async function storeItem(item) {
  function updateItem (line 100) | async function updateItem(id, item) {
  function removeItem (line 113) | async function removeItem(id) {

FILE: home/containers/docker/taskset_docker_containers/task_023_update_sample_app/app/src/persistence/sqlite.js
  function init (line 7) | function init() {
  function teardown (line 31) | async function teardown() {
  function getItems (line 40) | async function getItems() {
  function getItem (line 55) | async function getItem(id) {
  function storeItem (line 70) | async function storeItem(item) {
  function updateItem (line 83) | async function updateItem(id, item) {
  function removeItem (line 96) | async function removeItem(id) {

FILE: home/containers/docker/taskset_docker_containers/task_023_update_sample_app/app/src/static/js/app.js
  function App (line 1) | function App() {
  function TodoListCard (line 14) | function TodoListCard() {
  function AddItemForm (line 70) | function AddItemForm({ onNewItem }) {
  function ItemDisplay (line 117) | function ItemDisplay({ item, onItemUpdate, onItemRemoval }) {

FILE: home/containers/docker/taskset_docker_containers/task_023_update_sample_app/app/src/static/js/react-bootstrap.js
  function __webpack_require__ (line 16) | function __webpack_require__(moduleId) {
  function classNames (line 135) | function classNames() {
  function _assertThisInitialized (line 179) | function _assertThisInitialized(self) {
  function _defineProperty (line 193) | function _defineProperty(obj, key, value) {
  function _interopRequireDefault (line 214) | function _interopRequireDefault(obj) {
  function _interopRequireWildcard (line 244) | function _interopRequireWildcard(obj) {
  function _interopRequireDefault (line 269) | function _interopRequireDefault(obj) {
  function _extends (line 275) | function _extends() {
  function _objectWithoutPropertiesLoose (line 293) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 308) | function _inheritsLoose(subClass, superClass) {
  function uncontrollable (line 314) | function uncontrollable(Component, controlledValues, methods) {
  function _interopRequireDefault (line 483) | function _interopRequireDefault(obj) {
  function useEventCallback (line 489) | function useEventCallback(fn) {
  function qsa (line 511) | function qsa(element, selector) {
  function style (line 572) | function style(node, property, value) {
  function _interopRequireDefault (line 626) | function _interopRequireDefault(obj) {
  function _interopRequireWildcard (line 632) | function _interopRequireWildcard(obj) {
  function _objectWithoutPropertiesLoose (line 657) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 672) | function _inheritsLoose(subClass, superClass) {
  function Transition (line 784) | function Transition(props, context) {
  function noop (line 1088) | function noop() {}
  function isRequiredForA11y (line 1126) | function isRequiredForA11y(validator) {
  function _extends (line 1149) | function _extends() {
  function _interopRequireWildcard (line 1183) | function _interopRequireWildcard(obj) {
  function _extends (line 1208) | function _extends() {
  function _objectWithoutPropertiesLoose (line 1226) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _toPropertyKey (line 1241) | function _toPropertyKey(arg) {
  function _toPrimitive (line 1247) | function _toPrimitive(input, hint) {
  function useUncontrolled (line 1260) | function useUncontrolled(props, config) {
  function ownerDocument (line 1312) | function ownerDocument(node) {
  function _inheritsLoose (line 1322) | function _inheritsLoose(subClass, superClass) {
  function scrollbarSize (line 1346) | function scrollbarSize(recalc) {
  function _interopRequireDefault (line 1398) | function _interopRequireDefault(obj) {
  function _interopRequireDefault (line 1435) | function _interopRequireDefault(obj) {
  function validate (line 1441) | function validate(props, propName, componentName, location, propFullName) {
  function fallback (line 1558) | function fallback(context, node) {
  function onEnd (line 1583) | function onEnd(node, handler, duration) {
  function parseDuration (line 1610) | function parseDuration(node) {
  function getTransitionProperties (line 1758) | function getTransitionProperties() {
  function createChainableTypeChecker (line 1820) | function createChainableTypeChecker(validate) {
  function _interopRequireDefault (line 1868) | function _interopRequireDefault(obj) {
  function elementType (line 1874) | function elementType(props, propName, componentName, location, propFullN...
  function _interopRequireDefault (line 1903) | function _interopRequireDefault(obj) {
  function Manager (line 2010) | function Manager() {
  function InnerPopper (line 2096) | function InnerPopper() {
  function Popper (line 2257) | function Popper(_ref) {
  function InnerReference (line 2287) | function InnerReference() {
  function Reference (line 2316) | function Reference(props) {
  function _interopRequireDefault (line 2347) | function _interopRequireDefault(obj) {
  function forwardRef (line 2353) | function forwardRef(renderFn, _temp) {
  function camelize (line 2386) | function camelize(string) {
  function _interopRequireDefault (line 2410) | function _interopRequireDefault(obj) {
  function all (line 2416) | function all() {
  function _interopRequireDefault (line 2468) | function _interopRequireDefault(obj) {
  function _objectWithoutPropertiesLoose (line 2474) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _extends (line 2489) | function _extends() {
  function _inheritsLoose (line 2507) | function _inheritsLoose(subClass, superClass) {
  function DropdownMenu (line 2518) | function DropdownMenu() {
  function _interopRequireDefault (line 2741) | function _interopRequireDefault(obj) {
  function DropdownToggle (line 2766) | function DropdownToggle(_ref) {
  function _interopRequireDefault (line 2810) | function _interopRequireDefault(obj) {
  function findIndexOf (line 2816) | function findIndexOf(arr, cb) {
  function ModalManager (line 2836) | function ModalManager(_temp) {
  function microtaskDebounce (line 3016) | function microtaskDebounce(fn) {
  function taskDebounce (line 3031) | function taskDebounce(fn) {
  function isFunction (line 3064) | function isFunction(functionToCheck) {
  function getStyleComputedProperty (line 3077) | function getStyleComputedProperty(element, property) {
  function getParentNode (line 3096) | function getParentNode(element) {
  function getScrollParent (line 3112) | function getScrollParent(element) {
  function isIE (line 3150) | function isIE(version) {
  function getOffsetParent (line 3170) | function getOffsetParent(element) {
  function isOffsetContainer (line 3198) | function isOffsetContainer(element) {
  function getRoot (line 3216) | function getRoot(node) {
  function findCommonOffsetParent (line 3233) | function findCommonOffsetParent(element1, element2) {
  function getScroll (line 3276) | function getScroll(element) {
  function includeScroll (line 3300) | function includeScroll(rect, element) {
  function getBordersSize (line 3322) | function getBordersSize(styles, axis) {
  function getSize (line 3328) | function getSize(axis, body, html, computedStyle) {
  function getWindowSizes (line 3332) | function getWindowSizes(document) {
  function defineProperties (line 3349) | function defineProperties(target, props) {
  function getClientRect (line 3403) | function getClientRect(offsets) {
  function getBoundingClientRect (line 3418) | function getBoundingClientRect(element) {
  function getOffsetRectRelativeToArbitraryNode (line 3462) | function getOffsetRectRelativeToArbitraryNode(children, parent) {
  function getViewportOffsetRectRelativeToArtbitraryNode (line 3509) | function getViewportOffsetRectRelativeToArtbitraryNode(element) {
  function isFixed (line 3535) | function isFixed(element) {
  function getFixedPositionOffsetParent (line 3563) | function getFixedPositionOffsetParent(element) {
  function getBoundaries (line 3590) | function getBoundaries(popper, reference, padding, boundariesElement) {
  function getArea (line 3644) | function getArea(_ref) {
  function computeAutoPlacement (line 3660) | function computeAutoPlacement(placement, refRect, popper, reference, bou...
  function getReferenceOffsets (line 3716) | function getReferenceOffsets(state, popper, reference) {
  function getOuterSizes (line 3730) | function getOuterSizes(element) {
  function getOppositePlacement (line 3750) | function getOppositePlacement(placement) {
  function getPopperOffsets (line 3773) | function getPopperOffsets(popper, referenceOffsets, placement) {
  function find (line 3809) | function find(arr, check) {
  function findIndex (line 3829) | function findIndex(arr, prop, value) {
  function runModifiers (line 3855) | function runModifiers(modifiers, data, ends) {
  function update (line 3885) | function update() {
  function isModifierEnabled (line 3930) | function isModifierEnabled(modifiers, modifierName) {
  function getSupportedPropertyName (line 3946) | function getSupportedPropertyName(property) {
  function destroy (line 3968) | function destroy() {
  function getWindow (line 3998) | function getWindow(element) {
  function attachToScrollParents (line 4003) | function attachToScrollParents(scrollParent, event, callback, scrollPare...
  function setupEventListeners (line 4024) | function setupEventListeners(reference, options, state, updateBound) {
  function enableEventListeners (line 4045) | function enableEventListeners() {
  function removeEventListeners (line 4058) | function removeEventListeners(reference, state) {
  function disableEventListeners (line 4081) | function disableEventListeners() {
  function isNumeric (line 4096) | function isNumeric(n) {
  function setStyles (line 4109) | function setStyles(element, styles) {
  function setAttributes (line 4130) | function setAttributes(element, attributes) {
  function applyStyle (line 4152) | function applyStyle(data) {
  function applyStyleOnLoad (line 4180) | function applyStyleOnLoad(reference, popper, options, modifierOptions, s...
  function getRoundedOffsets (line 4216) | function getRoundedOffsets(data, shouldRound) {
  function computeStyle (line 4252) | function computeStyle(data, options) {
  function isModifierRequired (line 4349) | function isModifierRequired(modifiers, requestingName, requestedName) {
  function arrow (line 4376) | function arrow(data, options) {
  function getOppositeVariation (line 4450) | function getOppositeVariation(variation) {
  function clockwise (line 4506) | function clockwise(placement) {
  function flip (line 4526) | function flip(data, options) {
  function keepTogether (line 4615) | function keepTogether(data) {
  function toValue (line 4650) | function toValue(str, measurement, popperOffsets, referenceOffsets) {
  function parseOffset (line 4706) | function parseOffset(offset, popperOffsets, referenceOffsets, basePlacem...
  function offset (line 4776) | function offset(data, _ref) {
  function preventOverflow (line 4817) | function preventOverflow(data, options) {
  function shift (line 4884) | function shift(data) {
  function hide (line 4914) | function hide(data) {
  function inner (line 4953) | function inner(data) {
  function Popper (line 5450) | function Popper(reference, popper) {
  function _interopRequireDefault (line 5598) | function _interopRequireDefault(obj) {
  function readOnlyPropType (line 5606) | function readOnlyPropType(handler, name) {
  function uncontrolledPropTypes (line 5616) | function uncontrolledPropTypes(controlledValues, displayName) {
  function isProp (line 5627) | function isProp(props, prop) {
  function defaultKey (line 5631) | function defaultKey(key) {
  function canAcceptRef (line 5644) | function canAcceptRef(component) {
  function camelizeStyleName (line 5670) | function camelizeStyleName(string) {
  function _interopRequireDefault (line 5721) | function _interopRequireDefault(obj) {
  function _inheritsLoose (line 5727) | function _inheritsLoose(subClass, superClass) {
  function _assertThisInitialized (line 5733) | function _assertThisInitialized(self) {
  function isLeftClickEvent (line 5745) | function isLeftClickEvent(event) {
  function isModifiedEvent (line 5749) | function isModifiedEvent(event) {
  function RootCloseWrapper (line 5765) | function RootCloseWrapper(props, context) {
  function _interopRequireDefault (line 5953) | function _interopRequireDefault(obj) {
  function _default (line 5959) | function _default(componentOrElement) {
  function _interopRequireDefault (line 5977) | function _interopRequireDefault(obj) {
  function forwardRef (line 5983) | function forwardRef(renderFn, _ref) {
  function hasClass (line 6020) | function hasClass(element, className) {
  function _interopRequireDefault (line 6046) | function _interopRequireDefault(obj) {
  function _inheritsLoose (line 6052) | function _inheritsLoose(subClass, superClass) {
  function Portal (line 6069) | function Portal() {
  function _interopRequireDefault (line 6126) | function _interopRequireDefault(obj) {
  function _assertThisInitialized (line 6132) | function _assertThisInitialized(self) {
  function _inheritsLoose (line 6140) | function _inheritsLoose(subClass, superClass) {
  function WaitForContainer (line 6160) | function WaitForContainer() {
  function _interopRequireDefault (line 6232) | function _interopRequireDefault(obj) {
  function getContainer (line 6238) | function getContainer(container, defaultContainer) {
  function _interopRequireWildcard (line 6301) | function _interopRequireWildcard(obj) {
  function _interopRequireDefault (line 6326) | function _interopRequireDefault(obj) {
  function _objectWithoutPropertiesLoose (line 6332) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _extends (line 6347) | function _extends() {
  function _inheritsLoose (line 6365) | function _inheritsLoose(subClass, superClass) {
  function Dropdown (line 6468) | function Dropdown(props, context) {
  function _objectWithoutPropertiesLoose (line 6653) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _interopRequireDefault (line 6687) | function _interopRequireDefault(obj) {
  function _interopRequireDefault (line 6710) | function _interopRequireDefault(obj) {
  function _extends (line 6716) | function _extends() {
  function $mapContextToProps (line 6743) | function $mapContextToProps(_ref, Component) {
  function mapContextToProps (line 6798) | function mapContextToProps(maybeOpts, mapToProps, Component) {
  function _interopRequireDefault (line 6842) | function _interopRequireDefault(obj) {
  function _extends (line 6848) | function _extends() {
  function _objectWithoutPropertiesLoose (line 6866) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 6881) | function _inheritsLoose(subClass, superClass) {
  function _assertThisInitialized (line 6887) | function _assertThisInitialized(self) {
  function omitProps (line 6897) | function omitProps(props, propTypes) {
  function Modal (line 6934) | function Modal() {
  function _interopRequireDefault (line 7394) | function _interopRequireDefault(obj) {
  function _extends (line 7400) | function _extends() {
  function _objectWithoutPropertiesLoose (line 7418) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 7433) | function _inheritsLoose(subClass, superClass) {
  function _assertThisInitialized (line 7439) | function _assertThisInitialized(self) {
  function Overlay (line 7457) | function Overlay(props, context) {
  function emptyFunction (line 7776) | function emptyFunction() {}
  function emptyFunctionWithReset (line 7778) | function emptyFunctionWithReset() {}
  function shim (line 7783) | function shim(props, propName, componentName, location, propFullName, se...
  function getShim (line 7797) | function getShim() {
  function hyphenateStyleName (line 7868) | function hyphenateStyleName(string) {
  function hyphenate (line 7885) | function hyphenate(string) {
  function _getComputedStyle (line 7908) | function _getComputedStyle(node) {
  function removeStyle (line 7951) | function removeStyle(node, key) {
  function isTransform (line 7968) | function isTransform(property) {
  function componentWillMount (line 7987) | function componentWillMount() {
  function componentWillReceiveProps (line 7996) | function componentWillReceiveProps(nextProps) {
  function componentWillUpdate (line 8008) | function componentWillUpdate(nextProps, nextState) {
  function polyfill (line 8028) | function polyfill(Component) {
  function _interopRequireDefault (line 8120) | function _interopRequireDefault(obj) {
  function _interopRequireDefault (line 8147) | function _interopRequireDefault(obj) {
  function deprecated (line 8155) | function deprecated(validator, reason) {
  function _resetWarned (line 8176) | function _resetWarned() {
  function t (line 8256) | function t(a) {
  function v (line 8292) | function v(a) {
  function useCommittedRef (line 8377) | function useCommittedRef(value) {
  function matches (line 8406) | function matches(node, selector) {
  function ie8MatchesSelector (line 8418) | function ie8MatchesSelector(node, selector) {
  function _interopRequireDefault (line 8456) | function _interopRequireDefault(obj) {
  function _classCallCheck (line 8462) | function _classCallCheck(instance, Constructor) {
  function _possibleConstructorReturn (line 8468) | function _possibleConstructorReturn(self, call) {
  function _inherits (line 8476) | function _inherits(subClass, superClass) {
  function objectIs (line 8495) | function objectIs(x, y) {
  function createEventEmitter (line 8503) | function createEventEmitter(value) {
  function onlyChild (line 8526) | function onlyChild(children) {
  function createReactContext (line 8530) | function createReactContext(defaultValue, calculateChangedBits) {
  function makeEmptyFunction (line 8718) | function makeEmptyFunction(arg) {
  function _interopRequireDefault (line 8761) | function _interopRequireDefault(obj) {
  function _extends (line 8767) | function _extends() {
  function $mapContextToProps (line 8794) | function $mapContextToProps(_ref, Component) {
  function mapContextToProps (line 8849) | function mapContextToProps(maybeOpts, mapToProps, Component) {
  function filterEvents (line 8873) | function filterEvents(selector, handler) {
  function activeElement (line 8900) | function activeElement(doc) {
  function addClass (line 8958) | function addClass(element, className) {
  function replaceClassName (line 8971) | function replaceClassName(origClass, classToRemove) {
  function _interopRequireDefault (line 8993) | function _interopRequireDefault(obj) {
  function isBody (line 8999) | function isBody(node) {
  function bodyIsOverflowing (line 9003) | function bodyIsOverflowing(node) {
  function isOverflowing (line 9009) | function isOverflowing(container) {
  function getWindow (line 9026) | function getWindow(node) {
  function ariaHidden (line 9060) | function ariaHidden(show, node) {
  function hideSiblings (line 9070) | function hideSiblings(container, _ref2) {
  function showSiblings (line 9078) | function showSiblings(container, _ref3) {
  function _extends (line 9094) | function _extends() {
  function _objectWithoutPropertiesLoose (line 9112) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 9143) | function _inheritsLoose(subClass, superClass) {
  function ThemeProvider (line 9168) | function ThemeProvider() {
  function useBootstrapPrefix (line 9202) | function useBootstrapPrefix(prefix, defaultPrefix) {
  function createBootstrapComponent (line 9207) | function createBootstrapComponent(Component, opts) {
  function triggerBrowserReflow (line 9312) | function triggerBrowserReflow(node) {
  function createChainedFunction (line 9325) | function createChainedFunction() {
  function getDimensionValue (line 9371) | function getDimensionValue(dimension, elem) {
  function Collapse (line 9478) | function Collapse() {
  function createWithBsPrefix (line 9715) | function createWithBsPrefix(prefix, _temp) {
  function Fade (line 9852) | function Fade() {
  function _assertThisInitialized (line 9944) | function _assertThisInitialized(self) {
  function isTrivialHref (line 9980) | function isTrivialHref(href) {
  function SafeAnchor (line 9997) | function SafeAnchor(props, context) {
  function map (line 10833) | function map(children, func) {
  function forEach (line 10847) | function forEach(children, func) {
  function Carousel (line 10999) | function Carousel(props, context) {
  function DropdownToggle (line 11674) | function DropdownToggle() {
  function Image (line 12928) | function Image() {
  function InputGroup (line 13087) | function InputGroup() {
  function Jumbotron (line 13206) | function Jumbotron() {
  function AbstractNav (line 13271) | function AbstractNav() {
  function ListGroupItem (line 13534) | function ListGroupItem() {
  function ListGroup (line 13653) | function ListGroup() {
  function BootstrapModalManager (line 13942) | function BootstrapModalManager() {
  function DialogTransition (line 14184) | function DialogTransition(props) {
  function BackdropTransition (line 14194) | function BackdropTransition(props) {
  function Modal (line 14211) | function Modal(_props, context) {
  function Navbar (line 15012) | function Navbar() {
  function NavDropdown (line 15176) | function NavDropdown() {
  function wrapRefs (line 15334) | function wrapRefs(props, arrowProps) {
  function Overlay_Overlay (line 15347) | function Overlay_Overlay(_ref) {
  function RefHolder (line 15403) | function RefHolder() {
  function OverlayTrigger (line 15484) | function OverlayTrigger(props, context) {
  function PageItem (line 15707) | function PageItem(_ref) {
  function createButton (line 15749) | function createButton(name, defaultValue, label) {
  function Pagination (line 15829) | function Pagination() {
  function Popover (line 15932) | function Popover(_ref) {
  function onlyProgressBar (line 16000) | function onlyProgressBar(props, propName, componentName) {
  function getPercentage (line 16103) | function getPercentage(now, min, max) {
  function ProgressBar (line 16113) | function ProgressBar() {
  function ResponsiveEmbed (line 16246) | function ResponsiveEmbed() {
  function Row (line 16294) | function Row() {
  function Spinner (line 16351) | function Spinner() {
  function SplitButton (line 16449) | function SplitButton() {
  function TabContainer (line 16590) | function TabContainer() {
  function TabContent (line 16760) | function TabContent() {
  function useTabContext (line 16886) | function useTabContext(props) {
  function Tab (line 16992) | function Tab() {
  function Table (line 17027) | function Table() {
  function getDefaultActiveKey (line 17209) | function getDefaultActiveKey(children) {
  function Tabs (line 17224) | function Tabs() {
  function ToggleButton (line 17377) | function ToggleButton() {
  function ToggleButtonGroup (line 17522) | function ToggleButtonGroup() {
  function Tooltip (line 17656) | function Tooltip(_ref) {

FILE: home/containers/docker/taskset_docker_containers/task_024_sample_app_persist_db/app/spec/persistence/sqlite.spec.js
  constant ITEM (line 5) | const ITEM = {

FILE: home/containers/docker/taskset_docker_containers/task_024_sample_app_persist_db/app/spec/routes/addItem.spec.js
  constant ITEM (line 3) | const ITEM = { id: 12345 };

FILE: home/containers/docker/taskset_docker_containers/task_024_sample_app_persist_db/app/spec/routes/deleteItem.spec.js
  constant ITEM (line 3) | const ITEM = { id: 12345 };

FILE: home/containers/docker/taskset_docker_containers/task_024_sample_app_persist_db/app/spec/routes/getItems.spec.js
  constant ITEMS (line 3) | const ITEMS = [{ id: 12345 }];

FILE: home/containers/docker/taskset_docker_containers/task_024_sample_app_persist_db/app/spec/routes/updateItem.spec.js
  constant ITEM (line 3) | const ITEM = { id: 12345 };

FILE: home/containers/docker/taskset_docker_containers/task_024_sample_app_persist_db/app/src/persistence/mysql.js
  function init (line 18) | async function init() {
  function teardown (line 48) | async function teardown() {
  function getItems (line 57) | async function getItems() {
  function getItem (line 72) | async function getItem(id) {
  function storeItem (line 87) | async function storeItem(item) {
  function updateItem (line 100) | async function updateItem(id, item) {
  function removeItem (line 113) | async function removeItem(id) {

FILE: home/containers/docker/taskset_docker_containers/task_024_sample_app_persist_db/app/src/persistence/sqlite.js
  function init (line 7) | function init() {
  function teardown (line 31) | async function teardown() {
  function getItems (line 40) | async function getItems() {
  function getItem (line 55) | async function getItem(id) {
  function storeItem (line 70) | async function storeItem(item) {
  function updateItem (line 83) | async function updateItem(id, item) {
  function removeItem (line 96) | async function removeItem(id) {

FILE: home/containers/docker/taskset_docker_containers/task_024_sample_app_persist_db/app/src/static/js/app.js
  function App (line 1) | function App() {
  function TodoListCard (line 14) | function TodoListCard() {
  function AddItemForm (line 70) | function AddItemForm({ onNewItem }) {
  function ItemDisplay (line 117) | function ItemDisplay({ item, onItemUpdate, onItemRemoval }) {

FILE: home/containers/docker/taskset_docker_containers/task_024_sample_app_persist_db/app/src/static/js/react-bootstrap.js
  function __webpack_require__ (line 16) | function __webpack_require__(moduleId) {
  function classNames (line 135) | function classNames() {
  function _assertThisInitialized (line 179) | function _assertThisInitialized(self) {
  function _defineProperty (line 193) | function _defineProperty(obj, key, value) {
  function _interopRequireDefault (line 214) | function _interopRequireDefault(obj) {
  function _interopRequireWildcard (line 244) | function _interopRequireWildcard(obj) {
  function _interopRequireDefault (line 269) | function _interopRequireDefault(obj) {
  function _extends (line 275) | function _extends() {
  function _objectWithoutPropertiesLoose (line 293) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 308) | function _inheritsLoose(subClass, superClass) {
  function uncontrollable (line 314) | function uncontrollable(Component, controlledValues, methods) {
  function _interopRequireDefault (line 483) | function _interopRequireDefault(obj) {
  function useEventCallback (line 489) | function useEventCallback(fn) {
  function qsa (line 511) | function qsa(element, selector) {
  function style (line 572) | function style(node, property, value) {
  function _interopRequireDefault (line 626) | function _interopRequireDefault(obj) {
  function _interopRequireWildcard (line 632) | function _interopRequireWildcard(obj) {
  function _objectWithoutPropertiesLoose (line 657) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 672) | function _inheritsLoose(subClass, superClass) {
  function Transition (line 784) | function Transition(props, context) {
  function noop (line 1088) | function noop() {}
  function isRequiredForA11y (line 1126) | function isRequiredForA11y(validator) {
  function _extends (line 1149) | function _extends() {
  function _interopRequireWildcard (line 1183) | function _interopRequireWildcard(obj) {
  function _extends (line 1208) | function _extends() {
  function _objectWithoutPropertiesLoose (line 1226) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _toPropertyKey (line 1241) | function _toPropertyKey(arg) {
  function _toPrimitive (line 1247) | function _toPrimitive(input, hint) {
  function useUncontrolled (line 1260) | function useUncontrolled(props, config) {
  function ownerDocument (line 1312) | function ownerDocument(node) {
  function _inheritsLoose (line 1322) | function _inheritsLoose(subClass, superClass) {
  function scrollbarSize (line 1346) | function scrollbarSize(recalc) {
  function _interopRequireDefault (line 1398) | function _interopRequireDefault(obj) {
  function _interopRequireDefault (line 1435) | function _interopRequireDefault(obj) {
  function validate (line 1441) | function validate(props, propName, componentName, location, propFullName) {
  function fallback (line 1558) | function fallback(context, node) {
  function onEnd (line 1583) | function onEnd(node, handler, duration) {
  function parseDuration (line 1610) | function parseDuration(node) {
  function getTransitionProperties (line 1758) | function getTransitionProperties() {
  function createChainableTypeChecker (line 1820) | function createChainableTypeChecker(validate) {
  function _interopRequireDefault (line 1868) | function _interopRequireDefault(obj) {
  function elementType (line 1874) | function elementType(props, propName, componentName, location, propFullN...
  function _interopRequireDefault (line 1903) | function _interopRequireDefault(obj) {
  function Manager (line 2010) | function Manager() {
  function InnerPopper (line 2096) | function InnerPopper() {
  function Popper (line 2257) | function Popper(_ref) {
  function InnerReference (line 2287) | function InnerReference() {
  function Reference (line 2316) | function Reference(props) {
  function _interopRequireDefault (line 2347) | function _interopRequireDefault(obj) {
  function forwardRef (line 2353) | function forwardRef(renderFn, _temp) {
  function camelize (line 2386) | function camelize(string) {
  function _interopRequireDefault (line 2410) | function _interopRequireDefault(obj) {
  function all (line 2416) | function all() {
  function _interopRequireDefault (line 2468) | function _interopRequireDefault(obj) {
  function _objectWithoutPropertiesLoose (line 2474) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _extends (line 2489) | function _extends() {
  function _inheritsLoose (line 2507) | function _inheritsLoose(subClass, superClass) {
  function DropdownMenu (line 2518) | function DropdownMenu() {
  function _interopRequireDefault (line 2741) | function _interopRequireDefault(obj) {
  function DropdownToggle (line 2766) | function DropdownToggle(_ref) {
  function _interopRequireDefault (line 2810) | function _interopRequireDefault(obj) {
  function findIndexOf (line 2816) | function findIndexOf(arr, cb) {
  function ModalManager (line 2836) | function ModalManager(_temp) {
  function microtaskDebounce (line 3016) | function microtaskDebounce(fn) {
  function taskDebounce (line 3031) | function taskDebounce(fn) {
  function isFunction (line 3064) | function isFunction(functionToCheck) {
  function getStyleComputedProperty (line 3077) | function getStyleComputedProperty(element, property) {
  function getParentNode (line 3096) | function getParentNode(element) {
  function getScrollParent (line 3112) | function getScrollParent(element) {
  function isIE (line 3150) | function isIE(version) {
  function getOffsetParent (line 3170) | function getOffsetParent(element) {
  function isOffsetContainer (line 3198) | function isOffsetContainer(element) {
  function getRoot (line 3216) | function getRoot(node) {
  function findCommonOffsetParent (line 3233) | function findCommonOffsetParent(element1, element2) {
  function getScroll (line 3276) | function getScroll(element) {
  function includeScroll (line 3300) | function includeScroll(rect, element) {
  function getBordersSize (line 3322) | function getBordersSize(styles, axis) {
  function getSize (line 3328) | function getSize(axis, body, html, computedStyle) {
  function getWindowSizes (line 3332) | function getWindowSizes(document) {
  function defineProperties (line 3349) | function defineProperties(target, props) {
  function getClientRect (line 3403) | function getClientRect(offsets) {
  function getBoundingClientRect (line 3418) | function getBoundingClientRect(element) {
  function getOffsetRectRelativeToArbitraryNode (line 3462) | function getOffsetRectRelativeToArbitraryNode(children, parent) {
  function getViewportOffsetRectRelativeToArtbitraryNode (line 3509) | function getViewportOffsetRectRelativeToArtbitraryNode(element) {
  function isFixed (line 3535) | function isFixed(element) {
  function getFixedPositionOffsetParent (line 3563) | function getFixedPositionOffsetParent(element) {
  function getBoundaries (line 3590) | function getBoundaries(popper, reference, padding, boundariesElement) {
  function getArea (line 3644) | function getArea(_ref) {
  function computeAutoPlacement (line 3660) | function computeAutoPlacement(placement, refRect, popper, reference, bou...
  function getReferenceOffsets (line 3716) | function getReferenceOffsets(state, popper, reference) {
  function getOuterSizes (line 3730) | function getOuterSizes(element) {
  function getOppositePlacement (line 3750) | function getOppositePlacement(placement) {
  function getPopperOffsets (line 3773) | function getPopperOffsets(popper, referenceOffsets, placement) {
  function find (line 3809) | function find(arr, check) {
  function findIndex (line 3829) | function findIndex(arr, prop, value) {
  function runModifiers (line 3855) | function runModifiers(modifiers, data, ends) {
  function update (line 3885) | function update() {
  function isModifierEnabled (line 3930) | function isModifierEnabled(modifiers, modifierName) {
  function getSupportedPropertyName (line 3946) | function getSupportedPropertyName(property) {
  function destroy (line 3968) | function destroy() {
  function getWindow (line 3998) | function getWindow(element) {
  function attachToScrollParents (line 4003) | function attachToScrollParents(scrollParent, event, callback, scrollPare...
  function setupEventListeners (line 4024) | function setupEventListeners(reference, options, state, updateBound) {
  function enableEventListeners (line 4045) | function enableEventListeners() {
  function removeEventListeners (line 4058) | function removeEventListeners(reference, state) {
  function disableEventListeners (line 4081) | function disableEventListeners() {
  function isNumeric (line 4096) | function isNumeric(n) {
  function setStyles (line 4109) | function setStyles(element, styles) {
  function setAttributes (line 4130) | function setAttributes(element, attributes) {
  function applyStyle (line 4152) | function applyStyle(data) {
  function applyStyleOnLoad (line 4180) | function applyStyleOnLoad(reference, popper, options, modifierOptions, s...
  function getRoundedOffsets (line 4216) | function getRoundedOffsets(data, shouldRound) {
  function computeStyle (line 4252) | function computeStyle(data, options) {
  function isModifierRequired (line 4349) | function isModifierRequired(modifiers, requestingName, requestedName) {
  function arrow (line 4376) | function arrow(data, options) {
  function getOppositeVariation (line 4450) | function getOppositeVariation(variation) {
  function clockwise (line 4506) | function clockwise(placement) {
  function flip (line 4526) | function flip(data, options) {
  function keepTogether (line 4615) | function keepTogether(data) {
  function toValue (line 4650) | function toValue(str, measurement, popperOffsets, referenceOffsets) {
  function parseOffset (line 4706) | function parseOffset(offset, popperOffsets, referenceOffsets, basePlacem...
  function offset (line 4776) | function offset(data, _ref) {
  function preventOverflow (line 4817) | function preventOverflow(data, options) {
  function shift (line 4884) | function shift(data) {
  function hide (line 4914) | function hide(data) {
  function inner (line 4953) | function inner(data) {
  function Popper (line 5450) | function Popper(reference, popper) {
  function _interopRequireDefault (line 5598) | function _interopRequireDefault(obj) {
  function readOnlyPropType (line 5606) | function readOnlyPropType(handler, name) {
  function uncontrolledPropTypes (line 5616) | function uncontrolledPropTypes(controlledValues, displayName) {
  function isProp (line 5627) | function isProp(props, prop) {
  function defaultKey (line 5631) | function defaultKey(key) {
  function canAcceptRef (line 5644) | function canAcceptRef(component) {
  function camelizeStyleName (line 5670) | function camelizeStyleName(string) {
  function _interopRequireDefault (line 5721) | function _interopRequireDefault(obj) {
  function _inheritsLoose (line 5727) | function _inheritsLoose(subClass, superClass) {
  function _assertThisInitialized (line 5733) | function _assertThisInitialized(self) {
  function isLeftClickEvent (line 5745) | function isLeftClickEvent(event) {
  function isModifiedEvent (line 5749) | function isModifiedEvent(event) {
  function RootCloseWrapper (line 5765) | function RootCloseWrapper(props, context) {
  function _interopRequireDefault (line 5953) | function _interopRequireDefault(obj) {
  function _default (line 5959) | function _default(componentOrElement) {
  function _interopRequireDefault (line 5977) | function _interopRequireDefault(obj) {
  function forwardRef (line 5983) | function forwardRef(renderFn, _ref) {
  function hasClass (line 6020) | function hasClass(element, className) {
  function _interopRequireDefault (line 6046) | function _interopRequireDefault(obj) {
  function _inheritsLoose (line 6052) | function _inheritsLoose(subClass, superClass) {
  function Portal (line 6069) | function Portal() {
  function _interopRequireDefault (line 6126) | function _interopRequireDefault(obj) {
  function _assertThisInitialized (line 6132) | function _assertThisInitialized(self) {
  function _inheritsLoose (line 6140) | function _inheritsLoose(subClass, superClass) {
  function WaitForContainer (line 6160) | function WaitForContainer() {
  function _interopRequireDefault (line 6232) | function _interopRequireDefault(obj) {
  function getContainer (line 6238) | function getContainer(container, defaultContainer) {
  function _interopRequireWildcard (line 6301) | function _interopRequireWildcard(obj) {
  function _interopRequireDefault (line 6326) | function _interopRequireDefault(obj) {
  function _objectWithoutPropertiesLoose (line 6332) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _extends (line 6347) | function _extends() {
  function _inheritsLoose (line 6365) | function _inheritsLoose(subClass, superClass) {
  function Dropdown (line 6468) | function Dropdown(props, context) {
  function _objectWithoutPropertiesLoose (line 6653) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _interopRequireDefault (line 6687) | function _interopRequireDefault(obj) {
  function _interopRequireDefault (line 6710) | function _interopRequireDefault(obj) {
  function _extends (line 6716) | function _extends() {
  function $mapContextToProps (line 6743) | function $mapContextToProps(_ref, Component) {
  function mapContextToProps (line 6798) | function mapContextToProps(maybeOpts, mapToProps, Component) {
  function _interopRequireDefault (line 6842) | function _interopRequireDefault(obj) {
  function _extends (line 6848) | function _extends() {
  function _objectWithoutPropertiesLoose (line 6866) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 6881) | function _inheritsLoose(subClass, superClass) {
  function _assertThisInitialized (line 6887) | function _assertThisInitialized(self) {
  function omitProps (line 6897) | function omitProps(props, propTypes) {
  function Modal (line 6934) | function Modal() {
  function _interopRequireDefault (line 7394) | function _interopRequireDefault(obj) {
  function _extends (line 7400) | function _extends() {
  function _objectWithoutPropertiesLoose (line 7418) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 7433) | function _inheritsLoose(subClass, superClass) {
  function _assertThisInitialized (line 7439) | function _assertThisInitialized(self) {
  function Overlay (line 7457) | function Overlay(props, context) {
  function emptyFunction (line 7776) | function emptyFunction() {}
  function emptyFunctionWithReset (line 7778) | function emptyFunctionWithReset() {}
  function shim (line 7783) | function shim(props, propName, componentName, location, propFullName, se...
  function getShim (line 7797) | function getShim() {
  function hyphenateStyleName (line 7868) | function hyphenateStyleName(string) {
  function hyphenate (line 7885) | function hyphenate(string) {
  function _getComputedStyle (line 7908) | function _getComputedStyle(node) {
  function removeStyle (line 7951) | function removeStyle(node, key) {
  function isTransform (line 7968) | function isTransform(property) {
  function componentWillMount (line 7987) | function componentWillMount() {
  function componentWillReceiveProps (line 7996) | function componentWillReceiveProps(nextProps) {
  function componentWillUpdate (line 8008) | function componentWillUpdate(nextProps, nextState) {
  function polyfill (line 8028) | function polyfill(Component) {
  function _interopRequireDefault (line 8120) | function _interopRequireDefault(obj) {
  function _interopRequireDefault (line 8147) | function _interopRequireDefault(obj) {
  function deprecated (line 8155) | function deprecated(validator, reason) {
  function _resetWarned (line 8176) | function _resetWarned() {
  function t (line 8256) | function t(a) {
  function v (line 8292) | function v(a) {
  function useCommittedRef (line 8377) | function useCommittedRef(value) {
  function matches (line 8406) | function matches(node, selector) {
  function ie8MatchesSelector (line 8418) | function ie8MatchesSelector(node, selector) {
  function _interopRequireDefault (line 8456) | function _interopRequireDefault(obj) {
  function _classCallCheck (line 8462) | function _classCallCheck(instance, Constructor) {
  function _possibleConstructorReturn (line 8468) | function _possibleConstructorReturn(self, call) {
  function _inherits (line 8476) | function _inherits(subClass, superClass) {
  function objectIs (line 8495) | function objectIs(x, y) {
  function createEventEmitter (line 8503) | function createEventEmitter(value) {
  function onlyChild (line 8526) | function onlyChild(children) {
  function createReactContext (line 8530) | function createReactContext(defaultValue, calculateChangedBits) {
  function makeEmptyFunction (line 8718) | function makeEmptyFunction(arg) {
  function _interopRequireDefault (line 8761) | function _interopRequireDefault(obj) {
  function _extends (line 8767) | function _extends() {
  function $mapContextToProps (line 8794) | function $mapContextToProps(_ref, Component) {
  function mapContextToProps (line 8849) | function mapContextToProps(maybeOpts, mapToProps, Component) {
  function filterEvents (line 8873) | function filterEvents(selector, handler) {
  function activeElement (line 8900) | function activeElement(doc) {
  function addClass (line 8958) | function addClass(element, className) {
  function replaceClassName (line 8971) | function replaceClassName(origClass, classToRemove) {
  function _interopRequireDefault (line 8993) | function _interopRequireDefault(obj) {
  function isBody (line 8999) | function isBody(node) {
  function bodyIsOverflowing (line 9003) | function bodyIsOverflowing(node) {
  function isOverflowing (line 9009) | function isOverflowing(container) {
  function getWindow (line 9026) | function getWindow(node) {
  function ariaHidden (line 9060) | function ariaHidden(show, node) {
  function hideSiblings (line 9070) | function hideSiblings(container, _ref2) {
  function showSiblings (line 9078) | function showSiblings(container, _ref3) {
  function _extends (line 9094) | function _extends() {
  function _objectWithoutPropertiesLoose (line 9112) | function _objectWithoutPropertiesLoose(source, excluded) {
  function _inheritsLoose (line 9143) | function _inheritsLoose(subClass, superClass) {
  function ThemeProvider (line 9168) | function ThemeProvider() {
  function useBootstrapPrefix (line 9202) | function useBootstrapPrefix(prefix, defaultPrefix) {
  function createBootstrapComponent (line 9207) | function createBootstrapComponent(Component, opts) {
  function triggerBrowserReflow (line 9312) | function triggerBrowserReflow(node) {
  function createChainedFunction (line 9325) | function createChainedFunction() {
  function getDimensionValue (line 9371) | function getDimensionValue(dimension, elem) {
  function Collapse (line 9478) | function Collapse() {
  function createWithBsPrefix (line 9715) | function createWithBsPrefix(prefix, _temp) {
  function Fade (line 9852) | function Fade() {
  function _assertThisInitialized (line 9944) | function _assertThisInitialized(self) {
  function isTrivialHref (line 9980) | function isTrivialHref(href) {
  function SafeAnchor (line 9997) | function SafeAnchor(props, context) {
  function map (line 10833) | function map(children, func) {
  function forEach (line 10847) | function forEach(children, func) {
  function Carousel (line 10999) | function Carousel(props, context) {
  function DropdownToggle (line 11674) | function DropdownToggle() {
  function Image (line 12928) | function Image() {
  function InputGroup (line 13087) | function InputGroup() {
  function Jumbotron (line 13206) | function Jumbotron() {
  function AbstractNav (line 13271) | function AbstractNav() {
  function ListGroupItem (line 13534) | function ListGroupItem() {
  function ListGroup (line 13653) | function ListGroup() {
  function BootstrapModalManager (line 13942) | function BootstrapModalManager() {
  function DialogTransition (line 14184) | function DialogTransition(props) {
  function BackdropTransition (line 14194) | function BackdropTransition(props) {
  function Modal (line 14211) | function Modal(_props, context) {
  function Navbar (line 15012) | function Navbar() {
  function NavDropdown (line 15176) | function NavDropdown() {
  function wrapRefs (line 15334) | function wrapRefs(props, arrowProps) {
  function Overlay_Overlay (line 15347) | function Overlay_Overlay(_ref) {
  function RefHolder (line 15403) | function RefHolder() {
  function OverlayTrigger (line 15484) | function OverlayTrigger(props, context) {
  function PageItem (line 15707) | function PageItem(_ref) {
  function createButton (line 15749) | function createButton(name, defaultValue, label) {
  function Pagination (line 15829) | function Pagination() {
  function Popover (line 15932) | function Popover(_ref) {
  function onlyProgressBar (line 16000) | function onlyProgressBar(props, propName, componentName) {
  function getPercentage (line 16103) | function getPercentage(now, min, max) {
  function ProgressBar (line 16113) | function ProgressBar() {
  function ResponsiveEmbed (line 16246) | function ResponsiveEmbed() {
  function Row (line 16294) | function Row() {
  function Spinner (line 16351) | function Spinner() {
  function SplitButton (line 16449) | function SplitButton() {
  function TabContainer (line 16590) | function TabContainer() {
  function TabContent (line 16760) | function TabContent() {
  function useTabContext (line 16886) | function useTabContext(props) {
  function Tab (line 16992) | function Tab() {
  function Table (line 17027) | function Table() {
  function getDefaultActiveKey (line 17209) | function getDefaultActiveKey(children) {
  function Tabs (line 17224) | function Tabs() {
  function ToggleButton (line 17377) | function ToggleButton() {
  function ToggleButtonGroup (line 17522) | function ToggleButtonGroup() {
  function Tooltip (line 17656) | function Tooltip(_ref) {

FILE: home/containers/kubernetes/taskset_kubernetes_containers/task_012__aws__kops_with_traefik_customization/traefik-custom-image/traefik-add-trace-id/rand-utils.go
  type UUID (line 10) | type UUID
    method String (line 41) | func (uuid UUID) String() string {
  function must (line 12) | func must(uuid UUID, err error) UUID {
  function newUUID (line 19) | func newUUID() UUID {
  function newRandom (line 23) | func newRandom() (UUID, error) {
  function newRandomFromReader (line 28) | func newRandomFromReader(r io.Reader) (UUID, error) {
  function encodeHex (line 47) | func encodeHex(dst []byte, uuid UUID) {

FILE: home/containers/kubernetes/taskset_kubernetes_containers/task_012__aws__kops_with_traefik_customization/traefik-custom-image/traefik-add-trace-id/trace-id.go
  constant defaultTraceID (line 10) | defaultTraceID = "X-Trace-Id"
  type Config (line 13) | type Config struct
  function CreateConfig (line 20) | func CreateConfig() *Config {
  type TraceIDHeader (line 28) | type TraceIDHeader struct
    method ServeHTTP (line 60) | func (t *TraceIDHeader) ServeHTTP(rw http.ResponseWriter, req *http.Re...
  function New (line 37) | func New(ctx context.Context, next http.Handler, config *Config, name st...

FILE: home/containers/kubernetes/taskset_kubernetes_containers/task_012__aws__kops_with_traefik_customization/traefik-custom-image/traefik-add-trace-id/trace-id_test.go
  function TestServeHTTP (line 11) | func TestServeHTTP(t *testing.T) {
  function getTraceIdHeader (line 102) | func getTraceIdHeader(t *testing.T, req *http.Request, headerName string...
  function mustHaveLength (line 111) | func mustHaveLength(t *testing.T, s string, l int) {
  function mustHavePrefix (line 118) | func mustHavePrefix(t *testing.T, s, pref string) {

FILE: home/interview/coding_assignments/taskset_coding_assignments_interview/task_002_nodejs_mongo_docker/node_project/db.js
  constant MONGO_USERNAME (line 3) | const MONGO_USERNAME = 'mongoadmin';
  constant MONGO_PASSWORD (line 4) | const MONGO_PASSWORD = 'secret';
  constant MONGO_HOSTNAME (line 5) | const MONGO_HOSTNAME = '127.0.0.1';
  constant MONGO_PORT (line 6) | const MONGO_PORT = '27888';
  constant MONGO_DB (line 7) | const MONGO_DB = 'sharkinfo';

FILE: home/observability/opentelemetry/taskset_opentelemetry_observability/task_001_go_dice__traces_and_metrics_to_console/main.go
  function main (line 16) | func main() {
  function run (line 22) | func run() (err error) {
  function newHTTPHandler (line 66) | func newHTTPHandler() http.Handler {

FILE: home/observability/opentelemetry/taskset_opentelemetry_observability/task_001_go_dice__traces_and_metrics_to_console/otel.go
  function setupOTelSDK (line 18) | func setupOTelSDK(ctx context.Context) (shutdown func(context.Context) e...
  function newPropagator (line 63) | func newPropagator() propagation.TextMapPropagator {
  function newTraceProvider (line 70) | func newTraceProvider() (*trace.TracerProvider, error) {
  function newMeterProvider (line 85) | func newMeterProvider() (*metric.MeterProvider, error) {

FILE: home/observability/opentelemetry/taskset_opentelemetry_observability/task_001_go_dice__traces_and_metrics_to_console/rolldice.go
  function init (line 21) | func init() {
  function rolldice (line 31) | func rolldice(w http.ResponseWriter, r *http.Request) {

FILE: home/observability/opentelemetry/taskset_opentelemetry_observability/task_002_go__traces_gRPC_OTLP__jaeger/main.go
  function initProvider (line 26) | func initProvider() (func(context.Context) error, error) {
  function main (line 78) | func main() {

FILE: home/observability/prometheus/taskset_prometheus_observability/task_003_instrumenting_http_server_in_go/server.go
  function ping (line 19) | func ping(w http.ResponseWriter, req *http.Request) {
  function main (line 24) | func main() {
Copy disabled (too large) Download .json
Condensed preview — 2053 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (21,387K chars).
[
  {
    "path": ".gitignore",
    "chars": 714,
    "preview": ".idea\n.aws-credentials\n.terraform\n*terraform.tfvars\n*.tfstate\n*.tfstate.backup\n*.terraform.tfstate.lock.info\ncredentials"
  },
  {
    "path": "README.md",
    "chars": 4478,
    "preview": "# Home\n\n> [Auto](https://github.com/codeaprendiz/learn_fullstack/blob/main/home/php/intermediate/taskset_intermediate_ph"
  },
  {
    "path": "ReadMe_static.md",
    "chars": 63,
    "preview": "# ToDos\n\n- SAST\n- DAST\n- IAST\n\n- Checkmarx\n- Trivy\n- SonarQube\n"
  },
  {
    "path": "_config.yml",
    "chars": 26,
    "preview": "theme: jekyll-theme-cayman"
  },
  {
    "path": "home/cloud_certifications/aws/ReadMe.md",
    "chars": 733,
    "preview": "# taskset_aws_cloud_certifications\n\n> [Auto](https://github.com/codeaprendiz/learn_fullstack/blob/main/home/php/intermed"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/ReadMe.md",
    "chars": 2955,
    "preview": "[Cheat Sheet - AWS Pro Path](https://tutorialsdojo.com/aws-certified-solutions-architect-professional)\n\n[Free AWS Learni"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/apiGateway.md",
    "chars": 3455,
    "preview": "# API Gateway\n\n- [CheatSheet - API Gateway](https://tutorialsdojo.com/amazon-api-gateway)\n- [CheatSheet - How to invalid"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/applicationDiscoveryService.md",
    "chars": 1438,
    "preview": "# AWS Application Discovery Service\n\n[What Is AWS Application Discovery Service?](https://docs.aws.amazon.com/applicatio"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/aurora.md",
    "chars": 4039,
    "preview": "# Aurora\n\n[Cheat Sheet - RDS](https://tutorialsdojo.com/amazon-relational-database-service-amazon-rds)\n\n[What is Amazon "
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/awsControlTower.md",
    "chars": 607,
    "preview": "# ControlTower\n\n- AWS Organizations is an account management service that lets you consolidate multiple AWS accounts int"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/backup.md",
    "chars": 336,
    "preview": "# AWS Backup\n\n## Restoring a Storage Gateway volume\n\n[Restoring a Storage Gateway volume](https://docs.aws.amazon.com/aw"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/batch.md",
    "chars": 1039,
    "preview": "# Batch\n\n[What Is AWS Batch?](https://docs.aws.amazon.com/batch/latest/userguide/what-is-batch.html)\n\n[Cheat Sheet - AWS"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/bestPractices.md",
    "chars": 2243,
    "preview": "# Best Practices\n\n## Migration Strategies\n\n[CheatSheet - aws-migration-strategies-the-6-rs](https://tutorialsdojo.com/aw"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/billingAndCostManagement.md",
    "chars": 981,
    "preview": "# Billing And Cost Management\n\n[What is AWS Billing?](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billi"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/certificateManager.md",
    "chars": 1106,
    "preview": "# Certificate Manager\n\n[AWS Certificate Manager](https://aws.amazon.com/certificate-manager)\n\n- AWS Certificate Manager "
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudAdoptionReadinessTool.md",
    "chars": 617,
    "preview": "# AWS Cloud Adoption Readiness Tool (CART)\n\n[AWS Cloud Adoption Readiness Tool (CART)](https://cloudreadiness.amazonaws."
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudFormation.md",
    "chars": 8865,
    "preview": "# CloudFormation\n\n[What is AWS CloudFormation?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.h"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudFront.md",
    "chars": 11164,
    "preview": "# Cloudfront\n\n[Cheat Sheet - Cloudfront](https://tutorialsdojo.com/amazon-cloudfront)\n\n[geoproximity-routing-vs-geolocat"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudHSM.md",
    "chars": 920,
    "preview": "# CloudHSM\n\n[AWS CloudHSM](https://aws.amazon.com/cloudhsm)\n\n\n- AWS CloudHSM is a cloud-based hardware security module ("
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudTrail.md",
    "chars": 1913,
    "preview": "# CloudTrail\n\n[Cheat Sheet - AWS CloudTrail](https://tutorialsdojo.com/aws-cloudtrail)\n\n## What Is AWS CloudTrail?\n\n\n[Wh"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudWatchLogs.md",
    "chars": 701,
    "preview": "# CloudWatch Logs\n\n- You can use Amazon CloudWatch Logs to monitor, store, and access your log files from Amazon Elastic"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudsearch.md",
    "chars": 333,
    "preview": "# CloudSearch\n\n[Amazon CloudSearch](https://aws.amazon.com/cloudsearch)\n\n[Cheat Sheet - Amazon CloudSearch](https://tuto"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cloudwatch.md",
    "chars": 7526,
    "preview": "# CloudWatch\n\n[Cheat Sheet - CloudWatch](https://tutorialsdojo.com/amazon-cloudwatch)\n\n[cloudwatch-agent-vs-ssm-agent-vs"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/codeBuild.md",
    "chars": 1290,
    "preview": "\n### CodeBuild\n\n[Create a build project (console)](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/codeCommit.md",
    "chars": 9920,
    "preview": "> Revision Count: 1\n\n# CodeCommit\n\n[Cheat Sheet -  AWS CodeCommit](https://tutorialsdojo.com/aws-codecommit)\n\n## Manage "
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/codeDeploy.md",
    "chars": 5767,
    "preview": "## Code Deploy\n\n[Register an on-premises instance with CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/usergui"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/codePipeline.md",
    "chars": 2651,
    "preview": "\n### CodePipeline\n\n[Grant approval permissions to an IAM user in CodePipeline](https://docs.aws.amazon.com/codepipeline/"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/cognito.md",
    "chars": 4063,
    "preview": "> Revision Count: 0\n\n# AWS Cognito\n\n[What Is Amazon Cognito?](https://docs.aws.amazon.com/cognito/latest/developerguide/"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/commandLineInterface.md",
    "chars": 380,
    "preview": "# Command Line Interface\n\n\n## Configuration AWS CLI\n\n### Using an HTTP proxy\n\n[Using an HTTP proxy](https://docs.aws.ama"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/config.md",
    "chars": 5602,
    "preview": "# Config\n\n[What Is AWS Config?](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)\n\n- AWS Confi"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/connect.md",
    "chars": 359,
    "preview": "# Connect\n\n\n[Amazon Connect](https://aws.amazon.com/connect)\n\n- Provide superior customer service at a lower cost with a"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/dataMigrationService.md",
    "chars": 1520,
    "preview": "# Data Migration Service\n\n[AWS Data Migration Service](https://aws.amazon.com/dms)\n\n\n[Cheatsheet - AWS Data Migration Se"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/developerToolsConsole.md",
    "chars": 682,
    "preview": "### DeveloperToolsConsole\n\n[Security for features of the Developer Tools console](https://docs.aws.amazon.com/dtconsole/"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/directConnect.md",
    "chars": 1733,
    "preview": "# Direct Connect\n\n[Cheat Sheet - Direct Connect](https://tutorialsdojo.com/aws-direct-connect)\n\n[AWS Whitepapaer - AWS D"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/dynamodb.md",
    "chars": 3840,
    "preview": "> Revision Count: 0\n\n# Dynamodb\n\n[Cheatsheet - Dynamodb](https://tutorialsdojo.com/amazon-dynamodb)\n\n- fast\n- highly sca"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/ec2.md",
    "chars": 5897,
    "preview": "# EC2\n\n[Cheat Sheet - EBS](https://tutorialsdojo.com/amazon-ebs)\n\n[EC2](https://tutorialsdojo.com/amazon-elastic-compute"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/ec2AutoScaling.md",
    "chars": 6809,
    "preview": "# EC2 Autoscaling\n\n\n[Scheduled scaling for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguid"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/ecs.md",
    "chars": 6940,
    "preview": "# ECS\n\n[Cheetsheet - ECS](https://tutorialsdojo.com/amazon-elastic-container-service-amazon-ecs/)\n\n[CheatSheet - Elastic"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/elasticBeanStalk.md",
    "chars": 579,
    "preview": "# ElasticBeanStalk\n\n\n[using-features.rolling-version-deploy](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/usin"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/elasticCache.md",
    "chars": 1061,
    "preview": "# Elastic Cache\n\n[Cheat Sheet - ElasticCache](https://tutorialsdojo.com/amazon-elasticache)\n\n\n## What is Amazon ElastiCa"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/elasticFileSystem.md",
    "chars": 1005,
    "preview": "# Elastic File System\n\n[Cheat Sheet - AWS Elastic File System](https://tutorialsdojo.com/amazon-efs)\n\n[What is Amazon El"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/elasticLoadBalancing.md",
    "chars": 1706,
    "preview": "# Elastic Load Balancing\n\n[Cheat Sheet - ALB vs NLB vs CLB](https://tutorialsdojo.com/application-load-balancer-vs-netwo"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/eventBridge.md",
    "chars": 2814,
    "preview": "# Event Bridge\n\n### What is event bridge\n[What Is Amazon EventBridge?](https://docs.aws.amazon.com/eventbridge/latest/us"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/guardDuty.md",
    "chars": 1239,
    "preview": "# AWS GuardDuty\n\n\n[What is Amazon GuardDuty?](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html)\n\n-"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/iam.md",
    "chars": 11263,
    "preview": "> Revision Count: 1\n\n\n# Identify And Access Management\n\n[Cheat Sheet - Identify And Access Management](https://tutorials"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/inspector.md",
    "chars": 862,
    "preview": "# AWS Inspector\n\n### Amazon Inspector rules packages and rules\n\n#### Common vulnerabilities and exposures\n\n[Common vulne"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/kinesis.md",
    "chars": 1951,
    "preview": "# Kinesis\n\n[CheatSheet - Amazon Kinesis](https://tutorialsdojo.com/amazon-kinesis)\n\n## Getting started with Amazon Kines"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/lambda.md",
    "chars": 4895,
    "preview": "# Lambda\n\n[Cheat Sheet - AWS Lambda](https://tutorialsdojo.com/aws-lambda)\n\n[What is AWS Lambda?](https://docs.aws.amazo"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/lex.md",
    "chars": 155,
    "preview": "# Lex\n\n[Amazon Lex](https://aws.amazon.com/lex)\n\n[Cheat Sheet - Amazon Lex](https://tutorialsdojo.com/amazon-lex)\n\n- Bui"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/macie.md",
    "chars": 1012,
    "preview": "\n> Revision Count: 1\n\n# Macie\n\n[Macie](https://aws.amazon.com/macie/)\n\n[Cheat Sheet - Macie](https://tutorialsdojo.com/a"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/mechanicalTurk.md",
    "chars": 1118,
    "preview": "# Mechanical Turk\n\n[What is Mechanical Turk](https://docs.aws.amazon.com/AWSMechTurk/latest/AWSMechanicalTurkRequester/W"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/migrationHub.md",
    "chars": 1153,
    "preview": "# AWS Migration Hub\n\n[AWS Migration Services](https://tutorialsdojo.com/aws-cheat-sheets-migration-services)\n\n[What Is A"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/opswork.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/opsworks.md",
    "chars": 902,
    "preview": "# OpsWorks\n\n[Cheat Sheet - AWS OpsWorks](https://tutorialsdojo.com/aws-opsworks/)\n\n- AWS OpsWorks is a configuration man"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/organizations.md",
    "chars": 6143,
    "preview": "# Organizations\n\n[Cheat Sheet - AWS Organization](https://tutorialsdojo.com/aws-organizations)\n\n[Cheat Sheet - Multi-Acc"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/quickSight.md",
    "chars": 339,
    "preview": "\n\n\n### Quicksight\n\n[Quicksight](https://aws.amazon.com/quicksight/)\n\nQuickSight lets you easily create and publish inter"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/rds.md",
    "chars": 5193,
    "preview": "# RDS\n\n[Cheat Sheet - RDS](https://tutorialsdojo.com/amazon-relational-database-service-amazon-rds)\n\n[RDS Read Replicas]"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/redShift.md",
    "chars": 12,
    "preview": "# RedShift\n\n"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/rekognition.md",
    "chars": 1036,
    "preview": "# Rekognition\n\n[CheatSheet - AWS Rekognition](https://tutorialsdojo.com/amazon-rekognition)\n\n[What is Amazon Rekognition"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/resourceAccessManager.md",
    "chars": 1007,
    "preview": "# Resource Access Manager\n\n[What is AWS Resource Access Manager?](https://docs.aws.amazon.com/ram/latest/userguide/what-"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/route53.md",
    "chars": 9080,
    "preview": "# Route53\n\n[Cheat Sheet - AWS Route53](https://tutorialsdojo.com/amazon-route-53)\n\n[Cheat Sheet - AWS Database Migration"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/s3.md",
    "chars": 11481,
    "preview": "# S3\n\n[Cheat Sheet - AWS S3](https://tutorialsdojo.com/amazon-s3)\n\n[Cheat Sheet - Amazon Glacier](https://tutorialsdojo."
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/sageMaker.md",
    "chars": 1023,
    "preview": "# SageMaker\n\n[Cheat Sheet - SageMaker](https://tutorialsdojo.com/amazon-sagemaker)\n## What Is Amazon SageMaker?\n\n[What I"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/schemaConversionTool.md",
    "chars": 1075,
    "preview": "# Schema Conversion Tool\n\n[What Is the AWS Schema Conversion Tool?](https://docs.aws.amazon.com/SchemaConversionTool/lat"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/secretsManager.md",
    "chars": 2705,
    "preview": "# Secrets Manager\n\n[Cheat Sheet - Secrets Manager](https://tutorialsdojo.com/aws-secrets-manager/)\n\n\n- AWS Secrets Manag"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/securityTokenService.md",
    "chars": 378,
    "preview": "# Security Token Service\n\n## Actions\n\n### AssumeRole\n\n[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/A"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/serverMigrationService.md",
    "chars": 1561,
    "preview": "# Server Migration Service\n\n[Cheat Sheet - SMS](https://tutorialsdojo.com/aws-server-migration-service-sms)\n\n[What is AW"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/serverlessApplicationModel.md",
    "chars": 1240,
    "preview": "# Serverless Applicaton Model\n\n\n[CheatSheet - AWS Serverless Application Model](https://tutorialsdojo.com/aws-serverless"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/serviceCatalog.md",
    "chars": 803,
    "preview": "# AWS Service Catalog\n\n[What Is AWS Service Catalog?](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/intro"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/shield.md",
    "chars": 2080,
    "preview": "# Shield\n\n[AWS Shield](https://docs.aws.amazon.com/waf/latest/developerguide/shield-chapter.html)\n\n[Cheat Sheet - AWS Sh"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/simpleNotificationService.md",
    "chars": 2327,
    "preview": "# Simple Notification Service\n\n[Cheat Sheet - Simple Notification Service](https://tutorialsdojo.com/amazon-sns)\n\n[Mobil"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/simpleQueueService.md",
    "chars": 447,
    "preview": "# Simple Queue Service\n\n[Cheat Sheet - Simple Queue Service](https://tutorialsdojo.com/amazon-sqs)\n\n## What is Amazon Si"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/simpleWorkflowService.md",
    "chars": 550,
    "preview": "# Simple Workflow Service\n\n[Simple Workflow Service](https://aws.amazon.com/swf/)\n\n[Cheat Sheet - SWF](https://tutorials"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/singleSignOn.md",
    "chars": 1477,
    "preview": "> Revision Count: 1\n\n# Single Sign-On\n\n## What is AWS Single Sign-On?\n\n[What is AWS Single Sign-On?](https://docs.aws.am"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/snowball.md",
    "chars": 425,
    "preview": "# Snowball\n\n[Migrate Petabyte-Scale Data to the Cloud](https://aws.amazon.com/getting-started/projects/migrate-petabyte-"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/snowballEdge.md",
    "chars": 792,
    "preview": "# Snowball Edge\n\n[Cheat Sheet - AWS Snowball Edge](https://tutorialsdojo.com/aws-snowball-edge)\n\n## Transferring Files U"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/storageGateway.md",
    "chars": 6061,
    "preview": "# Storage Gateway\n\n[Cheat Sheet - AWS Storage Gateway](https://tutorialsdojo.com/aws-storage-gateway)\n\n[How Storage Gate"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/systemManager.md",
    "chars": 8723,
    "preview": "> Revision Count: 1\n\n# System Manager\n\n[What is AWS Systems Manager?](https://docs.aws.amazon.com/systems-manager/latest"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/transcribe.md",
    "chars": 731,
    "preview": "# Transcribe\n\n[Cheat Sheet - Transcribe](https://tutorialsdojo.com/amazon-transcribe)\n\n- Amazon Transcribe is an AWS ser"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/vpc.md",
    "chars": 9005,
    "preview": "# VPC\n\n[Cheat Sheet - AWS VPC](https://tutorialsdojo.com/amazon-vpc)\n[Cheat Sheet - VPC Peering](https://tutorialsdojo.c"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/waf.md",
    "chars": 1715,
    "preview": "# WAF\n\n[AWS WAF](https://aws.amazon.com/waf/)\n\n[Cheat Sheet - AWS WAF](https://tutorialsdojo.com/aws-waf)\n\n- AWS WAF is "
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/webIdentifyFederation.md",
    "chars": 1083,
    "preview": "# Web Identify Federation\n\n[web identity federation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/wellArchitected.md",
    "chars": 1439,
    "preview": "# Well-Architected\n\n## Plan for Disaster Recovery (DR)\n\n[Cheat Sheet - backup-and-restore-vs-pilot-light-vs-warm-standby"
  },
  {
    "path": "home/cloud_certifications/aws/taskset_aws_cloud_certifications/task_001_aws_certified_solutions_architect_professional/whitepapers.md",
    "chars": 3633,
    "preview": "# Whitepapers\n\n[Network-to-Amazon VPC connectivity options](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-conne"
  },
  {
    "path": "home/cloud_providers/aws/ReadMe-static.md",
    "chars": 270,
    "preview": "# AWS Taskset\nReferences\n\n- [copy-data-from-an-s3-bucket-in-one-account-and-region-to-another-account-and-region](https:"
  },
  {
    "path": "home/cloud_providers/aws/ReadMe.md",
    "chars": 2417,
    "preview": "# taskset_aws_cloud_providers\n\n> [Auto](https://github.com/codeaprendiz/learn_fullstack/blob/main/home/php/intermediate/"
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_001_kms/ReadMe.md",
    "chars": 3179,
    "preview": "### Objective\n\nTo use the AWS KMS to encrypt and decrypt data using the aws kms\n\nInputs : \n1) You have already created a"
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_002_monitoring_msk/ReadMe.md",
    "chars": 1888,
    "preview": "### Monitoring AWS MSK\nYou cannot know what you cannot see.\n\nYou can enable monitoring while setting up MSK. Check out t"
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_003_redirection_using_s3_cloudfront/ReadMe.md",
    "chars": 4232,
    "preview": "### Redirect Apex domain to another domain's subdomain with browser change in URL\n\nRequirements\n\n- firstdomain.com shoul"
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_004_trigger_codebuild_PR_events__eventbridge__static_branc/ReadMe.md",
    "chars": 2228,
    "preview": "# Trigger Codebuild on PR events using EventBridge (the hardcoded branch get's triggered)\n\n- [Trigger Codebuild on PR ev"
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_005_trigger_codebuild_PR_events__eventbridge__lambda__dynamic_branches/ReadMe.md",
    "chars": 6076,
    "preview": "# Trigger codebuild PR events using EventBridge (Lambda, Dynamic Branches)\n\n- [Trigger codebuild PR events using EventBr"
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_005_trigger_codebuild_PR_events__eventbridge__lambda__dynamic_branches/buildspec.yaml",
    "chars": 273,
    "preview": "version: 0.2\n\nphases:\n  install:\n    commands:\n      - echo \"Installing dependencies\"\n\n  pre_build:\n    commands:\n      "
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_005_trigger_codebuild_PR_events__eventbridge__lambda__dynamic_branches/lambda.py",
    "chars": 1271,
    "preview": "import json\nimport boto3\n\ndef lambda_handler(event, context):\n    # Initialize the CodeBuild client\n    codebuild = boto"
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_006_codebuild_codecommit_test_reports_gradle/ReadMe-static.md",
    "chars": 2169,
    "preview": "# Building an Application with Spring Boot with Gradle Groovy, Unit Tests, and Reports\n\n- [Building an Application with "
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_006_codebuild_codecommit_test_reports_gradle/ReadMe.md",
    "chars": 1957,
    "preview": "# Codebuild Codecommit Gradle Project Unit Tests Reports\n\n- [Codebuild Codecommit Gradle Project Unit Tests Reports](#co"
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_006_codebuild_codecommit_test_reports_gradle/buildspec.yaml",
    "chars": 836,
    "preview": "version: 0.2\n\nphases:\n  install:\n    runtime-versions:\n      java: corretto21  # Assuming corretto21 is available, repla"
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_007_codebuild_codecommit_test_reports_mvn/ReadMe.md",
    "chars": 2016,
    "preview": "# AWS Codebuild Test Reports\n\n- [AWS Codebuild Test Reports](#aws-codebuild-test-reports)\n  - [Docs](#docs)\n  - [Create "
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_007_codebuild_codecommit_test_reports_mvn/buildspec.yaml",
    "chars": 703,
    "preview": "version: 0.2\n\nphases:\n  install:\n    runtime-versions:\n      java: corretto21  # Assuming corretto21 is available, repla"
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_008_trigger_lambda_from_codecommit_using_event_bridge/ReadMe.md",
    "chars": 206,
    "preview": "# Trigger Lambda from Codecommit\n\n[https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-notify-lambda-cc.html]"
  },
  {
    "path": "home/cloud_providers/aws/taskset_aws_cloud_providers/task_009_pass_vars_dynamically_from_codebuild_to_codepipeline/ReadMe.md",
    "chars": 366,
    "preview": "# Pass variables dynamically from CodePipeline to CodeBuild\n\n[https://docs.aws.amazon.com/codepipeline/latest/userguide/"
  },
  {
    "path": "home/cloud_providers/azure/ReadMe.md",
    "chars": 2738,
    "preview": "# taskset_azure_cloud_providers\n\n> [Auto](https://github.com/codeaprendiz/learn_fullstack/blob/main/home/php/intermediat"
  },
  {
    "path": "home/cloud_providers/azure/taskset_azure_cloud_providers/task_001_capture_web_app_logs_with_app_service_diagnostics_logging/ReadMe.md",
    "chars": 5239,
    "preview": "# Capture Web Application Logs with App Service Diagnostics Logging\n\n- [Capture Web Application Logs with App Service Di"
  },
  {
    "path": "home/cloud_providers/azure/taskset_azure_cloud_providers/task_002_devbox/ReadMe.md",
    "chars": 7971,
    "preview": "# Devbox\n\n- [Devbox](#devbox)\n  - [What is Microsoft Dev Box?](#what-is-microsoft-dev-box)\n  - [Key concepts for Microso"
  },
  {
    "path": "home/cloud_providers/azure/taskset_azure_cloud_providers/task_003_create_a_windows_virtual_machine/ReadMe.md",
    "chars": 308,
    "preview": "# [Create a Windows virtual machine](https://learn.microsoft.com/en-us/training/modules/create-windows-virtual-machine-i"
  },
  {
    "path": "home/cloud_providers/azure/taskset_azure_cloud_providers/task_004_connect_to_windows_virtual_machine_via_rdp/ReadMe.md",
    "chars": 513,
    "preview": "# [Connect to a Windows virtual machine using RDP](https://learn.microsoft.com/en-us/training/modules/create-windows-vir"
  },
  {
    "path": "home/cloud_providers/azure/taskset_azure_cloud_providers/task_005_create_a_generalized_image/ReadMe.md",
    "chars": 2541,
    "preview": "# [Create a generalized image](https://learn.microsoft.com/en-us/training/modules/customize-windows-server-iaas-virtual-"
  },
  {
    "path": "home/cloud_providers/azure/taskset_azure_cloud_providers/task_006_create_a_new_virtual_machine_from_a_managed_image/ReadMe.md",
    "chars": 1470,
    "preview": "# [Create a new Virtual Machine from a managed image](https://learn.microsoft.com/en-us/training/modules/customize-windo"
  },
  {
    "path": "home/cloud_providers/azure/taskset_azure_cloud_providers/task_007_create_an_image_of_azure_vm_from_az_cli_and_provision_a_new_vm/ReadMe.md",
    "chars": 2294,
    "preview": "# [Exercise - Create an image of an Azure VM from the Azure CLI and provision a new VM](https://learn.microsoft.com/en-u"
  },
  {
    "path": "home/cloud_providers/azure/taskset_azure_cloud_providers/task_008_create_an_azure_virtual_machine/ReadMe.md",
    "chars": 831,
    "preview": "# [Create an Azure virtual machine](https://learn.microsoft.com/en-us/training/modules/describe-azure-compute-networking"
  },
  {
    "path": "home/cloud_providers/azure/taskset_azure_cloud_providers/task_009_configure_network_access/ReadMe.md",
    "chars": 3145,
    "preview": "# [Configure Network Access](https://learn.microsoft.com/en-us/training/modules/describe-azure-compute-networking-servic"
  },
  {
    "path": "home/cloud_providers/azure/taskset_azure_cloud_providers/task_010_create_a_storage_blob/ReadMe.md",
    "chars": 238,
    "preview": "# [Create a storage blob](https://learn.microsoft.com/en-us/training/modules/describe-azure-storage-services/5-exercise-"
  },
  {
    "path": "home/cloud_providers/azure/taskset_azure_cloud_providers/task_011_deploy_a_container_app/ReadMe.md",
    "chars": 1568,
    "preview": "# [Exercise - Deploy a container app](https://learn.microsoft.com/en-us/training/modules/implement-azure-container-apps/"
  },
  {
    "path": "home/cloud_providers/gcp/ReadMe-static.md",
    "chars": 917,
    "preview": "# GCP Taskset\n\nReferences\n\n- [docs/regions-zones](https://cloud.google.com/compute/docs/regions-zones)\n- [https://cloud."
  },
  {
    "path": "home/cloud_providers/gcp/ReadMe.md",
    "chars": 9832,
    "preview": "# taskset_gcp_cloud_providers\n\n> [Auto](https://github.com/codeaprendiz/learn_fullstack/blob/main/home/php/intermediate/"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_001_create_budget__and_alerts/ReadMe.md",
    "chars": 114,
    "preview": "## Create budget and alerts\n\n[billing/docs/how-to/budgets](https://cloud.google.com/billing/docs/how-to/budgets)\n\n"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_001_intro_console_projects_iam_apis/ReadMe.md",
    "chars": 1533,
    "preview": "# Get Familiar With Console, Projects, Roles And Permissions, APIs And Services\n\n\n[https://www.cloudskillsboost.google]("
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_002_getting_started_with_cloud_market_place/ReadMe.md",
    "chars": 636,
    "preview": "# Getting Started With Cloud Marketplace\n\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n["
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_002_getting_started_with_cloud_market_place__lamp_stack/ReadMe.md",
    "chars": 815,
    "preview": "# Getting Started With Cloud Marketplace\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[S"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_003_vpc_networking_and_google_compute_engine/ReadMe.md",
    "chars": 3088,
    "preview": "# Getting started with VPC Networking and Google Compute Engine\n\n[https://www.cloudskillsboost.google](https://www.cloud"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_004_getting_started_with_cloud_storage_and_cloud_sql__php/ReadMe.md",
    "chars": 3162,
    "preview": "# Getting Started with Cloud Storage and Cloud SQL\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.g"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_004_getting_started_with_cloud_storage_and_cloud_sql__php/index.php",
    "chars": 608,
    "preview": "<html>\n<head><title>Welcome to my excellent blog</title></head>\n<body>\n<h1>Welcome to my excellent blog</h1>\n<?php\n$dbse"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_005_getting_started_with_gke__nginx/ReadMe.md",
    "chars": 1357,
    "preview": "# Getting started with GKE\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - DevOps"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_006_hello_cloud_run__node/ReadMe.md",
    "chars": 3508,
    "preview": "# Hello Cloud Run\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - DevOps Engineer"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_006_hello_cloud_run__node/hello-world-node/Dockerfile",
    "chars": 715,
    "preview": "# Use the official lightweight Node.js 12 image.\n# https://hub.docker.com/_/node\nFROM node:12-slim\n# Create and change t"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_006_hello_cloud_run__node/hello-world-node/index.js",
    "chars": 289,
    "preview": "const express = require('express');\nconst app = express();\nconst port = process.env.PORT || 8080;\napp.get('/', (req, res"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_006_hello_cloud_run__node/hello-world-node/package.json",
    "chars": 223,
    "preview": "{\n  \"name\": \"helloworld\",\n  \"description\": \"Simple hello world sample in Node\",\n  \"version\": \"1.0.0\",\n  \"main\": \"index.j"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_007_building_a_devops_pipeline__python/Dockerfile",
    "chars": 175,
    "preview": "FROM python:3.7\nWORKDIR /app\nCOPY . .\nRUN pip install gunicorn\nRUN pip install -r requirements.txt\nENV PORT=80\nCMD exec "
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_007_building_a_devops_pipeline__python/ReadMe.md",
    "chars": 2425,
    "preview": "# Building a DevOps Pipeline\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - DevO"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_007_building_a_devops_pipeline__python/main.py",
    "chars": 290,
    "preview": "from flask import Flask, render_template, request\napp = Flask(__name__)\n@app.route(\"/\")\ndef main():\n    model = {\"title\""
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_007_building_a_devops_pipeline__python/requirements.txt",
    "chars": 12,
    "preview": "Flask==2.0.3"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_007_building_a_devops_pipeline__python/templates/index.html",
    "chars": 165,
    "preview": "{% extends \"layout.html\" %}\n{% block content %}\n<div class=\"jumbotron\">\n    <div class=\"container\">\n        <h1>{{model."
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_007_building_a_devops_pipeline__python/templates/layout.html",
    "chars": 331,
    "preview": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>{{model.title}}</title>\n    <!-- Bootstrap CSS -->\n    <link rel=\"sty"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun/Dockerfile",
    "chars": 177,
    "preview": "FROM python:3.7\nWORKDIR /app\nCOPY . .\nRUN pip install gunicorn\nRUN pip install -r requirements.txt\nENV PORT=8080\nCMD exe"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun/ReadMe.md",
    "chars": 2166,
    "preview": "# Deploying same Python app to AppEngine, GKE, CloudRun\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsbo"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun/app.yaml",
    "chars": 33,
    "preview": "# For AppEngine\nruntime: python37"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun/k8s-manifests.yaml",
    "chars": 680,
    "preview": "---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: devops-deployment\n  labels:\n    app: devops\n    tier: fronten"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun/main.py",
    "chars": 290,
    "preview": "from flask import Flask, render_template, request\napp = Flask(__name__)\n@app.route(\"/\")\ndef main():\n    model = {\"title\""
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun/requirements.txt",
    "chars": 12,
    "preview": "Flask==2.0.3"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun/templates/index.html",
    "chars": 165,
    "preview": "{% extends \"layout.html\" %}\n{% block content %}\n<div class=\"jumbotron\">\n    <div class=\"container\">\n        <h1>{{model."
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun/templates/layout.html",
    "chars": 331,
    "preview": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>{{model.title}}</title>\n    <!-- Bootstrap CSS -->\n    <link rel=\"sty"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun__python/Dockerfile",
    "chars": 177,
    "preview": "FROM python:3.7\nWORKDIR /app\nCOPY . .\nRUN pip install gunicorn\nRUN pip install -r requirements.txt\nENV PORT=8080\nCMD exe"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun__python/ReadMe.md",
    "chars": 2397,
    "preview": "# Deploying same Python app to AppEngine, GKE, CloudRun\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsbo"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun__python/app.yaml",
    "chars": 33,
    "preview": "# For AppEngine\nruntime: python37"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun__python/k8s-manifests.yaml",
    "chars": 680,
    "preview": "---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: devops-deployment\n  labels:\n    app: devops\n    tier: fronten"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun__python/main.py",
    "chars": 290,
    "preview": "from flask import Flask, render_template, request\napp = Flask(__name__)\n@app.route(\"/\")\ndef main():\n    model = {\"title\""
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun__python/requirements.txt",
    "chars": 12,
    "preview": "Flask==2.0.3"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun__python/templates/index.html",
    "chars": 165,
    "preview": "{% extends \"layout.html\" %}\n{% block content %}\n<div class=\"jumbotron\">\n    <div class=\"container\">\n        <h1>{{model."
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_008_deploying_app_to_app_engine_and_gke_and_cloudrun__python/templates/layout.html",
    "chars": 331,
    "preview": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>{{model.title}}</title>\n    <!-- Bootstrap CSS -->\n    <link rel=\"sty"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_009_monitoring_applications_in_gcp__python/Dockerfile",
    "chars": 177,
    "preview": "FROM python:3.7\nWORKDIR /app\nCOPY . .\nRUN pip install gunicorn\nRUN pip install -r requirements.txt\nENV PORT=8080\nCMD exe"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_009_monitoring_applications_in_gcp__python/ReadMe.md",
    "chars": 3640,
    "preview": "# Monitoring Applications in GCP\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - "
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_009_monitoring_applications_in_gcp__python/app.yaml",
    "chars": 33,
    "preview": "# For AppEngine\nruntime: python37"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_009_monitoring_applications_in_gcp__python/main.py",
    "chars": 543,
    "preview": "from flask import Flask, render_template, request\nimport googlecloudprofiler\n\n\napp = Flask(__name__)\n@app.route(\"/\")\ndef"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_009_monitoring_applications_in_gcp__python/requirements.txt",
    "chars": 92,
    "preview": "Flask==2.0.3\nitsdangerous==2.0.1\nJinja2==3.0.3\ngoogle-cloud-profiler==3.0.6\nprotobuf==3.20.1"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_009_monitoring_applications_in_gcp__python/templates/index.html",
    "chars": 165,
    "preview": "{% extends \"layout.html\" %}\n{% block content %}\n<div class=\"jumbotron\">\n    <div class=\"container\">\n        <h1>{{model."
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_009_monitoring_applications_in_gcp__python/templates/layout.html",
    "chars": 331,
    "preview": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>{{model.title}}</title>\n    <!-- Bootstrap CSS -->\n    <link rel=\"sty"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_010_alerting_in_google_cloud/ReadMe.md",
    "chars": 356,
    "preview": "# Alerting in Google Cloud\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - DevOps"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_010_alerting_in_google_cloud__python/Dockerfile",
    "chars": 177,
    "preview": "FROM python:3.7\nWORKDIR /app\nCOPY . .\nRUN pip install gunicorn\nRUN pip install -r requirements.txt\nENV PORT=8080\nCMD exe"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_010_alerting_in_google_cloud__python/ReadMe.md",
    "chars": 2843,
    "preview": "# Alerting in Google Cloud - Python App - App Engine\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_010_alerting_in_google_cloud__python/app-engine-error-percent-policy.json",
    "chars": 1444,
    "preview": "{\n  \"displayName\": \"HTTP error count exceeds 1 percent for App Engine apps\",\n  \"combiner\": \"OR\",\n  \"conditions\": [\n    {"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_010_alerting_in_google_cloud__python/app.yaml",
    "chars": 33,
    "preview": "# For AppEngine\nruntime: python37"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_010_alerting_in_google_cloud__python/main.py",
    "chars": 902,
    "preview": "import time\nimport random\nimport json\nfrom flask import Flask, render_template, request\n\napp = Flask(__name__)\n\n@app.rou"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_010_alerting_in_google_cloud__python/requirements.txt",
    "chars": 12,
    "preview": "Flask==2.0.3"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_010_alerting_in_google_cloud__python/templates/index.html",
    "chars": 165,
    "preview": "{% extends \"layout.html\" %}\n{% block content %}\n<div class=\"jumbotron\">\n    <div class=\"container\">\n        <h1>{{model."
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_010_alerting_in_google_cloud__python/templates/layout.html",
    "chars": 331,
    "preview": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>{{model.title}}</title>\n    <!-- Bootstrap CSS -->\n    <link rel=\"sty"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_011_service_monitoring__node/ReadMe.md",
    "chars": 2510,
    "preview": "# Service Monitoring\n\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - DevOps Engi"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_011_service_monitoring__node_app/ReadMe.md",
    "chars": 2347,
    "preview": "# Service Monitoring\n\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - DevOps Engi"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_012_monitoring_and_dashboarding_multiple_projects_from_a_single_workspace/ReadMe.md",
    "chars": 2128,
    "preview": "# Monitoring and Dashboarding Multiple Projects from a Single Workspace\n\n[https://www.cloudskillsboost.google](https://w"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_012_monitoring_and_dashboarding_multiple_projects_from_a_single_workspace__nginx/ReadMe.md",
    "chars": 2230,
    "preview": "# Monitoring and Dashboarding Multiple Projects from a Single Workspace\n\n[https://www.cloudskillsboost.google](https://w"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_013_compute_logging_and_monitoring/ReadMe.md",
    "chars": 3558,
    "preview": "# Compute Logging And Monitoring\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - "
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_014_log_analysis/ReadMe.md",
    "chars": 3904,
    "preview": "# Log Analysis\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - DevOps Engineer, S"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_014_log_analysis_cloud_run__node/ReadMe.md",
    "chars": 4013,
    "preview": "# Log Analysis\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - DevOps Engineer, S"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_015_cloud_audit_logs/ReadMe.md",
    "chars": 2165,
    "preview": "# Cloud Audit Logs\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - DevOps Enginee"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_015_cloud_storage_audit_logs/ReadMe.md",
    "chars": 2241,
    "preview": "# Cloud Audit Logs\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - DevOps Enginee"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_016_analyzing_network_traffic_with_vpc_flow_logs/ReadMe.md",
    "chars": 5118,
    "preview": "# Analyzing Network Traffic With VPC Flow Logs\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.googl"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_017_application_performance_management/ReadMe.md",
    "chars": 3603,
    "preview": "# Application Performance Management\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Selec"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_017_application_performance_management__python_and_nodejs/ReadMe.md",
    "chars": 3714,
    "preview": "# Application Performance Management\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Selec"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_018_2inst_2buckets_2iam/ReadMe.md",
    "chars": 7523,
    "preview": "# Cloud Shell, VMs, Buckets, Service Accounts\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_019_working_with_cloud_build/ReadMe.md",
    "chars": 2617,
    "preview": "# Working with Cloud Build\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - Gettin"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_020_deploying_google_kubernetes_engine/ReadMe.md",
    "chars": 737,
    "preview": "# Deploying Google Kubernetes Engine\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Selec"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_021_creating_google_kubernetes_engine_deployments/ReadMe.md",
    "chars": 5741,
    "preview": "# Creating Google Kubernetes Engine Deployments\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.goog"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_021_creating_google_kubernetes_engine_deployments/nginx-canary.yaml",
    "chars": 390,
    "preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: nginx-canary\n  labels:\n    app: nginx\nspec:\n  replicas: 1\n  selec"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_021_creating_google_kubernetes_engine_deployments/nginx-deployment.yaml",
    "chars": 349,
    "preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: nginx-deployment\n  labels:\n    app: nginx\nspec:\n  replicas: 3\n  s"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_021_creating_google_kubernetes_engine_deployments/nginx-svc-session-affinity.yaml",
    "chars": 202,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: nginx\nspec:\n  type: LoadBalancer\n  sessionAffinity: ClientIP\n  selector:\n"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_021_creating_google_kubernetes_engine_deployments/service-nginx.yaml",
    "chars": 174,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: nginx\nspec:\n  type: LoadBalancer\n  selector:\n    app: nginx\n  ports:\n    "
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_022_configuring_persistent_storage_for_google_kubernetes_engine/ReadMe.md",
    "chars": 4579,
    "preview": "# Configuring Persistent Storage for Google Kubernetes Engine\n\n[https://www.cloudskillsboost.google](https://www.cloudsk"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_022_configuring_persistent_storage_for_google_kubernetes_engine/pod-volume-demo.yaml",
    "chars": 306,
    "preview": "kind: Pod\napiVersion: v1\nmetadata:\n  name: pvc-demo-pod\nspec:\n  containers:\n    - name: frontend\n      image: nginx\n    "
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_022_configuring_persistent_storage_for_google_kubernetes_engine/pvc-demo.yaml",
    "chars": 163,
    "preview": "apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: hello-web-disk\nspec:\n  accessModes:\n    - ReadWriteOnce\n  r"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_022_configuring_persistent_storage_for_google_kubernetes_engine/statefulset-demo.yaml",
    "chars": 900,
    "preview": "kind: Service\napiVersion: v1\nmetadata:\n  name: statefulset-demo-service\nspec:\n  ports:\n    - protocol: TCP\n      port: 8"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_023_anthos_service_mesh_walkthrough/ReadMe.md",
    "chars": 3721,
    "preview": "#  Anthos Service Mesh Walkthrough\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select "
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_024_observing_anthos_services/ReadMe.md",
    "chars": 6630,
    "preview": "# Observing Anthos Services\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.google)\n\n[Select - Cloud"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_025_managing_traffic_with_anthos_service_mesh/ReadMe.md",
    "chars": 21869,
    "preview": "# Managing Traffic Flow with Anthos Service Mesh\n\n\n\n[https://www.cloudskillsboost.google](https://www.cloudskillsboost.g"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_025_managing_traffic_with_anthos_service_mesh/conditional-routing-labels.yaml",
    "chars": 367,
    "preview": "#  conditional routing: based on source labels\n# A rule can indicate that it only applies to calls from workloads (pods)"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_025_managing_traffic_with_anthos_service_mesh/conditional-routing-req-headers.yaml",
    "chars": 376,
    "preview": "# conditional routing: based on request headers\n# The below rule only applies to an incoming request if it includes a cu"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_025_managing_traffic_with_anthos_service_mesh/fault-injection-aborts.yaml",
    "chars": 349,
    "preview": "# fault injection: inserting aborts\n# The below example returns an HTTP 400 error code for 10% of the requests to the ra"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_025_managing_traffic_with_anthos_service_mesh/fault-injection-delays.yaml",
    "chars": 550,
    "preview": "# fault injection: inserting delays: Fault injection is a testing method that introduces errors into a system to ensure "
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_025_managing_traffic_with_anthos_service_mesh/manifests/destinationrule--productpage-circuit-breaker.yaml",
    "chars": 1572,
    "preview": "# DestinationRule is an Istio resource that defines policies to apply to traffic intended\n# for a specific service insta"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_025_managing_traffic_with_anthos_service_mesh/manifests/destinationrule-all.yaml",
    "chars": 1841,
    "preview": "# This is a Kubernetes manifest file for an Istio DestinationRule resource, which is used\n# to configure traffic routing"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_025_managing_traffic_with_anthos_service_mesh/manifests/gateway--bookinfo-gateway-port-80-http.yaml",
    "chars": 679,
    "preview": "apiVersion: networking.istio.io/v1alpha3\nkind: Gateway\nmetadata:\n  name: bookinfo-gateway\n  namespace: ingress\nspec:\n  s"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_025_managing_traffic_with_anthos_service_mesh/manifests/virtualService-2-or-1-second-delay-to-calls-to-ratings-service.yaml",
    "chars": 285,
    "preview": "apiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n  name: ratings\nspec:\n  hosts:\n    - ratings\n  h"
  },
  {
    "path": "home/cloud_providers/gcp/taskset_gcp_cloud_providers/task_025_managing_traffic_with_anthos_service_mesh/manifests/virtualservice--all-to-v1.yaml",
    "chars": 2544,
    "preview": "apiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n  name: productpage\nspec:\n  hosts:\n    # This sp"
  }
]

// ... and 1853 more files (download for full content)

About this extraction

This page contains the full source code of the codeaprendiz/learn_devops GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2053 files (19.5 MB), approximately 5.3M tokens, and a symbol index with 958 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!