【问题标题】:MWAA to start and stop EC2 InstancesMWAA 启动和停止 EC2 实例
【发布时间】:2022-12-13 20:48:53
【问题描述】:

我刚开始使用 AWS 托管的 Airflow 服务。我想使用 Airflow 启动一个 EC2 实例,确保它正在运行,然后在该实例中做一些进一步的工作。

到目前为止,我在下面有这个 dag,它基本上是 this 的副本。

然而,这每次都失败了,我还不够熟练,不知道为什么?

import os
from datetime import datetime

from airflow import DAG
from airflow.models.baseoperator import chain
from airflow.providers.amazon.aws.operators.ec2 import EC2StartInstanceOperator, EC2StopInstanceOperator
from airflow.providers.amazon.aws.sensors.ec2 import EC2InstanceStateSensor

INSTANCE_ID = os.getenv("INSTANCE_ID", "instance-id")

with DAG(
    dag_id='example_ec2',
    schedule_interval=None,
    start_date=datetime(2021, 1, 1),
    tags=['example'],
    catchup=False,
) as dag:
    # [START howto_operator_ec2_start_instance]
    start_instance = EC2StartInstanceOperator(
        task_id="ec2_start_instance",
        instance_id=INSTANCE_ID,
    )
    # [END howto_operator_ec2_start_instance]

    # [START howto_sensor_ec2_instance_state]
    instance_state = EC2InstanceStateSensor(
        task_id="ec2_instance_state",
        instance_id=INSTANCE_ID,
        target_state="running",
    )
    # [END howto_sensor_ec2_instance_state]

    chain(start_instance, instance_state)

【问题讨论】:

  • 你有日志吗?

标签: amazon-web-services amazon-ec2 airflow mwaa


【解决方案1】:

只是回答我自己的问题,以防其他人发现这个问题。

无论出于何种原因,下面的行都不起作用

INSTANCE_ID = os.getenv("INSTANCE_ID", "instance-id")

另一种方法是执行以下操作

from airflow.models import Variable # import Variable

INSTANCE_ID = Variable.get("INSTANCE_ID") # get INSTANCE_ID

通过转到 Admin -> Variable,确保您已将 INSTANCE_ID 添加为变量。

【讨论】: