即使未明确指定,AWS CDK Stack 也会以静默方式部署

问题描述 投票:0回答:1

我有多堆栈CDK设置,核心堆栈包含VPC和EKS。部署一些 s3 存储桶和 k8s 命名空间以及一些其他租户相关部署的“租户”堆栈。

cdk ls
正在按预期显示所有现有堆栈。

- eks-stack
- tenant-a
- tenant-b

如果我只想部署一个租户堆栈,我会运行

cdk deploy tenant-a
。令我惊讶的是,我看到在我的 k8s 集群中部署了
tenant-1
tenant-b
的清单,而不仅仅是我预期的
tenant-a

CLI 上的 CDK 输出正确输出

tenant-a
已部署。 CLI 输出没有提及u2063
tenant-b
。我还看到大多数更改确实发生在 eks 堆栈内部,而不是租户堆栈中,因为我正在使用参考资料。

# app.py
# ...
# EKS
efs_stack = EksStack(
    app,
    "eks-stack",
    stack_log_level="INFO",
)


# Tenant Specific stacks
tenants = ['tenant-a', 'tenant-b']  

for tenant in tenants:
    tenant_stack = TenantStack(
        app,
        f"tenant-stack-{tenant}",
        stack_log_level="INFO",
        cluster=eks_cluster_stack.eks_cluster,
        tenant=tenant,
    )
--
#
# Inside TenantStack.py a manifest is applied to k8s 
self.cluster.add_manifest(f'db-job-{self.tenant}', {
            "apiVersion": 'v1',
            "kind": 'Pod',
            "metadata": {"name": 'mypod'},
            "spec": {
                "serviceAccountName": "bootstrap-db-job-access-ssm",
                "containers": [
                    {
                        "name": 'hello',
                        "image": 'amazon/aws-cli',
                        "command": 'magic stuff ....'
                    }
                ]
            }
        })

我发现当我通过属性和引用导入集群时 例如。

self.cluster = Cluster.from_cluster_attributes(  
  self, 'cluster', cluster_name=cluster,  
  open_id_connect_provider=eks_open_id_connect_provider,  
  kubectl_role_arn=kubectl_role

我可以分别部署租户堆栈

a
b
,并且我的核心
eks
堆栈保持不变。现在我已经阅读了建议使用引用,因为 CDK 可以自动创建依赖项并检测循环依赖项。

aws-cloudformation amazon-eks aws-cdk
1个回答
6
投票

有一个选项可以排除依赖项。使用

cdk deploy tenant-a --exclusively
不部署依赖项。

© www.soinside.com 2019 - 2024. All rights reserved.