Skip to content

Conversation

@jogold
Copy link
Owner

@jogold jogold commented Jan 6, 2026

No description provided.

@gemini-code-assist
Copy link

Summary of Changes

Hello @jogold, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a significant architectural improvement to the URL shortener by migrating its redirect functionality from a Lambda@Edge implementation to a more modern and simplified AWS Lambda Function URL. This change reduces operational overhead and complexity by removing the need for global Lambda@Edge deployments and their associated custom resources, while still leveraging CloudFront for content delivery and custom domain support. The new setup integrates the Lambda Function URL directly as a CloudFront origin, and also adds an HTTPS record to Route53 for enhanced security and standard web practices.

Highlights

  • Architectural Shift: The URL shortener's redirect mechanism has been refactored to utilize AWS Lambda Function URLs instead of Lambda@Edge, simplifying the deployment and management of the redirect logic.
  • Lambda Function URL Integration: The CloudFront distribution now uses the Lambda Function URL as its origin, replacing the previous S3 bucket origin combined with Lambda@Edge for request handling.
  • Resource Simplification: Removed complex cross-region custom resources and associated IAM policies previously required for Lambda@Edge deployments, streamlining the CloudFormation template.
  • Route53 HTTPS Record: A new HTTPS record has been added to Route53, ensuring that the URL shortener's custom domain properly handles HTTPS traffic.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the URL shortener to use a Lambda Function URL as the CloudFront origin, replacing the previous implementation that used an S3 origin with a Lambda@Edge function. This is a great architectural simplification that removes the complexity of Lambda@Edge. The changes to the CDK stack and supporting configuration files are well-aligned with this goal.

I've found one critical issue in the new redirect.lambda.ts due to a typo, which would prevent the redirects from working. I've also included a couple of suggestions to improve error handling and add validation for more robust behavior. Overall, this is a solid improvement.

Comment on lines 18 to 25
const redirect = JSON.parse(await data.Body.transformToString());

return {
statusCode: 301,
headers: {
Location: redirect.url,
},
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

After parsing the JSON from the S3 object, there's no validation to ensure that the redirect.url property exists. If the S3 object is malformed or doesn't contain a url property, this will result in a redirect response with an empty or missing Location header, which is not ideal. It's good practice to add a check for redirect.url and throw an error if it's missing. The catch block will then handle it, returning an appropriate error status code to the client.

    const redirect = JSON.parse(await data.Body.transformToString());

    if (!redirect.url) {
      throw new Error('Redirect object in S3 is missing a `url` property.');
    }

    return {
      statusCode: 301,
      headers: {
        Location: redirect.url,
      },
    };

Comment on lines +27 to +28
console.log(err);
return { statusCode: 404 };

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The current error handling returns a 404 Not Found for any error that occurs within the try block. This can make debugging difficult, as it hides the underlying cause of the error (e.g., permissions issues, throttling, or other S3 errors). It would be better to distinguish between a 'Not Found' error (NoSuchKey) and other server-side errors. For unexpected errors, returning a 500 Internal Server Error would be more appropriate and provide better observability.

    console.log(err);
    // The AWS SDK v3 for JS surfaces `NoSuchKey` as an error with name 'NoSuchKey'.
    if (err instanceof Error && err.name === 'NoSuchKey') {
      return { statusCode: 404 };
    }
    return { statusCode: 500 };

jogold and others added 5 commits January 6, 2026 23:31
@jogold jogold enabled auto-merge (squash) January 6, 2026 22:48
@jogold jogold merged commit 8195af0 into master Jan 6, 2026
12 of 17 checks passed
@jogold jogold deleted the url-shortener-fn-url branch January 6, 2026 23:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants