From b9478b30c57a8fd3010ec9ac832d84b85652d771 Mon Sep 17 00:00:00 2001 From: Cesar Rodriguez <4625096+cesar-rodriguez@users.noreply.github.com> Date: Wed, 13 Sep 2023 11:46:11 -0400 Subject: [PATCH 01/13] adding boto3 requirement --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 13d554f..6e81bbd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,3 +25,4 @@ typing-extensions uvicorn pre-commit psycopg2 +boto3 From dd0ad3db863b2c85ebef4f522d0ba2fa5e6cf358 Mon Sep 17 00:00:00 2001 From: Cesar Rodriguez <4625096+cesar-rodriguez@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:30:55 -0400 Subject: [PATCH 02/13] returning to 8000 --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1920df8..0957544 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,7 +26,7 @@ USER 1000 ENV ACCESS_LOG=${ACCESS_LOG:-/proc/1/fd/1} ENV ERROR_LOG=${ERROR_LOG:-/proc/1/fd/2} -EXPOSE 8443 +EXPOSE 8000 # Define the Uvicorn command to run our application -CMD ["uvicorn", "main:app", "--reload", "--workers", "1", "--host", "0.0.0.0", "--port", "8443"] +CMD ["uvicorn", "main:app", "--reload", "--workers", "1", "--host", "0.0.0.0", "--port", "8000"] From 1e4f93ba91e9a5d4f82fd468c58163a5250ed1d5 Mon Sep 17 00:00:00 2001 From: Cesar Rodriguez <4625096+cesar-rodriguez@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:34:37 -0400 Subject: [PATCH 03/13] adding s3 dependency --- api/blog.py | 8 +++++- models/models.py | 73 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/api/blog.py b/api/blog.py index 1c331d9..5ee56b5 100644 --- a/api/blog.py +++ b/api/blog.py @@ -1,5 +1,7 @@ #!/usr/bin/python3 +import uuid + from fastapi import HTTPException, status from sqlalchemy.orm import Session @@ -31,7 +33,11 @@ def create(request: schemas.Blog, db: Session): Returns: models.Blog: Blog object """ - new_blog = models.Blog(title=request.title, body=request.body, user_id=1) + s3_key = str(uuid.uuid4()) # Generating a unique UUID for the S3 key + + new_blog = models.Blog(s3_key=s3_key, user_id=1, title=request.title) + new_blog.body = request.body + db.add(new_blog) db.commit() db.refresh(new_blog) diff --git a/models/models.py b/models/models.py index 5a19f0e..32e1ccb 100644 --- a/models/models.py +++ b/models/models.py @@ -1,5 +1,8 @@ #!/usr/bin/python3 +import boto3 +import os +from io import BytesIO from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.orm import relationship @@ -17,10 +20,78 @@ class Blog(Base): __tablename__ = "blogs" id = Column(Integer, primary_key=True, index=True) title = Column(String) - body = Column(String) + s3_key = Column(String) user_id = Column(Integer, ForeignKey("users.id")) creator = relationship("User", back_populates="blogs") + @property + def s3_key(self): + return getattr(self, "_s3_key", None) + + @s3_key.setter + def s3_key(self, value): + self._s3_key = value + + def get_body(self): + """ + Get the body of the blog post from S3. + + Returns: + str: The body of the blog post. + """ + if not self.s3_key: + # Handle the case where s3_key is None + print("Blog post does not have a valid S3 key.") + return "" + + s3 = boto3.client("s3") + bucket_name = os.environ.get("S3_BUCKET_NAME") + obj = s3.get_object(Bucket=bucket_name, Key=self.s3_key) + body = obj["Body"].read().decode("utf-8") + return body + + def set_body(self, body): + """ + Set the body of the blog post in S3. + + Args: + body (str): The body of the blog post. + """ + if not self.s3_key: + raise ValueError("s3_key must be set before storing the blog body") + + if body is None: + raise ValueError("Blog body must not be empty") + + s3 = boto3.client("s3") + bucket_name = os.environ.get("S3_BUCKET_NAME") + buffer = BytesIO(body.encode("utf-8")) + s3.upload_fileobj(buffer, bucket_name, self.s3_key) + + def delete_body(self): + """ + Delete the body of the blog post from S3. + """ + s3 = boto3.client("s3") + bucket_name = os.environ.get("S3_BUCKET_NAME") + s3.delete_object(Bucket=bucket_name, Key=self.s3_key) + + body = property(get_body, set_body) + + def delete(self, session): + """ + Delete the blog post and its body from S3. + + Args: + session (sqlalchemy.orm.session.Session): The database session. + """ + self.delete_body() + session.delete(self) + + def __init__(self, *args, **kwargs): + self._s3_key = None + super().__init__(*args, **kwargs) + class User(Base): """ From d0c9ac8059ce81ff12a571992ba5df4abbe9fe18 Mon Sep 17 00:00:00 2001 From: Cesar Rodriguez <4625096+cesar-rodriguez@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:35:19 -0400 Subject: [PATCH 04/13] local development mods --- Makefile | 30 +++++++++++++++++++++++++++++- docker-compose.yaml | 4 ++++ start.sh | 10 ++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100755 start.sh diff --git a/Makefile b/Makefile index 5d7006e..b2e03a7 100644 --- a/Makefile +++ b/Makefile @@ -19,4 +19,32 @@ build: docker-compose build lint: - docker-compose run --rm backend pre-commit run --all-files \ No newline at end of file + docker-compose run --rm backend pre-commit run --all-files + +configure: + echo "Creating user" + curl -X 'POST' \ + 'http://0.0.0.0:8000/users/' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ "name": "cesar", "email": "cesar@cesar.com", "password": "cesar" }' + echo "login" + export BEARER_TOKEN=$(shell curl -X 'POST' \ + 'http://0.0.0.0:8000/login/' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + -d 'grant_type=&username=cesar%40cesar.com&password=cesar' | jq -r '.access_token') + +create-blog: + curl -X 'POST' \ + 'http://0.0.0.0:8000/blog/' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer ${BEARER_TOKEN}' \ + -H 'Content-Type: application/json' \ + -d '{"title": "Test blog title", "body": "Test blog body"}' + +get-blogs: + curl -X 'GET' \ + 'http://0.0.0.0:8000/blog/' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer ${BEARER_TOKEN}' diff --git a/docker-compose.yaml b/docker-compose.yaml index fbb9517..8996847 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -15,6 +15,10 @@ services: #- DATABASE_URL=sqlite:////var/run/dogeapi/dogeapi.sqlite - SECRET_KEY=dev - ACCESS_TOKEN_EXPIRE_MINUTES=30 + - S3_BUCKET_NAME=appcd-demo-dogeapi + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} + - AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN} depends_on: - db db: diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..e20bf47 --- /dev/null +++ b/start.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +CREDS=$(aws sts assume-role --role-arn arn:aws:iam::180217099948:role/atlantis-access --role-session-name local-test) + +export AWS_ACCESS_KEY_ID=$(echo $CREDS | jq -r ".Credentials.AccessKeyId") +export AWS_SECRET_ACCESS_KEY=$(echo $CREDS | jq -r ".Credentials.SecretAccessKey") +export AWS_SESSION_TOKEN=$(echo $CREDS | jq -r ".Credentials.SessionToken") + +docker-compose up -d + From 7ef0796b3d14ae897275fef08ebc2eff14aa2099 Mon Sep 17 00:00:00 2001 From: Cesar Rodriguez <4625096+cesar-rodriguez@users.noreply.github.com> Date: Thu, 14 Sep 2023 22:46:39 -0400 Subject: [PATCH 05/13] adds dependency on the "presign" service --- Makefile | 6 ++++++ core/blog.py | 52 ++++++++++++++++++++++++++++++++++++++++++++- docker-compose.yaml | 13 ++++++++++++ models/models.py | 4 ++-- requirements.txt | 1 + start.sh | 2 +- 6 files changed, 74 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index b2e03a7..7c2afc1 100644 --- a/Makefile +++ b/Makefile @@ -48,3 +48,9 @@ get-blogs: 'http://0.0.0.0:8000/blog/' \ -H 'accept: application/json' \ -H 'Authorization: Bearer ${BEARER_TOKEN}' + +get-presigned-url: + curl -X 'GET' \ + 'http://localhost:8000/blog/2/download' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer ${BEARER_TOKEN}' diff --git a/core/blog.py b/core/blog.py index f8fb1c8..6e718f0 100644 --- a/core/blog.py +++ b/core/blog.py @@ -2,8 +2,9 @@ from typing import List -from fastapi import APIRouter, Depends, Response, status +from fastapi import APIRouter, Depends, Response, status, HTTPException from sqlalchemy.orm import Session +import httpx from api import blog from database import configuration @@ -114,3 +115,52 @@ def update_blog( schemas.Blog: Updated blog """ return blog.update(id, request, db) + + +async def get_presigned_url_from_microservice(s3_key: str) -> str: + # Using Docker Compose service discovery to get presign service by its name. + url = f"http://presign:5000/presign/{s3_key}" + + async with httpx.AsyncClient() as client: + response = await client.get(url) + + if response.status_code != 200: + # Handle unexpected response or error from the microservice + raise HTTPException( + status_code=500, detail="Failed to obtain presigned URL" + ) + + return response.text + + +@router.get("/{id}/download", status_code=status.HTTP_200_OK, response_model=str) +async def get_download_url( + id: int, + db: Session = Depends(get_db), + current_user: schemas.User = Depends(get_current_user), +): + """ + Get a pre-signed download URL for a blog's associated S3 object. + + Args: + id (int): Blog id + db (Session, optional): Database session. Defaults to None. + current_user (schemas.User, optional): Current user. Defaults to None. + + Returns: + str: Pre-signed download URL + """ + fetched_blog = blog.show(id, db) + + if not fetched_blog: + raise HTTPException(status_code=404, detail="Blog not found") + + if not fetched_blog.s3_key: + raise HTTPException( + status_code=404, detail="S3 key not found for the specified blog" + ) + + s3_key = fetched_blog.s3_key + presigned_url = await get_presigned_url_from_microservice(s3_key) + + return presigned_url diff --git a/docker-compose.yaml b/docker-compose.yaml index 8996847..afea8ca 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -21,6 +21,7 @@ services: - AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN} depends_on: - db + - presign db: image: postgres restart: always @@ -30,3 +31,15 @@ services: POSTGRES_DB: postgres ports: - "5432:5432" + presign: + build: + context: ../DogeFlaskAPI + dockerfile: Dockerfile + ports: + - 5000:5000 + environment: + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} + - AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN} + - S3_BUCKET=appcd-demo-dogeapi + diff --git a/models/models.py b/models/models.py index 32e1ccb..c07f7dd 100644 --- a/models/models.py +++ b/models/models.py @@ -20,13 +20,13 @@ class Blog(Base): __tablename__ = "blogs" id = Column(Integer, primary_key=True, index=True) title = Column(String) - s3_key = Column(String) + _s3_key = Column("s3_key", String) user_id = Column(Integer, ForeignKey("users.id")) creator = relationship("User", back_populates="blogs") @property def s3_key(self): - return getattr(self, "_s3_key", None) + return self._s3_key @s3_key.setter def s3_key(self, value): diff --git a/requirements.txt b/requirements.txt index 6e81bbd..12cd882 100644 --- a/requirements.txt +++ b/requirements.txt @@ -26,3 +26,4 @@ uvicorn pre-commit psycopg2 boto3 +httpx diff --git a/start.sh b/start.sh index e20bf47..fbcdb39 100755 --- a/start.sh +++ b/start.sh @@ -6,5 +6,5 @@ export AWS_ACCESS_KEY_ID=$(echo $CREDS | jq -r ".Credentials.AccessKeyId") export AWS_SECRET_ACCESS_KEY=$(echo $CREDS | jq -r ".Credentials.SecretAccessKey") export AWS_SESSION_TOKEN=$(echo $CREDS | jq -r ".Credentials.SessionToken") -docker-compose up -d +docker-compose up --build -d From 8be3cd1a870a43c5171f75ebe1f187a07eace29b Mon Sep 17 00:00:00 2001 From: Cesar Rodriguez <4625096+cesar-rodriguez@users.noreply.github.com> Date: Mon, 18 Sep 2023 23:32:11 -0400 Subject: [PATCH 06/13] adds presign docker image --- docker-compose.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index afea8ca..420f03a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -33,8 +33,10 @@ services: - "5432:5432" presign: build: - context: ../DogeFlaskAPI - dockerfile: Dockerfile + #context: ../DogeFlaskAPI + #dockerfile: Dockerfile + context: ghcr.io/appcd-dev/dogeapi-presign/presign:latest + ports: - 5000:5000 environment: From 40854ce5d8e6605c6f32bb03a1a87aecb22a4a36 Mon Sep 17 00:00:00 2001 From: Cesar Rodriguez <4625096+cesar-rodriguez@users.noreply.github.com> Date: Mon, 18 Sep 2023 23:38:58 -0400 Subject: [PATCH 07/13] fixes image --- docker-compose.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 420f03a..4a7caba 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -32,11 +32,10 @@ services: ports: - "5432:5432" presign: - build: + #build: #context: ../DogeFlaskAPI #dockerfile: Dockerfile - context: ghcr.io/appcd-dev/dogeapi-presign/presign:latest - + image: ghcr.io/appcd-dev/dogeapi-presign/presign:latest ports: - 5000:5000 environment: From df3912129f3c0378be320be6eb878f509c4baa9b Mon Sep 17 00:00:00 2001 From: Cesar Rodriguez <4625096+cesar-rodriguez@users.noreply.github.com> Date: Wed, 20 Sep 2023 09:55:01 -0400 Subject: [PATCH 08/13] temp manifest --- .appcd/aug-manifest.json | 32 +++++++++++++++ .appcd/manifest.json | 88 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 .appcd/aug-manifest.json diff --git a/.appcd/aug-manifest.json b/.appcd/aug-manifest.json new file mode 100644 index 0000000..c5339b1 --- /dev/null +++ b/.appcd/aug-manifest.json @@ -0,0 +1,32 @@ +{ + "metadata": { + "repository": "some-repo-url", + "commit": "some-commit-hash", + "branch": "branch-name" + }, + "projects": [ + { + "metadata": { + "languages": [ + "python" + ], + "frameworks": [ + "fastapi" + ] + }, + "services": [ + { + "name": "dogeapi", + "image_registry": "ghcr.io/appcd-dev/dogeapi/dogeapi", + "image_tag": "latest", + "server_port": 8000, + "ports": [ + { + "listen": 8000 + } + ] + } + ] + } + ] +} diff --git a/.appcd/manifest.json b/.appcd/manifest.json index c5339b1..a9a0cfb 100644 --- a/.appcd/manifest.json +++ b/.appcd/manifest.json @@ -1,8 +1,14 @@ { "metadata": { - "repository": "some-repo-url", - "commit": "some-commit-hash", - "branch": "branch-name" + "repository": "https://github.com/appcd-dev/DogeAPI.git", + "commit": "8be3cd1a870a43c5171f75ebe1f187a07eace29b", + "branch": "s3-dependency" + }, + "graph": { + "dogeapi": [ + "dogeapi-presign" + ], + "dogeapi-presign": [] }, "projects": [ { @@ -11,7 +17,8 @@ "python" ], "frameworks": [ - "fastapi" + "fastapi", + "flask" ] }, "services": [ @@ -24,6 +31,79 @@ { "listen": 8000 } + ], + "http_egress": [ + { + "endpoint": "http://dogeapi-presign/presign", + "operations": ["GET"] + } + ], + "http_ingress": [ + { + "endpoint": "http://dogeapi/login", + "operations": ["POST"] + }, + { + "endpoint": "http://dogeapi/blog", + "operations": ["GET", "POST"] + }, + { + "endpoint": "http://dogeapi/blog/{id}", + "operations": [ + "GET", + "PUT", + "DELETE" + ] + }, + { + "endpoint": "http://dogeapi/users", + "operations": [ + "GET", + "POST" + ] + }, + { + "endpoint": "http://dogeapi/users/{id}", + "operations": [ + "GET" + ] + }, + { + "endpoint": "http://dogeapi/", + "operations": [ + "GET" + ] + } + ], + "s3": [ + { + "bucket": "${S3_BUCKET_NAME}" + } + ], + "database": { + "dsn": "postgresql+psycopg2://${DB_USERNAME}:${DB_PASSWORD}@db:5432/postgres" + } + }, + { + "name": "dogeapi-presign", + "image_registry": "ghcr.io/appcd-dev/dogeapi-presign/presign", + "image_tag": "latest", + "server_port": 5000, + "ports": [ + { + "listen": 5000 + } + ], + "http_ingress": [ + { + "endpoint": "http://dogeapi-presign/presign/{s3_key}", + "operations": ["GET"] + } + ], + "s3": [ + { + "bucket": "${S3_BUCKET}" + } ] } ] From ed9ca8f03f6d55e50c7fc75ed7038fdfcaefffe1 Mon Sep 17 00:00:00 2001 From: Cesar Rodriguez <4625096+cesar-rodriguez@users.noreply.github.com> Date: Thu, 21 Sep 2023 11:35:32 -0400 Subject: [PATCH 09/13] adding service dependency via environment var --- core/blog.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/blog.py b/core/blog.py index 6e718f0..73e66df 100644 --- a/core/blog.py +++ b/core/blog.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 from typing import List +import os from fastapi import APIRouter, Depends, Response, status, HTTPException from sqlalchemy.orm import Session @@ -13,7 +14,7 @@ router = APIRouter(tags=["Blogs"], prefix="/blog") get_db = configuration.get_db - +PRESIGN_SERVICE_URL = os.getenv("PRESIGN_SERVICE_URL", "http://presign:5000") @router.get("/", response_model=List[schemas.ShowBlog]) def get_all_blogs( @@ -119,7 +120,7 @@ def update_blog( async def get_presigned_url_from_microservice(s3_key: str) -> str: # Using Docker Compose service discovery to get presign service by its name. - url = f"http://presign:5000/presign/{s3_key}" + url = f"{PRESIGN_SERVICE_URL}/presign/{s3_key}" async with httpx.AsyncClient() as client: response = await client.get(url) From 6c5b98a26cddcd1360257557ea0e91d8e780adf2 Mon Sep 17 00:00:00 2001 From: Cesar Rodriguez <4625096+cesar-rodriguez@users.noreply.github.com> Date: Thu, 21 Sep 2023 11:35:40 -0400 Subject: [PATCH 10/13] updating example manifest with new format --- .appcd/manifest.json | 208 +++++++++++++++++++++++-------------------- 1 file changed, 111 insertions(+), 97 deletions(-) diff --git a/.appcd/manifest.json b/.appcd/manifest.json index a9a0cfb..22bde65 100644 --- a/.appcd/manifest.json +++ b/.appcd/manifest.json @@ -1,112 +1,126 @@ { - "metadata": { - "repository": "https://github.com/appcd-dev/DogeAPI.git", - "commit": "8be3cd1a870a43c5171f75ebe1f187a07eace29b", - "branch": "s3-dependency" - }, + "version": "0.0.1", "graph": { "dogeapi": [ "dogeapi-presign" ], "dogeapi-presign": [] }, - "projects": [ - { - "metadata": { - "languages": [ - "python" + "components": { + "dogeapi": { + "image_registry": "ghcr.io/appcd-dev/dogeapi/dogeapi", + "image_tag": "latest", + "server_port": 8000, + "ports": [ + { + "listen": 8000 + } + ], + "http_egress": [ + { + "endpoint": "${PRESIGN_SERVICE_URL}/presign", + "operations": [ + "GET" + ] + } + ], + "http_ingress": [ + { + "endpoint": "/login", + "operations": [ + "POST" + ] + }, + { + "endpoint": "/blog", + "operations": [ + "GET", + "POST" + ] + }, + { + "endpoint": "/blog/{id}", + "operations": [ + "GET", + "PUT", + "DELETE" + ] + }, + { + "endpoint": "/users", + "operations": [ + "GET", + "POST" + ] + }, + { + "endpoint": "/users/{id}", + "operations": [ + "GET" + ] + }, + { + "endpoint": "/", + "operations": [ + "GET" + ] + } + ], + "dependencies": { + "s3": [ + { + "bucket": "${S3_BUCKET_NAME}", + "methods": [ + "GetObject", + "PutObject" + ] + } ], - "frameworks": [ - "fastapi", - "flask" + "database": [ + { + "methods:": [ + "READ", + "WRITE" + ], + "dsn": "${CONNECTION_STRING}", + "db_engine": "postgres" + } + ], + "env": [ + { + "name": "DEVELOPER_FLAG_1" + }, + { + "name": "DEBUG" + } ] - }, - "services": [ + } + }, + "dogeapi-presign": { + "image_registry": "ghcr.io/appcd-dev/dogeapi-presign/presign", + "image_tag": "latest", + "server_port": 5000, + "ports": [ { - "name": "dogeapi", - "image_registry": "ghcr.io/appcd-dev/dogeapi/dogeapi", - "image_tag": "latest", - "server_port": 8000, - "ports": [ - { - "listen": 8000 - } - ], - "http_egress": [ - { - "endpoint": "http://dogeapi-presign/presign", - "operations": ["GET"] - } - ], - "http_ingress": [ - { - "endpoint": "http://dogeapi/login", - "operations": ["POST"] - }, - { - "endpoint": "http://dogeapi/blog", - "operations": ["GET", "POST"] - }, - { - "endpoint": "http://dogeapi/blog/{id}", - "operations": [ - "GET", - "PUT", - "DELETE" - ] - }, - { - "endpoint": "http://dogeapi/users", - "operations": [ - "GET", - "POST" - ] - }, - { - "endpoint": "http://dogeapi/users/{id}", - "operations": [ - "GET" - ] - }, - { - "endpoint": "http://dogeapi/", - "operations": [ - "GET" - ] - } - ], - "s3": [ - { - "bucket": "${S3_BUCKET_NAME}" - } - ], - "database": { - "dsn": "postgresql+psycopg2://${DB_USERNAME}:${DB_PASSWORD}@db:5432/postgres" - } - }, + "listen": 5000 + } + ], + "http_ingress": [ { - "name": "dogeapi-presign", - "image_registry": "ghcr.io/appcd-dev/dogeapi-presign/presign", - "image_tag": "latest", - "server_port": 5000, - "ports": [ - { - "listen": 5000 - } - ], - "http_ingress": [ - { - "endpoint": "http://dogeapi-presign/presign/{s3_key}", - "operations": ["GET"] - } - ], - "s3": [ - { - "bucket": "${S3_BUCKET}" - } + "endpoint": "/presign/{s3_key}", + "operations": [ + "GET" + ] + } + ], + "dependencies": { + "s3": { + "bucket": "${S3_BUCKET}", + "methods": [ + "GetObject" ] } - ] + } } - ] + } } From 3e3972a728a85b00a0d7b03683ae9611945e54ad Mon Sep 17 00:00:00 2001 From: Cesar Rodriguez <4625096+cesar-rodriguez@users.noreply.github.com> Date: Mon, 2 Oct 2023 10:45:14 -0400 Subject: [PATCH 11/13] updates appcd yaml config --- .appcd.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.appcd.yml b/.appcd.yml index 987d72d..fbe2447 100644 --- a/.appcd.yml +++ b/.appcd.yml @@ -1,6 +1,5 @@ version: 0.0.1 -services: - dogeapi: - dtr: ghcr.io/appcd-dev/dogeapi/dogeapi - tag: latest - dockerFile: Dockerfile \ No newline at end of file +name: dogeapi +image_registry: ghcr.io/appcd-dev/dogeapi/dogeapi +image_tag: latest +dockerFile: Dockerfile From e624f78a5ad913e437644388bf69839567b6db9b Mon Sep 17 00:00:00 2001 From: sks Date: Tue, 10 Oct 2023 17:27:41 -0700 Subject: [PATCH 12/13] Update .appcd.yml --- .appcd.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.appcd.yml b/.appcd.yml index fbe2447..713615e 100644 --- a/.appcd.yml +++ b/.appcd.yml @@ -1,5 +1,5 @@ version: 0.0.1 name: dogeapi -image_registry: ghcr.io/appcd-dev/dogeapi/dogeapi -image_tag: latest +imageRegistry: ghcr.io/appcd-dev/dogeapi/dogeapi +imageTag: latest dockerFile: Dockerfile From d9e5e67064522ca032c5676f4652c14386e56859 Mon Sep 17 00:00:00 2001 From: sks Date: Fri, 13 Oct 2023 16:17:08 -0700 Subject: [PATCH 13/13] Rename .appcd.yml to .appcd.yaml --- .appcd.yml => .appcd.yaml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .appcd.yml => .appcd.yaml (100%) diff --git a/.appcd.yml b/.appcd.yaml similarity index 100% rename from .appcd.yml rename to .appcd.yaml