forked from aws-samples/aws-lambda-layer-kubectl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
220 lines (183 loc) · 7.18 KB
/
Makefile
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
.PHONY: layer-zip layer-upload layer-publish func-zip create-func update-func layer-all func-all invoke clean
LAYER_NAME ?= eks-kubectl-layer
LAYER_DESC ?= eks-kubectl-layer
# INPUT_JSON ?= event.json
S3BUCKET ?= pahud-tmp-nrt
LAMBDA_REGION ?= ap-northeast-1
LAMBDA_FUNC_NAME ?= eks-kubectl
LATEST_LAYER_ARN ?= $(shell aws --region $(LAMBDA_REGION) cloudformation describe-stacks --stack-name "$(LAYER_NAME)-stack" --query 'Stacks[0].Outputs[0].OutputValue' --output text)
LATEST_LAYER_VER ?= $(shell echo $(LATEST_LAYER_ARN) | cut -d: -f8)
CLUSTER_NAME ?= default
ifdef INPUT_YAML
INPUT_JSON = event.json
endif
AWS_PROFILE ?= default
SEMANTIC_VERSION ?= 2.0.0
.PHONY: build
build: layer-build
.PHONY: layer-build
layer-build:
@bash build.sh
@echo "[OK] Layer built at ./layer.zip"
@ls -alh ./layer.zip
.PHONY: sam-layer-package
sam-layer-package:
@docker run -t \
-v $(PWD):/home/samcli/workdir \
-v $(HOME)/.aws:/root/.aws \
-w /home/samcli/workdir \
-u root \
-e AWS_DEFAULT_PROFILE \
-e AWS_CONTAINER_CREDENTIALS_RELATIVE_URI \
pahud/aws-sam-cli:latest sam package --template-file sam-layer.yaml \
--s3-bucket $(S3BUCKET) --output-template-file sam-layer-packaged.yaml \
--region $(LAMBDA_REGION)
@echo "[OK] Now type 'make sam-layer-deploy' to deploy your Lambda layer with SAM or 'make publish-new-version-to-sar' to publish to SAR"
.PHONY: sam-layer-publish
sam-layer-publish:
@docker run -i $(EXTRA_DOCKER_ARGS) \
-v $(PWD):/home/samcli/workdir \
-v $(HOME)/.aws:/root/.aws \
-w /home/samcli/workdir \
-u root \
-e AWS_DEFAULT_PROFILE \
-e AWS_CONTAINER_CREDENTIALS_RELATIVE_URI \
pahud/aws-sam-cli:latest sam publish --region $(LAMBDA_REGION) --template sam-layer-packaged.yaml \
--semantic-version $(SEMANTIC_VERSION)
@echo "=> version $(SEMANTIC_VERSION) published to $(LAMBDA_REGION)"
.PHONY: sam-layer-deploy
sam-layer-deploy:
@docker run -t \
-v $(PWD):/home/samcli/workdir \
-v $(HOME)/.aws:/root/.aws \
-w /home/samcli/workdir \
-u root \
-e AWS_DEFAULT_PROFILE \
-e AWS_CONTAINER_CREDENTIALS_RELATIVE_URI \
pahud/aws-sam-cli:latest sam deploy --s3-bucket $(S3BUCKET) \
--region $(LAMBDA_REGION) \
--template-file ./sam-layer-packaged.yaml \
--stack-name "$(LAYER_NAME)-stack" \
--parameter-overrides LayerName=$(LAYER_NAME) \
--capabilities CAPABILITY_IAM
# print the cloudformation stack outputs
@aws --region $(LAMBDA_REGION) cloudformation describe-stacks --stack-name "$(LAYER_NAME)-stack" --query 'Stacks[0].Outputs'
@echo "[OK] Layer version deployed."
.PHONY: sam-layer-info
sam-layer-info:
@aws --profile=$(AWS_PROFILE) --region $(LAMBDA_REGION) cloudformation describe-stacks --stack-name "$(LAYER_NAME)-stack" --query 'Stacks[0].Outputs'
.PHONY: sam-layer-add-version-permission
sam-layer-add-version-permission:
@aws --profile=$(AWS_PROFILE) --region $(LAMBDA_REGION) lambda add-layer-version-permission \
--layer-name $(LAYER_NAME) \
--version-number $(LAYER_VER) \
--statement-id public-all \
--action lambda:GetLayerVersion \
--principal '*'
.PHONY: sam-get-layer-version-policy
sam-get-layer-version-policy:
@aws --profile=$(AWS_PROFILE) --region $(LAMBDA_REGION) lambda get-layer-version-policy \
--layer-name $(LAYER_NAME) \
--version-number $(LATEST_LAYER_VER)
.PHONY: sam-layer-add-version-permission-latest
sam-layer-add-version-permission-latest:
@aws --profile=$(AWS_PROFILE) --region $(LAMBDA_REGION) lambda add-layer-version-permission \
--layer-name $(LAYER_NAME) \
--version-number $(LATEST_LAYER_VER) \
--statement-id public-all \
--action lambda:GetLayerVersion \
--principal '*'
.PHONY: sam-layer-destroy
sam-layer-destroy:
# destroy the layer stack
aws --profile=$(AWS_PROFILE) --region $(LAMBDA_REGION) cloudformation delete-stack --stack-name "$(LAYER_NAME)-stack"
@echo "[OK] Layer version destroyed."
.PHONY: sam-package
sam-package:
@docker run -t \
-v $(PWD):/home/samcli/workdir \
-v $(HOME)/.aws:/root/.aws \
-w /home/samcli/workdir \
-u root \
-e AWS_DEFAULT_PROFILE \
-e AWS_CONTAINER_CREDENTIALS_RELATIVE_URI \
pahud/aws-sam-cli:latest sam package --template-file sam.yaml \
--region $(LAMBDA_REGION) \
--s3-bucket $(S3BUCKET) --output-template-file packaged.yaml
.PHONY: sam-deploy
sam-deploy:
@docker run -t \
-v $(PWD):/home/samcli/workdir \
-v $(HOME)/.aws:/root/.aws \
-w /home/samcli/workdir \
-u root \
-e AWS_DEFAULT_PROFILE \
-e AWS_CONTAINER_CREDENTIALS_RELATIVE_URI \
pahud/aws-sam-cli:latest sam deploy \
--s3-bucket $(S3BUCKET) \
--region $(LAMBDA_REGION) \
--parameter-overrides ClusterName=$(CLUSTER_NAME) FunctionName=$(LAMBDA_FUNC_NAME) \
--template-file sam.yaml --stack-name "$(LAMBDA_FUNC_NAME)-stack" --capabilities CAPABILITY_IAM
# print the cloudformation stack outputs
@aws --region $(LAMBDA_REGION) cloudformation describe-stacks --stack-name "$(LAMBDA_FUNC_NAME)-stack" --query 'Stacks[0].Outputs'
.PHONY: sam-destroy
sam-destroy:
# destroy the stack
aws --profile=$(AWS_PROFILE) --region $(LAMBDA_REGION) cloudformation delete-stack --stack-name "$(LAMBDA_FUNC_NAME)-stack"
.PHONY: func-prep
func-prep:
@echo "=> preparing ./func.d"
@[ -d ./func.d ] && rm -rf ./func.d; mkdir ./func.d
@cp main.sh bootstrap libs.sh ./func.d && echo "=> DONE"
@ls -al ./func.d
.PHONY: func-zip
func-zip:
cd func.d && zip -r ../func-bundle.zip * && ls -alh ../func-bundle.zip
.PHONY: create-func
create-func:
@aws --profile=$(AWS_PROFILE) --region $(LAMBDA_REGION) lambda create-function \
--function-name $(LAMBDA_FUNC_NAME) \
--description "demo func for lambda-layer-kubectl" \
--runtime provided \
--role $(LAMBDA_ROLE_ARN) \
--timeout 30 \
--environment Variables={cluster_name=$(CLUSTER_NAME)} \
--layers $(LAMBDA_LAYERS) \
--handler main \
--zip-file fileb://func-bundle.zip
.PHONY: update-func
update-func:
@aws --profile=$(AWS_PROFILE) --region $(LAMBDA_REGION) lambda update-function-code \
--function-name $(LAMBDA_FUNC_NAME) \
--zip-file fileb://func-bundle.zip
.PHONY: update-func-conf
update-func-conf:
@aws --profile=$(AWS_PROFILE) --region $(LAMBDA_REGION) lambda update-function-configuration \
--function-name $(LAMBDA_FUNC_NAME) \
--layers $(LAMBDA_LAYERS)
.PHONY: layer-all
layer-all: layer-zip layer-upload layer-publish
.PHONY: publish-new-layerversion-to-sar
publish-new-layerversion-to-sar:
@LAMBDA_REGION=us-east-1 make clean layer-build sam-layer-package sam-layer-publish
.PHONY: publish-new-layerversion-to-sar-cn
publish-new-layerversion-to-sar-cn:
@LAMBDA_REGION=cn-north-1 make clean layer-build sam-layer-package sam-layer-publish
.PHONY: func-all
func-all: func-zip update-func
.PHONY: invoke
invoke:
ifdef INPUT_YAML
@bash genevent.sh $(INPUT_YAML) $(INPUT_JSON)
@aws --profile=$(AWS_PROFILE) --region $(LAMBDA_REGION) lambda invoke --function-name $(LAMBDA_FUNC_NAME) \
--payload file://$(INPUT_JSON) lambda.output --log-type Tail | jq -r .LogResult | base64 -d
else
@aws --profile=$(AWS_PROFILE) --region $(LAMBDA_REGION) lambda invoke --function-name $(LAMBDA_FUNC_NAME) \
--payload '{"data":""}' lambda.output --log-type Tail | jq -r .LogResult | base64 -d
endif
.PHONY: delete-func
delete-func:
@aws --profile=$(AWS_PROFILE) --region $(LAMBDA_REGION) lambda delete-function --function-name $(LAMBDA_FUNC_NAME)
.PHONY: clean
clean:
rm -rf lambda.output event.json *.zip layer/