Skip to content

Commit eef47b5

Browse files
Create lambdas with terraform (#224)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 5619015 commit eef47b5

25 files changed

+1177
-1162
lines changed

.github/workflows/deploy-prod.yml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,7 @@ jobs:
112112
- uses: actions/checkout@v4
113113
env:
114114
HUSKY: "0"
115-
- uses: aws-actions/setup-sam@v2
116-
with:
117-
use-installer: true
118-
- name: Set up Python 3.11
119-
uses: actions/setup-python@v5
120-
with:
121-
python-version: 3.11
115+
122116
- name: Download Build files
123117
uses: actions/download-artifact@v4
124118
with:

.github/workflows/deploy-qa.yml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,14 +126,6 @@ jobs:
126126
with:
127127
name: build
128128

129-
- uses: aws-actions/setup-sam@v2
130-
with:
131-
use-installer: true
132-
133-
- name: Set up Python 3.11
134-
uses: actions/setup-python@v5
135-
with:
136-
python-version: 3.11
137129

138130
- uses: aws-actions/configure-aws-credentials@v4
139131
with:

.github/workflows/manual-prod.yml

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ jobs:
9797
- build
9898
environment: "AWS PROD"
9999
steps:
100-
- name: Set up Node for testing
100+
- name: Setup Node
101101
uses: actions/setup-node@v4
102102
with:
103103
node-version: 22.x
@@ -110,13 +110,7 @@ jobs:
110110
- uses: actions/checkout@v4
111111
env:
112112
HUSKY: "0"
113-
- uses: aws-actions/setup-sam@v2
114-
with:
115-
use-installer: true
116-
- name: Set up Python 3.11
117-
uses: actions/setup-python@v5
118-
with:
119-
python-version: 3.11
113+
120114
- name: Download Build files
121115
uses: actions/download-artifact@v4
122116
with:

.github/workflows/review.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
- name: Cloud provider files
2828
paths:
2929
- '.github/'
30-
- 'cloudformation/'
30+
- 'terraform/'
3131
teams:
3232
- "officers"
3333
- "infra-chairs"

Makefile

Lines changed: 15 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,12 @@
1-
run_env = ParameterKey=RunEnvironment,ParameterValue
2-
set_application_prefix = ParameterKey=ApplicationPrefix,ParameterValue
3-
set_application_name = ParameterKey=ApplicationFriendlyName,ParameterValue
4-
51
prod_aws_account = 298118738376
62
dev_aws_account = 427040638965
73
current_aws_account := $(shell aws sts get-caller-identity --query Account --output text)
84

95
src_directory_root = src/
106
dist_ui_directory_root = dist_ui/
117
integration_test_directory_root = tests/live_integration/
12-
13-
# CHANGE ME (as needed)
14-
application_key=infra-core-api
15-
application_name="InfraCoreApi"
16-
17-
region="us-east-1"
18-
19-
# DO NOT CHANGE
20-
common_params = --no-confirm-changeset \
21-
--no-fail-on-empty-changeset \
22-
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND \
23-
--region $(region) \
24-
--stack-name $(application_key) \
25-
--tags "project=$(application_key)" "techlead=$(techlead)" \
26-
--s3-prefix $(application_key) \
27-
--resolve-s3
28-
29-
s3_bucket_prefix = "$(current_aws_account)-$(region)-$(application_key)"
30-
ui_s3_bucket = "$(s3_bucket_prefix)-ui"
31-
docs_s3_bucket = "$(s3_bucket_prefix)-docs"
32-
33-
8+
npm_install_params = --omit=dev --target_arch=arm64 --target_platform=linux --target_libc=glibc --cpu arm64 --os linux --arch=arm64
349
GIT_HASH := $(shell git rev-parse --short HEAD)
35-
ORIGIN_SECRET := $(shell openssl rand -hex 32)
3610

3711
.PHONY: clean
3812

@@ -60,80 +34,49 @@ clean:
6034
build_swagger:
6135
cd src/api && npx tsx --experimental-loader=./mockLoader.mjs createSwagger.ts && cd ../..
6236

63-
build: src/ cloudformation/
37+
build: src/
6438
yarn -D
6539
yarn build
6640
make build_swagger
6741
cp -r src/api/resources/ dist/api/resources
6842
rm -rf dist/lambda/sqs
69-
sam build --template-file cloudformation/main.yml --use-container --parallel
70-
mkdir -p .aws-sam/build/AppApiLambdaFunction/node_modules/aws-crt/
71-
cp -r node_modules/aws-crt/dist .aws-sam/build/AppApiLambdaFunction/node_modules/aws-crt
72-
## IF WE EVER CHANGE THE LAMBDA ARCH, BE SURE TO CHANGE THESE ##
73-
rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/aws-crt/dist/bin/darwin*
74-
rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/aws-crt/dist/bin/linux-x64*
75-
rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/aws-crt/dist/bin/linux-arm64-musl
76-
rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/argon2/prebuilds/darwin*
77-
rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/argon2/prebuilds/freebsd*
78-
rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/argon2/prebuilds/linux-arm
79-
rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/argon2/prebuilds/linux-x64*
80-
rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/argon2/prebuilds/win32-x64*
81-
rm -rf .aws-sam/build/AppApiLambdaFunction/node_modules/argon2/prebuilds/linux-arm64/argon2.armv8.musl.node
43+
docker run --rm -v "$(shell pwd)/dist/lambda":/var/task public.ecr.aws/sam/build-nodejs22.x:latest \
44+
sh -c "npm install $(npm_install_params) && \
45+
rm -rf node_modules/aws-crt/dist/bin/{darwin*,linux-x64*,linux-arm64-musl} && \
46+
rm -rf node_modules/argon2/prebuilds/{darwin*,freebsd*,linux-arm,linux-x64*,win32-x64*} && \
47+
rm -rf node_modules/argon2/prebuilds/linux-arm64/argon2.armv8.musl.node"
48+
49+
docker run --rm -v "$(shell pwd)/dist/sqsConsumer":/var/task public.ecr.aws/sam/build-nodejs22.x:latest \
50+
sh -c "npm install $(npm_install_params) && \
51+
rm -rf node_modules/aws-crt/dist/bin/{darwin*,linux-x64*,linux-arm64-musl} && \
52+
rm -rf node_modules/argon2/prebuilds/{darwin*,freebsd*,linux-arm,linux-x64*,win32-x64*} && \
53+
rm -rf node_modules/argon2/prebuilds/linux-arm64/argon2.armv8.musl.node"
8254

8355
local:
8456
VITE_BUILD_HASH=$(GIT_HASH) yarn run dev
8557

86-
87-
postdeploy:
88-
@echo "Syncing S3 UI bucket..."
89-
aws s3 sync $(dist_ui_directory_root) s3://$(ui_s3_bucket)/ --delete
90-
make invalidate_cloudfront
91-
9258
deploy_prod: check_account_prod
93-
@echo "Deploying CloudFormation stack..."
94-
@sam deploy $(common_params) --parameter-overrides $(run_env)=prod $(set_application_prefix)=$(application_key) $(set_application_name)="$(application_name)" S3BucketPrefix="$(s3_bucket_prefix)" CloudfrontOriginSecret="$(ORIGIN_SECRET)"
9559
@echo "Deploying Terraform..."
96-
$(eval MAIN_DISTRIBUTION_ID := $(shell aws cloudformation describe-stacks --stack-name $(application_key) --query "Stacks[0].Outputs[?OutputKey=='CloudfrontDistributionId'].OutputValue" --output text))
9760
terraform -chdir=terraform/envs/prod init -lockfile=readonly
98-
terraform -chdir=terraform/envs/prod apply -auto-approve -var main_cloudfront_distribution_id="$(MAIN_DISTRIBUTION_ID)"
99-
make postdeploy
61+
terraform -chdir=terraform/envs/prod apply -auto-approve
10062

10163
deploy_dev: check_account_dev
102-
@echo "Deploying CloudFormation stack..."
103-
@sam deploy $(common_params) --parameter-overrides $(run_env)=dev $(set_application_prefix)=$(application_key) $(set_application_name)="$(application_name)" S3BucketPrefix="$(s3_bucket_prefix)" CloudfrontOriginSecret="$(ORIGIN_SECRET)"
10464
@echo "Deploying Terraform..."
105-
$(eval MAIN_DISTRIBUTION_ID := $(shell aws cloudformation describe-stacks --stack-name $(application_key) --query "Stacks[0].Outputs[?OutputKey=='CloudfrontDistributionId'].OutputValue" --output text))
10665
terraform -chdir=terraform/envs/qa init -lockfile=readonly
107-
terraform -chdir=terraform/envs/qa apply -auto-approve -var main_cloudfront_distribution_id="$(MAIN_DISTRIBUTION_ID)"
108-
make postdeploy
109-
110-
invalidate_cloudfront:
111-
@echo "Creating CloudFront invalidation..."
112-
$(eval DISTRIBUTION_ID := $(shell aws cloudformation describe-stacks --stack-name $(application_key) --query "Stacks[0].Outputs[?OutputKey=='CloudfrontDistributionId'].OutputValue" --output text))
113-
$(eval DISTRIBUTION_ID_2 := $(shell aws cloudformation describe-stacks --stack-name $(application_key) --query "Stacks[0].Outputs[?OutputKey=='CloudfrontIcalDistributionId'].OutputValue" --output text))
114-
$(eval INVALIDATION_ID := $(shell aws cloudfront create-invalidation --distribution-id $(DISTRIBUTION_ID) --paths "/*" --query 'Invalidation.Id' --output text --no-cli-page))
115-
$(eval INVALIDATION_ID_2 := $(shell aws cloudfront create-invalidation --distribution-id $(DISTRIBUTION_ID_2) --paths "/*" --query 'Invalidation.Id' --output text --no-cli-page))
116-
@echo "Triggered invalidation jobs $(INVALIDATION_ID) and $(INVALIDATION_ID_2)..."
117-
@echo "Waiting on job $(INVALIDATION_ID)..."
118-
aws cloudfront wait invalidation-completed --distribution-id $(DISTRIBUTION_ID) --id $(INVALIDATION_ID)
119-
@echo "Waiting on job $(INVALIDATION_ID_2)..."
120-
aws cloudfront wait invalidation-completed --distribution-id $(DISTRIBUTION_ID_2) --id $(INVALIDATION_ID_2)
121-
@echo "CloudFront invalidation completed!"
66+
terraform -chdir=terraform/envs/qa apply -auto-approve
12267

12368
init_terraform:
12469
terraform -chdir=terraform/envs/qa init
12570
terraform -chdir=terraform/envs/prod init
12671

12772
install:
12873
yarn -D
129-
pip install cfn-lint
13074

13175
test_live_integration: install
13276
yarn test:live
13377

13478
test_unit: install
13579
yarn lint
136-
cfn-lint cloudformation/**/*
13780
terraform -chdir=terraform/envs/qa init -reconfigure -backend=false -upgrade
13881
terraform -chdir=terraform/envs/qa fmt -check
13982
terraform -chdir=terraform/envs/qa validate

0 commit comments

Comments
 (0)