terraform-cdk-serverless-github-actions-runner-controller 0.0.0 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/lib/gcp.js ADDED
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Gcp = void 0;
4
+ const cdktf_1 = require("cdktf");
5
+ const constructs_1 = require("constructs");
6
+ const provider_1 = require("@cdktf/provider-google/lib/provider");
7
+ const artifact_registry_repository_1 = require("@cdktf/provider-google/lib/artifact-registry-repository");
8
+ const cloud_run_v2_job_1 = require("@cdktf/provider-google/lib/cloud-run-v2-job");
9
+ const project_iam_custom_role_1 = require("@cdktf/provider-google/lib/project-iam-custom-role");
10
+ const service_account_1 = require("@cdktf/provider-google/lib/service-account");
11
+ const project_iam_member_1 = require("@cdktf/provider-google/lib/project-iam-member");
12
+ const variables_1 = require("./variables");
13
+ const cloud_run_service_1 = require("@cdktf/provider-google/lib/cloud-run-service");
14
+ const provider_2 = require("@cdktf/provider-null/lib/provider");
15
+ const resource_1 = require("@cdktf/provider-null/lib/resource");
16
+ class Gcp extends constructs_1.Construct {
17
+ constructor(scope, id) {
18
+ super(scope, id);
19
+ const location = 'europe-north1';
20
+ const project = 'gha-runner-example';
21
+ new provider_1.GoogleProvider(this, 'google', {
22
+ project,
23
+ region: location
24
+ });
25
+ new provider_2.NullProvider(this, 'null');
26
+ const { pat, githubConfigUrl } = (0, variables_1.commonVariables)(this);
27
+ const registry = new artifact_registry_repository_1.ArtifactRegistryRepository(this, 'registry', {
28
+ format: 'DOCKER',
29
+ mode: 'REMOTE_REPOSITORY',
30
+ repositoryId: 'gha-runner-test',
31
+ description: 'Repository to host run and resulting images from GHA runs',
32
+ remoteRepositoryConfig: {
33
+ dockerRepository: {
34
+ customRepository: {
35
+ uri: 'https://ghcr.io'
36
+ }
37
+ }
38
+ }
39
+ });
40
+ const jobSa = new service_account_1.ServiceAccount(this, 'jobServiceAccount', {
41
+ accountId: 'gha-runner-job-sa',
42
+ });
43
+ const runnerRole = new project_iam_custom_role_1.ProjectIamCustomRole(this, 'runnerRole', {
44
+ roleId: 'ghaRunnerRole',
45
+ title: 'GHA Runner Role',
46
+ permissions: [
47
+ 'artifactregistry.dockerimages.get',
48
+ 'artifactregistry.dockerimages.list',
49
+ 'run.jobs.run',
50
+ 'run.jobs.create',
51
+ 'run.jobs.delete',
52
+ 'run.jobs.list',
53
+ // Needed for waiting
54
+ 'run.executions.get',
55
+ ],
56
+ });
57
+ const jobPolicyMember = new cdktf_1.TerraformLocal(this, 'ghaMember', `serviceAccount:${jobSa.email}`);
58
+ new project_iam_member_1.ProjectIamMember(this, 'runnerRoleBinding', {
59
+ member: jobPolicyMember.toString(),
60
+ project,
61
+ role: runnerRole.id,
62
+ });
63
+ new project_iam_member_1.ProjectIamMember(this, 'runnerRoleBindingStorage', {
64
+ member: jobPolicyMember.toString(),
65
+ project,
66
+ role: 'roles/storage.admin',
67
+ });
68
+ new project_iam_member_1.ProjectIamMember(this, 'runnerRoleBindingRunServiceAgent', {
69
+ member: jobPolicyMember.toString(),
70
+ project,
71
+ role: 'roles/run.serviceAgent',
72
+ });
73
+ new project_iam_member_1.ProjectIamMember(this, 'runnerRoleBindingRunViewer', {
74
+ member: jobPolicyMember.toString(),
75
+ project,
76
+ role: 'roles/run.viewer',
77
+ });
78
+ const storageName = 'gha-runner-job-externals';
79
+ const createBucket = new cdktf_1.TerraformLocal(this, 'bucketModification', `CLOUDSDK_CORE_DISABLE_PROMPTS=1 gcloud alpha storage buckets create gs://${storageName} --project=${project} --location=${location} --uniform-bucket-level-access --enable-hierarchical-namespace`);
80
+ // Hierarchial namespaces can't be enabled with Terraform.
81
+ const bucketCreation = new resource_1.Resource(this, 'gcloud', {
82
+ provisioners: [
83
+ {
84
+ type: "local-exec",
85
+ command: createBucket.fqn
86
+ },
87
+ ],
88
+ triggers: {
89
+ fqn: createBucket.fqn
90
+ },
91
+ });
92
+ // TODO: check caching https://cloud.google.com/artifact-registry/docs/pull-cached-dockerhub-images
93
+ const runnerJob = new cloud_run_v2_job_1.CloudRunV2Job(this, 'ghaJob', {
94
+ deletionProtection: false,
95
+ name: 'gha-runner-job',
96
+ location,
97
+ template: {
98
+ template: {
99
+ containers: [
100
+ {
101
+ image: `${registry.location}-docker.pkg.dev/${project}/${registry.repositoryId}/hi-fi/actions-runner:cr`,
102
+ env: [
103
+ {
104
+ name: 'CLOUDSDK_RUN_REGION',
105
+ value: location,
106
+ },
107
+ {
108
+ name: 'GOOGLE_CLOUD_PROJECT',
109
+ value: project,
110
+ },
111
+ {
112
+ name: 'EXTERNAL_STORAGE_NAME',
113
+ value: storageName,
114
+ },
115
+ // FUSE mounts directory as root with 777 fo directories and 555 for other files. As path is owned always by root, utime or permission change is not possible. These options prevent tar to try those
116
+ {
117
+ name: 'TAR_OPTIONS',
118
+ value: '--touch --no-overwrite-dir --no-same-owner'
119
+ }
120
+ ],
121
+ volumeMounts: [
122
+ {
123
+ name: 'externals',
124
+ mountPath: '/home/runner/_work/externals'
125
+ }
126
+ ],
127
+ command: ['/home/runner/ephemeral_runner.sh'],
128
+ resources: {
129
+ limits: {
130
+ cpu: '1',
131
+ memory: '2Gi'
132
+ }
133
+ },
134
+ }
135
+ ],
136
+ volumes: [
137
+ {
138
+ name: 'externals',
139
+ gcs: {
140
+ bucket: storageName
141
+ }
142
+ }
143
+ ],
144
+ maxRetries: 0,
145
+ serviceAccount: jobSa.email
146
+ }
147
+ },
148
+ dependsOn: [
149
+ bucketCreation
150
+ ]
151
+ });
152
+ const autoscalerSa = new service_account_1.ServiceAccount(this, 'autoscalerServiceAccount', {
153
+ accountId: 'autoscaler-sa',
154
+ });
155
+ new project_iam_custom_role_1.ProjectIamCustomRole(this, 'autoscalerRole', {
156
+ roleId: 'ghaAutoscalerRole',
157
+ title: 'GHA Autoscaler Role',
158
+ permissions: [
159
+ 'artifactregistry.dockerimages.get',
160
+ 'artifactregistry.dockerimages.list',
161
+ 'run.jobs.run',
162
+ 'run.jobs.create',
163
+ 'run.jobs.delete',
164
+ ],
165
+ });
166
+ const autoscalerPolicyMember = new cdktf_1.TerraformLocal(this, 'autoscalerMember', `serviceAccount:${autoscalerSa.email}`);
167
+ // TODO: replace 2 following with more specific ones.
168
+ new project_iam_member_1.ProjectIamMember(this, 'autoscalerRoleBindingRun', {
169
+ member: autoscalerPolicyMember.toString(),
170
+ project,
171
+ role: 'roles/run.developer',
172
+ });
173
+ new project_iam_member_1.ProjectIamMember(this, 'autoscalerRoleBindingStorage', {
174
+ member: autoscalerPolicyMember.toString(),
175
+ project,
176
+ role: 'roles/storage.admin',
177
+ });
178
+ new project_iam_member_1.ProjectIamMember(this, 'autoscalerRoleBindingRunServiceAgent', {
179
+ member: autoscalerPolicyMember.toString(),
180
+ project,
181
+ role: 'roles/run.serviceAgent',
182
+ });
183
+ new cloud_run_service_1.CloudRunService(this, 'autoscalerService', {
184
+ location,
185
+ name: 'gha-autoscaler',
186
+ metadata: {
187
+ annotations: {
188
+ 'run.googleapis.com/ingress': 'internal',
189
+ }
190
+ },
191
+ template: {
192
+ metadata: {
193
+ annotations: {
194
+ 'autoscaling.knative.dev/maxScale': '1',
195
+ 'autoscaling.knative.dev/minScale': '1',
196
+ 'run.googleapis.com/cpu-throttling': 'false',
197
+ 'run.googleapis.com/startup-cpu-boost': 'false'
198
+ }
199
+ },
200
+ spec: {
201
+ containerConcurrency: 1,
202
+ containers: [
203
+ {
204
+ image: `${registry.location}-docker.pkg.dev/${project}/${registry.repositoryId}/hi-fi/gha-runners-on-managed-env:test`,
205
+ env: [
206
+ {
207
+ name: 'PAT',
208
+ value: pat.value
209
+ },
210
+ {
211
+ name: 'GITHUB_CONFIG_URL',
212
+ value: githubConfigUrl.value
213
+ },
214
+ {
215
+ name: 'JOB_NAME',
216
+ value: runnerJob.name
217
+ },
218
+ {
219
+ name: 'SCALE_SET_NAME',
220
+ value: 'cr-runner-set'
221
+ },
222
+ {
223
+ name: 'CLOUDSDK_RUN_REGION',
224
+ value: location
225
+ },
226
+ {
227
+ name: 'GOOGLE_CLOUD_PROJECT',
228
+ value: project
229
+ }
230
+ ],
231
+ resources: {
232
+ // Service would work for much lower, but these are minimum values for "always on" mode
233
+ limits: {
234
+ cpu: '1000m',
235
+ memory: '512Mi'
236
+ }
237
+ }
238
+ }
239
+ ],
240
+ serviceAccountName: autoscalerSa.email
241
+ }
242
+ }
243
+ });
244
+ }
245
+ }
246
+ exports.Gcp = Gcp;
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2NwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9nY3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXVDO0FBQ3ZDLDJDQUF1QztBQUN2QyxrRUFBb0U7QUFDcEUsMEdBQXFHO0FBQ3JHLGtGQUE0RTtBQUM1RSxnR0FBMEY7QUFDMUYsZ0ZBQTRFO0FBQzVFLHNGQUFpRjtBQUNqRiwyQ0FBOEM7QUFDOUMsb0ZBQStFO0FBQy9FLGdFQUFpRTtBQUNqRSxnRUFBNEQ7QUFFNUQsTUFBYSxHQUFJLFNBQVEsc0JBQVM7SUFDOUIsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDcEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUM7UUFFckMsSUFBSSx5QkFBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDL0IsT0FBTztZQUNQLE1BQU0sRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksdUJBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFOUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsR0FBRyxJQUFBLDJCQUFlLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkQsTUFBTSxRQUFRLEdBQUcsSUFBSSx5REFBMEIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzlELE1BQU0sRUFBRSxRQUFRO1lBQ2hCLElBQUksRUFBRSxtQkFBbUI7WUFDekIsWUFBWSxFQUFFLGlCQUFpQjtZQUMvQixXQUFXLEVBQUUsMkRBQTJEO1lBQ3hFLHNCQUFzQixFQUFFO2dCQUNwQixnQkFBZ0IsRUFBRTtvQkFDZCxnQkFBZ0IsRUFBRTt3QkFDZCxHQUFHLEVBQUUsaUJBQWlCO3FCQUN6QjtpQkFDSjthQUNKO1NBQ0osQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFL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S0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLO2lDQUMvQjtnQ0FDRDtvQ0FDSSxJQUFJLEVBQUUsVUFBVTtvQ0FDaEIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJO2lDQUN4QjtnQ0FDRDtvQ0FDSSxJQUFJLEVBQUUsZ0JBQWdCO29DQUN0QixLQUFLLEVBQUUsZUFBZTtpQ0FDekI7Z0NBQ0Q7b0NBQ0ksSUFBSSxFQUFFLHFCQUFxQjtvQ0FDM0IsS0FBSyxFQUFFLFFBQVE7aUNBQ2xCO2dDQUNEO29DQUNJLElBQUksRUFBRSxzQkFBc0I7b0NBQzVCLEtBQUssRUFBRSxPQUFPO2lDQUNqQjs2QkFFSjs0QkFDRCxTQUFTLEVBQUU7Z0NBQ1AsdUZBQXVGO2dDQUN2RixNQUFNLEVBQUU7b0NBQ0osR0FBRyxFQUFFLE9BQU87b0NBQ1osTUFBTSxFQUFFLE9BQU87aUNBQ2xCOzZCQUNKO3lCQUNKO3FCQUNKO29CQUNELGtCQUFrQixFQUFFLFlBQVksQ0FBQyxLQUFLO2lCQUN6QzthQUNKO1NBQ0osQ0FBQyxDQUFBO0lBQ04sQ0FBQztDQUNKO0FBN1BELGtCQTZQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlcnJhZm9ybUxvY2FsIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgR29vZ2xlUHJvdmlkZXIgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItZ29vZ2xlL2xpYi9wcm92aWRlcidcbmltcG9ydCB7IEFydGlmYWN0UmVnaXN0cnlSZXBvc2l0b3J5IH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1nb29nbGUvbGliL2FydGlmYWN0LXJlZ2lzdHJ5LXJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IENsb3VkUnVuVjJKb2IgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWdvb2dsZS9saWIvY2xvdWQtcnVuLXYyLWpvYlwiO1xuaW1wb3J0IHsgUHJvamVjdElhbUN1c3RvbVJvbGUgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWdvb2dsZS9saWIvcHJvamVjdC1pYW0tY3VzdG9tLXJvbGVcIjtcbmltcG9ydCB7IFNlcnZpY2VBY2NvdW50IH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1nb29nbGUvbGliL3NlcnZpY2UtYWNjb3VudFwiO1xuaW1wb3J0IHsgUHJvamVjdElhbU1lbWJlciB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItZ29vZ2xlL2xpYi9wcm9qZWN0LWlhbS1tZW1iZXJcIjtcbmltcG9ydCB7IGNvbW1vblZhcmlhYmxlcyB9IGZyb20gXCIuL3ZhcmlhYmxlc1wiO1xuaW1wb3J0IHsgQ2xvdWRSdW5TZXJ2aWNlIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1nb29nbGUvbGliL2Nsb3VkLXJ1bi1zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOdWxsUHJvdmlkZXIgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLW51bGwvbGliL3Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1udWxsL2xpYi9yZXNvdXJjZSdcblxuZXhwb3J0IGNsYXNzIEdjcCBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gJ2V1cm9wZS1ub3J0aDEnO1xuICAgICAgICBjb25zdCBwcm9qZWN0ID0gJ2doYS1ydW5uZXItZXhhbXBsZSc7XG4gICAgICAgIFxuICAgICAgICBuZXcgR29vZ2xlUHJvdmlkZXIodGhpcywgJ2dvb2dsZScsIHtcbiAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICByZWdpb246IGxvY2F0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBOdWxsUHJvdmlkZXIodGhpcywgJ251bGwnKVxuXG4gICAgICAgIGNvbnN0IHsgcGF0LCBnaXRodWJDb25maWdVcmwgfSA9IGNvbW1vblZhcmlhYmxlcyh0aGlzKTtcblxuICAgICAgICBjb25zdCByZWdpc3RyeSA9IG5ldyBBcnRpZmFjdFJlZ2lzdHJ5UmVwb3NpdG9yeSh0aGlzLCAncmVnaXN0cnknLCB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdET0NLRVInLFxuICAgICAgICAgICAgbW9kZTogJ1JFTU9URV9SRVBPU0lUT1JZJyxcbiAgICAgICAgICAgIHJlcG9zaXRvcnlJZDogJ2doYS1ydW5uZXItdGVzdCcsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JlcG9zaXRvcnkgdG8gaG9zdCBydW4gYW5kIHJlc3VsdGluZyBpbWFnZXMgZnJvbSBHSEEgcnVucycsXG4gICAgICAgICAgICByZW1vdGVSZXBvc2l0b3J5Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgZG9ja2VyUmVwb3NpdG9yeToge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21SZXBvc2l0b3J5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmk6ICdodHRwczovL2doY3IuaW8nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGpvYlNhID0gbmV3IFNlcnZpY2VBY2NvdW50KHRoaXMsICdqb2JTZXJ2aWNlQWNjb3VudCcsIHtcbiAgICAgICAgICAgIGFjY291bnRJZDogJ2doYS1ydW5uZXItam9iLXNhJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcnVubmVyUm9sZSA9IG5ldyBQcm9qZWN0SWFtQ3VzdG9tUm9sZSh0aGlzLCAncnVubmVyUm9sZScsIHtcbiAgICAgICAgICAgIHJvbGVJZDogJ2doYVJ1bm5lclJvbGUnLFxuICAgICAgICAgICAgdGl0bGU6ICdHSEEgUnVubmVyIFJvbGUnLFxuICAgICAgICAgICAgcGVybWlzc2lvbnM6IFtcbiAgICAgICAgICAgICAgICAnYXJ0aWZhY3RyZWdpc3RyeS5kb2NrZXJpbWFnZXMuZ2V0JyxcbiAgICAgICAgICAgICAgICAnYXJ0aWZhY3RyZWdpc3RyeS5kb2NrZXJpbWFnZXMubGlzdCcsXG4gICAgICAgICAgICAgICAgJ3J1bi5qb2JzLnJ1bicsXG4gICAgICAgICAgICAgICAgJ3J1bi5qb2JzLmNyZWF0ZScsXG4gICAgICAgICAgICAgICAgJ3J1bi5qb2JzLmRlbGV0ZScsXG4gICAgICAgICAgICAgICAgJ3J1bi5qb2JzLmxpc3QnLFxuICAgICAgICAgICAgICAgIC8vIE5lZWRlZCBmb3Igd2FpdGluZ1xuICAgICAgICAgICAgICAgICdydW4uZXhlY3V0aW9ucy5nZXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgam9iUG9saWN5TWVtYmVyID0gbmV3IFRlcnJhZm9ybUxvY2FsKHRoaXMsICdnaGFNZW1iZXInLCBgc2VydmljZUFjY291bnQ6JHtqb2JTYS5lbWFpbH1gKVxuXG4gICAgICAgIG5ldyBQcm9qZWN0SWFtTWVtYmVyKHRoaXMsICdydW5uZXJSb2xlQmluZGluZycsIHtcbiAgICAgICAgICAgIG1lbWJlcjogam9iUG9saWN5TWVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcm9sZTogcnVubmVyUm9sZS5pZCxcbiAgICAgICAgfSlcblxuICAgICAgICBuZXcgUHJvamVjdElhbU1lbWJlcih0aGlzLCAncnVubmVyUm9sZUJpbmRpbmdTdG9yYWdlJywge1xuICAgICAgICAgICAgbWVtYmVyOiBqb2JQb2xpY3lNZW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICByb2xlOiAncm9sZXMvc3RvcmFnZS5hZG1pbicsXG4gICAgICAgIH0pXG5cbiAgICAgICAgbmV3IFByb2plY3RJYW1NZW1iZXIodGhpcywgJ3J1bm5lclJvbGVCaW5kaW5nUnVuU2VydmljZUFnZW50Jywge1xuICAgICAgICAgICAgbWVtYmVyOiBqb2JQb2xpY3lNZW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICByb2xlOiAncm9sZXMvcnVuLnNlcnZpY2VBZ2VudCcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgbmV3IFByb2plY3RJYW1NZW1iZXIodGhpcywgJ3J1bm5lclJvbGVCaW5kaW5nUnVuVmlld2VyJywge1xuICAgICAgICAgICAgbWVtYmVyOiBqb2JQb2xpY3lNZW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICByb2xlOiAncm9sZXMvcnVuLnZpZXdlcicsXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3Qgc3RvcmFnZU5hbWUgPSAnZ2hhLXJ1bm5lci1qb2ItZXh0ZXJuYWxzJztcbiAgICAgICAgY29uc3QgY3JlYXRlQnVja2V0ID0gbmV3IFRlcnJhZm9ybUxvY2FsKHRoaXMsICdidWNrZXRNb2RpZmljYXRpb24nLCBgQ0xPVURTREtfQ09SRV9ESVNBQkxFX1BST01QVFM9MSBnY2xvdWQgYWxwaGEgc3RvcmFnZSBidWNrZXRzIGNyZWF0ZSBnczovLyR7c3RvcmFnZU5hbWV9IC0tcHJvamVjdD0ke3Byb2plY3R9IC0tbG9jYXRpb249JHtsb2NhdGlvbn0gLS11bmlmb3JtLWJ1Y2tldC1sZXZlbC1hY2Nlc3MgLS1lbmFibGUtaGllcmFyY2hpY2FsLW5hbWVzcGFjZWApXG5cbiAgICAgICAgLy8gSGllcmFyY2hpYWwgbmFtZXNwYWNlcyBjYW4ndCBiZSBlbmFibGVkIHdpdGggVGVycmFmb3JtLlxuICAgICAgICBjb25zdCBidWNrZXRDcmVhdGlvbiA9IG5ldyBSZXNvdXJjZSh0aGlzLCAnZ2Nsb3VkJywge1xuICAgICAgICAgICAgcHJvdmlzaW9uZXJzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImxvY2FsLWV4ZWNcIixcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogY3JlYXRlQnVja2V0LmZxblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgICAgICAgICBmcW46IGNyZWF0ZUJ1Y2tldC5mcW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFRPRE86IGNoZWNrIGNhY2hpbmcgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2FydGlmYWN0LXJlZ2lzdHJ5L2RvY3MvcHVsbC1jYWNoZWQtZG9ja2VyaHViLWltYWdlc1xuICAgICAgICBjb25zdCBydW5uZXJKb2IgPSBuZXcgQ2xvdWRSdW5WMkpvYih0aGlzLCAnZ2hhSm9iJywge1xuICAgICAgICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIG5hbWU6ICdnaGEtcnVubmVyLWpvYicsXG4gICAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICAgIHRlbXBsYXRlOiB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiBgJHtyZWdpc3RyeS5sb2NhdGlvbn0tZG9ja2VyLnBrZy5kZXYvJHtwcm9qZWN0fS8ke3JlZ2lzdHJ5LnJlcG9zaXRvcnlJZH0vaGktZmkvYWN0aW9ucy1ydW5uZXI6Y3JgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQ0xPVURTREtfUlVOX1JFR0lPTicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdHT09HTEVfQ0xPVURfUFJPSkVDVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcHJvamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0VYVEVSTkFMX1NUT1JBR0VfTkFNRScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RvcmFnZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZVU0UgbW91bnRzIGRpcmVjdG9yeSBhcyByb290IHdpdGggNzc3IGZvIGRpcmVjdG9yaWVzIGFuZCA1NTUgZm9yIG90aGVyIGZpbGVzLiBBcyBwYXRoIGlzIG93bmVkIGFsd2F5cyBieSByb290LCB1dGltZSBvciBwZXJtaXNzaW9uIGNoYW5nZSBpcyBub3QgcG9zc2libGUuIFRoZXNlIG9wdGlvbnMgcHJldmVudCB0YXIgdG8gdHJ5IHRob3NlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUQVJfT1BUSU9OUycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJy0tdG91Y2ggLS1uby1vdmVyd3JpdGUtZGlyIC0tbm8tc2FtZS1vd25lcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lTW91bnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdleHRlcm5hbHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91bnRQYXRoOiAnL2hvbWUvcnVubmVyL193b3JrL2V4dGVybmFscydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogWycvaG9tZS9ydW5uZXIvZXBoZW1lcmFsX3J1bm5lci5zaCddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdTogJzEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5OiAnMkdpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdleHRlcm5hbHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQ6IHN0b3JhZ2VOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBtYXhSZXRyaWVzOiAwLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlQWNjb3VudDogam9iU2EuZW1haWxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVwZW5kc09uOiBbXG4gICAgICAgICAgICAgICAgYnVja2V0Q3JlYXRpb25cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBhdXRvc2NhbGVyU2EgPSBuZXcgU2VydmljZUFjY291bnQodGhpcywgJ2F1dG9zY2FsZXJTZXJ2aWNlQWNjb3VudCcsIHtcbiAgICAgICAgICAgIGFjY291bnRJZDogJ2F1dG9zY2FsZXItc2EnLFxuICAgICAgICB9KTtcblxuICAgICAgICBuZXcgUHJvamVjdElhbUN1c3RvbVJvbGUodGhpcywgJ2F1dG9zY2FsZXJSb2xlJywge1xuICAgICAgICAgICAgcm9sZUlkOiAnZ2hhQXV0b3NjYWxlclJvbGUnLFxuICAgICAgICAgICAgdGl0bGU6ICdHSEEgQXV0b3NjYWxlciBSb2xlJyxcbiAgICAgICAgICAgIHBlcm1pc3Npb25zOiBbXG4gICAgICAgICAgICAgICAgJ2FydGlmYWN0cmVnaXN0cnkuZG9ja2VyaW1hZ2VzLmdldCcsXG4gICAgICAgICAgICAgICAgJ2FydGlmYWN0cmVnaXN0cnkuZG9ja2VyaW1hZ2VzLmxpc3QnLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5ydW4nLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5jcmVhdGUnLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5kZWxldGUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYXV0b3NjYWxlclBvbGljeU1lbWJlciA9IG5ldyBUZXJyYWZvcm1Mb2NhbCh0aGlzLCAnYXV0b3NjYWxlck1lbWJlcicsIGBzZXJ2aWNlQWNjb3VudDoke2F1dG9zY2FsZXJTYS5lbWFpbH1gKVxuXG4gICAgICAgIC8vIFRPRE86IHJlcGxhY2UgMiBmb2xsb3dpbmcgd2l0aCBtb3JlIHNwZWNpZmljIG9uZXMuXG4gICAgICAgIG5ldyBQcm9qZWN0SWFtTWVtYmVyKHRoaXMsICdhdXRvc2NhbGVyUm9sZUJpbmRpbmdSdW4nLCB7XG4gICAgICAgICAgICBtZW1iZXI6IGF1dG9zY2FsZXJQb2xpY3lNZW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICByb2xlOiAncm9sZXMvcnVuLmRldmVsb3BlcicsXG4gICAgICAgIH0pXG5cblxuICAgICAgICBuZXcgUHJvamVjdElhbU1lbWJlcih0aGlzLCAnYXV0b3NjYWxlclJvbGVCaW5kaW5nU3RvcmFnZScsIHtcbiAgICAgICAgICAgIG1lbWJlcjogYXV0b3NjYWxlclBvbGljeU1lbWJlci50b1N0cmluZygpLFxuICAgICAgICAgICAgcHJvamVjdCxcbiAgICAgICAgICAgIHJvbGU6ICdyb2xlcy9zdG9yYWdlLmFkbWluJyxcbiAgICAgICAgfSlcblxuICAgICAgICBuZXcgUHJvamVjdElhbU1lbWJlcih0aGlzLCAnYXV0b3NjYWxlclJvbGVCaW5kaW5nUnVuU2VydmljZUFnZW50Jywge1xuICAgICAgICAgICAgbWVtYmVyOiBhdXRvc2NhbGVyUG9saWN5TWVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcm9sZTogJ3JvbGVzL3J1bi5zZXJ2aWNlQWdlbnQnLFxuICAgICAgICB9KVxuXG4gICAgICAgIG5ldyBDbG91ZFJ1blNlcnZpY2UodGhpcywgJ2F1dG9zY2FsZXJTZXJ2aWNlJywge1xuICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICBuYW1lOiAnZ2hhLWF1dG9zY2FsZXInLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAncnVuLmdvb2dsZWFwaXMuY29tL2luZ3Jlc3MnOiAnaW50ZXJuYWwnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZW1wbGF0ZToge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYXV0b3NjYWxpbmcua25hdGl2ZS5kZXYvbWF4U2NhbGUnOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAnYXV0b3NjYWxpbmcua25hdGl2ZS5kZXYvbWluU2NhbGUnOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAncnVuLmdvb2dsZWFwaXMuY29tL2NwdS10aHJvdHRsaW5nJzogJ2ZhbHNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdydW4uZ29vZ2xlYXBpcy5jb20vc3RhcnR1cC1jcHUtYm9vc3QnOiAnZmFsc2UnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNwZWM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyQ29uY3VycmVuY3k6IDEsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogYCR7cmVnaXN0cnkubG9jYXRpb259LWRvY2tlci5wa2cuZGV2LyR7cHJvamVjdH0vJHtyZWdpc3RyeS5yZXBvc2l0b3J5SWR9L2hpLWZpL2doYS1ydW5uZXJzLW9uLW1hbmFnZWQtZW52OnRlc3RgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnUEFUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwYXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0dJVEhVQl9DT05GSUdfVVJMJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBnaXRodWJDb25maWdVcmwudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0pPQl9OQU1FJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBydW5uZXJKb2IubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0NBTEVfU0VUX05BTUUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdjci1ydW5uZXItc2V0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQ0xPVURTREtfUlVOX1JFR0lPTicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbG9jYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0dPT0dMRV9DTE9VRF9QUk9KRUNUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwcm9qZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcnZpY2Ugd291bGQgd29yayBmb3IgbXVjaCBsb3dlciwgYnV0IHRoZXNlIGFyZSBtaW5pbXVtIHZhbHVlcyBmb3IgXCJhbHdheXMgb25cIiBtb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1OiAnMTAwMG0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5OiAnNTEyTWknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VBY2NvdW50TmFtZTogYXV0b3NjYWxlclNhLmVtYWlsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbn1cbiJdfQ==
package/lib/tfModules.js CHANGED
@@ -3,16 +3,32 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const cdktf_1 = require("cdktf");
4
4
  const tf_module_stack_1 = require("@cdktf/tf-module-stack");
5
5
  const azure_1 = require("./lib/azure");
6
+ const aws_1 = require("./lib/aws");
7
+ const gcp_1 = require("./lib/gcp");
6
8
  class AzureContainerAppsArc extends tf_module_stack_1.TFModuleStack {
7
9
  constructor(scope, id) {
8
10
  super(scope, id);
9
11
  new azure_1.Azure(this, "aca");
10
12
  }
11
13
  }
14
+ class ElasticContainerServiceArc extends tf_module_stack_1.TFModuleStack {
15
+ constructor(scope, id) {
16
+ super(scope, id);
17
+ new aws_1.Aws(this, "aws");
18
+ }
19
+ }
20
+ class CloudRunArc extends tf_module_stack_1.TFModuleStack {
21
+ constructor(scope, id) {
22
+ super(scope, id);
23
+ new gcp_1.Gcp(this, "cr");
24
+ }
25
+ }
12
26
  const app = new cdktf_1.App();
13
27
  // This is the name the module can be found under.
14
28
  // We expect a "my-awesome-module.md" file in this directory.
15
29
  // The README.md file will be generated from this file.
16
30
  new AzureContainerAppsArc(app, "azure-container-apps");
31
+ new ElasticContainerServiceArc(app, "elastic-container-service");
32
+ new CloudRunArc(app, "google-cloud-run");
17
33
  app.synth();
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGZNb2R1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RmTW9kdWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUE0QjtBQUU1Qiw0REFBdUQ7QUFDdkQsdUNBQW9DO0FBRXBDLE1BQU0scUJBQXNCLFNBQVEsK0JBQWE7SUFDL0MsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLGFBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFHLEVBQUUsQ0FBQztBQUN0QixtREFBbUQ7QUFDbkQsNkRBQTZEO0FBQzdELHVEQUF1RDtBQUN2RCxJQUFJLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3ZELEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFRGTW9kdWxlU3RhY2sgfSBmcm9tIFwiQGNka3RmL3RmLW1vZHVsZS1zdGFja1wiO1xuaW1wb3J0IHsgQXp1cmUgfSBmcm9tIFwiLi9saWIvYXp1cmVcIjtcblxuY2xhc3MgQXp1cmVDb250YWluZXJBcHBzQXJjIGV4dGVuZHMgVEZNb2R1bGVTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IEF6dXJlKHRoaXMsIFwiYWNhXCIpO1xuICB9XG59XG5cbmNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbi8vIFRoaXMgaXMgdGhlIG5hbWUgdGhlIG1vZHVsZSBjYW4gYmUgZm91bmQgdW5kZXIuIFxuLy8gV2UgZXhwZWN0IGEgXCJteS1hd2Vzb21lLW1vZHVsZS5tZFwiIGZpbGUgaW4gdGhpcyBkaXJlY3RvcnkuXG4vLyBUaGUgUkVBRE1FLm1kIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQgZnJvbSB0aGlzIGZpbGUuXG5uZXcgQXp1cmVDb250YWluZXJBcHBzQXJjKGFwcCwgXCJhenVyZS1jb250YWluZXItYXBwc1wiKTtcbmFwcC5zeW50aCgpOyJdfQ==
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGZNb2R1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RmTW9kdWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUE0QjtBQUU1Qiw0REFBdUQ7QUFDdkQsdUNBQW9DO0FBQ3BDLG1DQUFnQztBQUNoQyxtQ0FBZ0M7QUFFaEMsTUFBTSxxQkFBc0IsU0FBUSwrQkFBYTtJQUMvQyxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksYUFBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLDBCQUEyQixTQUFRLCtCQUFhO0lBQ3BELFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxTQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQUVELE1BQU0sV0FBWSxTQUFRLCtCQUFhO0lBQ3JDLFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxTQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQUVELE1BQU0sR0FBRyxHQUFHLElBQUksV0FBRyxFQUFFLENBQUM7QUFDdEIsbURBQW1EO0FBQ25ELDZEQUE2RDtBQUM3RCx1REFBdUQ7QUFDdkQsSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUN2RCxJQUFJLDBCQUEwQixDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0FBQ2pFLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBRXpDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFRGTW9kdWxlU3RhY2sgfSBmcm9tIFwiQGNka3RmL3RmLW1vZHVsZS1zdGFja1wiO1xuaW1wb3J0IHsgQXp1cmUgfSBmcm9tIFwiLi9saWIvYXp1cmVcIjtcbmltcG9ydCB7IEF3cyB9IGZyb20gXCIuL2xpYi9hd3NcIjtcbmltcG9ydCB7IEdjcCB9IGZyb20gXCIuL2xpYi9nY3BcIjtcblxuY2xhc3MgQXp1cmVDb250YWluZXJBcHBzQXJjIGV4dGVuZHMgVEZNb2R1bGVTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IEF6dXJlKHRoaXMsIFwiYWNhXCIpO1xuICB9XG59XG5cbmNsYXNzIEVsYXN0aWNDb250YWluZXJTZXJ2aWNlQXJjIGV4dGVuZHMgVEZNb2R1bGVTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IEF3cyh0aGlzLCBcImF3c1wiKTtcbiAgfVxufVxuXG5jbGFzcyBDbG91ZFJ1bkFyYyBleHRlbmRzIFRGTW9kdWxlU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBHY3AodGhpcywgXCJjclwiKTtcbiAgfVxufVxuXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG4vLyBUaGlzIGlzIHRoZSBuYW1lIHRoZSBtb2R1bGUgY2FuIGJlIGZvdW5kIHVuZGVyLiBcbi8vIFdlIGV4cGVjdCBhIFwibXktYXdlc29tZS1tb2R1bGUubWRcIiBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LlxuLy8gVGhlIFJFQURNRS5tZCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGZyb20gdGhpcyBmaWxlLlxubmV3IEF6dXJlQ29udGFpbmVyQXBwc0FyYyhhcHAsIFwiYXp1cmUtY29udGFpbmVyLWFwcHNcIik7XG5uZXcgRWxhc3RpY0NvbnRhaW5lclNlcnZpY2VBcmMoYXBwLCBcImVsYXN0aWMtY29udGFpbmVyLXNlcnZpY2VcIik7XG5uZXcgQ2xvdWRSdW5BcmMoYXBwLCBcImdvb2dsZS1jbG91ZC1ydW5cIik7XG5cbmFwcC5zeW50aCgpOyJdfQ==
@@ -7,7 +7,7 @@
7
7
 
8
8
  ```hcl
9
9
  module "arc_on_aca" {
10
- source = "juho.saarinen/terraform-cdk-serverless-github-actions-runner-controller.git//modules/azure-container-apps"
10
+ source = "Hi-Fi/serverless-github-actions-runner-controller/cdk//modules/azure-container-apps"
11
11
  }
12
12
  ```
13
13
  <!-- BEGIN_TF_DOCS -->
@@ -0,0 +1,66 @@
1
+ # Actions Runner Controller (ARC) on Elastic Container Service (ECS)
2
+
3
+ > [!WARNING]
4
+ > This is currently PoC level thing for module publishing. Not ready for production or any use
5
+
6
+ ## Usage
7
+
8
+ ```hcl
9
+ module "arc_on_aca" {
10
+ source = "Hi-Fi/serverless-github-actions-runner-controller/cdk//modules/elastic-container-service"
11
+ }
12
+ ```
13
+ <!-- BEGIN_TF_DOCS -->
14
+ ## Requirements
15
+
16
+ | Name | Version |
17
+ |------|---------|
18
+ | <a name="requirement_aws"></a> [aws](#requirement\_aws) | 5.96.0 |
19
+
20
+ ## Providers
21
+
22
+ | Name | Version |
23
+ |------|---------|
24
+ | <a name="provider_aws"></a> [aws](#provider\_aws) | 5.96.0 |
25
+
26
+ ## Modules
27
+
28
+ No modules.
29
+
30
+ ## Resources
31
+
32
+ | Name | Type |
33
+ |------|------|
34
+ | [aws_cloudwatch_log_group.aws_AutoscalerLogGroup_BFE58053](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/cloudwatch_log_group) | resource |
35
+ | [aws_cloudwatch_log_group.aws_RunnerLogGroup_711756A6](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/cloudwatch_log_group) | resource |
36
+ | [aws_ecs_cluster.aws_Cluster_BA268616](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/ecs_cluster) | resource |
37
+ | [aws_ecs_service.aws_AutoscalerService_C7C3AA3C](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/ecs_service) | resource |
38
+ | [aws_ecs_task_definition.aws_AutoscalerTaskDefinition_24A76F67](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/ecs_task_definition) | resource |
39
+ | [aws_ecs_task_definition.aws_RunnerTaskDefinition_9C7563BE](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/ecs_task_definition) | resource |
40
+ | [aws_efs_file_system.aws_efs_B3BBB350](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/efs_file_system) | resource |
41
+ | [aws_efs_file_system.aws_externalsEfs_C15353C9](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/efs_file_system) | resource |
42
+ | [aws_efs_mount_target.aws_EfsMountTarget_B2BDD3E5](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/efs_mount_target) | resource |
43
+ | [aws_efs_mount_target.aws_ExternalsEfsMountTarget_2D9AE418](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/efs_mount_target) | resource |
44
+ | [aws_iam_policy.aws_AutoscalerPolicy_FF16A997](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_policy) | resource |
45
+ | [aws_iam_policy.aws_RunnerPolicy_7B21DB81](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_policy) | resource |
46
+ | [aws_iam_role.aws_AutoscalerRole_CEB26423](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role) | resource |
47
+ | [aws_iam_role.aws_RunnerRole_75263C23](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role) | resource |
48
+ | [aws_iam_role.aws_TaskExecutionRole_FAB64402](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role) | resource |
49
+ | [aws_iam_role_policy_attachment.aws_AutoscalerPolicyAttachment_5402A0C0](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role_policy_attachment) | resource |
50
+ | [aws_iam_role_policy_attachment.aws_RunnerPolicyAttachment_A293771C](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role_policy_attachment) | resource |
51
+ | [aws_caller_identity.aws_Identity_FDC445BF](https://registry.terraform.io/providers/aws/5.96.0/docs/data-sources/caller_identity) | data source |
52
+ | [aws_region.aws_Region_7477CA06](https://registry.terraform.io/providers/aws/5.96.0/docs/data-sources/region) | data source |
53
+ | [aws_security_groups.aws_SecurityGroups_BAABB08D](https://registry.terraform.io/providers/aws/5.96.0/docs/data-sources/security_groups) | data source |
54
+ | [aws_subnets.aws_Subnets_75E5377D](https://registry.terraform.io/providers/aws/5.96.0/docs/data-sources/subnets) | data source |
55
+
56
+ ## Inputs
57
+
58
+ | Name | Description | Type | Default | Required |
59
+ |------|-------------|------|---------|:--------:|
60
+ | <a name="input_aws_PAT_4017AC3F"></a> [aws\_PAT\_4017AC3F](#input\_aws\_PAT\_4017AC3F) | Github PAT with Actions:Read and Admin:Read+Write scopes | `any` | n/a | yes |
61
+ | <a name="input_aws_github_config_url_BFDD14B2"></a> [aws\_github\_config\_url\_BFDD14B2](#input\_aws\_github\_config\_url\_BFDD14B2) | Github URL where runners should register to. Format https://<GitHub host>/<your\_enterprise/org/repo> | `any` | n/a | yes |
62
+
63
+ ## Outputs
64
+
65
+ No outputs.
66
+ <!-- END_TF_DOCS -->