doc.casthighlight.com
Open in
urlscan Pro
35.229.97.61
Public Scan
Submitted URL: https://learn.castsoftware.com/e3t/Ctc/IU+113/b3v204/VW79yQ8v2j5TW36_8Ds7hC3qsW197v5Z4ZyCr-N70Sktw3q3n_V1-WJV7CgT-vVZLDrD4jmKyw...
Effective URL: https://doc.casthighlight.com/cloudreadypatterns/?utm_campaign=General_HL_Product_Release_Notes&utm_medium=email&_hsmi=2549141...
Submission: On May 10 via api from US — Scanned from DE
Effective URL: https://doc.casthighlight.com/cloudreadypatterns/?utm_campaign=General_HL_Product_Release_Notes&utm_medium=email&_hsmi=2549141...
Submission: On May 10 via api from US — Scanned from DE
Form analysis
0 forms found in the DOMText Content
CAST HIGHLIGHT | CLOUDREADY PATTERN DOCUMENTATION CloudReady Rules 122 Blockers 65 Boosters 57 Containerization 15 See CloudReady Pattern List -------------------------------------------------------------------------------- Type Platform Pattern Containerization Technologies BlockerAgnosticAccess to environment variableC# Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net C/C++ Scala Clojure Go BlockerAgnosticApplication server dependenciesJava BlockerAgnosticAvoid code that can accidentally get skippedCOBOL JavaScript TypeScript Scala BlockerAgnosticAvoid launching OS-specific sub-processes from codeKotlin PHP Python SWIFT Scala Clojure Go BlockerAgnosticAvoid using ALTER statements in mainframesCOBOL BlockerAgnosticAvoid using binary data type in mainframesCOBOL BlockerAgnosticAvoid using CA Panvalet Command in mainframes specific of Z/OSCOBOL BlockerAgnosticAvoid using CURRENCY SIGN clause in mainframes specific to Z/OSCOBOL BlockerAgnosticAvoid using DECIMAL POINT IS A COMMA clause in mainframes specific to Z/OSCOBOL BlockerAgnosticAvoid using deprecated MySQL commandsPHP BlockerAgnosticAvoid using DL/I CallsCOBOL BlockerAgnosticAvoid using Double Byte character in mainframesCOBOL BlockerAgnosticAvoid using GOTO statements in mainframesCOBOL BlockerAgnosticAvoid using hardcoded URLs (FTP protocol) in source codeC# COBOL Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net C/C++ Scala Clojure Go BlockerAgnosticAvoid using hardcoded URLs (HTTP protocol) in source codeC# COBOL Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net C/C++ Scala Clojure Go BlockerAgnosticAvoid using hardcoded URLs (LDAP protocol) in source codeC# COBOL Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net C/C++ Scala Clojure Go BlockerAgnosticAvoid using hexadecimal constants in mainframesCOBOL BlockerAgnosticAvoid using OCCURS clause in mainframesCOBOL BlockerAgnosticAvoid using packed Decimal unique way of representation of decimal data in mainframesCOBOL BlockerAgnosticAvoid using REDEFINES clause in mainframesCOBOL BlockerAgnosticAvoid using the SYSIBM.SYSDUMMY1 dummy table in mainframesCOBOL BlockerAgnosticAvoid using unsecured database connection stringsC# VB/VB.Net C/C++ BlockerAgnosticPerform Directory ManipulationC# Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net C/C++ Scala Clojure Go BlockerAgnosticPerform File ManipulationC# Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net C/C++ Scala Clojure Go BlockerAgnosticUse of an unsecured data stringC# COBOL Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net C/C++ Scala Clojure Go BlockerAzureUse of database driver incompatibility (PDO_DBLIB)PHP BlockerAgnosticUse of LDAP/AD authenticationC# BlockerAgnosticUse of sendmail utility on Paas instead of specific email sending libraryPHP BlockerAgnosticUse of WCF (Windows Communication Foundation) servicesC# BlockerAzureUsing functions fn_get_sql, fn_virtualfilestats, fn_virtualservernodes - Unsupported in Azure SQL DatabaseTSQL BlockerAgnosticUsing a middleware applicationC# Java VB/VB.Net BlockerAgnosticUsing a temporary local file or directoryC# VB/VB.Net C/C++ Scala Go BlockerAgnosticUsing Access Control ListC# Java JavaScript TypeScript VB/VB.Net C/C++ Scala Go BlockerAgnosticUsing Auto Generated Machine KeyC# VB/VB.Net BlockerVMWare TanzuUsing CDI Beans ConfigurationJava BlockerAgnosticUsing COM ComponentsC# VB/VB.Net BlockerAgnosticUsing Crypto APIC# JavaScript TypeScript VB/VB.Net BlockerAgnosticUsing direct Database Access through Connection StringsC# VB/VB.Net C/C++ BlockerSpecificUsing EventLog in System.Diagnostics namespaceC# VB/VB.Net C/C++ C# VB/VB.Net BlockerAgnosticUsing file systemC# COBOL Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net C/C++ Scala Clojure Go BlockerAzureUsing function ALTER DATABASE - Unsupported in Azure SQL DatabaseTSQL BlockerAzureUsing function CREATE CREDENTIAL - Unsupported in Azure SQL DatabaseTSQL BlockerAzureUsing function fn_my_permissions - Unsupported in Azure SQL DatabaseTSQL BlockerAzureUsing function sp_addmessage - Unsupported in Azure SQL DatabaseTSQL BlockerAzureUsing functions OPENQUERY, OPENROWSET, OPENDATASOURCE - Unsupported in Azure SQL DatabaseTSQL BlockerAgnosticUsing hardcoded network IP address (IPV4, IPV6)C# COBOL Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net C/C++ Scala Clojure Go BlockerVMWare TanzuUsing IBM WebSphereJava BlockerAgnosticUsing impersonate IdentityC# Java VB/VB.Net C/C++ BlockerVMWare TanzuUsing JBoss Application ServerJava BlockerVMWare TanzuUsing JEE ConfigurationJava BlockerAgnosticUsing Log4Net for application logsC# VB/VB.Net BlockerSpecificUsing New Process in System.Diagnostics namespaceC# JavaScript TypeScript VB/VB.Net BlockerAgnosticUsing of unsecure network protocols (HTTP, FTP)C# COBOL Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net C/C++ Scala Clojure Go BlockerAgnosticUsing of Windows AuthenticationC# VB/VB.Net BlockerVMWare TanzuUsing Oracle WebLogicJava BlockerAgnosticUsing other configuration files than Web configurationC# VB/VB.Net BlockerAzureUsing SEMANTICKEYPHRASETABLE (semantic search) - Unsupported in Azure SQL DatabaseTSQL BlockerAgnosticUsing stateful session (Servlet)Java PHP BlockerAgnosticUsing stateful session (Spring)Java BlockerAgnosticUsing system DLLsC# VB/VB.Net C/C++ Go BlockerSpecificUsing System.ServiceProcess (Windows services)C# VB/VB.Net BlockerAzureUsing USE statement - Unsupported in Azure SQL DatabaseTSQL BlockerAgnosticUsing Webform AuthenticationC# VB/VB.Net BlockerAgnosticUsing Windows registry to store Application SettingsC# VB/VB.Net BlockerAgnostic[deprecated] Use of an unsecured APIC# BoosterAgnosticCorrect usage of LoggingC# VB/VB.Net BoosterAgnosticPresence of a web configuration fileC# VB/VB.Net BoosterAgnosticRetry Patterns: Using RetryPolicy or RetryManager classesC# VB/VB.Net BoosterAgnosticUse ConfigurationManagerC# VB/VB.Net BoosterAgnosticUsing a CICS webservice in mainframesCOBOL BoosterSpecificUsing a Cloud-based Access ControlC# Java BoosterSpecificUsing a Cloud-based Active DirectoryJavaScript Kotlin SWIFT TypeScript Clojure Go BoosterSpecificUsing a Cloud-based Active DirectoryC# Java PHP Python SWIFT VB/VB.Net C# PHP Python VB/VB.Net BoosterSpecificUsing a Cloud-based Batch Job OrchestrationC# Java PHP Python SWIFT VB/VB.Net C# Python SWIFT VB/VB.Net BoosterSpecificUsing a Cloud-based Big Data technology (EMR)Kotlin Scala Clojure Go Kotlin SWIFT Clojure Go Clojure Go BoosterAgnosticUsing a Cloud-based Blockchain technologyKotlin SWIFT Clojure Go BoosterAgnosticUsing a Cloud-based cache in-memory database (Memcached)Kotlin SWIFT Clojure Go BoosterSpecificUsing a Cloud-based cache Management FrameworkC# Java PHP Python VB/VB.Net Clojure C# Java PHP Python VB/VB.Net BoosterSpecificUsing a Cloud-based container serviceKotlin Clojure Go SWIFT Clojure BoosterSpecificUsing a Cloud-based data storageC# Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net Scala Clojure Go C# Java JavaScript Kotlin PHP Python SWIFT TypeScript Scala Clojure Go Go BoosterSpecificUsing a Cloud-based data storageC# Java JavaScript Kotlin PHP Python SWIFT TypeScript Scala Clojure BoosterSpecificUsing a Cloud-based encryption mechanismC# Java Kotlin Python SWIFT VB/VB.Net BoosterSpecificUsing a Cloud-based function as a service (Serverless)C# Java Kotlin Scala Clojure Go C# Java Kotlin Scala Clojure C# Java Kotlin Scala Clojure Go BoosterSpecificUsing a Cloud-based key storageC# Java JavaScript Kotlin Python TypeScript VB/VB.Net Scala Clojure Go C# Java JavaScript Kotlin Python SWIFT TypeScript VB/VB.Net Scala BoosterSpecificUsing a Cloud-based Key storage (KMS)C# Java JavaScript PHP Python TypeScript Clojure BoosterSpecificUsing a Cloud-based middleware application (Pub/Sub)C# Java JavaScript Kotlin PHP Python SWIFT TypeScript Scala Clojure Go BoosterSpecificUsing a Cloud-based search engineKotlin Clojure Go Clojure BoosterSpecificUsing a Cloud-based Service BusC# Java JavaScript TypeScript VB/VB.Net Go C# Java JavaScript PHP Python SWIFT TypeScript VB/VB.Net Scala Go BoosterSpecificUsing a Cloud-based Stream and Batch data processingC# Java Python BoosterSpecificUsing a Cloud-based task scheduling serviceJavaScript TypeScript C# JavaScript TypeScript VB/VB.Net BoosterSpecificUsing a Cloud-based task scheduling serviceC# Java JavaScript PHP Python SWIFT TypeScript Scala BoosterAgnosticUsing a connection to DB2 in mainframesCOBOL BoosterAgnosticUsing a connection to IBM IMS CSQ series in mainframesCOBOL BoosterAgnosticUsing a connection to IBM MQ series in mainframesCOBOL BoosterSpecificUsing a Load BalancerC# Java C# Java Java BoosterAgnosticUsing a processing JSON inputCOBOL Kotlin SWIFT Clojure Go BoosterAgnosticUsing a processing JSON output in mainframesCOBOL BoosterAgnosticUsing a processing XML inputCOBOL Kotlin SWIFT Clojure Go BoosterAgnosticUsing a subset of data rows in DB2 in mainframesCOBOL BoosterSpecificUsing BigQuery product cloud data warehouseGo C# Java JavaScript Kotlin PHP Python TypeScript C/C++ Scala Clojure BoosterSpecificUsing BigTable product fully managed NoSQL database serviceC# Java JavaScript PHP Python TypeScript Scala Clojure Go BoosterAgnosticUsing CASE statements in mainframesCOBOL BoosterSpecificUsing Cloud Datastore product NoSQL document databaseC# Java JavaScript PHP Python TypeScript Scala BoosterSpecificUsing Cloud IAM (Identity & Access Management) for managing specific resources access authorizationKotlin PHP Python SWIFT Scala Clojure Go C# Java JavaScript PHP Python TypeScript Clojure Go BoosterSpecificUsing Cloud IAP (Identity Aware Proxy)C# Java JavaScript PHP Python TypeScript BoosterSpecificUsing Cloud Memorystore for Redis fully managed in-memory data store serviceKotlin SWIFT Scala Clojure Go C# Java JavaScript PHP Python TypeScript Go BoosterSpecificUsing Cloud Spanner product relational database serviceC# Java JavaScript PHP Python TypeScript Scala Clojure BoosterSpecificUsing cloud specific storage componentC# Java C# Java C# Java BoosterSpecificUsing Cloud-based database servicesC# Kotlin Clojure Go C# Java VB/VB.Net Go BoosterSpecificUsing Devops automation and IaC (Infrastructure as Code)C# Java C# Java SWIFT C# Java BoosterAgnosticUsing Docker product open-source platform for managing containerized workloads and servicesKotlin SWIFT Scala Clojure Go BoosterSpecificUsing ETLs (Extract Transform Load)C# Java C# Java C# Java BoosterSpecificUsing Firebase Google's mobile platformC# Java JavaScript Kotlin PHP Python SWIFT TypeScript Scala Clojure Go BoosterSpecificUsing Kubernetes product open-source platform for managing containerized workloads and servicesKotlin SWIFT Scala Clojure Go C# Java JavaScript PHP Python TypeScript BoosterAgnosticUsing MongoDB databaseC# Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net Scala Clojure Go BoosterSpecificUsing Monitoring ServiceC# Java C# Java C# Java BoosterAgnosticUsing MySQL databaseC# Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net Scala Clojure Go BoosterSpecificUsing NoSQL document storageC# Java Kotlin PHP Python SWIFT VB/VB.Net Scala Clojure Go Java JavaScript Kotlin PHP Python TypeScript Scala Clojure Go BoosterAgnosticUsing Oracle databaseKotlin Clojure Go BoosterAgnosticUsing PostgreSQL databaseC# Java JavaScript Kotlin PHP Python SWIFT TypeScript VB/VB.Net Scala Clojure Go BoosterAgnosticUsing SQL server databaseC# Kotlin VB/VB.Net Clojure Go BoosterAgnosticUsing uncommit read option UR in mainframesCOBOL Temporary Files Agnostic ACCESS TO ENVIRONMENT VARIABLE Environment variables are OS-dependent and as such, not Cloud-friendly. Additionally, their existence in a Cloud environment cannot be guaranteed over time as the underlying infrastructure could be moved, remove or duplicated. Instead, you should consider using YAML files or shared data source to store your application configuration parameters. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. CONTAINERIZATION Criticality Medium Migration Impact ARCHITECTURE CODE FRAMEWORK Use the CAST Highlight output listing all your code files declaring dependencies to environment variables. Review the dependencies in each file. For each environment variable that needs to be set up, ensure it will exist in your container. There are two ways this information can be passed down to the container. You can use the -e option in the run command of your docker container. It is adequate when the number of variables is low. However, as soon as we have more than a handful of variables, it can quickly become cumbersome and error-prone. The second option is preferred: You can specify a file to read values from, called an env_file. REFERENCES https://vsupalov.com/docker-arg-env-variable-guide/#setting-env-values REFERENCES https://support.cloud.engineyard.com/hc/en-us/articles/205407508-Environment-Variables-and-Why-You-Shouldn-t-Use-Them Execution Environment Agnostic APPLICATION SERVER DEPENDENCIES This pattern verifies the presence of dependencies to application servers such as WebLogic and Jetty. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. Code Execution Agnostic AVOID CODE THAT CAN ACCIDENTALLY GET SKIPPED This pattern verifies the presence of the ‘assert()’ function in source code. assert() is a debugging instruction that should not be found in mature code in production. Moreover, this instruction is aimed to provide information in the console, which doesn’t make sense in a Cloud context. Example of assert() usage: function assert(condition, message) { if (!condition) { message = message || "Assertion failed"; if (typeof Error !== "undefined") { throw new Error(message); } throw message; // Fallback } } In a COBOL context, this pattern verifies the presence of DISPLAY statements and WITH DEBUGGING MODE clauses in source code. DISPLAY statement is used to the value of a data item on a screen or write it to a file. This is used for debugging purpose. It is not good to have this in production environment. WITH DEBUGGING MODE activates a compile-time switch for debugging lines written in the source text. A debugging line is a statement that is compiled only when the compile-time switch is activated. Debugging lines allow you, for example, to check the value of a data-name at certain points in a procedure. This is used for debugging purpose. It is not good to have this in production environment. CRITICALITY Blocker Medium The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.w3schools.com/nodejs/ref_assert.asp Execution Environment Agnostic AVOID LAUNCHING OS-SPECIFIC SUB-PROCESSES FROM CODE Cloud/PaaS applications must be OS-agnostic as much as possible and should not rely on OS-specific features or processes, which may not be available on the Cloud environment as the underlying operating system (in this specific case, Windows) may change over time. Sub-processes that are executed from code are specific to an Operating System. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://developer.ibm.com/articles/1404-brown/ IBM Mainframes Agnostic AVOID USING ALTER STATEMENTS IN MAINFRAMES The ALTER statement modifies a predetermined sequence of operations. The ALTER statement is classed as an obsolete element in the ANSI’85 standard. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SS6SGM_5.1.0/com.ibm.cobol51.aix.doc/PGandLR/ref/rlpsalte.html IBM Mainframes Agnostic AVOID USING BINARY DATA TYPE IN MAINFRAMES While modern compilers can emulate binary data type, there might be issues during data movement or comparsions. Using binary data type should be avoided. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SS6SGM_5.1.0/com.ibm.cobol51.aix.doc/PGandLR/ref/rlddeusa.html IBM Mainframes Agnostic AVOID USING CA PANVALET COMMAND IN MAINFRAMES SPECIFIC OF Z/OS CA-Panvalet is a revision control and source code management system for mainframe computers such as the IBM System z and IBM System/370 running the z/OS and z/VSE operating systems. CA Panvalet commands are specific to z/OS and not applicable to Cloud-base / Open Source platforms. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SSPSQF_9.1.0/com.ibm.etools.rdz.language.editors.doc/topics/czdinc.html IBM Mainframes Agnostic AVOID USING CURRENCY SIGN CLAUSE IN MAINFRAMES SPECIFIC TO Z/OS The CURRENCY SIGN clause affects numeric-edited data items whose PICTURE character-strings contain a currency symbol. It is specific to z/OS. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SSQ2R2_9.1.1/com.ibm.ent.cbl.zos.doc/PGandLR/tasks/tpari50.html IBM Mainframes Agnostic AVOID USING DECIMAL POINT IS A COMMA CLAUSE IN MAINFRAMES SPECIFIC TO Z/OS The DECIMAL-POINT IS COMMA clause exchanges the functions of the period and the comma in PICTURE character-strings and in numeric literals. It is specific to z/OS. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://software.fujitsu.com/jp/manual/manualfiles/m150010/b1wd3365/01enz200/b3365-00-01-15-00.html Execution Environment Agnostic AVOID USING DEPRECATED MYSQL COMMANDS This pattern verifies in source code (.php) the presence of deprecated MySQL commands (mysql_connect, mysql_select_db, mysql_close). As deprecated commands might be interrupted in the future, they should be replaced by currenlty supported commands (mysqli or PDO). CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.php.net/manual/en/pdo.connections.php https://stackoverflow.com/questions/21797118/deprecated-mysql-connect https://dev.mysql.com/doc/apis-php/en/apis-php-function.mysqli-connect.html IBM Mainframes Agnostic AVOID USING DL/I CALLS Using DL/I calls IMS DB CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/topics/dfhp3_cobol_dlicall.html IBM Mainframes Agnostic AVOID USING DOUBLE BYTE CHARACTER IN MAINFRAMES Double Byte character set uses more than one byte to represent single charcter. Languages such as Chinese, Japanese, and Korean use DBCS. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzasb/int23a.htm https://www.microfocus.com/documentation/visual-cobol/vc50pu3/EclWin/HRLHLHPDF70E.html https://www.microfocus.com/documentation/visual-cobol/VC23/EclWin/HHNLCHUNIC04.html https://www.ibm.com/support/knowledgecenter/en/SS6SG3_4.2.0/com.ibm.entcobol.doc_4.2 https://stackoverflow.com/questions/5959709/cobol-question-unicode IBM Mainframes Agnostic AVOID USING GOTO STATEMENTS IN MAINFRAMES Using GOTO statements are generally difficult to understand and may lead to infinite loops. It also violates the principles of encapsulation and locality of reference. It is recommended to convert GOTO to PERFORM. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SS6SGM_5.1.0/com.ibm.cobol51.aix.doc/PGandLR/ref/rlpsgotoa.html Security & User Authentication Agnostic AVOID USING HARDCODED URLS (FTP PROTOCOL) IN SOURCE CODE This pattern verifies the corresponding Cloud blocker in the source code of an application. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Security & User Authentication Agnostic AVOID USING HARDCODED URLS (HTTP PROTOCOL) IN SOURCE CODE This patterns verifies in source code the presence of hardcoded URLs using the HTTP protocol (HTTP/HTTPS). This URL would need to be replaced by the new resource's URL during the Cloud migration, if any change occured. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Security & User Authentication Agnostic AVOID USING HARDCODED URLS (LDAP PROTOCOL) IN SOURCE CODE This patterns verifies in source code the presence of hardcoded URLs using the LDAP protocol (LDAP/LDAPS). This URL would need to be replaced by the new resource’s URL during the Cloud migration, if any change occured. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). IBM Mainframes Agnostic AVOID USING HEXADECIMAL CONSTANTS IN MAINFRAMES EBCDIC which stands for the Extended Binary Coded Decimal Interchange Code, is an 8 bit character encoding used on IBM mainframes and AS/400s. List of all the EBCIDIC characters to be checked is the following link column 2(h): http://ascii-table.com/ebcdic-table.php EBCIDIC charcters should be detected and converted in order to support Open Source platforms. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES http://ascii-table.com/ebcdic-table.php IBM Mainframes Agnostic AVOID USING OCCURS CLAUSE IN MAINFRAMES The OCCURS clause is used to define COBOL internal table. There is no array concept in RDBMs. Translation in modernized environment needs to be taken care. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SS6SG3_4.2.0/com.ibm.entcobol.doc_4.2/PGandLR/tasks/tptbl03.htm IBM Mainframes Agnostic AVOID USING PACKED DECIMAL UNIQUE WAY OF REPRESENTATION OF DECIMAL DATA IN MAINFRAMES Packed Decimal is unique way of representation of decimal data in mainframes. While modern compilers can emulate packed decimal, there is no equivalent of packed decimal in open systems. There might be issues during data movement or comparsions. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SS6SGM_5.1.0/com.ibm.cobol51.aix.doc/PGandLR/ref/rlddeusa.html IBM Mainframes Agnostic AVOID USING REDEFINES CLAUSE IN MAINFRAMES The REDEFINES clause allows to use different data description entries to describe the same computer storage area. Relational databases (e.g DB2) don’t offer such a functionality, so each redefinition must be mapped to a different structure. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SS6SG3_4.2.0/com.ibm.entcobol.doc_4.2/PGandLR/ref/rlddered.htm IBM Mainframes Agnostic AVOID USING THE SYSIBM.SYSDUMMY1 DUMMY TABLE IN MAINFRAMES SYSIBM.SYSDUMMY1 is a dummy table with one row. Normally used to extract current date, timestamp, DB2 Version etc. SYSIBM.SYSDUMMY1 does not exist in Cloud-based relational databases. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/sqlref/src/tpc/db2z_bif_days.html Sensitive Data Storage Protection Agnostic AVOID USING UNSECURED DATABASE CONNECTION STRINGS Security is a key factor in the Cloud as the applications are more exposed and inter-connected. This pattern verifies in source code (C# and VB/VB.Net) the presence of SQL database unsecured connection strings. This blocker is triggered when a database connection string is found during the code scan without any of the patterns used to secure this connection. CRITICALITY Blocker Medium The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/connection-string-builders Persistent Files Agnostic PERFORM DIRECTORY MANIPULATION Manipulating local directories requires specific permissions and usually assumes a predefined directory structure exists. In the Cloud, it is not possible to make such assumptions. If your application requires to create, delete or modify folders, implementing IAM (Identity & Access Management) solutions should be considered. CRITICALITY Blocker Medium The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. CONTAINERIZATION Criticality Medium Migration Impact ARCHITECTURE Container applications should not assume the local file system is accessible, as the directory structure might be different from a traditional desktop or server machine and/or the application may not have sufficient rights to access the local file system. Instead, use relative paths to application resources (e.g. ../../reporting/reportBuilder.xml). Use the CAST Highlight output listing all your code files declaring dependencies to the filesystem. Review the dependencies in each file. When persistence is needed, the local file system should be created using either volumes (preferred) or bind mounts (for sharing configuration files). Volumes need then to be mounted into the containers that will need it. Note: When many roadblocks are identified for this blocker, they may be addressed holistically with one remediation. REFERENCES https://docs.docker.com/storage/ https://www.baeldung.com/ops/docker-container-filesystem https://medium.com/@BeNitinAgarwal/docker-containers-filesystem-demystified-b6ed8112a04a REFERENCES https://cloud.google.com/resource-manager/docs/creating-managing-folders Persistent Files Agnostic PERFORM FILE MANIPULATION Manipulating local files requires specific permissions and usually assumes the file will be persisted over time. In the Cloud, because the underlying infrastructure can be moved or removed, it is not possible to make such assumptions. Instead of using the file system, store your temporary information in a dedicated Cloud-based storage or in a NoSQL database. CRITICALITY Blocker Medium The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. CONTAINERIZATION Criticality Medium Migration Impact ARCHITECTURE Container applications should not assume the local file system is accessible, as the directory structure might be different from a traditional desktop or server machine and/or the application may not have sufficient rights to access the local file system. Instead, use relative paths to application resources (e.g. ../../reporting/reportBuilder.xml). Use the CAST Highlight output listing all your code files declaring dependencies to the filesystem. Review the dependencies in each file. When persistence is needed, the local file system should be created using either volumes (preferred) or bind mounts (for sharing configuration files). Volumes need then to be mounted into the containers that will need it. Note: When many roadblocks are identified for this blocker, they may be addressed holistically with one remediation. REFERENCES https://docs.docker.com/storage/ https://www.baeldung.com/ops/docker-container-filesystem https://medium.com/@BeNitinAgarwal/docker-containers-filesystem-demystified-b6ed8112a04a REFERENCES https://blog.codingoutloud.com/2011/06/12/azure-faq-can-i-write-to-the-file-system-on-windows-azure/ Security & User Authentication Agnostic USE OF AN UNSECURED DATA STRING This pattern verifies the presence in source code (Java, C#, VB/VB.net) of sensitive data strings: String variables containing typical keywords like password, pwd, user, username, uid, auth, db, database, account String containing a private key String containing a certificate String containing a JWT token CRITICALITY Blocker Critical The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. REFERENCES https://security.web.cern.ch/recommendations/en/password_alternatives.shtml https://www.appmarq.com/public/security,1020104,Avoid-hardcoded-passwords-Javascript Execution Environment Azure USE OF DATABASE DRIVER INCOMPATIBILITY (PDO_DBLIB) This pattern verifies the corresponding Cloud blocker in the source code of an application. CRITICALITY Blocker Medium The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. Security & User Authentication Agnostic USE OF LDAP/AD AUTHENTICATION Use of Active Directory / LDAP authentication is not fully compatible with cloud providers (AWS, Azure...) CRITICALITY Blocker Medium The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. Execution Environment Agnostic USE OF SENDMAIL UTILITY ON PAAS INSTEAD OF SPECIFIC EMAIL SENDING LIBRARY This pattern verifies the corresponding Cloud blocker in the source code of an application. CRITICALITY Blocker Medium The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. Security & User Authentication Agnostic USE OF WCF (WINDOWS COMMUNICATION FOUNDATION) SERVICES The Windows Communication Foundation (WCF), previously known as Indigo, is a free and open-source runtime and a set of APIs in the .NET Framework for building connected, service-oriented applications. For Azure, most ASP.NET websites (Webforms, MVC) and services (Web API, WCF) can move directly to Azure App Service with no changes. Some may need minor changes while others may need some refactoring. For AWS, AWS Elastic Beanstalk or AWS Toolkit for Visual Studio can help for WCF projects migration. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. REFERENCES https://docs.microsoft.com/en-us/dotnet/framework/wcf/hosting-services#managed-windows-services https://docs.microsoft.com/en-us/dotnet/framework/wcf/configuring-services-using-configuration-files https://docs.microsoft.com/en-us/dotnet/azure/migration/app-service https://forums.aws.amazon.com/thread.jspa?threadID=88264 Code Execution Azure USING FUNCTIONS FN_GET_SQL, FN_VIRTUALFILESTATS, FN_VIRTUALSERVERNODES - UNSUPPORTED IN AZURE SQL DATABASE Functions ‘fn_get_sql’, ‘fn_virtualservernodes’ are not supported functions in Azure SQL Database. They should be removed or replaced by equivalent functions supported in Azure. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/en-us/sql/relational-databases/system-functions/sys-fn-my-permissions-transact-sql Inter Application Messaging Agnostic USING A MIDDLEWARE APPLICATION Existing application may use asynchronous messaging middleware that enables to send data between decoupled systems. Most of the time, these messaging environments are not natively integrated in PaaS services and should be replaced by Cloud-based solutions. Identifying upfront and at the portfolio level the applications using such components is key to anticipate, plan and optimize technical tasks of the migration. CRITICALITY Blocker Medium The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. CONTAINERIZATION Criticality Medium Migration Impact ARCHITECTURE Existing application may use asynchronous messaging middleware that enables to send data between decoupled systems. These messaging environments need to be isolated into their own container in order to have a release cycle independent from the applications relying on the messaging queues. Use the CAST Highlight output listing all your code files declaring dependencies to messaging middlewares. Review the dependencies in each file. The messaging environment needs to be instantiated as part of a dedicated container. Create a docker image based on the publicly available image from the framework of your choice and configure it through a Dockerfile. REFERENCES https://medium.com/@codescrum/microservices-with-rabbitmq-and-docker-2bbe26c3fc55 https://hub.docker.com/_/rabbitmq https://hub.docker.com/r/ibmcom/mq/ https://docs.tibco.com/pub/bwce/2.4.1/doc/html/GUID-E1609C4C-BCA4-4D04-8E5B-503FE3166B89.html https://techcommunity.microsoft.com/t5/containers/hello-world-msmq-from-windows-containers/ba-p/382422 REFERENCES https://www.ibm.com/blogs/systems/middleware-in-the-cloud-era-of-it-infrastructure/ https://azure.microsoft.com/en-us/documentation/articles/service-bus-fundamentals-hybrid-solutions/ Temporary Files Agnostic USING A TEMPORARY LOCAL FILE OR DIRECTORY Manipulating temporary files on the local file-system requires specific permissions which may not be available in a Cloud environment. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. CONTAINERIZATION Criticality Low Migration Impact CONTAINER ONLY Use the CAST Highlight output listing all your code files declaring dependencies to temporary files mechanisms. Review the dependencies in each file. Consider mounting a tmpfs volume to increase performance. REFERENCES https://stackoverflow.com/questions/52658113/how-to-manage-temporary-files-in-docker REFERENCES https://dennymichael.net/2013/07/24/create-local-storage-on-cloud-services-to-store-temporary-files/ Access Control List Agnostic USING ACCESS CONTROL LIST When migrating an application to the Cloud, capabilities offered by PaaS services should be leveraged in order to make your apps more scalable, resilient, available… This is especially true for systems storing and administrating files that your application may need to access, create, update, process, etc. As Cloud-based file storage services use their own ACL mechanisms (AWS S3, Google Cloud Storage, Azure Storage, etc.), you’ll need to adapt the way your application manages file access & permissions when designing the targeted architecture and ensure the configuration of accesses in the Cloud corresponds to the same as it was when running on your premise. This migration step is quite sensitive from a security standpoint as the application will be running out of your premise. Permissions should be tested in depth in order to detect possible cases of over-exposed of files. As a migration task, you should identify within your application the usage of file access related functions and adapt to the targeted Cloud-based storage service. CRITICALITY Blocker Critical The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. REFERENCES https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html https://cloud.google.com/storage/docs/access-control/create-manage-lists https://medium.com/@benlaurie_18378/how-to-ruin-a-perfectly-good-container-d33250fca595 Data Encryption Key Agnostic USING AUTO GENERATED MACHINE KEY From a software engineering standpoint, and especially in the Cloud, applications should be developed like we don’t know what is the underlying infrastructure. Using this configuration setting to encrypt or decrypt keys should be avoided. Instead, it is recommended using a cloud-based encryption mechanism. This CloudReady pattern verifies the presence of validationKey attribute in machineKey tag of .config files, containing “AutoGenerate”. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-3.0/w8h3skw9(v=vs.85) Code Execution VMWare Tanzu USING CDI BEANS CONFIGURATION If you’re envisioning moving your application to Pivotal CloudFoundry, it is recommended to convert CDI beans configuration to Spring-based application configuration. This pattern verifies the presence of a bean tag in beans.xml, having an xmlnx attribute initialized. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. REFERENCES https://github.com/Pivotal-Field-Engineering/ephemerol/blob/master/ephemerol-react/public/default-rulebase.yml https://content.pivotal.io/blog/how-do-i-migrate-applications-to-pivotal-cloud-foundry Code Execution Agnostic USING COM COMPONENTS Use of COM (Component Object Model) components is discouraged in the Cloud because they must be installed on the Cloud platform, thus requiring specific administrator privileges. Additionally, there are several execution modes for COM components which may not all be supported in the Cloud. Application services generally don’t configure any web framework settings to restricted modes such as “full” trust. Web frameworks, including both classic ASP and ASP.NET, can call in-process COM components (but not out of process COM components) like ADO (ActiveX Data Objects) that are registered by default on the Windows operating system. Applications can spawn and run arbitrary code. It is allowable for an app to do things like spawn a command shell or run a PowerShell script. However, executable programs and scripts are still restricted to the privileges granted to the parent application pool. Identified Tasks: - Validate the application privileges prerequisites - Replace unsupported components with in-process equivalent and supported libraries. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. CONTAINERIZATION Criticality High Migration Impact CONTAINER ONLY Use the CAST Highlight output listing all your code files declaring dependencies to COM components. Review the dependencies in each file. Edit the Dockerfile to copy all required and compatible COM components to the container and execute registration (regsvr32). Note: c:\Windows\SysWOW64\msvbvm60.dll might be required to include in the container for the registration to work. For incompatible COM components, find alternatives and replace. REFERENCES https://docs.microsoft.com/en-us/visualstudio/install/advanced-build-tools-container?view=vs-2019 https://stackoverflow.com/questions/54502335/how-to-register-com-components-inside-docker-as-regsvr32-command-executes-succes Example command with MSI components https://github.com/dotnet-architecture/eShopModernizing/wiki/02.-How-to-containerize-the-.NET-Framework-web-apps-with-Windows-Containers-and-Docker Example command with DLL components https://forums.docker.com/t/windows-application-32-bit-com-dll-registration/47205/8″ REFERENCES https://azure.microsoft.com/en-us/documentation/articles/web-sites-available-operating-system-functionality Data Encryption Key Agnostic USING CRYPTO API Data confidentiality and protection is key aspects of Cloud systems and should rely on encryption services provided by the Cloud platform instead of using technology-based mechanisms such as .NET’s Crypto API. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. REFERENCES https://msdn.microsoft.com/en-us/magazine/ee291586.aspx Sensitive Data Storage Protection Agnostic USING DIRECT DATABASE ACCESS THROUGH CONNECTION STRINGS Database connection strings are very sensitive data in a Cloud application as they protect access to data storage or other application services. As a result, connection strings must be protected to prevent data theft. It is recommended to store this kind of sensitive data in a secured cloud-based storage such (e.g. Azure Key Vault, AWS CloudHSM, etc.) CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. CONTAINERIZATION Criticality Low Migration Impact CONTAINER ONLY Connection strings must be protected to prevent data theft. It is recommended to store this kind of sensitive data in a secured cloud-based storage like Azure Key Vault. Use the CAST Highlight output listing all your code files declaring unsecure connection strings. Review the dependencies in each file. Ensure the Secrets Store CSI Driver and the Azure Keyvault Provider are installed on your Kubernetes. Create a new Azure Key Vault resource or use an existing one. Update your container configuration to include the CSI driver and the ID of your Key Vault resource. REFERENCES https://docs.microsoft.com/en-us/azure/aks/developer-best-practices-pod-security#:~:text=You%20can%20integrate%20Azure%20Key,only%20to%20the%20requesting%20pod. https://github.com/Azure/secrets-store-csi-driver-provider-azure#usage https://microsoft.github.io/AzureTipsAndTricks/blog/tip245.html REFERENCES https://www.hanselman.com/blog/BestPracticesForPrivateConfigDataAndConnectionStringsInConfigurationInASPNETAndAzure.aspx https://stackoverflow.com/questions/11211007/how-do-you-pass-custom-environment-variable-on-amazon-elastic-beanstalk-aws-ebs Application Logs Agnostic USING EVENTLOG IN SYSTEM.DIAGNOSTICS NAMESPACE Using EventLog solution from System.Diagnostic could lead to some non compliance, in terms or privilege access or resource, depending on the situation. Logging to the Event Log is not recommended for Cloud native apps. Consider refactoring to use a ConsoleTraceListener with the System.Diagnostics logging system and/or use a Cloud-based logging system. Usage of Microsoft’s EventLog is detected if specific patterns are detected in the source code or in application configuration files (see pattern details below). CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. REFERENCES https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process?redirectedfrom=MSDN&view=netframework-4.8 Execution Environment Agnostic USING FILE SYSTEM Cloud applications should not assume the local file system is accessible, as the directory structure might be different from a traditional desktop or server machine and/or the Cloud application may not have sufficient rights to access the local file system. Instead, use relative paths to application resources (e.g. ../../reporting/reportBuilder.xml). Depending on your application context and the Cloud platform where it is deployed, you could also consider using functions or classes like LocalResources to dynamically resolve file paths. CRITICALITY Blocker Medium The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. CONTAINERIZATION Criticality Medium Migration Impact ARCHITECTURE Container applications should not assume the local file system is accessible, as the directory structure might be different from a traditional desktop or server machine and/or the application may not have sufficient rights to access the local file system. Instead, use relative paths to application resources (e.g. ../../reporting/reportBuilder.xml). Use the CAST Highlight output listing all your code files declaring dependencies to the filesystem. Review the dependencies in each file. Also assess if this file system dependency for execution will be needed by multiple containers. If it is the case, consider the use of volumes instead of writable layers. Note: When many roadblocks are identified for this blocker, they may be addressed holistically with one remediation. REFERENCES https://docs.docker.com/storage/ https://www.baeldung.com/ops/docker-container-filesystem https://medium.com/@BeNitinAgarwal/docker-containers-filesystem-demystified-b6ed8112a04a REFERENCES https://en.wikipedia.org/wiki/Distributed_file_system_for_cloud https://stackoverflow.com/questions/11687903/could-not-find-a-part-of-the-path-on-windows-azure http://www.linux-france.org/article/sys/fichiers/fichiers-2.html Code Execution Azure USING FUNCTION ALTER DATABASE - UNSUPPORTED IN AZURE SQL DATABASE The SQL statement ‘ALTER DATABASE’ is not supported in Azure SQL Database. Instead, use the dedicated statement syntax statement for an Azure SQL Database context. When used in on-premise SQL databases, the ‘ALTER DATABASE’ statement modifies a database, or the files and filegroups associated with the database. Adds or removes files and filegroups from a database, changes the attributes of a database or its files and filegroups, changes the database collation, and sets database options. Database snapshots cannot be modified. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-azure-sql-database Code Execution Azure USING FUNCTION CREATE CREDENTIAL - UNSUPPORTED IN AZURE SQL DATABASE The SQL statement ‘CREATE CREDENTIAL’ is not supported in Azure SQL Database as it creates server-level database credentials. Instead, use database-scoped credentials. When used in on-premise SQL databases, the ‘CREATE CREDENTIAL’ statement creates a server-level credential. A credential is a record that contains the authentication information that is required to connect to a resource outside SQL Server. Most credentials include a Windows user and password. For example, saving a database backup to some location might require SQL Server to provide special credentials to access that location. To make the credential at the database-level use CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Use a server-level credential when you need to use the same credential for multiple databases on the server. Use a database-scoped credential to make the database more portable. When a database is moved to a new server, the database scoped credential will move with it. Use database scoped credentials on SQL Database. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/en-us/sql/t-sql/statements/create-credential-transact-sql https://docs.microsoft.com/en-us/sql/t-sql/statements/create-database-scoped-credential-transact-sql Code Execution Azure USING FUNCTION FN_MY_PERMISSIONS - UNSUPPORTED IN AZURE SQL DATABASE Using ‘sys.fn_my_permissions’ is not a supported function in Azure SQL Database. It should be removed or replaced by an equivalent functions that is supported in Azure. When used on on-premise SQL databases, this function returns a list of the permissions effectively granted to the principal on a securable. A related function is HAS_PERMS_BY_NAME (which is supported on Azure SQL Database). CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/en-us/sql/relational-databases/system-functions/sys-fn-my-permissions-transact-sql Code Execution Azure USING FUNCTION SP_ADDMESSAGE - UNSUPPORTED IN AZURE SQL DATABASE Using ‘sys.fn_my_permissions’ is not a supported function in Azure SQL Database. It should be removed or replaced by an equivalent function supported in Azure. When used on on-premise SQL databases, this function stores a new user-defined error message in an instance of the SQL Server Database Engine. Messages stored by using sp_addmessage can be viewed by using the sys.messages catalog view. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-addmessage-transact-sql Code Execution Azure USING FUNCTIONS OPENQUERY, OPENROWSET, OPENDATASOURCE - UNSUPPORTED IN AZURE SQL DATABASE OPEN SQL functions such as ‘OPENQUERY’, ‘OPENROWSET’ and ‘OPENDATASOURCE’ are not supported functions in Azure SQL Database. They should be removed or replaced by equivalent functions supported in Azure. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/fr-fr/sql/t-sql/functions/openquery-transact-sql https://docs.microsoft.com/fr-fr/sql/t-sql/functions/openrowset-transact-sql https://docs.microsoft.com/en-us/sql/t-sql/functions/opendatasource-transact-sql Security & User Authentication Agnostic USING HARDCODED NETWORK IP ADDRESS (IPV4, IPV6) From a software engineering standpoint, and especially in the Cloud, applications should be developed like we don’t know what is the underlying infrastructure. Using, calling or referencing remote resources by using hardcoded IP addresses should be avoided as they can regularly change. Instead, it is recommended using domain names or eventually store IP addresses in a configuration file. This CloudReady pattern verifies the presence of IPV4 or IPV6 addresses in the source code. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). CONTAINERIZATION Criticality Medium Migration Impact CODE Container applications should not assume the network access will be similar than on-premises, as its structure or firewall rules might be different. Hardcoded IP addresses are to be avoided in general. Use the CAST Highlight output listing all your code files declaring hardcoded IP addresses. Review the dependencies in each file. If these dependencies are internal to your organization and reflect the current layout of your application portfolio, replace the hardcoded IPs with domain-based addressing. REFERENCES https://www.greenhousedata.com/blog/what-to-know-about-ip-addresses-before-your-cloud-migration REFERENCES https://www.greenhousedata.com/blog/what-to-know-about-ip-addresses-before-your-cloud-migration Execution Environment VMWare Tanzu USING IBM WEBSPHERE If you’re envisioning moving your application to Pivotal CloudFoundry, it is recommended to move away from container-specific APIs to portal APIs such as Spring. This pattern verifies the presence of Websphere imports or configuration files such as ibm-application-bnd.xmi, ibm-application-bnd.xml, ibm-ejb-jar-bnd.xmi, ibm-ejb-jar-bnd.xml, etc. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://github.com/Pivotal-Field-Engineering/ephemerol/blob/master/ephemerol-react/public/default-rulebase.yml https://content.pivotal.io/blog/how-do-i-migrate-applications-to-pivotal-cloud-foundry Security & User Authentication Agnostic USING IMPERSONATE IDENTITY The primary reason for impersonation is to cause access checks to be performed against the client’s identity. Using the client’s identity for access checks can cause access to be either restricted or expanded, depending on what the client has permission to do. For example, suppose a file server has files containing confidential information, and each of these files is protected by a DACL. To prevent a client from obtaining unauthorized access to information in these files, the service can impersonate the client before accessing the files. Some on-premise applications may rely on executing code with the identity of the actual Windows user. This requires a corresponding user account has been created on the platform, which is not possible in a Cloud environment. User authentication should be replaced by a Cloud-based and OS-agnostic identity & access management solution such as Active Directory. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. REFERENCES https://msdn.microsoft.com/en-us/library/134ec8tc.aspx Execution Environment VMWare Tanzu USING JBOSS APPLICATION SERVER There is no JBoss runtime natively available on CloudFoundry so you cannot push them directly. As JBoss is not available, the app configuration should be converted to a Spring-based application configuration. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://stackoverflow.com/questions/12634486/cloudfoundry-jboss-support https://content.pivotal.io/blog/how-do-i-migrate-applications-to-pivotal-cloud-foundry Execution Environment VMWare Tanzu USING JEE CONFIGURATION If you’re envisioning moving your application to Pivotal CloudFoundry, it is recommended to move away from JEE-specific configurations to Spring-based application configuration. This pattern verifies the presence of JEE configuration files such as application.xml, webservices.xml, etc. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://github.com/Pivotal-Field-Engineering/ephemerol/blob/master/ephemerol-react/public/default-rulebase.yml https://content.pivotal.io/blog/how-do-i-migrate-applications-to-pivotal-cloud-foundry Application Logs Agnostic USING LOG4NET FOR APPLICATION LOGS For more resilient, scalable and powerful leverage of application and telemetry logs, logs and log analytic services should be replaced by a Cloud-based service (e.g. AppInsights on Azure, CloudWatch Log Insights on AWS…). CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. REFERENCES https://www.techradar.com/best/best-cloud-logging-services Execution Environment VMWare Tanzu USING NEW PROCESS IN SYSTEM.DIAGNOSTICS NAMESPACE Launching additional processes within a container is not recommended. Consider refactoring this code to either embed the functionality, or establish a separate service. Apps can spawn and run arbitrary code. It is allowable for an app to do things like spawn a command shell or run a PowerShell script. However, even though arbitrary code and processes can be spawned from an app, executable programs and scripts are still restricted to the privileges granted to the parent application pool. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. Security & User Authentication Agnostic USING OF UNSECURE NETWORK PROTOCOLS (HTTP, FTP) Using secured protocols such as HTTPS and SFTP (over HTTP and FTP) should now be the norm as applications are more and more exposed and interconnected. This CloudReady patterns looks for unescured URI in the source code. Ideally, URLs should be replaced in your source code by secured protocols HTTPS and SFTP (and ensure the infrastructure implements these protocols for the resources your application calls, uses or references). CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). CONTAINERIZATION Criticality Low Migration Impact CODE Using secured protocols such as HTTPS and SFTP (over HTTP and FTP) should now be the norm as applications are more and more exposed and interconnected. Use the CAST Highlight output listing all your code files declaring use of unsecure protocols. Review the dependencies in each file. For each occurence, establish if it is a connection made to an internal service (owned by your organization) or an external service. If the service is external and supports secured protocols, switch over to secure mode. If the service is internal, work with the corresponding team to support a secure channel. REFERENCES REFERENCES https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https https://www.ssh.com/ssh/sftp/ Security & User Authentication Agnostic USING OF WINDOWS AUTHENTICATION This pattern verifies the corresponding Cloud blocker in the source code of an application. CRITICALITY Blocker Medium The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. Execution Environment VMWare Tanzu USING ORACLE WEBLOGIC If you’re envisioning moving your application to Pivotal CloudFoundry, it is recommended to move away from container-specific APIs to portal APIs such as Spring. This pattern verifies the presence of WebLogic imports or configuration files such as weblogic.xml, weblogic-application.xml, etc. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://github.com/Pivotal-Field-Engineering/ephemerol/blob/master/ephemerol-react/public/default-rulebase.yml Application Settings Configuration Agnostic USING OTHER CONFIGURATION FILES THAN WEB CONFIGURATION Storing application settings in external files other than web.config and that are not manageable in the Cloud platform is not recommended as such settings will not be easily changeable. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). CONTAINERIZATION Criticality Low Migration Impact CONTAINER ONLY Storing application settings in external files other than web.config and that are not manageable is not recommended as such settings will not be easily updated. Use the CAST Highlight output listing all your config files. Review each to confirm they are needed as part of the container deployment. Use docker configs to centralize and use configuration templates. REFERENCES https://docs.docker.com/engine/swarm/configs/ REFERENCES https://stackoverflow.com/questions/10961862/its-possible-to-have-one-web-config-specific-to-windows-azure Code Execution Azure USING SEMANTICKEYPHRASETABLE (SEMANTIC SEARCH) - UNSUPPORTED IN AZURE SQL DATABASE Using semantic search (SEMANTICKEYPHRASETABLE) is not a supported function in Azure SQL Database. It should be removed or replaced by an equivalent function or service supported in Azure. When used on on-premise SQL databases, this function returns a table with zero, one, or more rows for key phrases associated with the specified columns in the specified table. This rowset function can be referenced in the FROM clause of a SELECT statement as if it were a regular table name. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/en/sql/relational-databases/system-functions/semantickeyphrasetable-transact-sql Persistent Files Agnostic USING STATEFUL SESSION (SERVLET) For modern applications running in the Cloud, it is not recommended to be stateful, especially for sessions as they’re not scalable, and are generally harder to replicate and fix bugs (server-side). Ideally, stateful sessions should be replaced by stateless and client-side mechanisms such as cookies, client cache (e.g. Redis, memcache…) or in an external cloud-based storage. This is an important architectural constraint of microservices-style applications, as it enables resiliency, elasticity, and allows any available service instance to execute any task. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. CONTAINERIZATION Criticality High Migration Impact ARCHITECTURE CODE For modern applications running in the Cloud, it is not recommended to be stateful, especially for sessions as they’re not scalable, and are generally harder to replicate and fix bugs (server-side). Ideally, stateful sessions should be replaced by stateless and client-side mechanisms such as cookies, client cache (e.g. Redis, memcache…) or in an external cloud-based storage. Use the CAST Highlight output listing all your code files declaring dependencies to stateful sessions. Review the dependencies in each file. Modify the application to support a stateless architecture, which often requires a deep refactoring. REFERENCES https://ultimatecourses.com/blog/stateful-stateless-components REFERENCES https://nordicapis.com/defining-stateful-vs-stateless-web-services/ https://toddmotto.com/stateful-stateless-components Persistent Files Agnostic USING STATEFUL SESSION (SPRING) For modern applications running in the Cloud, it is not recommended to be stateful, especially for sessions as they’re not scalable, and are generally harder to replicate and fix bugs (server-side). Ideally, stateful sessions should be replaced by stateless and client-side mechanisms such as cookies, client cache (e.g. Redis, memcache…) or in an external cloud-based storage. This is an important architectural constraint of microservices-style applications, as it enables resiliency, elasticity, and allows any available service instance to execute any task. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. REFERENCES https://nordicapis.com/defining-stateful-vs-stateless-web-services/ https://toddmotto.com/stateful-stateless-components Execution Environment Agnostic USING SYSTEM DLLS Cloud/PaaS applications must be OS-agnostic as much as possible and should not rely on OS-specific features (such as system DLLs in a Windows environment), which may not be available on the Cloud environment as the underlying operating system (in this specific case, Windows) may change over time. In some cases, you can remediate this by using compatibility libraries that make one operating system “look” like another. However, avoid the OS-specific dependencies as much as you can, and rely instead on services that are provided by your service providers. CRITICALITY Blocker High The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. CONTAINERIZATION Criticality High Migration Impact CONTAINER ONLY Use the CAST Highlight output listing all your code files declaring dependencies to DLLs. Review the dependencies in each file. Edit the Dockerfile to copy all required and compatible DLLs to the container and execute registration (regsvr32) if needed. Note: c:\Windows\SysWOW64\msvbvm60.dll might be required to include in the container for the registration to work. For incompatible DLL components, find alternatives and replace. REFERENCES https://docs.microsoft.com/en-us/visualstudio/install/advanced-build-tools-container?view=vs-2019 https://stackoverflow.com/questions/54502335/how-to-register-com-components-inside-docker-as-regsvr32-command-executes-succes Example command with MSI components https://github.com/dotnet-architecture/eShopModernizing/wiki/02.-How-to-containerize-the-.NET-Framework-web-apps-with-Windows-Containers-and-Docker Example command with DLL components https://forums.docker.com/t/windows-application-32-bit-com-dll-registration/47205/8 REFERENCES https://www.ibm.com/developerworks/websphere/techjournal/1404_brown/1404_brown.html Scheduled Services & Tasks VMWare Tanzu USING SYSTEM.SERVICEPROCESS (WINDOWS SERVICES) The System.ServiceProcess namespace provides classes that allow to implement, install, and control Windows service applications. In the Cloud, we cannot assume that the underlying Operating System will be Windows. As a result, Windows-specific services should be migrated. CRITICALITY Blocker None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. Code Execution Azure USING USE STATEMENT - UNSUPPORTED IN AZURE SQL DATABASE The SQL statement ‘USE’ is not supported in Azure SQL Database. It should be removed or replaced by equivalent functions supported in Azure. When used in on-premise SQL databases, the ‘USE’ statement changes the database context to the specified database or database snapshot in SQL Server. In Azure SQL Database, the database parameter can only refer to the current database. If a database other than the current database is provided, the USE statement does not switch between databases, and error code 40508 is returned. To change databases, you must directly connect to the database. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/en-us/sql/t-sql/language-elements/use-transact-sql Security & User Authentication Agnostic USING WEBFORM AUTHENTICATION Using “Web Forms” authentication requires that user accounts and passwords be created and managed in a storage such as a database. This mechanism does not offer the flexibility of claims-based authentication and should not be used in Cloud applications. Ideally, user authentication should be replaced by a Cloud-based and OS-agnostic identity & access management solution such as Active Directory. CRITICALITY Blocker Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT ARCHITECTURE CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. CONTAINERIZATION Criticality Medium Migration Impact ARCHITECTURE CODE Using “Web Forms” authentication requires that user accounts and passwords be created and managed in a storage such as a database. This mechanism does not offer the flexibility of claims-based authentication and should not be used in Cloud applications. Use the CAST Highlight output listing all your code files declaring Webform Authentication dependencies. Review the dependencies in each file. Refactor the app to be AD-integrated and leverage Active Directory domain identities to support your authentication scenario. To achieve this, you can configure a Windows container to run with a group Managed Service Account (gMSA), which is a special type of service account introduced in Windows Server 2012 designed to allow multiple computers to share an identity without needing to know its password. REFERENCES Registry Settings Agnostic USING WINDOWS REGISTRY TO STORE APPLICATION SETTINGS Application settings must not be defined in OS-specific storage such as Windows Registry, as in the Cloud the operating system is not guaranteed to be the same from a server to another. In addition, on Windows-based Cloud resources, write-access to the registry is generally blocked, including access to any per-user registry keys. From the app’s perspective, write access to the registry should never be relied upon in the Cloud environment since apps can (and do) get migrated across different virtual machines. These application settings should be stored in a Cloud-based and OS-agnostic service. CRITICALITY Blocker Medium The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). MIGRATION IMPACT CODE FRAMEWORK Migration impact levels indicate the different layers of your application that you should modify or fix, in order to comply with Cloud-oriented programming best practices and remove the identified roadblocks. CONTAINERIZATION Criticality Medium Migration Impact CONTAINER ONLY Application settings must not be defined in OS-specific storage such as Windows Registry, as in the container the operating system is not guaranteed to be the same. Use the CAST Highlight output listing all your code files declaring registry dependencies. Review the dependencies in each file. Create a .reg file containing all the entries required by the application. Edit the Dockerfile to copy this file inside the container on creation and add the registry entries. REFERENCES https://stackoverflow.com/questions/46274898/in-docker-for-windows-how-can-i-add-registry-entries-in-bulk-while-building-my REFERENCES https://docs.microsoft.com/en-us/azure/app-service/web-sites-available-operating-system-functionality https://www.ibm.com/developerworks/websphere/techjournal/1404_brown/1404_brown.html https://rwmj.wordpress.com/2010/02/18/why-the-windows-registry-sucks-technically/ Sensitive Data Storage Protection Agnostic [DEPRECATED] USE OF AN UNSECURED API ASP.NET applications translate Active Directory groups into roles which is no longer possible with Azure AD. Regarding AWS, AWS cognito uses its own group and users and a specific library is needed. Remediation steps: For Azure: Assign ASP.NET roles to your Azure AD groups For AWS : Use CognitoAuthentication extension library CRITICALITY Blocker Medium The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api https://www.c-sharpcorner.com/article/authorize-asp-net-core-app-by-azure-ad-groups-using-graph-api/ https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/cognito-authentication-extension.html Application Logs Agnostic CORRECT USAGE OF LOGGING The ETW (Event Tracing for Windows) framework is supported in ASP.NET through classes in the System.Diagnostics namespace. The Microsoft.WindowsAzure.Diagnostics namespace, which inherits from and extends standard System.Diagnostics classes, enables the use of System.Diagnostics as a logging framework in the Windows Azure environment. So, applications using System.Diagnostics.Trace are ensured to be compliant with Azure. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://msdn.microsoft.com/en-us/magazine/ff714589.aspx Application Settings Configuration Agnostic PRESENCE OF A WEB CONFIGURATION FILE Web.config is the chief method the .NET framework has for managing changes across environments. By storing things like URLs, feature toggles, and server information in parameters, we free the applications itself to only focus on business logic that is the same for all deployments. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://blog.submain.com/web-config-5-common-mistakes/ Code Execution Agnostic RETRY PATTERNS: USING RETRYPOLICY OR RETRYMANAGER CLASSES Detect the usage of the class RetryPolicy in the namespace Microsoft.Practices.TransientFaultHandling; https://msdn.microsoft.com/en-us/library/microsoft.practices.transientfaulthandling.retrypolicy.aspx or the usage of the class RetryManager in the namespace Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling https://msdn.microsoft.com/en-us/library/microsoft.practices.enterpriselibrary.windowsazure.transientfaulthandling.retrymanager(v=pandp.50).aspx CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://msdn.microsoft.com/en-us/library/hh680900(v=pandp.50).aspx Application Settings Configuration Agnostic USE CONFIGURATIONMANAGER This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). IBM Mainframes Agnostic USING A CICS WEBSERVICE IN MAINFRAMES CICS webservices are supported in Microfocus COBOL. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Access Control List AWS USING A CLOUD-BASED ACCESS CONTROL This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Security & User Authentication Azure USING A CLOUD-BASED ACTIVE DIRECTORY This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Security & User Authentication AWS USING A CLOUD-BASED ACTIVE DIRECTORY This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Code Execution AWS USING A CLOUD-BASED BATCH JOB ORCHESTRATION This CloudReady pattern will be documented very soon… CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Big Data Agnostic USING A CLOUD-BASED BIG DATA TECHNOLOGY (EMR) These patterns verify in the source code the use of Cloud-based Big Data and analysis services. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Data Encryption Key Agnostic USING A CLOUD-BASED BLOCKCHAIN TECHNOLOGY These patterns verify the use of cloud-based Blockchain technology. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Third-Party Dependencies Agnostic USING A CLOUD-BASED CACHE IN-MEMORY DATABASE (MEMCACHED) This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Shared Caching AWS USING A CLOUD-BASED CACHE MANAGEMENT FRAMEWORK This CloudReady pattern detects in the source code the usage of a Cloud-based cache management framework. Cache management is available as a service in the majority of Cloud/PaaS platforms, providing your application with native high scalability, elasticity and availability. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://azure.microsoft.com/en-us/services/cache/ https://aws.amazon.com/elasticache/ Execution Environment AWS USING A CLOUD-BASED CONTAINER SERVICE This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Registry Settings AWS USING A CLOUD-BASED DATA STORAGE This CloudReady pattern detects in the source code the usage of a Cloud-based data storage. Storage is available as a service in the majority of Cloud/PaaS platforms, providing your application with native high scalability, elasticity and availability. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://azure.microsoft.com/en-us/services/storage/blobs/ https://aws.amazon.com/products/storage/ Registry Settings Google Cloud USING A CLOUD-BASED DATA STORAGE This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Data Encryption Key Azure USING A CLOUD-BASED ENCRYPTION MECHANISM This CloudReady pattern detects in the source code the usage of a Cloud-based encryption mechanism. Encryption is available as a service in the majority of Cloud/PaaS platforms, providing your application with native high security, scalability, elasticity and availability. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/en-us/azure/storage/common/storage-service-encryption https://aws.amazon.com/kms/ Execution Environment AWS USING A CLOUD-BASED FUNCTION AS A SERVICE (SERVERLESS) These patterns verify the use of cloud-based function as a service from Amazon Web Services, Azure and Google Cloud. - Amazon Web Services: AWS Lambda - Azure: Azure Functions - Google Cloud: Cloud Functions CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Sensitive Data Storage Protection AWS USING A CLOUD-BASED KEY STORAGE This CloudReady pattern detects in the source code the usage of a Cloud-based key storage. Key storage is available as a service in the majority of Cloud/PaaS platforms, providing your application with native high security, scalability, elasticity and availability. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis https://aws.amazon.com/kms/ Third-Party Dependencies Google Cloud USING A CLOUD-BASED KEY STORAGE (KMS) This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Third-Party Dependencies Google Cloud USING A CLOUD-BASED MIDDLEWARE APPLICATION (PUB/SUB) This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Application Logs Agnostic USING A CLOUD-BASED SEARCH ENGINE This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Inter Application Messaging AWS USING A CLOUD-BASED SERVICE BUS This CloudReady pattern detects in the source code the usage of a Cloud-based Service Bus. Service Bus services are available as a service in the majority of Cloud/PaaS platforms, providing your application with native high scalability, elasticity and availability. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://azure.microsoft.com/en-us/services/service-bus/ https://aws.amazon.com/sqs/ Third-Party Dependencies Google Cloud USING A CLOUD-BASED STREAM AND BATCH DATA PROCESSING This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Services and Scheduled Tasks Azure USING A CLOUD-BASED TASK SCHEDULING SERVICE This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Services and Scheduled Tasks Google Cloud USING A CLOUD-BASED TASK SCHEDULING SERVICE This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). IBM Mainframes Agnostic USING A CONNECTION TO DB2 IN MAINFRAMES DB2 can be migrated to Cloud-based relational databases. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). IBM Mainframes Agnostic USING A CONNECTION TO IBM IMS CSQ SERIES IN MAINFRAMES Message Queue solutions are generally available as a service in the Cloud. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://aws.amazon.com/fr/amazon-mq/?amazon-mq.sort-by=item.additionalFields.postDateTime&amazon-mq.sort-order=desc https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.ref.dev.doc/q101650_.htm IBM Mainframes Agnostic USING A CONNECTION TO IBM MQ SERIES IN MAINFRAMES Message Queue solutions are generally available as a service in the Cloud. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.dev.doc/q028780_.htm https://aws.amazon.com/fr/amazon-mq/?amazon-mq.sort-by=item.additionalFields.postDateTime&amazon-mq.sort-order=desc Execution Environment AWS USING A LOAD BALANCER These patterns verify the use of cloud-based load balancing services from Amazon Web Services, Azure and Google Cloud. - Amazon Web Services: Elastic Load Balancing - Azure: Azure Load Balancer - Google Cloud: Load Balancing CDN CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Inter Application Middleware Agnostic USING A PROCESSING JSON INPUT This pattern verifies the presence of using JSON format CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). IBM Mainframes Agnostic USING A PROCESSING JSON OUTPUT IN MAINFRAMES This pattern verifies the corresponding Cloud blocker in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Inter Application Middleware Agnostic USING A PROCESSING XML INPUT This pattern verifies the presence of using XML format CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/en/SS6SG3_6.3.0/pg/ref/rpxml03e.html IBM Mainframes Agnostic USING A SUBSET OF DATA ROWS IN DB2 IN MAINFRAMES Subset of rows returned in a database query is compatible with Cloud-based relational database such as AWS Aurora DB. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/perf/src/tpc/db2z_fetchfirstnrows.html Big Data Google Cloud USING BIGQUERY PRODUCT CLOUD DATA WAREHOUSE This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Big Data Google Cloud USING BIGTABLE PRODUCT FULLY MANAGED NOSQL DATABASE SERVICE This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). IBM Mainframes Agnostic USING CASE STATEMENTS IN MAINFRAMES Case statement are supported in DB2 but also in AWS Redshift. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES https://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/sqlref/src/tpc/db2z_caseexpression.html https://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_CASE_function.html Big Data Google Cloud USING CLOUD DATASTORE PRODUCT NOSQL DOCUMENT DATABASE This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Security & User Authentication Google Cloud USING CLOUD IAM (IDENTITY & ACCESS MANAGEMENT) FOR MANAGING SPECIFIC RESOURCES ACCESS AUTHORIZATION This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Security & User Authentication Google Cloud USING CLOUD IAP (IDENTITY AWARE PROXY) This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Third-Party Dependencies Google Cloud USING CLOUD MEMORYSTORE FOR REDIS FULLY MANAGED IN-MEMORY DATA STORE SERVICE This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Third-Party Dependencies Google Cloud USING CLOUD SPANNER PRODUCT RELATIONAL DATABASE SERVICE This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Registry Settings AWS USING CLOUD SPECIFIC STORAGE COMPONENT This pattern verifies the use of Cloud-based specific storage services: - Amazon Web Services: AWS Elastic File System (EFS), AWS Backup, S3 Glacier - Azure: Azure Files, Archive Storage, Azure Backup - Google Cloud: Filestore CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Registry Settings AWS USING CLOUD-BASED DATABASE SERVICES This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Inter Application Middleware AWS USING DEVOPS AUTOMATION AND IAC (INFRASTRUCTURE AS CODE) These patterns verify the use of DevOps automation and IaC (Infrastructure as Code) services from Amazon Web Services, Azure and Google Cloud. - Amazon Web Services: CloudFormation, CodeBuild, CodeDeploy, CodePipeline, DataPipeline - Azure: Aure Deployment Manager, Azure Pipelines - Google Cloud: Cloud Deployment Manager, Cloud Build, Cloud Composer CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Execution Environment Agnostic USING DOCKER PRODUCT OPEN-SOURCE PLATFORM FOR MANAGING CONTAINERIZED WORKLOADS AND SERVICES This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Inter Application Middleware AWS USING ETLS (EXTRACT TRANSFORM LOAD) These patterns verify the use of cloud-based ETL services from Amazon Web Services, Azure and Google Cloud. - Amazon Web Services: AppFlow, Glue - Azure: Azure Data Factory - Google Cloud: Cloud Data Fusion CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Third-Party Dependencies Google Cloud USING FIREBASE GOOGLE'S MOBILE PLATFORM This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster None The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Third-Party Dependencies Google Cloud USING KUBERNETES PRODUCT OPEN-SOURCE PLATFORM FOR MANAGING CONTAINERIZED WORKLOADS AND SERVICES This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Execution Environment Agnostic USING MONGODB DATABASE This CloudReady pattern detects in the source code the usage of a MongoDB NoSQL database. MongoDB is available as a service in the majority of Cloud/PaaS platforms, providing your application with native high scalability, elasticity and availability. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES Microsoft Azure: https://azuremarketplace.microsoft.com/en-en/marketplace/apps/jetware-srl.mongodb?tab=Overview AWS: https://docs.aws.amazon.com/quickstart/latest/mongodb/overview.html Google CloudPlatform: https://cloud.google.com/solutions/deploy-mongodb Application Logs AWS USING MONITORING SERVICE These patterns verify the use of cloud-based monitoring services from Amazon Web Services, Azure and Google Cloud. - Amazon Web Services: CloudWatch - Azure: Azure Monitor - Google Cloud: Cloud Monitoring CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Execution Environment Agnostic USING MYSQL DATABASE This CloudReady pattern detects in the source code the usage of a MySQL database. MySQL is available as a service in the majority of Cloud/PaaS platforms, providing your application with native high scalability, elasticity and availability. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES Oracle Cloud: https://cloud.oracle.com/mysql Microsoft Azure: https://azure.microsoft.com/en-us/services/mysql/ Google CloudPlatform: https://cloud.google.com/sql/ AWS: https://aws.amazon.com/rds/ Execution Environment AWS USING NOSQL DOCUMENT STORAGE This CloudReady pattern verifies in source code the use of Cloud-based NoSQL databases. It is a booster as most of Cloud service providers supports NoSQL databases as a service. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Execution Environment Agnostic USING ORACLE DATABASE This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). Execution Environment Agnostic USING POSTGRESQL DATABASE This CloudReady pattern detects in the source code the usage of a PostgreSQL database. PostgreSQL is available as a service in the majority of Cloud/PaaS platforms, providing your application with native high scalability, elasticity and availability. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES AWS: https://aws.amazon.com/rds/postgresql/ Microsoft Azure: https://azure.microsoft.com/en-us/services/postgresql/ Google CloudPlatform: https://cloud.google.com/sql/docs/postgres/ Execution Environment Agnostic USING SQL SERVER DATABASE This pattern verifies the corresponding Cloud booster in the source code of an application. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). IBM Mainframes Agnostic USING UNCOMMIT READ OPTION UR IN MAINFRAMES The ISOLATION (UR) or uncommitted read option allows an application to read while acquiring few locks, at the risk of reading uncommitted data. UR isolation applies only to the following read-only operations: SELECT, SELECT INTO, or FETCH from a read-only result table. This is the commonly found isolation level in DB2 sql queries. Read uncommitted is supported in some Cloud-based relational databases such as Amazon RDS. CRITICALITY Booster Low The criticality level impacts the application CloudReady score, whether it is a blocker (a negative pattern found during the code scan) or a booster (a pattern that makes your app more Cloud-ready) and the corresponding level (low, medium, high, critical). REFERENCES http://ibmmainframes.com/about7843.html © Copyright 2022 - CAST