Skip to content

Instantly share code, notes, and snippets.

@mhart
mhart / functions-index.js
Last active May 15, 2024 10:25
PPR w/ CF Pages and HTMLRewriter
// functions/index.js
export async function onRequestGet({ request, env }) {
// Start getting something from "the DB"
const dbPromise = scheduler.wait(1000).then(() => new Date().toDateString());
// Fetch index.html from cache (body will stream below)
const staticShell = await env.ASSETS.fetch(request);
// The browser will immediately render up until the body closing tag,
// then we insert dom modification scripts as the data is resolved
aws cloudformation deploy \
--stack-name pdf2png-app \
--template-file template.yml \
--parameter-overrides ImageUri=<accountid>.dkr.ecr.us-east-1.amazonaws.com/pdf2png-app:v1 \
--capabilities CAPABILITY_IAM
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Parameters:
ImageUri:
Type: String
Resources:
ConversionFunction:
Type: AWS::Serverless::Function
docker run -v "$HOME/.aws":/root/.aws \
-e AWS_REGION=us-east-1 -e AWS_PROFILE=myprofile \
-p 9000:8080 \
pdf2png-test
FROM alpine:3.12 AS rie-image
RUN apk add --no-cache curl && \
cd / && \
curl -sSL -O https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/download/v1.0/aws-lambda-rie && \
chmod +x /aws-lambda-rie
FROM pdf2png
FROM golang:1-alpine3.12 AS build-image
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY *.go ./
RUN go build -tags lambda.norpc -ldflags="-s -w" main.go
func main() {
os.Chdir("/tmp") // Change working directory to /tmp so we can write files
if len(os.Args) > 1 && os.Args[1] == "--test" {
pdf2png()
} else {
lambda.Start(handler)
}
}
FROM golang:1-alpine3.12 AS build-image
WORKDIR /app
COPY *.go ./
RUN go build main.go
FROM alpine:3.12
package main
import (
"os"
"os/exec"
"strings"
)
func main() {
os.Chdir("/tmp") // Change working directory to /tmp so we can write files
@mhart
mhart / test.sh
Last active February 13, 2020 18:31
AWS internal error creating a 200MiB Lambda Layer
# Try to create a 200MiB layer
head -c 209715200 /dev/random > file.dat
rm -f layer.zip && zip layer.zip file.dat
aws s3 cp layer.zip s3://my-bucket/my-key
aws lambda publish-layer-version --cli-connect-timeout 0 --layer-name large-200MiB-dep --content S3Bucket=my-bucket,S3Key=my-key
# Results in:
# An error occurred (ServiceException) when calling the PublishLayerVersion operation (reached max retries: 2): An error occurred and the request cannot be processed.
# One byte less and it works (`aws lambda publish-layer-version` takes about 60 secs)