UNPKG

@cloudgardener/cdk-aws-fargate-github-actions-runner

Version:

CDK construct library to deploy GitHub Actions self-hosted runner to AWS Fargate.

74 lines 10.4 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.GithubActionsRunner = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const path = require("path"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const constructs_1 = require("constructs"); class GithubActionsRunner extends constructs_1.Construct { constructor(scope, id, props) { super(scope, id); const vpc = props.vpc ? props.vpc : new aws_cdk_lib_1.aws_ec2.Vpc(this, "Vpc", { maxAzs: 1, // Default is all AZs in region natGateways: 0, gatewayEndpoints: { s3: { service: aws_cdk_lib_1.aws_ec2.GatewayVpcEndpointAwsService.S3, }, dynamodb: { service: aws_cdk_lib_1.aws_ec2.GatewayVpcEndpointAwsService.DYNAMODB, }, }, }); const cluster = props.cluster ? props.cluster : new aws_cdk_lib_1.aws_ecs.Cluster(this, "Cluster", { vpc: vpc, enableFargateCapacityProviders: true, }); const logRetentionDays = props.logRetentionDays ?? 7; const useSpotCapacity = props.useSpotCapacity ?? true; const taskDefinition = new aws_cdk_lib_1.aws_ecs.FargateTaskDefinition(this, "TaskDefinition"); taskDefinition.addContainer("Container", { image: aws_cdk_lib_1.aws_ecs.ContainerImage.fromAsset(path.resolve(__dirname, "../image")), logging: aws_cdk_lib_1.aws_ecs.LogDrivers.awsLogs({ streamPrefix: "GitHubActionsRunner", logRetention: logRetentionDays, }), environment: { GITHUB_ACTIONS_RUNNER_CONTEXT: props.runnerContext, }, secrets: { GITHUB_ACCESS_TOKEN: props.githubToken, }, }); const service = new aws_cdk_lib_1.aws_ecs.FargateService(this, "Service", { cluster: cluster, taskDefinition: taskDefinition, platformVersion: aws_cdk_lib_1.aws_ecs.FargatePlatformVersion.LATEST, desiredCount: 1, circuitBreaker: { rollback: true }, vpcSubnets: { subnetType: aws_cdk_lib_1.aws_ec2.SubnetType.PUBLIC }, assignPublicIp: true, capacityProviderStrategies: [ { capacityProvider: "FARGATE_SPOT", weight: useSpotCapacity ? 1 : 0, }, { capacityProvider: "FARGATE", weight: useSpotCapacity ? 0 : 1, }, ], }); this.connections = service.connections; this.role = taskDefinition.taskRole; } } exports.GithubActionsRunner = GithubActionsRunner; _a = JSII_RTTI_SYMBOL_1; GithubActionsRunner[_a] = { fqn: "@cloudgardener/cdk-aws-fargate-github-actions-runner.GithubActionsRunner", version: "1.0.530" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsNkNBQTZFO0FBQzdFLDJDQUF1QztBQXVDdkMsTUFBYSxtQkFBb0IsU0FBUSxzQkFBUztJQVdoRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStCO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUc7WUFDbkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQ1gsQ0FBQyxDQUFDLElBQUkscUJBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtnQkFDdkIsTUFBTSxFQUFFLENBQUMsRUFBRSwrQkFBK0I7Z0JBQzFDLFdBQVcsRUFBRSxDQUFDO2dCQUNkLGdCQUFnQixFQUFFO29CQUNoQixFQUFFLEVBQUU7d0JBQ0YsT0FBTyxFQUFFLHFCQUFHLENBQUMsNEJBQTRCLENBQUMsRUFBRTtxQkFDN0M7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE9BQU8sRUFBRSxxQkFBRyxDQUFDLDRCQUE0QixDQUFDLFFBQVE7cUJBQ25EO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1FBRVAsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU87WUFDM0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQ2YsQ0FBQyxDQUFDLElBQUkscUJBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtnQkFDL0IsR0FBRyxFQUFFLEdBQUc7Z0JBQ1IsOEJBQThCLEVBQUUsSUFBSTthQUNyQyxDQUFDLENBQUM7UUFFUCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUM7UUFFckQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUM7UUFFdEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxxQkFBRyxDQUFDLHFCQUFxQixDQUNsRCxJQUFJLEVBQ0osZ0JBQWdCLENBQ2pCLENBQUM7UUFFRixjQUFjLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRTtZQUN2QyxLQUFLLEVBQUUscUJBQUcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sRUFBRSxxQkFBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzlCLFlBQVksRUFBRSxxQkFBcUI7Z0JBQ25DLFlBQVksRUFBRSxnQkFBZ0I7YUFDL0IsQ0FBQztZQUNGLFdBQVcsRUFBRTtnQkFDWCw2QkFBNkIsRUFBRSxLQUFLLENBQUMsYUFBYTthQUNuRDtZQUNELE9BQU8sRUFBRTtnQkFDUCxtQkFBbUIsRUFBRSxLQUFLLENBQUMsV0FBVzthQUN2QztTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUN0RCxPQUFPLEVBQUUsT0FBTztZQUNoQixjQUFjLEVBQUUsY0FBYztZQUM5QixlQUFlLEVBQUUscUJBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNO1lBQ2xELFlBQVksRUFBRSxDQUFDO1lBQ2YsY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsQyxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUscUJBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ2pELGNBQWMsRUFBRSxJQUFJO1lBQ3BCLDBCQUEwQixFQUFFO2dCQUMxQjtvQkFDRSxnQkFBZ0IsRUFBRSxjQUFjO29CQUNoQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2hDO2dCQUNEO29CQUNFLGdCQUFnQixFQUFFLFNBQVM7b0JBQzNCLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDaEM7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUV2QyxJQUFJLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7SUFDdEMsQ0FBQzs7QUFsRkgsa0RBbUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgYXdzX2VjMiBhcyBlYzIsIGF3c19lY3MgYXMgZWNzLCBhd3NfaWFtIGFzIGlhbSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIHRoZSBHaXRodWJBY3Rpb25zUnVubmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0aHViQWN0aW9uc1J1bm5lclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgdG8gcnVuIHRoZSBjbHVzdGVyIGluXG4gICAqIEBkZWZhdWx0IC0gYSBuZXcgVlBDIGlzIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuICAvKipcbiAgICogVGhlIEVDUyBjbHVzdGVyIHRvIHJ1biB0aGUgdGFzayBpblxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IGNsdXN0ZXIgaXMgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3Rlcj86IGVjcy5JQ2x1c3RlcjtcbiAgLyoqXG4gICAqIFNlY3JldCBjb250YWluaW5nXG4gICAqIGEgR2l0SHViIFBlcnNvbmFsIEFjY2VzcyBUb2tlbiB0byBiZSB1c2VkXG4gICAqIGZvciB0aGUgcnVubmVyIGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBnaXRodWJUb2tlbjogZWNzLlNlY3JldDtcbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgcmVwb3NpdG9yeSB0byB1c2UgZm9yIHRoZSBydW5uZXJcbiAgICogQGV4YW1wbGUgXCJodHRwczovL2dpdGh1Yi5jb20vY2xvdWRnYXJkZW5lci9ydW5uZXItZGVtb1wiXG4gICAqL1xuICByZWFkb25seSBydW5uZXJDb250ZXh0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byBzdG9yZSB0aGUgR2l0SHViIHJ1bm5lciBsb2dzXG4gICAqIEBkZWZhdWx0IC0gNyBkYXlzXG4gICAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb25EYXlzPzogbnVtYmVyO1xuICAvKipcbiAgICogVXNlIEZhcmdhdGUgU1BPVCBjYXBhY2l0eVxuICAgKiBAZGVmYXVsdCAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHVzZVNwb3RDYXBhY2l0eT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBHaXRodWJBY3Rpb25zUnVubmVyIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgZWMyLklDb25uZWN0YWJsZSB7XG4gIC8qKlxuICAgKiBNYWtlcyBydW5uZXIgXCJjb25uZWN0YWJsZVwiXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uczogZWMyLkNvbm5lY3Rpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcnVubmVyXG4gICAqL1xuICByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEdpdGh1YkFjdGlvbnNSdW5uZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2cGMgPSBwcm9wcy52cGNcbiAgICAgID8gcHJvcHMudnBjXG4gICAgICA6IG5ldyBlYzIuVnBjKHRoaXMsIFwiVnBjXCIsIHtcbiAgICAgICAgICBtYXhBenM6IDEsIC8vIERlZmF1bHQgaXMgYWxsIEFacyBpbiByZWdpb25cbiAgICAgICAgICBuYXRHYXRld2F5czogMCxcbiAgICAgICAgICBnYXRld2F5RW5kcG9pbnRzOiB7XG4gICAgICAgICAgICBzMzoge1xuICAgICAgICAgICAgICBzZXJ2aWNlOiBlYzIuR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZS5TMyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkeW5hbW9kYjoge1xuICAgICAgICAgICAgICBzZXJ2aWNlOiBlYzIuR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZS5EWU5BTU9EQixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICBjb25zdCBjbHVzdGVyID0gcHJvcHMuY2x1c3RlclxuICAgICAgPyBwcm9wcy5jbHVzdGVyXG4gICAgICA6IG5ldyBlY3MuQ2x1c3Rlcih0aGlzLCBcIkNsdXN0ZXJcIiwge1xuICAgICAgICAgIHZwYzogdnBjLFxuICAgICAgICAgIGVuYWJsZUZhcmdhdGVDYXBhY2l0eVByb3ZpZGVyczogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICBjb25zdCBsb2dSZXRlbnRpb25EYXlzID0gcHJvcHMubG9nUmV0ZW50aW9uRGF5cyA/PyA3O1xuXG4gICAgY29uc3QgdXNlU3BvdENhcGFjaXR5ID0gcHJvcHMudXNlU3BvdENhcGFjaXR5ID8/IHRydWU7XG5cbiAgICBjb25zdCB0YXNrRGVmaW5pdGlvbiA9IG5ldyBlY3MuRmFyZ2F0ZVRhc2tEZWZpbml0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiVGFza0RlZmluaXRpb25cIlxuICAgICk7XG5cbiAgICB0YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoXCJDb250YWluZXJcIiwge1xuICAgICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tQXNzZXQocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgXCIuLi9pbWFnZVwiKSksXG4gICAgICBsb2dnaW5nOiBlY3MuTG9nRHJpdmVycy5hd3NMb2dzKHtcbiAgICAgICAgc3RyZWFtUHJlZml4OiBcIkdpdEh1YkFjdGlvbnNSdW5uZXJcIixcbiAgICAgICAgbG9nUmV0ZW50aW9uOiBsb2dSZXRlbnRpb25EYXlzLFxuICAgICAgfSksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBHSVRIVUJfQUNUSU9OU19SVU5ORVJfQ09OVEVYVDogcHJvcHMucnVubmVyQ29udGV4dCxcbiAgICAgIH0sXG4gICAgICBzZWNyZXRzOiB7XG4gICAgICAgIEdJVEhVQl9BQ0NFU1NfVE9LRU46IHByb3BzLmdpdGh1YlRva2VuLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZWNzLkZhcmdhdGVTZXJ2aWNlKHRoaXMsIFwiU2VydmljZVwiLCB7XG4gICAgICBjbHVzdGVyOiBjbHVzdGVyLFxuICAgICAgdGFza0RlZmluaXRpb246IHRhc2tEZWZpbml0aW9uLFxuICAgICAgcGxhdGZvcm1WZXJzaW9uOiBlY3MuRmFyZ2F0ZVBsYXRmb3JtVmVyc2lvbi5MQVRFU1QsXG4gICAgICBkZXNpcmVkQ291bnQ6IDEsXG4gICAgICBjaXJjdWl0QnJlYWtlcjogeyByb2xsYmFjazogdHJ1ZSB9LFxuICAgICAgdnBjU3VibmV0czogeyBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMgfSxcbiAgICAgIGFzc2lnblB1YmxpY0lwOiB0cnVlLFxuICAgICAgY2FwYWNpdHlQcm92aWRlclN0cmF0ZWdpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNhcGFjaXR5UHJvdmlkZXI6IFwiRkFSR0FURV9TUE9UXCIsXG4gICAgICAgICAgd2VpZ2h0OiB1c2VTcG90Q2FwYWNpdHkgPyAxIDogMCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNhcGFjaXR5UHJvdmlkZXI6IFwiRkFSR0FURVwiLFxuICAgICAgICAgIHdlaWdodDogdXNlU3BvdENhcGFjaXR5ID8gMCA6IDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHNlcnZpY2UuY29ubmVjdGlvbnM7XG5cbiAgICB0aGlzLnJvbGUgPSB0YXNrRGVmaW5pdGlvbi50YXNrUm9sZTtcbiAgfVxufVxuIl19