Repository files navigation

Flyway AWS Lambda Function

Run Flyway database migrations as a Lambda function.

ℹ️ This fork of the (seemingly abandoned) flyway-awslambda project introduces the following improvements:

  • Flyway can be configured via the officially supported environment variables(only config file was supported before)
  • All Flyway configuration options are supported (only a small subset was supported before)
  • Upgrade Flyway to version 6 (was 4)
  • Improved documentation and examples

Other than possible breaking changes between Flyway 4 vs. 6 (I couldn't identify any) the Lambda function itself is 100% backwards compatible with the original project, i.e. the JAR can be put in place of the old function without breaking changes.

How it works

  1. The Lambda function is triggered either
    • by invoking it manually
    • or automatically when a file is uploaded into an S3 bucket
  2. The migration scripts are loaded from the bucket
  3. The migrations are performed on the database
  4. A file containing the migration results is pushed to the bucket

Setup

ℹ️ CloudFormation samples can be found under ./src/main/aws/. Read on for the manual setup.

First, create a new Lambda function and upload the flyway-awslambda-x.y.z.jar file as code. You can either download a pre-built JAR file from the releases or build it yourself (Scala is required):

sbt assembly

Settings

  • Runtime:Java 8
  • Handler:
    • "crossroad0201.aws.flywaylambda.S3EventMigrationHandler" if the Lambda should be triggered when a file is uploaded to the bucket
    • "crossroad0201.aws.flywaylambda.InvokeMigrationHandler" if you wish to invoke the Lambda manually
  • Role:
    • AmazonRDSFullAccess
    • AmazonS3FullAccess
    • AWSLambdaVPCAccessExecutionRole
  • VPC:Same VPC as the target RDS

Triggers (in case of S3EventMigrationHandler)

Value
BucketYour Flyway migration bucket, e.g. "my-flyway"
Event typeObject created
PrefixThe Flyway migration files location, e.g. "my-application/"
Suffixsql

Bucket Structure

The Lambda function expects the S3 bucket to be structured like this:

s3://my-flyway <- Flyway migration bucket.
- /my-application <- Flyway resource folder(prefix).
- flyway.conf <- Flyway configuration file (optional)
- V1__create_foo.sql <- SQL file(s)
- V2__create_bar.sql

Running the Lambda

Using the S3EventMigrationHandler

  • Put the Flyway SQL files into the migration folder (one by one!).
  • The Lambda function is invoked automatically by an S3 event.
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Using the InvokeMigrationHandler

  • Put the Flyway SQL files into the migration folder
  • Invoke the Lambda function manually with the following JSON payload. (invoke by AWS console, CLI, any application...etc. see CLI example)
{
"bucket_name": "my-flyway",
"prefix": "my-application",
"flyway_conf": "flyway.conf"// Optional. Default 'flyway.conf'
}
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Configuration

The Lambda function can be configured either by way of a Flyway configuration file in the S3 bucket (1) or with environment variables (2). In case no configuration file is found it is assumed that the function should be configured via environment variables. Please note that the configuration method is a binary choice -- you can only pick one.

  1. Configuration file: For this configuration method place a Flyway compliant config file in the application folder along with the migration scrips.

  2. Environment variables: To configure the Lambda function via env vars it is crucial that no config file is present in the bucket. The Lambda function passes the FLYWAY_* env vars directly through to the library. See the official documentation for a list of supported env vars.

Supported Databases

Only MySQL is supported out of the box. If another database is used it is recommended to make use of Lambda Layers.

Here's how to:

  • Download the desired database driver's JAR file
  • Zip the JAR such that the jar is located in the java/lib folder, e.g. java/lib/postgresql-42.2.6.jre7
  • Create the Lambda layer (select the "Java 8" runtime) and assign it to the Lambda

An example CloudFormation template demonstrating a PostgreSQL setup via Lambda layers can be found in /src/main/aws/3-postgres.yaml.

About

Run Flyway database migrations as a Lambda function.

Topics

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Flyway AWS Lambda Function

Run Flyway database migrations as a Lambda function.

ℹ️ This fork of the (seemingly abandoned) flyway-awslambda project introduces the following improvements:

  • Flyway can be configured via the officially supported environment variables(only config file was supported before)
  • All Flyway configuration options are supported (only a small subset was supported before)
  • Upgrade Flyway to version 6 (was 4)
  • Improved documentation and examples

Other than possible breaking changes between Flyway 4 vs. 6 (I couldn't identify any) the Lambda function itself is 100% backwards compatible with the original project, i.e. the JAR can be put in place of the old function without breaking changes.

How it works

  1. The Lambda function is triggered either
    • by invoking it manually
    • or automatically when a file is uploaded into an S3 bucket
  2. The migration scripts are loaded from the bucket
  3. The migrations are performed on the database
  4. A file containing the migration results is pushed to the bucket

Setup

ℹ️ CloudFormation samples can be found under ./src/main/aws/. Read on for the manual setup.

First, create a new Lambda function and upload the flyway-awslambda-x.y.z.jar file as code. You can either download a pre-built JAR file from the releases or build it yourself (Scala is required):

sbt assembly

Settings

  • Runtime:Java 8
  • Handler:
    • "crossroad0201.aws.flywaylambda.S3EventMigrationHandler" if the Lambda should be triggered when a file is uploaded to the bucket
    • "crossroad0201.aws.flywaylambda.InvokeMigrationHandler" if you wish to invoke the Lambda manually
  • Role:
    • AmazonRDSFullAccess
    • AmazonS3FullAccess
    • AWSLambdaVPCAccessExecutionRole
  • VPC:Same VPC as the target RDS

Triggers (in case of S3EventMigrationHandler)

Value
BucketYour Flyway migration bucket, e.g. "my-flyway"
Event typeObject created
PrefixThe Flyway migration files location, e.g. "my-application/"
Suffixsql

Bucket Structure

The Lambda function expects the S3 bucket to be structured like this:

s3://my-flyway <- Flyway migration bucket.
- /my-application <- Flyway resource folder(prefix).
- flyway.conf <- Flyway configuration file (optional)
- V1__create_foo.sql <- SQL file(s)
- V2__create_bar.sql

Running the Lambda

Using the S3EventMigrationHandler

  • Put the Flyway SQL files into the migration folder (one by one!).
  • The Lambda function is invoked automatically by an S3 event.
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Using the InvokeMigrationHandler

  • Put the Flyway SQL files into the migration folder
  • Invoke the Lambda function manually with the following JSON payload. (invoke by AWS console, CLI, any application...etc. see CLI example)
{
"bucket_name": "my-flyway",
"prefix": "my-application",
"flyway_conf": "flyway.conf"// Optional. Default 'flyway.conf'
}
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Configuration

The Lambda function can be configured either by way of a Flyway configuration file in the S3 bucket (1) or with environment variables (2). In case no configuration file is found it is assumed that the function should be configured via environment variables. Please note that the configuration method is a binary choice -- you can only pick one.

  1. Configuration file: For this configuration method place a Flyway compliant config file in the application folder along with the migration scrips.

  2. Environment variables: To configure the Lambda function via env vars it is crucial that no config file is present in the bucket. The Lambda function passes the FLYWAY_* env vars directly through to the library. See the official documentation for a list of supported env vars.

Supported Databases

Only MySQL is supported out of the box. If another database is used it is recommended to make use of Lambda Layers.

Here's how to:

  • Download the desired database driver's JAR file
  • Zip the JAR such that the jar is located in the java/lib folder, e.g. java/lib/postgresql-42.2.6.jre7
  • Create the Lambda layer (select the "Java 8" runtime) and assign it to the Lambda

An example CloudFormation template demonstrating a PostgreSQL setup via Lambda layers can be found in /src/main/aws/3-postgres.yaml.

About

Run Flyway database migrations as a Lambda function.

Topics

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Flyway AWS Lambda Function

Run Flyway database migrations as a Lambda function.

ℹ️ This fork of the (seemingly abandoned) flyway-awslambda project introduces the following improvements:

  • Flyway can be configured via the officially supported environment variables(only config file was supported before)
  • All Flyway configuration options are supported (only a small subset was supported before)
  • Upgrade Flyway to version 6 (was 4)
  • Improved documentation and examples

Other than possible breaking changes between Flyway 4 vs. 6 (I couldn't identify any) the Lambda function itself is 100% backwards compatible with the original project, i.e. the JAR can be put in place of the old function without breaking changes.

How it works

  1. The Lambda function is triggered either
    • by invoking it manually
    • or automatically when a file is uploaded into an S3 bucket
  2. The migration scripts are loaded from the bucket
  3. The migrations are performed on the database
  4. A file containing the migration results is pushed to the bucket

Setup

ℹ️ CloudFormation samples can be found under ./src/main/aws/. Read on for the manual setup.

First, create a new Lambda function and upload the flyway-awslambda-x.y.z.jar file as code. You can either download a pre-built JAR file from the releases or build it yourself (Scala is required):

sbt assembly

Settings

  • Runtime:Java 8
  • Handler:
    • "crossroad0201.aws.flywaylambda.S3EventMigrationHandler" if the Lambda should be triggered when a file is uploaded to the bucket
    • "crossroad0201.aws.flywaylambda.InvokeMigrationHandler" if you wish to invoke the Lambda manually
  • Role:
    • AmazonRDSFullAccess
    • AmazonS3FullAccess
    • AWSLambdaVPCAccessExecutionRole
  • VPC:Same VPC as the target RDS

Triggers (in case of S3EventMigrationHandler)

Value
BucketYour Flyway migration bucket, e.g. "my-flyway"
Event typeObject created
PrefixThe Flyway migration files location, e.g. "my-application/"
Suffixsql

Bucket Structure

The Lambda function expects the S3 bucket to be structured like this:

s3://my-flyway <- Flyway migration bucket.
- /my-application <- Flyway resource folder(prefix).
- flyway.conf <- Flyway configuration file (optional)
- V1__create_foo.sql <- SQL file(s)
- V2__create_bar.sql

Running the Lambda

Using the S3EventMigrationHandler

  • Put the Flyway SQL files into the migration folder (one by one!).
  • The Lambda function is invoked automatically by an S3 event.
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Using the InvokeMigrationHandler

  • Put the Flyway SQL files into the migration folder
  • Invoke the Lambda function manually with the following JSON payload. (invoke by AWS console, CLI, any application...etc. see CLI example)
{
"bucket_name": "my-flyway",
"prefix": "my-application",
"flyway_conf": "flyway.conf"// Optional. Default 'flyway.conf'
}
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Configuration

The Lambda function can be configured either by way of a Flyway configuration file in the S3 bucket (1) or with environment variables (2). In case no configuration file is found it is assumed that the function should be configured via environment variables. Please note that the configuration method is a binary choice -- you can only pick one.

  1. Configuration file: For this configuration method place a Flyway compliant config file in the application folder along with the migration scrips.

  2. Environment variables: To configure the Lambda function via env vars it is crucial that no config file is present in the bucket. The Lambda function passes the FLYWAY_* env vars directly through to the library. See the official documentation for a list of supported env vars.

Supported Databases

Only MySQL is supported out of the box. If another database is used it is recommended to make use of Lambda Layers.

Here's how to:

  • Download the desired database driver's JAR file
  • Zip the JAR such that the jar is located in the java/lib folder, e.g. java/lib/postgresql-42.2.6.jre7
  • Create the Lambda layer (select the "Java 8" runtime) and assign it to the Lambda

An example CloudFormation template demonstrating a PostgreSQL setup via Lambda layers can be found in /src/main/aws/3-postgres.yaml.

About

Run Flyway database migrations as a Lambda function.

Topics

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Flyway AWS Lambda Function

Run Flyway database migrations as a Lambda function.

ℹ️ This fork of the (seemingly abandoned) flyway-awslambda project introduces the following improvements:

  • Flyway can be configured via the officially supported environment variables(only config file was supported before)
  • All Flyway configuration options are supported (only a small subset was supported before)
  • Upgrade Flyway to version 6 (was 4)
  • Improved documentation and examples

Other than possible breaking changes between Flyway 4 vs. 6 (I couldn't identify any) the Lambda function itself is 100% backwards compatible with the original project, i.e. the JAR can be put in place of the old function without breaking changes.

How it works

  1. The Lambda function is triggered either
    • by invoking it manually
    • or automatically when a file is uploaded into an S3 bucket
  2. The migration scripts are loaded from the bucket
  3. The migrations are performed on the database
  4. A file containing the migration results is pushed to the bucket

Setup

ℹ️ CloudFormation samples can be found under ./src/main/aws/. Read on for the manual setup.

First, create a new Lambda function and upload the flyway-awslambda-x.y.z.jar file as code. You can either download a pre-built JAR file from the releases or build it yourself (Scala is required):

sbt assembly

Settings

  • Runtime:Java 8
  • Handler:
    • "crossroad0201.aws.flywaylambda.S3EventMigrationHandler" if the Lambda should be triggered when a file is uploaded to the bucket
    • "crossroad0201.aws.flywaylambda.InvokeMigrationHandler" if you wish to invoke the Lambda manually
  • Role:
    • AmazonRDSFullAccess
    • AmazonS3FullAccess
    • AWSLambdaVPCAccessExecutionRole
  • VPC:Same VPC as the target RDS

Triggers (in case of S3EventMigrationHandler)

Value
BucketYour Flyway migration bucket, e.g. "my-flyway"
Event typeObject created
PrefixThe Flyway migration files location, e.g. "my-application/"
Suffixsql

Bucket Structure

The Lambda function expects the S3 bucket to be structured like this:

s3://my-flyway <- Flyway migration bucket.
- /my-application <- Flyway resource folder(prefix).
- flyway.conf <- Flyway configuration file (optional)
- V1__create_foo.sql <- SQL file(s)
- V2__create_bar.sql

Running the Lambda

Using the S3EventMigrationHandler

  • Put the Flyway SQL files into the migration folder (one by one!).
  • The Lambda function is invoked automatically by an S3 event.
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Using the InvokeMigrationHandler

  • Put the Flyway SQL files into the migration folder
  • Invoke the Lambda function manually with the following JSON payload. (invoke by AWS console, CLI, any application...etc. see CLI example)
{
"bucket_name": "my-flyway",
"prefix": "my-application",
"flyway_conf": "flyway.conf"// Optional. Default 'flyway.conf'
}
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Configuration

The Lambda function can be configured either by way of a Flyway configuration file in the S3 bucket (1) or with environment variables (2). In case no configuration file is found it is assumed that the function should be configured via environment variables. Please note that the configuration method is a binary choice -- you can only pick one.

  1. Configuration file: For this configuration method place a Flyway compliant config file in the application folder along with the migration scrips.

  2. Environment variables: To configure the Lambda function via env vars it is crucial that no config file is present in the bucket. The Lambda function passes the FLYWAY_* env vars directly through to the library. See the official documentation for a list of supported env vars.

Supported Databases

Only MySQL is supported out of the box. If another database is used it is recommended to make use of Lambda Layers.

Here's how to:

  • Download the desired database driver's JAR file
  • Zip the JAR such that the jar is located in the java/lib folder, e.g. java/lib/postgresql-42.2.6.jre7
  • Create the Lambda layer (select the "Java 8" runtime) and assign it to the Lambda

An example CloudFormation template demonstrating a PostgreSQL setup via Lambda layers can be found in /src/main/aws/3-postgres.yaml.

About

Run Flyway database migrations as a Lambda function.

Topics

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Flyway AWS Lambda Function

Run Flyway database migrations as a Lambda function.

ℹ️ This fork of the (seemingly abandoned) flyway-awslambda project introduces the following improvements:

  • Flyway can be configured via the officially supported environment variables(only config file was supported before)
  • All Flyway configuration options are supported (only a small subset was supported before)
  • Upgrade Flyway to version 6 (was 4)
  • Improved documentation and examples

Other than possible breaking changes between Flyway 4 vs. 6 (I couldn't identify any) the Lambda function itself is 100% backwards compatible with the original project, i.e. the JAR can be put in place of the old function without breaking changes.

How it works

  1. The Lambda function is triggered either
    • by invoking it manually
    • or automatically when a file is uploaded into an S3 bucket
  2. The migration scripts are loaded from the bucket
  3. The migrations are performed on the database
  4. A file containing the migration results is pushed to the bucket

Setup

ℹ️ CloudFormation samples can be found under ./src/main/aws/. Read on for the manual setup.

First, create a new Lambda function and upload the flyway-awslambda-x.y.z.jar file as code. You can either download a pre-built JAR file from the releases or build it yourself (Scala is required):

sbt assembly

Settings

  • Runtime:Java 8
  • Handler:
    • "crossroad0201.aws.flywaylambda.S3EventMigrationHandler" if the Lambda should be triggered when a file is uploaded to the bucket
    • "crossroad0201.aws.flywaylambda.InvokeMigrationHandler" if you wish to invoke the Lambda manually
  • Role:
    • AmazonRDSFullAccess
    • AmazonS3FullAccess
    • AWSLambdaVPCAccessExecutionRole
  • VPC:Same VPC as the target RDS

Triggers (in case of S3EventMigrationHandler)

Value
BucketYour Flyway migration bucket, e.g. "my-flyway"
Event typeObject created
PrefixThe Flyway migration files location, e.g. "my-application/"
Suffixsql

Bucket Structure

The Lambda function expects the S3 bucket to be structured like this:

s3://my-flyway <- Flyway migration bucket.
- /my-application <- Flyway resource folder(prefix).
- flyway.conf <- Flyway configuration file (optional)
- V1__create_foo.sql <- SQL file(s)
- V2__create_bar.sql

Running the Lambda

Using the S3EventMigrationHandler

  • Put the Flyway SQL files into the migration folder (one by one!).
  • The Lambda function is invoked automatically by an S3 event.
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Using the InvokeMigrationHandler

  • Put the Flyway SQL files into the migration folder
  • Invoke the Lambda function manually with the following JSON payload. (invoke by AWS console, CLI, any application...etc. see CLI example)
{
"bucket_name": "my-flyway",
"prefix": "my-application",
"flyway_conf": "flyway.conf"// Optional. Default 'flyway.conf'
}
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Configuration

The Lambda function can be configured either by way of a Flyway configuration file in the S3 bucket (1) or with environment variables (2). In case no configuration file is found it is assumed that the function should be configured via environment variables. Please note that the configuration method is a binary choice -- you can only pick one.

  1. Configuration file: For this configuration method place a Flyway compliant config file in the application folder along with the migration scrips.

  2. Environment variables: To configure the Lambda function via env vars it is crucial that no config file is present in the bucket. The Lambda function passes the FLYWAY_* env vars directly through to the library. See the official documentation for a list of supported env vars.

Supported Databases

Only MySQL is supported out of the box. If another database is used it is recommended to make use of Lambda Layers.

Here's how to:

  • Download the desired database driver's JAR file
  • Zip the JAR such that the jar is located in the java/lib folder, e.g. java/lib/postgresql-42.2.6.jre7
  • Create the Lambda layer (select the "Java 8" runtime) and assign it to the Lambda

An example CloudFormation template demonstrating a PostgreSQL setup via Lambda layers can be found in /src/main/aws/3-postgres.yaml.

About

Run Flyway database migrations as a Lambda function.

Topics

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Flyway AWS Lambda Function

Run Flyway database migrations as a Lambda function.

ℹ️ This fork of the (seemingly abandoned) flyway-awslambda project introduces the following improvements:

  • Flyway can be configured via the officially supported environment variables(only config file was supported before)
  • All Flyway configuration options are supported (only a small subset was supported before)
  • Upgrade Flyway to version 6 (was 4)
  • Improved documentation and examples

Other than possible breaking changes between Flyway 4 vs. 6 (I couldn't identify any) the Lambda function itself is 100% backwards compatible with the original project, i.e. the JAR can be put in place of the old function without breaking changes.

How it works

  1. The Lambda function is triggered either
    • by invoking it manually
    • or automatically when a file is uploaded into an S3 bucket
  2. The migration scripts are loaded from the bucket
  3. The migrations are performed on the database
  4. A file containing the migration results is pushed to the bucket

Setup

ℹ️ CloudFormation samples can be found under ./src/main/aws/. Read on for the manual setup.

First, create a new Lambda function and upload the flyway-awslambda-x.y.z.jar file as code. You can either download a pre-built JAR file from the releases or build it yourself (Scala is required):

sbt assembly

Settings

  • Runtime:Java 8
  • Handler:
    • "crossroad0201.aws.flywaylambda.S3EventMigrationHandler" if the Lambda should be triggered when a file is uploaded to the bucket
    • "crossroad0201.aws.flywaylambda.InvokeMigrationHandler" if you wish to invoke the Lambda manually
  • Role:
    • AmazonRDSFullAccess
    • AmazonS3FullAccess
    • AWSLambdaVPCAccessExecutionRole
  • VPC:Same VPC as the target RDS

Triggers (in case of S3EventMigrationHandler)

Value
BucketYour Flyway migration bucket, e.g. "my-flyway"
Event typeObject created
PrefixThe Flyway migration files location, e.g. "my-application/"
Suffixsql

Bucket Structure

The Lambda function expects the S3 bucket to be structured like this:

s3://my-flyway <- Flyway migration bucket.
- /my-application <- Flyway resource folder(prefix).
- flyway.conf <- Flyway configuration file (optional)
- V1__create_foo.sql <- SQL file(s)
- V2__create_bar.sql

Running the Lambda

Using the S3EventMigrationHandler

  • Put the Flyway SQL files into the migration folder (one by one!).
  • The Lambda function is invoked automatically by an S3 event.
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Using the InvokeMigrationHandler

  • Put the Flyway SQL files into the migration folder
  • Invoke the Lambda function manually with the following JSON payload. (invoke by AWS console, CLI, any application...etc. see CLI example)
{
"bucket_name": "my-flyway",
"prefix": "my-application",
"flyway_conf": "flyway.conf"// Optional. Default 'flyway.conf'
}
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Configuration

The Lambda function can be configured either by way of a Flyway configuration file in the S3 bucket (1) or with environment variables (2). In case no configuration file is found it is assumed that the function should be configured via environment variables. Please note that the configuration method is a binary choice -- you can only pick one.

  1. Configuration file: For this configuration method place a Flyway compliant config file in the application folder along with the migration scrips.

  2. Environment variables: To configure the Lambda function via env vars it is crucial that no config file is present in the bucket. The Lambda function passes the FLYWAY_* env vars directly through to the library. See the official documentation for a list of supported env vars.

Supported Databases

Only MySQL is supported out of the box. If another database is used it is recommended to make use of Lambda Layers.

Here's how to:

  • Download the desired database driver's JAR file
  • Zip the JAR such that the jar is located in the java/lib folder, e.g. java/lib/postgresql-42.2.6.jre7
  • Create the Lambda layer (select the "Java 8" runtime) and assign it to the Lambda

An example CloudFormation template demonstrating a PostgreSQL setup via Lambda layers can be found in /src/main/aws/3-postgres.yaml.

About

Run Flyway database migrations as a Lambda function.

Topics

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Flyway AWS Lambda Function

Run Flyway database migrations as a Lambda function.

ℹ️ This fork of the (seemingly abandoned) flyway-awslambda project introduces the following improvements:

  • Flyway can be configured via the officially supported environment variables(only config file was supported before)
  • All Flyway configuration options are supported (only a small subset was supported before)
  • Upgrade Flyway to version 6 (was 4)
  • Improved documentation and examples

Other than possible breaking changes between Flyway 4 vs. 6 (I couldn't identify any) the Lambda function itself is 100% backwards compatible with the original project, i.e. the JAR can be put in place of the old function without breaking changes.

How it works

  1. The Lambda function is triggered either
    • by invoking it manually
    • or automatically when a file is uploaded into an S3 bucket
  2. The migration scripts are loaded from the bucket
  3. The migrations are performed on the database
  4. A file containing the migration results is pushed to the bucket

Setup

ℹ️ CloudFormation samples can be found under ./src/main/aws/. Read on for the manual setup.

First, create a new Lambda function and upload the flyway-awslambda-x.y.z.jar file as code. You can either download a pre-built JAR file from the releases or build it yourself (Scala is required):

sbt assembly

Settings

  • Runtime:Java 8
  • Handler:
    • "crossroad0201.aws.flywaylambda.S3EventMigrationHandler" if the Lambda should be triggered when a file is uploaded to the bucket
    • "crossroad0201.aws.flywaylambda.InvokeMigrationHandler" if you wish to invoke the Lambda manually
  • Role:
    • AmazonRDSFullAccess
    • AmazonS3FullAccess
    • AWSLambdaVPCAccessExecutionRole
  • VPC:Same VPC as the target RDS

Triggers (in case of S3EventMigrationHandler)

Value
BucketYour Flyway migration bucket, e.g. "my-flyway"
Event typeObject created
PrefixThe Flyway migration files location, e.g. "my-application/"
Suffixsql

Bucket Structure

The Lambda function expects the S3 bucket to be structured like this:

s3://my-flyway <- Flyway migration bucket.
- /my-application <- Flyway resource folder(prefix).
- flyway.conf <- Flyway configuration file (optional)
- V1__create_foo.sql <- SQL file(s)
- V2__create_bar.sql

Running the Lambda

Using the S3EventMigrationHandler

  • Put the Flyway SQL files into the migration folder (one by one!).
  • The Lambda function is invoked automatically by an S3 event.
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Using the InvokeMigrationHandler

  • Put the Flyway SQL files into the migration folder
  • Invoke the Lambda function manually with the following JSON payload. (invoke by AWS console, CLI, any application...etc. see CLI example)
{
"bucket_name": "my-flyway",
"prefix": "my-application",
"flyway_conf": "flyway.conf"// Optional. Default 'flyway.conf'
}
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Configuration

The Lambda function can be configured either by way of a Flyway configuration file in the S3 bucket (1) or with environment variables (2). In case no configuration file is found it is assumed that the function should be configured via environment variables. Please note that the configuration method is a binary choice -- you can only pick one.

  1. Configuration file: For this configuration method place a Flyway compliant config file in the application folder along with the migration scrips.

  2. Environment variables: To configure the Lambda function via env vars it is crucial that no config file is present in the bucket. The Lambda function passes the FLYWAY_* env vars directly through to the library. See the official documentation for a list of supported env vars.

Supported Databases

Only MySQL is supported out of the box. If another database is used it is recommended to make use of Lambda Layers.

Here's how to:

  • Download the desired database driver's JAR file
  • Zip the JAR such that the jar is located in the java/lib folder, e.g. java/lib/postgresql-42.2.6.jre7
  • Create the Lambda layer (select the "Java 8" runtime) and assign it to the Lambda

An example CloudFormation template demonstrating a PostgreSQL setup via Lambda layers can be found in /src/main/aws/3-postgres.yaml.

About

Run Flyway database migrations as a Lambda function.

Topics

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Flyway AWS Lambda Function

Run Flyway database migrations as a Lambda function.

ℹ️ This fork of the (seemingly abandoned) flyway-awslambda project introduces the following improvements:

  • Flyway can be configured via the officially supported environment variables(only config file was supported before)
  • All Flyway configuration options are supported (only a small subset was supported before)
  • Upgrade Flyway to version 6 (was 4)
  • Improved documentation and examples

Other than possible breaking changes between Flyway 4 vs. 6 (I couldn't identify any) the Lambda function itself is 100% backwards compatible with the original project, i.e. the JAR can be put in place of the old function without breaking changes.

How it works

  1. The Lambda function is triggered either
    • by invoking it manually
    • or automatically when a file is uploaded into an S3 bucket
  2. The migration scripts are loaded from the bucket
  3. The migrations are performed on the database
  4. A file containing the migration results is pushed to the bucket

Setup

ℹ️ CloudFormation samples can be found under ./src/main/aws/. Read on for the manual setup.

First, create a new Lambda function and upload the flyway-awslambda-x.y.z.jar file as code. You can either download a pre-built JAR file from the releases or build it yourself (Scala is required):

sbt assembly

Settings

  • Runtime:Java 8
  • Handler:
    • "crossroad0201.aws.flywaylambda.S3EventMigrationHandler" if the Lambda should be triggered when a file is uploaded to the bucket
    • "crossroad0201.aws.flywaylambda.InvokeMigrationHandler" if you wish to invoke the Lambda manually
  • Role:
    • AmazonRDSFullAccess
    • AmazonS3FullAccess
    • AWSLambdaVPCAccessExecutionRole
  • VPC:Same VPC as the target RDS

Triggers (in case of S3EventMigrationHandler)

Value
BucketYour Flyway migration bucket, e.g. "my-flyway"
Event typeObject created
PrefixThe Flyway migration files location, e.g. "my-application/"
Suffixsql

Bucket Structure

The Lambda function expects the S3 bucket to be structured like this:

s3://my-flyway <- Flyway migration bucket.
- /my-application <- Flyway resource folder(prefix).
- flyway.conf <- Flyway configuration file (optional)
- V1__create_foo.sql <- SQL file(s)
- V2__create_bar.sql

Running the Lambda

Using the S3EventMigrationHandler

  • Put the Flyway SQL files into the migration folder (one by one!).
  • The Lambda function is invoked automatically by an S3 event.
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Using the InvokeMigrationHandler

  • Put the Flyway SQL files into the migration folder
  • Invoke the Lambda function manually with the following JSON payload. (invoke by AWS console, CLI, any application...etc. see CLI example)
{
"bucket_name": "my-flyway",
"prefix": "my-application",
"flyway_conf": "flyway.conf"// Optional. Default 'flyway.conf'
}
  • Check migration-result.json in the S3 bucket for the results or CloudWatch logs for more detail.

Configuration

The Lambda function can be configured either by way of a Flyway configuration file in the S3 bucket (1) or with environment variables (2). In case no configuration file is found it is assumed that the function should be configured via environment variables. Please note that the configuration method is a binary choice -- you can only pick one.

  1. Configuration file: For this configuration method place a Flyway compliant config file in the application folder along with the migration scrips.

  2. Environment variables: To configure the Lambda function via env vars it is crucial that no config file is present in the bucket. The Lambda function passes the FLYWAY_* env vars directly through to the library. See the official documentation for a list of supported env vars.

Supported Databases

Only MySQL is supported out of the box. If another database is used it is recommended to make use of Lambda Layers.

Here's how to:

  • Download the desired database driver's JAR file
  • Zip the JAR such that the jar is located in the java/lib folder, e.g. java/lib/postgresql-42.2.6.jre7
  • Create the Lambda layer (select the "Java 8" runtime) and assign it to the Lambda

An example CloudFormation template demonstrating a PostgreSQL setup via Lambda layers can be found in /src/main/aws/3-postgres.yaml.

About

Run Flyway database migrations as a Lambda function.

Topics

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages