Alex
10/13/2025, 6:35 AMkapa.ai
10/13/2025, 6:35 AMkapa.ai
10/13/2025, 6:35 AMprofiles.yml file. 3. Configure your Prefect flow to orchestrate the execution of Elementary CLI commands (such as edr monitor, edr report, or edr send-report). You can run these commands after your dbt jobs finish or on a schedule that fits your needs. 4. Ensure permissions: The CLI needs read/write access to the Elementary schema and the ability to read all project schemas. A typical flow would look like: - Run your dbt job (e.g., dbt run, dbt test). - After the dbt job completes, trigger the Elementary CLI command using Prefect (e.g., edr send-report --env prod). You can generate the required CLI profile using dbt run-operation elementary.generate_elementary_cli_profile and use it in your Prefect environment. For more details and examples, see the [Elementary in production documentation](https://docs.elementary-data.com/oss/deployment-and-configuration/elementary-in-production) and related community discussions, which confirm that users orchestrate Elementary runs from Prefect in a similar way to other orchestrators like Airflow or MWAA. The process is controlled via parameters in your dbt package and CLI arguments, so whoever manages your dbt repo can fine-tune the setup as needed [Deploying with Prefect discussion](https://slack.com/archives/C02CTC89LAX/p1681967456519919), [Production deployment guide](https://docs.elementary-data.com/oss/deployment-and-configuration/elementary-in-production). If you need to send reports or alerts to Slack, configure the relevant integrations and use the appropriate CLI commands in your Prefect flow. If you have more specific requirements or run into issues, the Elementary team encourages reaching out on their Slack community for tailored advice.Alex
10/13/2025, 6:41 AMkapa.ai
10/13/2025, 6:41 AMkapa.ai
10/13/2025, 6:42 AMprofiles.yml file and the Elementary CLI installed. The Elementary CLI uses the connection details from profiles.yml to connect directly to your data warehouse and read the necessary metadata and artifacts that the dbt Cloud job has already written to the warehouse. This approach is confirmed in several community discussions and documentation. For example, users running dbt jobs in dbt Cloud and then running Elementary CLI in a separate environment (such as Prefect, Airflow, or a CI server) only need to ensure that the CLI has access to the correct profiles.yml and network access to the data warehouse. There is no mention of needing dbt-core installed in the CLI execution environment for this workflow. The only requirement is that the dbt package (including Elementary) is run in dbt Cloud, and the CLI can then operate independently using the warehouse data and the connection profile [dbt cloud integration guide](https://docs.elementary-data.com/oss/integrations/dbt), [Slack discussion on CLI requirements](https://slack.com/archives/C02CTC89LAX/p1682073211102629). However, note that some advanced features in the CLI may benefit from access to the dbt project directory, but this is not mandatory for standard report generation or alerting. In summary: You do not need dbt-core installed in your Prefect environment to run Elementary CLI, as long as you have a valid profiles.yml and the CLI can access your data warehouse.Alex
10/13/2025, 6:44 AMkapa.ai
10/13/2025, 6:44 AMkapa.ai
10/13/2025, 6:44 AMprofiles.yml configuration when running Elementary with Prefect, you should avoid hardcoding sensitive information directly in the YAML file. Instead, use environment variables for sensitive fields (such as the private key and passphrase), and inject these secrets at runtime through your orchestration platform (Prefect). A common approach, as discussed for Airflow and KubernetesPodOperator (which is analogous to Prefect's Kubernetes or Docker tasks), is to use a minimal profiles.yml that references environment variables, and then inject the actual secrets using your orchestrator's secret management capabilities. For example, your profiles.yml might look like: yaml elementary: outputs: default: type: snowflake account: "{{ env_var('SNOWFLAKE_ACCOUNT') }}" user: "{{ env_var('SNOWFLAKE_USER') }}" private_key_path: "{{ env_var('SNOWFLAKE_PRIVATE_KEY_PATH') }}" private_key_passphrase: "{{ env_var('SNOWFLAKE_PRIVATE_KEY_PASSPHRASE') }}" role: "{{ env_var('SNOWFLAKE_ROLE') }}" warehouse: "{{ env_var('SNOWFLAKE_WAREHOUSE') }}" database: "{{ env_var('SNOWFLAKE_DATABASE') }}" schema: "{{ env_var('SNOWFLAKE_SCHEMA') }}" threads: 4 You would then use Prefect's secret management (or your infrastructure's secret injection, such as Kubernetes secrets or environment variables) to provide the actual values at runtime, ensuring that the private key and passphrase are never stored in plaintext in your repository or container image. This method is confirmed as best practice in the Elementary community for other orchestrators and is directly applicable to Prefect as well [Airflow/Kubernetes example](https://slack.com/archives/C02CTC89LAX/p1665489623025739). If you are using a file-based private key, you can inject the key as a file at runtime (for example, mounting it as a secret volume or writing it to a temporary file in your Prefect task), and reference its path in the profiles.yml via an environment variable. Summary: - Reference sensitive fields in profiles.yml using env_var. - Inject secrets at runtime using Prefect's secret management or your infrastructure's secret injection. - Never hardcode private keys or passphrases in your YAML or code. If you need a concrete example for Prefect, the same pattern as described for Airflow/Kubernetes applies: use environment variables and inject secrets securely at runtime [Airflow/Kubernetes example](https://slack.com/archives/C02CTC89LAX/p1665489623025739).Alex
10/13/2025, 6:49 AMkapa.ai
10/13/2025, 6:49 AMkapa.ai
10/13/2025, 6:49 AMprofiles.yml file available in your Docker image or as a mounted file. The best practice, as discussed in the knowledge sources, is to keep the profiles.yml in the image (or mount it at runtime), but reference sensitive values—like your keypair path or passphrase—using environment variables rather than hardcoding them. For injecting the keypair variable in Docker on ECS, you should: 1. Reference environment variables in your `profiles.yml`: yaml elementary: outputs: default: type: snowflake account: "{{ env_var('SNOWFLAKE_ACCOUNT') }}" user: "{{ env_var('SNOWFLAKE_USER') }}" private_key_path: "{{ env_var('SNOWFLAKE_PRIVATE_KEY_PATH') }}" private_key_passphrase: "{{ env_var('SNOWFLAKE_PRIVATE_KEY_PASSPHRASE') }}" # ... other fields ... This approach is confirmed as best practice for orchestrators like Airflow and Kubernetes, and the same pattern applies to ECS since it supports environment variable injection [Airflow/Kubernetes example](https://slack.com/archives/C02CTC89LAX/p1665489623025739). 2. Inject the keypair at runtime: - In ECS, you can inject environment variables into your container using ECS task definitions. For file-based keys, you can use AWS Secrets Manager or S3 to securely store the key, and then have your container entrypoint script write the key to a file (e.g., /tmp/snowflake_key) at runtime, setting the SNOWFLAKE_PRIVATE_KEY_PATH environment variable to that file path. - This method ensures that the sensitive keypair is never baked into the image or stored in source control. This pattern—using environment variables and runtime secret injection—is the recommended way to securely handle sensitive credentials with Elementary and dbt in orchestrated environments [Airflow/Kubernetes example](https://slack.com/archives/C02CTC89LAX/p1665489623025739). If you need to inject a file, you can write the secret to a file in your container's startup script and reference its path in your profiles.yml. If you need more ECS-specific implementation details, the knowledge sources do not provide them, but the general approach above is confirmed as best practice for similar orchestrators.Alex
10/13/2025, 7:09 AMkapa.ai
10/13/2025, 7:09 AMkapa.ai
10/13/2025, 7:09 AMprofiles.yml file in the ~/.dbt/ directory (i.e., the .dbt folder in the home directory of the user running the command). If your profiles.yml is located there in your Docker image, Elementary will find it automatically and you do not need to specify the path. If your profiles.yml is located elsewhere in the image, you need to explicitly tell Elementary where to find it using the --profiles-dir flag. For example: edr monitor report --profiles-dir /path/to/your/profiles_dir This is confirmed in multiple sources, including the documentation and community discussions. The CLI will look in the current working directory first, then in HOME/.dbt/, unless you override it with the --profiles-dir flag [CLI install & configure](https://docs.elementary-data.com/oss/cli-install), [Slack discussion](https://slack.com/archives/C02CTC89LAX/p1660829147664459), [GitHub issue](https://github.com/elementary-data/elementary/issues/1666). Summary: - Default path: ~/.dbt/profiles.yml - If your file is elsewhere, use --profiles-dir <path> - If the file is in the default location, no need to specify the path