# Integrations

Currently most types of [INTEGRATION](https://docs.snowflake.com/en/sql-reference/sql/create-integration.html) objects are not managed by SnowDDL and should be created manually by `ACCOUNTADMIN`. Setting up an integration normally require additional steps to be performed outside of Snowflake, which is out of scope of SnowDDL.

Integration should be granted to SnowDDL [administration role](https://docs.snowddl.com/guides/other-guides/admin) to make it possible to use it in definition of other objects (e.g. `STORAGE INTEGRATION` for `STAGE`, `NOTIFICATION INTEGRATION` for `PIPE`, etc.).

## Example of storage integration

```sql
CREATE STORAGE INTEGRATION TEST_STORAGE_INTEGRATION
TYPE = EXTERNAL_STAGE
STORAGE_PROVIDER = GCS
ENABLED = TRUE
STORAGE_ALLOWED_LOCATIONS = ('*');

GRANT USAGE ON INTEGRATION TEST_STORAGE_INTEGRATION TO ROLE SNOWDDL_ADMIN;
```

## Example of API integration

```sql
CREATE API INTEGRATION TEST_API_INTEGRATION
API_PROVIDER=aws_api_gateway
API_AWS_ROLE_ARN='arn:aws:iam::123456789012:role/my_cloud_account_role'
API_ALLOWED_PREFIXES=('https://xyz.execute-api.us-west-2.amazonaws.com/production')
ENABLED=TRUE;

GRANT USAGE ON INTEGRATION TEST_API_INTEGRATION TO ROLE SNOWDDL_ADMIN;
```

## Example of Notification Integration

```sql
CREATE NOTIFICATION INTEGRATION TEST_NOTIFICATION_INTEGRATION
DIRECTION = OUTBOUND
TYPE = QUEUE
NOTIFICATION_PROVIDER=AWS_SNS
AWS_SNS_ROLE_ARN='arn:aws:iam::123456789012:role/my_cloud_account_role'
AWS_SNS_TOPIC_ARN='arn:aws:sns:us-east-1:123456789012:MyTopic'
ENABLED=TRUE;

GRANT USAGE ON INTEGRATION TEST_NOTIFICATION_INTEGRATION TO ROLE SNOWDDL_ADMIN;
```
