Skip to content

Organize config in a large project

Madhan Sadasivam edited this page Feb 2, 2017 · 10 revisions

Organize config in a large project

Apigee Config like KVM, Cache, target servers etc., is better managed when it is automated and tracked in source control repository. Config needs to live close to the corresponding API, but with large projects config is typically shared between multiple API proxies.

API proxies can be usually grouped into "projects" that directly reflect the project, team or business structure in an enterprise. You can also find that config is shared within the proxies in a "project".

The file structure below reflects this hierarchical relationship (enterprise -> projects -> API proxies)

gateway
├── resources
│   └── edge.json             # Config that is shared across projects
└── payments                  # ---- Project ----
    ├── resources
    │   └── edge.json         # Config that is shared across proxies in project
    ├── proxyname1
    │   └── apiproxy
    │       ├── config.json
    │       ├── policies
    │       ├── proxies
    │       ├── proxyname1.xml
    │       ├── resources
    │       │   ├── java
    │       │   ├── jsc
    │       │   └── node
    │       └── targets
    └── proxyname2
        └── apiproxy
            ├── config.json
            ├── policies
            ├── proxies
            ├── proxyname2.xml
            ├── resources
            │   ├── java
            │   ├── jsc
            │   └── node
            └── targets

Further organization for even larger config files

When an Apigee instance has several environments edge.json can get longer. In such cases edge.json can be further broken down to individual files for each config type. This feature is available from release 1.1.3 of the config plugin.

Given below is a sample folder structure reflecting the broken down structure for config files.

gateway
├── api-project-1                    # ---- Project 1 ----
│   ├── api-1                        # ----    APIs   ----
│   │   └── apiproxy
│   │       ├── config.json
│   │       ├── policies
│   │       ├── proxies
│   │       ├── proxyname1.xml
│   │       ├── resources
│   │       │   ├── java
│   │       │   ├── jsc
│   │       │   └── node
│   │       └── targets
│   ├── api-2
│   │   └── apiproxy
│   │       ├── config.json
│   │       ├── policies
│   │       ├── proxies
│   │       ├── proxyname2.xml
│   │       ├── resources
│   │       │   ├── java
│   │       │   ├── jsc
│   │       │   └── node
│   │       └── targets
│   └── resources                    # ---- Project config ----
│       └── edge
│           ├── org
│           │   ├── apiProducts.json
│           │   ├── developerApps.json
│           │   ├── developers.json
│           │   ├── kvms.json
│           │   └── maskconfigs.json
│           ├── env
│           │   ├── test
│           │   │   ├── caches.json
│           │   │   ├── kvms.json
│           │   │   └── targetServers.json
│           │   └── prod
│           │       ├── caches.json
│           │       ├── kvms.json
│           │       └── targetServers.json
│           └── api
│               ├── api-1
│               │   ├── caches.json
│               │   └── maskconfigs.json
│               └── api-2
│                   ├── caches.json
│                   └── maskconfigs.json
└── api-project-2                   # ---- Project 2 ----
    ├── api-1
    │   └──...
    ├── api-2
    │   └──...
    └── resources
        └── edge
            ├── org
            │   ├── apiProducts.json
            │   ├── developerApps.json
            │   ├── developers.json
            │   ├── kvms.json
            │   └── maskconfigs.json
            ├── env
            │   ├── test
            │   │   ├── caches.json
            │   │   ├── kvms.json
            │   │   └── targetServers.json
            │   └── prod
            │       ├── caches.json
            │       ├── kvms.json
            │       └── targetServers.json
            └── api
                ├── api-1
                │   ├── caches.json
                │   └── maskconfigs.json
                └── api-2
                    ├── caches.json
                    └── maskconfigs.json

The plugin takes a new optional apigee.config.dir parameter to pick config files under resources/edge structure above. To support multiple orgs clone the "edge" dir under resources and name as "edge_".

mvn install -Ptest -Dapigee.config.dir=resources/edge
Clone this wiki locally