-
Notifications
You must be signed in to change notification settings - Fork 14
feat(url-shortener): use a Lambda function URL #331
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Summary of ChangesHello @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
🧠 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 AssistThe 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
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 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
|
There was a problem hiding this 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.
| const redirect = JSON.parse(await data.Body.transformToString()); | ||
|
|
||
| return { | ||
| statusCode: 301, | ||
| headers: { | ||
| Location: redirect.url, | ||
| }, | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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,
},
};| console.log(err); | ||
| return { statusCode: 404 }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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 };Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
… into url-shortener-fn-url
No description provided.