linting the copilot configs

This commit is contained in:
Keith Stevens
2023-01-03 08:36:27 +09:00
parent 2d98259280
commit 527aca676f
7 changed files with 204 additions and 3 deletions
+1 -1
View File
@@ -14,7 +14,7 @@ repos:
# and which break the standard YAML check. The alternative would be to
# skip any unsafe errors (and thus break YAML compatibility) or use
# some other checker that may not work in general.
exclude: "^copilot/web/addons/.*$"
exclude: "^copilot/.*/addons/.*$"
- id: check-json
- id: check-case-conflict
- id: detect-private-key
+1
View File
@@ -44,4 +44,5 @@ class Settings(BaseSettings):
raise ValueError(v)
print("cats")
settings = Settings(_env_file=".env")
+161
View File
@@ -0,0 +1,161 @@
Parameters:
App:
Type: String
Description: Your application's name.
Env:
Type: String
Description:
The environment name your service, job, or workflow is being deployed to.
Name:
Type: String
Description: The name of the service, job, or workflow being deployed.
# Customize your Aurora Serverless cluster by setting the default value of the following parameters.
apiclusterDBName:
Type: String
Description:
The name of the initial database to be created in the Aurora Serverless v2
cluster.
Default: oassist_api
# Cannot have special characters
# Naming constraints: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.Constraints
Mappings:
apiclusterEnvScalingConfigurationMap:
staging:
"DBMinCapacity": 0.5 # AllowedValues: from 0.5 through 128
"DBMaxCapacity": 8 # AllowedValues: from 0.5 through 128
All:
"DBMinCapacity": 0.5 # AllowedValues: from 0.5 through 128
"DBMaxCapacity": 8 # AllowedValues: from 0.5 through 128
Resources:
apiclusterDBSubnetGroup:
Type: "AWS::RDS::DBSubnetGroup"
Properties:
DBSubnetGroupDescription:
Group of Copilot private subnets for Aurora Serverless v2 cluster.
SubnetIds:
!Split [",", { "Fn::ImportValue": !Sub "${App}-${Env}-PrivateSubnets" }]
apiclusterSecurityGroup:
Metadata:
"aws:copilot:description":
"A security group for your workload to access the Aurora Serverless v2
cluster apicluster"
Type: "AWS::EC2::SecurityGroup"
Properties:
GroupDescription:
!Sub "The Security Group for ${Name} to access Aurora Serverless v2
cluster apicluster."
VpcId:
Fn::ImportValue: !Sub "${App}-${Env}-VpcId"
Tags:
- Key: Name
Value: !Sub "copilot-${App}-${Env}-${Name}-Aurora"
apiclusterDBClusterSecurityGroup:
Metadata:
"aws:copilot:description":
"A security group for your Aurora Serverless v2 cluster apicluster"
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: The Security Group for the Aurora Serverless v2 cluster.
SecurityGroupIngress:
- ToPort: 5432
FromPort: 5432
IpProtocol: tcp
Description:
!Sub "From the Aurora Security Group of the workload ${Name}."
SourceSecurityGroupId: !Ref apiclusterSecurityGroup
VpcId:
Fn::ImportValue: !Sub "${App}-${Env}-VpcId"
apiclusterAuroraSecret:
Metadata:
"aws:copilot:description":
"A Secrets Manager secret to store your DB credentials"
Type: AWS::SecretsManager::Secret
Properties:
Description: !Sub Aurora main user secret for ${AWS::StackName}
GenerateSecretString:
SecretStringTemplate: '{"username": "postgres"}'
GenerateStringKey: "password"
ExcludePunctuation: true
IncludeSpace: false
PasswordLength: 16
apiclusterDBClusterParameterGroup:
Metadata:
"aws:copilot:description":
"A DB parameter group for engine configuration values"
Type: "AWS::RDS::DBClusterParameterGroup"
Properties:
Description: !Ref "AWS::StackName"
Family: "aurora-postgresql14"
Parameters:
client_encoding: "UTF8"
apiclusterDBCluster:
Metadata:
"aws:copilot:description":
"The apicluster Aurora Serverless v2 database cluster"
Type: "AWS::RDS::DBCluster"
Properties:
MasterUsername:
!Join [
"",
[
"{{resolve:secretsmanager:",
!Ref apiclusterAuroraSecret,
":SecretString:username}}",
],
]
MasterUserPassword:
!Join [
"",
[
"{{resolve:secretsmanager:",
!Ref apiclusterAuroraSecret,
":SecretString:password}}",
],
]
DatabaseName: !Ref apiclusterDBName
Engine: "aurora-postgresql"
EngineVersion: "14.4"
DBClusterParameterGroupName: !Ref apiclusterDBClusterParameterGroup
DBSubnetGroupName: !Ref apiclusterDBSubnetGroup
Port: 5432
VpcSecurityGroupIds:
- !Ref apiclusterDBClusterSecurityGroup
ServerlessV2ScalingConfiguration:
# Replace "All" below with "!Ref Env" to set different autoscaling limits per environment.
MinCapacity:
!FindInMap [apiclusterEnvScalingConfigurationMap, All, DBMinCapacity]
MaxCapacity:
!FindInMap [apiclusterEnvScalingConfigurationMap, All, DBMaxCapacity]
apiclusterDBWriterInstance:
Metadata:
"aws:copilot:description":
"The apicluster Aurora Serverless v2 writer instance"
Type: "AWS::RDS::DBInstance"
Properties:
DBClusterIdentifier: !Ref apiclusterDBCluster
DBInstanceClass: db.serverless
Engine: "aurora-postgresql"
PromotionTier: 1
AvailabilityZone: !Select
- 0
- !GetAZs
Ref: AWS::Region
apiclusterSecretAuroraClusterAttachment:
Type: AWS::SecretsManager::SecretTargetAttachment
Properties:
SecretId: !Ref apiclusterAuroraSecret
TargetId: !Ref apiclusterDBCluster
TargetType: AWS::RDS::DBCluster
Outputs:
apiclusterSecret: # injected as APICLUSTER_SECRET environment variable by Copilot.
Description:
"The JSON secret that holds the database username and password. Fields are
'host', 'port', 'dbname', 'username', 'password', 'dbClusterIdentifier'
and 'engine'"
Value: !Ref apiclusterAuroraSecret
apiclusterSecurityGroup:
Description: "The security group to attach to the workload."
Value: !Ref apiclusterSecurityGroup
+38
View File
@@ -0,0 +1,38 @@
# The manifest for the "api" service.
# Read the full specification for the "Load Balanced Web Service" type at:
# https://aws.github.io/copilot-cli/docs/manifest/lb-web-service/
name: api
type: Load Balanced Web Service
http:
path: "/"
healthcheck:
path: "/docs"
image:
build:
dockerfile: docker/Dockerfile.backend
context: ./
port: 8080
cpu: 256
memory: 512
platform: linux/x86_64
count: 1
exec: true
network:
connect: true
environments:
staging:
variables:
# Note: this has to be a valid JSON list for Pydantic to parse it.
BACKEND_CORS_ORIGINS: '["https://web.staging.open-assistant.surfacedata.org"]'
DEBUG_ALLOW_ANY_API_KEY: True
DEBUG_SKIP_API_KEY_CHECK: True
MAX_WORKERS: 1
secrets:
# Note: URI, not URL.
DATABASE_URI: /copilot/${COPILOT_APPLICATION_NAME}/${COPILOT_ENVIRONMENT_NAME}/secrets/API_DATABASE_URL
+1 -1
View File
@@ -26,6 +26,7 @@ environments:
staging:
variables:
NEXTAUTH_URL: https://web.staging.open-assistant.surfacedata.org
FASTAPI_URL: https://api.staging.open-assistant.surfacedata.org
secrets:
DATABASE_URL: /copilot/${COPILOT_APPLICATION_NAME}/${COPILOT_ENVIRONMENT_NAME}/secrets/DATABASE_URL
@@ -37,5 +38,4 @@ secrets:
EMAIL_SERVER_USER: /copilot/${COPILOT_APPLICATION_NAME}/${COPILOT_ENVIRONMENT_NAME}/secrets/EMAIL_SERVER_USER
EMAIL_FROM: /copilot/${COPILOT_APPLICATION_NAME}/${COPILOT_ENVIRONMENT_NAME}/secrets/EMAIL_FROM
FASTAPI_KEY: /copilot/${COPILOT_APPLICATION_NAME}/${COPILOT_ENVIRONMENT_NAME}/secrets/FASTAPI_KEY
FASTAPI_URL: /copilot/${COPILOT_APPLICATION_NAME}/${COPILOT_ENVIRONMENT_NAME}/secrets/FASTAPI_URL
NEXTAUTH_SECRET: /copilot/${COPILOT_APPLICATION_NAME}/${COPILOT_ENVIRONMENT_NAME}/secrets/NEXTAUTH_SECRET
+1 -1
View File
@@ -91,8 +91,8 @@ services:
environment:
- POSTGRES_HOST=db
- DEBUG_SKIP_API_KEY_CHECK=True
- DEBUG_USE_SEED_DATA=True
- MAX_WORKERS=1
#- DEBUG_USE_SEED_DATA=True
depends_on:
db:
condition: service_healthy
+1
View File
@@ -5,6 +5,7 @@ COPY ./backend/requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
ENV PORT 8080
EXPOSE 8080
COPY ./oasst-shared /oasst-shared
RUN pip install -e /oasst-shared