小编nol*_*w38的帖子

使用 Pydantic 将每个字段设为可选

我正在使用 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)

但这在代码重复方面会很糟糕。

还有更好的选择吗?

python python-3.x pydantic fastapi

6
推荐指数
7
解决办法
868
查看次数

使用 ECS Fargate 和 Terraform 访问私有 docker 注册表

我需要我的 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)

amazon-ecs terraform aws-fargate

3
推荐指数
1
解决办法
2709
查看次数

无法在 EKS 上部署 Ingress 对象:调用 webhook vingress.elbv2.k8s.aws 失败:服务器找不到请求的资源

我按照此 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-web-services kubernetes amazon-eks

1
推荐指数
1
解决办法
5704
查看次数