-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmakefile
More file actions
81 lines (66 loc) · 2.84 KB
/
makefile
File metadata and controls
81 lines (66 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
.DEFAULT_GOAL := help
appname := "testapp"
aws_acc := "123456789"
aws_region := "eu-west-2"
lambda_timeout := "10"
trust_policy := "trust-policy.json"
api_name := "testfastapi-gateway"
.PHONY: help
help:
@echo "Available targets:"
@echo " - create-role: Create IAM role with trust policy"
@echo " - delete-role: Delete IAM role"
@echo " - build-image: Building application to an image locally"
@echo " - create-repo: Create ECR repo to host images built"
@echo " - delete-repo: Delete ECR repo"
@echo " - push-image: Pushing local image to ECR"
@echo " - update-lambda: Update lambda with the latest image in ECR"
@echo " - create-lambda: Create lambda using the image in ECR"
@echo " - delete-lambda: Delete Lambda function"
@echo " - up: build push update"
@echo " - create: build create-repo push create"
@echo " - cleanup: combines all delete actions"
@echo " - invoke: Trigger your lambda"
create-role:
aws iam create-role --role-name $(role_name) --assume-role-policy-document file://$(trust_policy)
aws iam attach-role-policy --role-name $(role_name) --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
delete-role:
-aws iam detach-role-policy --role-name $(role_name) --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
-aws iam delete-role --role-name $(role_name)
.PHONY: build-image
build-image:
docker build . -t $(appname):latest
docker tag docker.io/library/$(appname):latest $(appname):latest || true
.PHONY: create-repo
create-repo:
aws ecr describe-repositories --repository-names $(appname) || aws ecr create-repository --repository-name $(appname)
.PHONY: delete-repo
delete-repo:
-aws ecr delete-repository --repository-name $(appname) --force
.PHONY: push-image
push-image:
aws ecr get-login-password --region $(aws_region) | docker login --username AWS --password-stdin $(aws_acc).dkr.ecr.$(aws_region).amazonaws.com
docker tag $(appname):latest $(aws_acc).dkr.ecr.$(aws_region).amazonaws.com/$(appname)
docker push $(aws_acc).dkr.ecr.$(aws_region).amazonaws.com/$(appname):latest
.PHONY: update-lambda
update-lambda:
aws lambda update-function-code --function-name $(appname) \
--image-uri $(aws_acc).dkr.ecr.$(aws_region).amazonaws.com/$(appname):latest
.PHONY: create-lambda
create-lambda:
aws lambda create-function --function-name $(appname) \
--package-type Image \
--code ImageUri=$(aws_acc).dkr.ecr.$(aws_region).amazonaws.com/$(appname):latest \
--role arn:aws:iam::$(aws_acc):role/vscode-execute \
--timeout $(lambda_timeout)
delete-lambda:
-aws lambda delete-function --function-name $(appname)
.PHONY: up
up: build-image push-image update-lambda
.PHONY: create
create: create-repo create-role build-image push-image create-lambda
.PHONY: cleanup
cleanup: delete-lambda delete-role delete-repo
.PHONY: invoke
invoke:
aws lambda invoke --function-name $(appname) output.txt