我正在使用 FastAPI 和 Pydantic 制作 API。
我想要一些 PATCH 端点,可以一次编辑记录的 1 个或 N 个字段。此外,我希望客户端只传递有效负载中的必要字段。
例子:
class Item(BaseModel):
name: str
description: str
price: float
tax: float
@app.post("/items", response_model=Item)
async def post_item(item: Item):
...
@app.patch("/items/{item_id}", response_model=Item)
async def update_item(item_id: str, item: Item):
...
Run Code Online (Sandbox Code Playgroud)
在这个例子中,对于 POST 请求,我希望每个字段都是必需的。但是,在 PATCH 端点中,我不介意有效负载是否仅包含例如描述字段。这就是为什么我希望所有字段都是可选的。
幼稚的方法:
class UpdateItem(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
price: Optional[float] = None
tax: Optional[float]
Run Code Online (Sandbox Code Playgroud)
但这在代码重复方面会很糟糕。
还有更好的选择吗?
我需要我的 ECS 任务定义包含我的私有 Docker 注册表的凭据,如果可能的话,使用简单的令牌或用户:密码。
下面是我的代码:
resource "aws_secretsmanager_secret" "docker_registry_secret" {
name_prefix = "/my_environment/registry/pwd"
}
resource "aws_secretsmanager_secret_version" "docker_registry_secret_version" {
secret_id = aws_secretsmanager_secret.docker_registry_secret.id
secret_string = xxxMYTOKENxxx
}
resource "aws_iam_role_policy" "password_policy_secretsmanager" {
name = "${var.task_name}-secretsmanager"
role = aws_iam_role.MY_ECS_ROLE.id
policy = <<-EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"secretsmanager:GetSecretValue"
],
"Effect": "Allow",
"Resource": [
"${aws_secretsmanager_secret.docker_registry_secret.arn}",
]
}
]
}
EOF
}
resource "aws_ecs_task_definition" "task_to_be_scheduled" {
.....
....
requires_compatibilities = ["FARGATE"]
network_mode = "awsvpc"
container_definitions = jsonencode([
{
"repositoryCredentials" : {
"credentialsParameter" : …Run Code Online (Sandbox Code Playgroud) 我按照此 AWS 指南:https://aws.amazon.com/premiumsupport/knowledge-center/eks-alb-ingress-controller-fargate/在 ALB 下设置我的 kubernetes 集群。
在我的 EKS 集群上安装 AWS ALB 控制器后,请执行以下步骤:
helm repo add eks https://aws.github.io/eks-charts
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
--set clusterName=YOUR_CLUSTER_NAME \
--set serviceAccount.create=false \
--set region=YOUR_REGION_CODE \
--set vpcId=<VPC_ID> \
--set serviceAccount.name=aws-load-balancer-controller \
-n kube-system
Run Code Online (Sandbox Code Playgroud)
我想部署我的入口配置:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/success-codes: 200,302
alb.ingress.kubernetes.io/target-type: instance
kubernetes.io/ingress.class: alb
name: staging-ingress
namespace: staging
finalizers:
- ingress.k8s.aws/resources
spec:
rules:
- http:
paths:
- backend:
serviceName: my-service
servicePort: 80
path: …Run Code Online (Sandbox Code Playgroud) amazon-ecs ×1
amazon-eks ×1
aws-fargate ×1
fastapi ×1
kubernetes ×1
pydantic ×1
python ×1
python-3.x ×1
terraform ×1