Skip to content

Commit

Permalink
Test CI/CD
Browse files Browse the repository at this point in the history
  • Loading branch information
Fred Snyder committed Apr 19, 2023
1 parent 3fe5076 commit a624a94
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 50 deletions.
34 changes: 25 additions & 9 deletions .github/workflows/deploy.yml
Expand Up @@ -74,33 +74,49 @@ jobs:
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
HALLO: ${{ vars.HALLO }}

CORS_DOMAIN: ${{ vars.CORS_DOMAIN }}

AWS_ARN: ${{ vars.$AWS_REGION }}
AWS_ACCOUNT_ID: ${{ vars.AWS_ACCOUNT_ID }}
AWS_REGION: ${{ vars.AWS_REGION }}
LAMBDA_FUNCTION_NAME: ${{ vars.$LAMBDA_FUNCTION_NAME }}
ECR_DOCKER_REPO_NAME: ${{ vars.$ECR_DOCKER_REPO_NAME }}
ECR_DOCKER_IMAGE_NAME: ${{ vars.$ECR_DOCKER_IMAGE_NAME }}
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Install Python
uses: actions/setup-python@v4
with:
python-version: '3.9'

- name: Create `.env` file
run: |
printf "CORS_DOMAIN=https://demodash.kbsb.app" > .env
# set the Airtable environment variables manually
printf "CORS_DOMAIN=$CORS_DOMAIN" > .env
working-directory: ./lambdas/todos

- name: Create `.aws` credentials file
run: |
printf "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID\n" > .env
printf "AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY\n" >> .env
printf "AWS_ACCOUNT_ID=$AWS_ACCOUNT_ID\n" >> .env
working-directory: ./lambdas/todos/.aws
- name: test HALLO value

- name: Create `.make.docker` config file
run: |
printf "value is: $HALLO\n"
- name: test ID
printf "ECR_DOCKER_REPO_NAME=$ECR_DOCKER_REPO_NAME" > .make.docker
printf "ECR_DOCKER_IMAGE_NAME=$ECR_DOCKER_IMAGE_NAME" >> .make.docker
printf "LAMBDA_FUNCTION_NAME=$LAMBDA_FUNCTION_NAME" >> .make.docker
printf "AWS_REGION=$AWS_REGION" >> .make.docker
printf "AWS_ACCOUNT_ID=$AWS_ACCOUNT_ID" >> .make.docker
printf "AWS_ARN=$AWS_ACCOUNT_ID" >> .make.docker
- name: Login to ECR Docker registry
run: |
echo "$ID"
# aws ecr get-login-password --region eu-central-1 | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.region.amazonaws.com
make auth
working-directory: ./lambdas/todos

# - run: |
# docker build -t "$(image_name)" .
# working-directory: ./lambdas/todos
Expand Down
1 change: 0 additions & 1 deletion lambdas/todos/.aws/.env.template
Expand Up @@ -5,7 +5,6 @@ export AWS_PROFILE=YOUR_PROFILE_NAME
export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
export AWS_DEFAULT_REGION=us-central-1
export AWS_ACCOUNT_ID=XXXXXXXXXXXXX

# get your AWS_ACCOUNT_ID
# aws sts get-caller-identity
Expand Down
13 changes: 7 additions & 6 deletions lambdas/todos/.make.docker
@@ -1,6 +1,7 @@
# Docker Make config
region=eu-central-1
docker_repo=kbsb-demodash
image_name=kbsb-demodash-todos
function_name=todos
arn=100000000000
# Docker Make config variables
ECR_DOCKER_REPO_NAME=kbsb-demodash
ECR_DOCKER_IMAGE_NAME=kbsb-demodash-todos
LAMBDA_FUNCTION_NAME=todos
AWS_REGION=eu-central-1
AWS_ACCOUNT_ID=100000000000
AWS_ARN=100000000000
8 changes: 4 additions & 4 deletions lambdas/todos/.make.pytest
@@ -1,4 +1,4 @@
# Pytest Make config
url_local=http://localhost:8000
url_docker=http://localhost:9000/2015-03-31/functions/function/invocations
url_lambda=https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.lambda-url.eu-central-1.on.aws
# Pytest Make config variables
PYTEST_URL_LOCAL=http://localhost:8000
PYTEST_URL_DOCKER=http://localhost:9000/2015-03-31/functions/function/invocations
PYTEST_URL_LAMBDA=https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.lambda-url.eu-central-1.on.aws
56 changes: 26 additions & 30 deletions lambdas/todos/Makefile
Expand Up @@ -6,13 +6,9 @@ include .make.pytest
# all targets refer to tasks (instead of files)
.PHONY: *

# ID := 732701080264

# set Make variables
# ecr := $($(ID)).dkr.ecr.region.amazonaws.com
# ecr := $(ID).dkr.ecr.region.amazonaws.com
# ecr := $$AWS_ACCOUNT_ID.dkr.ecr.region.amazonaws.com
## WERKT OOK NIET
ECR_DOMAIN := $(AWS_ACCOUNT_ID).dkr.ecr.region.amazonaws.com


######## FASTAPI local development

Expand All @@ -21,29 +17,29 @@ api:
export LOCAL=1 && uvicorn --host 0.0.0.0 app:app --reload

pytest-local:
export TEST_URL="$(url_local)" && pytest -s -k test_endpoints
export TEST_URL="$(PYTEST_URL_LOCAL)" && pytest -s -k test_endpoints
# `pytest -s` includes stdout

pytest-docker:
export TEST_URL="$(url_docker)"; export TEST_DOCKER=1 && pytest -s -k test_endpoints
export TEST_URL="$(PYTEST_URL_DOCKER)"; export TEST_DOCKER=1 && pytest -s -k test_endpoints

pytest-prod:
export TEST_URL="$(url_lambda)" && pytest -s -k test_endpoints
export TEST_URL="$(PYTEST_URL_LAMBDA)" && pytest -s -k test_endpoints

######## AWS Authentication

login:
aws sso login

# aws ecr get-login-password --region $(region) | docker login --username AWS --password-stdin .dkr.ecr.eu-central-1.amazonaws.com
# aws ecr get-login-password --region $(AWS_region) | docker login --username AWS --password-stdin .dkr.ecr.eu-central-1.amazonaws.com
auth:
aws ecr get-login-password --region $(region) | docker login --username AWS --password-stdin $(ecr)
aws ecr get-login-password --region $(AWS_REGION) | docker login --username AWS --password-stdin $(ECR_DOMAIN)

repo:
aws ecr create-repository \
--repository-name "$(docker_repo)" \
--repository-name "$(ECR_DOCKER_REPO_NAME)" \
--image-scanning-configuration scanOnPush=true \
--region "$(region)"
--region "$(AWS_REGION)"

iamrole:
aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'
Expand All @@ -53,59 +49,59 @@ iamrole:
######## DOCKER tasks

build:
docker build -t "$(image_name)" .
docker build -t "$(ECR_DOCKER_IMAGE_NAME)" .

run:
docker run --env-file .env -e LOG_LEVEL=DEBUG -e LOCAL=1 -p 9000:8080 "$(image_name)"
docker run --env-file .env -e LOG_LEVEL=DEBUG -e LOCAL=1 -p 9000:8080 "$(ECR_DOCKER_IMAGE_NAME)"

shell:
docker run -it --entrypoint /bin/bash -p 9000:8080 "$(image_name)"
docker run -it --entrypoint /bin/bash -p 9000:8080 "$(ECR_DOCKER_IMAGE_NAME)"

logs:
docker logs "$(image_name)"
docker logs "$(ECR_DOCKER_IMAGE_NAME)"

tag:
docker tag "$(image_name)" "$(ecr)"/"$(docker_repo)"
docker tag "$(ECR_DOCKER_IMAGE_NAME)" "$(ECR_DOMAIN)"/"$(ECR_DOCKER_REPO_NAME)"

push:
docker push "$(ecr)"/"$(docker_repo)"
docker push "$(ECR_DOMAIN)"/"$(ECR_DOCKER_REPO_NAME)"

######## AWS tasks

lambda-create:
aws lambda create-function \
--region "$(region)" \
--function-name "$(function_name)" \
--region "$(AWS_REGION)" \
--function-name "$(LAMBDA_FUNCTION_NAME)" \
--package-type Image \
--code ImageUri="$(ecr)"/"$(docker_repo)":latest \
--role arn:aws:iam::$(arn):role/lambda-ex
--code ImageUri="$(ECR_DOMAIN)"/"$(ECR_DOCKER_REPO_NAME)":latest \
--role arn:aws:iam::$(AWS_ARN):role/lambda-ex

lambda-url:
aws lambda create-function-url-config \
--function-name "$(function_name)" \
--function-name "$(LAMBDA_FUNCTION_NAME)" \
--auth-type NONE

lambda-public:
aws lambda add-permission \
--function-name "$(function_name)" \
--function-name "$(LAMBDA_FUNCTION_NAME)" \
--action lambda:invokeFunctionUrl \
--statement-id FunctionURLAllowPublicAccess \
--principal "*" \
--cli-input-json '{"FunctionUrlAuthType":"NONE"}'

lambda-update:
aws lambda update-function-code \
--region "$(region)" \
--function-name "$(function_name)" \
--image-uri "$(ecr)"/"$(docker_repo)":latest
--region "$(AWS_REGION)" \
--function-name "$(LAMBDA_FUNCTION_NAME)" \
--image-uri "$(ECR_DOMAIN)"/"$(ECR_DOCKER_REPO_NAME)":latest

lambda-env:
aws lambda update-function-configuration \
--function-name "$(function_name)" \
--function-name "$(LAMBDA_FUNCTION_NAME)" \
--environment Variables={AIRTABLE_API_KEY="$(AIRTABLE_API_KEY)",AIRTABLE_BASE_ID="$(AIRTABLE_BASE_ID)",AIRTABLE_TABLE_NAME="$(AIRTABLE_TABLE_NAME)"}

invoke:
aws lambda invoke --function-name "$(function_name)" output.json
aws lambda invoke --function-name "$(LAMBDA_FUNCTION_NAME)" output.json

# run update to publish changes
update: build tag push lambda-update

0 comments on commit a624a94

Please sign in to comment.