External Volume and storage handles
External Volume is Snowflake's name for "where the data files live". It points at an S3 prefix and uses an IAM role to read from it. Combined with Catalog Integration, you have everything Snowflake needs to query Iceberg.
CREATE OR REPLACE EXTERNAL VOLUME warehouse_weather_data_vol
STORAGE_LOCATIONS =
(
(
NAME = 's3_warehouse_weather_data.db'
STORAGE_PROVIDER= 'S3'
STORAGE_BASE_URL = 's3://learnwithparam-aws-lakehouse/pipeline-weather-data/warehouse/warehouse_weather_data.db/'
STORAGE_AWS_ROLE_ARN='arn:aws:iam::xxxxxxxxxxxx:role/snowflake_service_role'
)
)
ALLOW_WRITES=FALSE;External Volume with one S3 location. ALLOW_WRITES=FALSE prevents Snowflake from writing into the lakehouse. Glue is the only writer.
The IAM trust policy is what makes Snowflake legitimate. Snowflake's account assumes the role using an external ID Snowflake generates per integration. The role trusts Snowflake's AWS account plus that external ID. Setting it up wrong is the most common Day 1 failure.
Yes. STORAGE_LOCATIONS accepts multiple entries, each with its own S3 base URL and role ARN. Useful when raw, staging, and warehouse live in different buckets. Most setups keep it simple and use one volume per environment.
Quiz: Quiz
Loading practice…