如何使用 AWS Lambda 触发具有特定过滤器的 Docker 化 ETL,并在不修改 ETL 代码的情况下传递负载?

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

我有一个 ETL 流程,当我 docker-compose up 时,它只是启动该流程。

我将此映像与 AWS Fargate 一起使用,它运行完美。

现在,我想支持使用特定过滤器触发此 ETL。我想运行 ETL 并让它只更新我指定的特定活动。

我正在考虑使用 AWS Lambda,但经过一番研究后,我不确定如何将事件传递到我现有的 ETL 代码中。我需要修改我的 ETL 才能做到这一点吗?

如果我可以在触发 lambda 时提供环境变量,那就可以了,但我找不到方法来做到这一点。

TLDR:我有一个现有的 ETL docker 映像,我想在我的 AWS lambda 中使用它,但我不确定如何在现有代码中检索处理程序的有效负载。

注意:我不想要 2 个 docker 镜像,其中一个用于 Lambda,一个用于 Fargate,我想要两个都使用一个镜像,而不需要维护麻烦。

node.js aws-lambda serverless
1个回答
0
投票

我使用fargate用boto3触发我的任务(你可以在lambda中使用它),我们用

传递参数
    overrides = {"containerOverrides": [{"name": self.container_name, "command": container_command}]}

    self.client = self.hook_ecs.get_client_type(region_name=self.region_name)

    response = self.client.run_task(
        cluster=self.cluster,
        taskDefinition=self.task_definition,
        launchType="FARGATE",
        overrides=overrides,
        startedBy=f"{self.target}_{self.command}",
        networkConfiguration={
            "awsvpcConfiguration": {
                "subnets": self.subnets,
                "assignPublicIp": "ENABLED",  # keep it enabled otherwise will fail to pull the image
                "securityGroups": self.security_groups,
            }
        },
    )

然后你可以使用业务逻辑参数调用这个run_task,你的图像会收到这个参数,例如我的图像是这样的

FROM python:3.9.7-slim-buster

RUN pip install dbt-core
RUN pip install dbt-snowflake


COPY config/profiles.dist.yml /root/.dbt/profiles.yml
 
RUN dbt deps

请考虑到在我的示例中您可以拥有 python 脚本 (etl) 以及 dbt。我希望对你有帮助!!!

PD:发送容器的命令就像

dbt run
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.