Skip to content

Commit f3616b6

Browse files
committed
deploy with CDK
1 parent ef05b2a commit f3616b6

File tree

9 files changed

+369
-5
lines changed

9 files changed

+369
-5
lines changed

.github/workflows/test-deploy-publish.yml

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,38 @@ jobs:
6666
- name: Checkout code
6767
uses: actions/checkout@v4
6868

69-
- name: Deploy
69+
- name: Setup Node.js
70+
uses: actions/setup-node@v4
71+
with:
72+
node-version: "22"
73+
74+
- name: Install AWS CDK
75+
run: npm install -g aws-cdk
76+
77+
- uses: aws-actions/configure-aws-credentials@v4
78+
with:
79+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
80+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
81+
aws-region: ${{ vars.AWS_REGION }}
82+
83+
- name: Build
84+
run: CGO_ENABLED=0 go build -tags lambda.norpc -ldflags="-s -w" -o bootstrap ./lambda
85+
86+
- name: CDK Deploy
87+
if: github.ref_name == 'develop' || github.ref_name == 'main'
88+
env:
89+
AWS_REGION: ${{ matrix.region }}
90+
ENVIRONMENT: ${{ vars.STAGE }}
91+
LAMBDA_ROLE: ${{ vars.LAMBDA_ROLE }}
92+
API_KEY_TABLE: ${{ vars.API_KEY_TABLE }}
93+
TOTP_TABLE: ${{ vars.TOTP_TABLE }}
94+
WEBAUTHN_TABLE: ${{ vars.WEBAUTHN_TABLE }}
95+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
96+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
97+
run: cd cdk && cdk deploy --require-approval never
98+
99+
- name: Serverless Deploy
100+
if: github.ref_name == 'develop' || github.ref_name == 'main'
70101
run: |
71102
docker compose run \
72103
-e LAMBDA_ROLE=${{ vars.LAMBDA_ROLE }} \

Dockerfile

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,24 @@
1-
FROM golang:1.23
1+
FROM node:22
2+
3+
ENV GO_VERSION=1.24.2
4+
5+
ADD https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip .
6+
ADD https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz .
7+
8+
RUN <<EOF
9+
unzip awscli-exe-linux-x86_64.zip
10+
rm awscli-exe-linux-x86_64.zip
11+
./aws/install
12+
rm -rf ./aws
13+
14+
tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz
15+
rm go${GO_VERSION}.linux-amd64.tar.gz
16+
ln -s /usr/local/go/bin/go /usr/local/bin/go
17+
18+
npm install --ignore-scripts --global aws-cdk
19+
20+
adduser user
21+
EOF
222

323
RUN curl -o- -L --proto "=https" https://slss.io/install | VERSION=3.39.0 bash && \
424
mv $HOME/.serverless/bin/serverless /usr/local/bin && \

cdk/.gitignore

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
*.exe
2+
*.exe~
3+
*.dll
4+
*.so
5+
*.dylib
6+
7+
# Test binary, built with `go test -c`
8+
*.test
9+
10+
# Output of the go coverage tool, specifically when used with LiteIDE
11+
*.out
12+
13+
# go.sum should be committed
14+
!go.sum
15+
16+
# CDK asset staging directory
17+
.cdk.staging
18+
cdk.out

cdk/cdk.go

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package main
2+
3+
import (
4+
"os"
5+
6+
"github.com/aws/aws-cdk-go/awscdk/v2"
7+
"github.com/aws/aws-cdk-go/awscdk/v2/awsapigateway"
8+
"github.com/aws/aws-cdk-go/awscdk/v2/awsiam"
9+
"github.com/aws/aws-cdk-go/awscdk/v2/awslambda"
10+
"github.com/aws/aws-cdk-go/awscdk/v2/awslogs"
11+
"github.com/aws/aws-cdk-go/awscdk/v2/awss3assets"
12+
"github.com/aws/constructs-go/constructs/v10"
13+
"github.com/aws/jsii-runtime-go"
14+
)
15+
16+
type CdkStackProps struct {
17+
awscdk.StackProps
18+
}
19+
20+
func NewCdkStack(scope constructs.Construct, id string, props *CdkStackProps) awscdk.Stack {
21+
var sprops awscdk.StackProps
22+
if props != nil {
23+
sprops = props.StackProps
24+
}
25+
stack := awscdk.NewStack(scope, &id, &sprops)
26+
27+
env := getEnv("ENVIRONMENT", "dev")
28+
apiKeyTable := getEnv("API_KEY_TABLE", "api-key")
29+
totpTable := getEnv("TOTP_TABLE", "totp")
30+
webauthnTable := getEnv("WEBAUTHN_TABLE", "webauthn")
31+
lambdaRoleArn := getEnv("LAMBDA_ROLE", "")
32+
if lambdaRoleArn == "" {
33+
panic("LAMBDA_ROLE environment variable must be set")
34+
}
35+
36+
functionName := id
37+
38+
logGroup := awslogs.NewLogGroup(stack, jsii.String("LogGroup"), &awslogs.LogGroupProps{
39+
LogGroupName: jsii.String("/aws/lambda/" + functionName),
40+
Retention: awslogs.RetentionDays_TWO_MONTHS,
41+
RemovalPolicy: awscdk.RemovalPolicy_DESTROY, // Remove logs when stack is deleted
42+
})
43+
44+
role := awsiam.Role_FromRoleArn(stack, jsii.String("Role"), jsii.String(lambdaRoleArn), nil)
45+
46+
function := awslambda.NewFunction(stack, jsii.String("Function"), &awslambda.FunctionProps{
47+
Code: awslambda.Code_FromAsset(jsii.String("../"), &awss3assets.AssetOptions{
48+
// include only the bootstrap file
49+
Exclude: jsii.Strings("**", "!bootstrap"),
50+
}),
51+
Environment: &map[string]*string{
52+
"API_KEY_TABLE": jsii.String(apiKeyTable),
53+
"TOTP_TABLE": jsii.String(totpTable),
54+
"WEBAUTHN_TABLE": jsii.String(webauthnTable),
55+
},
56+
FunctionName: &functionName,
57+
Handler: jsii.String("bootstrap"),
58+
LoggingFormat: awslambda.LoggingFormat_JSON,
59+
LogGroup: logGroup,
60+
MemorySize: jsii.Number(1024.0),
61+
Role: role,
62+
Runtime: awslambda.Runtime_PROVIDED_AL2023(),
63+
Timeout: awscdk.Duration_Seconds(jsii.Number(5)),
64+
})
65+
66+
api := awsapigateway.NewRestApi(stack, jsii.String("API"), &awsapigateway.RestApiProps{
67+
RestApiName: jsii.String(functionName),
68+
DeployOptions: &awsapigateway.StageOptions{
69+
StageName: jsii.String(env),
70+
},
71+
})
72+
73+
proxy := api.Root().AddResource(jsii.String("{webauthn+}"), nil)
74+
proxy.AddMethod(jsii.String("ANY"), awsapigateway.NewLambdaIntegration(function,
75+
&awsapigateway.LambdaIntegrationOptions{AllowTestInvoke: jsii.Bool(false)}), nil)
76+
77+
envTag := env
78+
if env == "dev" {
79+
envTag = "staging"
80+
}
81+
awscdk.Tags_Of(stack).Add(jsii.String("itse_app_env"), jsii.String(envTag), nil)
82+
awscdk.Tags_Of(stack).Add(jsii.String("itse_app_name"), jsii.String("mfa-api"), nil)
83+
awscdk.Tags_Of(stack).Add(jsii.String("itse_app_customer"), jsii.String("shared"), nil)
84+
awscdk.Tags_Of(stack).Add(jsii.String("managed_by"), jsii.String("cdk"), nil)
85+
86+
return stack
87+
}
88+
89+
func main() {
90+
defer jsii.Close()
91+
92+
app := awscdk.NewApp(nil)
93+
94+
env := os.Getenv("ENVIRONMENT")
95+
if env == "" {
96+
env = "cdk"
97+
}
98+
99+
NewCdkStack(app, "twosv-api-"+env, &CdkStackProps{
100+
awscdk.StackProps{
101+
Env: &awscdk.Environment{
102+
Region: jsii.String(os.Getenv("AWS_REGION")),
103+
},
104+
Tags: &map[string]*string{
105+
"managed_by": jsii.String("cdk"),
106+
"itse_app_name": jsii.String("cloudflare-scanner"),
107+
"itse_app_customer": jsii.String("gtis"),
108+
"itse_app_env": jsii.String("production"),
109+
},
110+
},
111+
})
112+
113+
app.Synth(nil)
114+
}
115+
116+
func getEnv(key, fallback string) string {
117+
if value, ok := os.LookupEnv(key); ok {
118+
return value
119+
}
120+
return fallback
121+
}

cdk/cdk.json

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
{
2+
"app": "go mod download && go run cdk.go",
3+
"watch": {
4+
"include": [
5+
"**"
6+
],
7+
"exclude": [
8+
"README.md",
9+
"cdk*.json",
10+
"go.mod",
11+
"go.sum",
12+
"**/*test.go"
13+
]
14+
},
15+
"context": {
16+
"@aws-cdk/aws-lambda:recognizeLayerVersion": true,
17+
"@aws-cdk/core:checkSecretUsage": true,
18+
"@aws-cdk/core:target-partitions": [
19+
"aws",
20+
"aws-cn"
21+
],
22+
"@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
23+
"@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
24+
"@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true,
25+
"@aws-cdk/aws-iam:minimizePolicies": true,
26+
"@aws-cdk/core:validateSnapshotRemovalPolicy": true,
27+
"@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true,
28+
"@aws-cdk/aws-s3:createDefaultLoggingPolicy": true,
29+
"@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true,
30+
"@aws-cdk/aws-apigateway:disableCloudWatchRole": true,
31+
"@aws-cdk/core:enablePartitionLiterals": true,
32+
"@aws-cdk/aws-events:eventsTargetQueueSameAccount": true,
33+
"@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true,
34+
"@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true,
35+
"@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true,
36+
"@aws-cdk/aws-route53-patters:useCertificate": true,
37+
"@aws-cdk/customresources:installLatestAwsSdkDefault": false,
38+
"@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true,
39+
"@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true,
40+
"@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true,
41+
"@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true,
42+
"@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true,
43+
"@aws-cdk/aws-redshift:columnId": true,
44+
"@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true,
45+
"@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true,
46+
"@aws-cdk/aws-apigateway:requestValidatorUniqueId": true,
47+
"@aws-cdk/aws-kms:aliasNameRef": true,
48+
"@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true,
49+
"@aws-cdk/core:includePrefixInUniqueNameGeneration": true,
50+
"@aws-cdk/aws-efs:denyAnonymousAccess": true,
51+
"@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true,
52+
"@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true,
53+
"@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true,
54+
"@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true,
55+
"@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true,
56+
"@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true,
57+
"@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true,
58+
"@aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction": true,
59+
"@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": true,
60+
"@aws-cdk/aws-codepipeline:defaultPipelineTypeToV2": true,
61+
"@aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope": true,
62+
"@aws-cdk/aws-eks:nodegroupNameAttribute": true,
63+
"@aws-cdk/aws-ec2:ebsDefaultGp3Volume": true,
64+
"@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm": true,
65+
"@aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault": false,
66+
"@aws-cdk/aws-s3:keepNotificationInImportedBucket": false,
67+
"@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature": false,
68+
"@aws-cdk/aws-ecs:disableEcsImdsBlocking": true,
69+
"@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions": true,
70+
"@aws-cdk/aws-dynamodb:resourcePolicyPerReplica": true,
71+
"@aws-cdk/aws-ec2:ec2SumTImeoutEnabled": true,
72+
"@aws-cdk/aws-appsync:appSyncGraphQLAPIScopeLambdaPermission": true,
73+
"@aws-cdk/aws-rds:setCorrectValueForDatabaseInstanceReadReplicaInstanceResourceId": true,
74+
"@aws-cdk/core:cfnIncludeRejectComplexResourceUpdateCreatePolicyIntrinsics": true,
75+
"@aws-cdk/aws-lambda-nodejs:sdkV3ExcludeSmithyPackages": true,
76+
"@aws-cdk/aws-stepfunctions-tasks:fixRunEcsTaskPolicy": true,
77+
"@aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault": true,
78+
"@aws-cdk/aws-route53-targets:userPoolDomainNameMethodWithoutCustomResource": true,
79+
"@aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault": true,
80+
"@aws-cdk/aws-iam:oidcRejectUnauthorizedConnections": true,
81+
"@aws-cdk/core:enableAdditionalMetadataCollection": true,
82+
"@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy": true,
83+
"@aws-cdk/aws-s3:setUniqueReplicationRoleName": true
84+
}
85+
}

cdk/go.mod

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
module cdk
2+
3+
go 1.23.0
4+
5+
toolchain go1.24.1
6+
7+
require (
8+
github.com/aws/aws-cdk-go/awscdk/v2 v2.185.0
9+
github.com/aws/constructs-go/constructs/v10 v10.4.2
10+
github.com/aws/jsii-runtime-go v1.109.0
11+
)
12+
13+
require (
14+
github.com/Masterminds/semver/v3 v3.3.1 // indirect
15+
github.com/cdklabs/awscdk-asset-awscli-go/awscliv1/v2 v2.2.227 // indirect
16+
github.com/cdklabs/awscdk-asset-node-proxy-agent-go/nodeproxyagentv6/v2 v2.1.0 // indirect
17+
github.com/cdklabs/cloud-assembly-schema-go/awscdkcloudassemblyschema/v40 v40.7.0 // indirect
18+
github.com/fatih/color v1.18.0 // indirect
19+
github.com/mattn/go-colorable v0.1.13 // indirect
20+
github.com/mattn/go-isatty v0.0.20 // indirect
21+
github.com/yuin/goldmark v1.4.13 // indirect
22+
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
23+
golang.org/x/mod v0.24.0 // indirect
24+
golang.org/x/sync v0.12.0 // indirect
25+
golang.org/x/sys v0.31.0 // indirect
26+
golang.org/x/tools v0.31.0 // indirect
27+
)

cdk/go.sum

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4=
2+
github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
3+
github.com/aws/aws-cdk-go/awscdk/v2 v2.185.0 h1:9GW3260WNV5FzKcV8joMKIo41JF1GZuEDn9berevbUs=
4+
github.com/aws/aws-cdk-go/awscdk/v2 v2.185.0/go.mod h1:DPhzICINlx7zXMrKjRGuta/bAAAaeBQbeStBzf8JHVI=
5+
github.com/aws/constructs-go/constructs/v10 v10.4.2 h1:+hDLTsFGLJmKIn0Dg20vWpKBrVnFrEWYgTEY5UiTEG8=
6+
github.com/aws/constructs-go/constructs/v10 v10.4.2/go.mod h1:cXsNCKDV+9eR9zYYfwy6QuE4uPFp6jsq6TtH1MwBx9w=
7+
github.com/aws/jsii-runtime-go v1.109.0 h1:PQkwf6bNxcqEabPh/C4Dnqm31WL0Uh47gGj1Q9ojwhs=
8+
github.com/aws/jsii-runtime-go v1.109.0/go.mod h1:eLDUEd0lRYsu2WoR+EoApYPz6ibG7JOaJgbL0IlD/m8=
9+
github.com/cdklabs/awscdk-asset-awscli-go/awscliv1/v2 v2.2.227 h1:8ghiL3sdoTn8EGSWyyAmt7dO/h30+fgJK4nEA32jMPE=
10+
github.com/cdklabs/awscdk-asset-awscli-go/awscliv1/v2 v2.2.227/go.mod h1:DdG63+hiLpqqBWufXgZDgXuZm31yQdTd96M2HyqQllQ=
11+
github.com/cdklabs/awscdk-asset-node-proxy-agent-go/nodeproxyagentv6/v2 v2.1.0 h1:kElXjprC8wkpJu58vp+WFH6z0AJw4zitg5iSKJPKe3c=
12+
github.com/cdklabs/awscdk-asset-node-proxy-agent-go/nodeproxyagentv6/v2 v2.1.0/go.mod h1:JY4UnvNa1YDGQ4H5wohXTHl6YVY3uCDUWl4JYUrQfb8=
13+
github.com/cdklabs/cloud-assembly-schema-go/awscdkcloudassemblyschema/v40 v40.7.0 h1:ult7nwu68LJQwC9rLKrwQgFzH7CHT1IQVqtTFCgTiEE=
14+
github.com/cdklabs/cloud-assembly-schema-go/awscdkcloudassemblyschema/v40 v40.7.0/go.mod h1:ce9S9a2dfGJqzzXHKgHiHCybH63d5MDkC18Ym0sHeHg=
15+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
16+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
17+
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
18+
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
19+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
20+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
21+
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
22+
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
23+
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
24+
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
25+
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
26+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
27+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
28+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
29+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
30+
github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=
31+
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
32+
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
33+
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
34+
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=
35+
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
36+
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
37+
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
38+
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
39+
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
40+
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
41+
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
42+
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
43+
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
44+
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
45+
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
46+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
47+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
48+
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
49+
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
50+
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
51+
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
52+
golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU=
53+
golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ=
54+
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
55+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
56+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

docker-compose.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,12 @@ services:
5454
volumes:
5555
- .:/src
5656
command: ["bash"]
57+
58+
cdk:
59+
build: .
60+
volumes:
61+
- ./:/src
62+
user: 1000:1001
63+
env_file:
64+
- path: local.env
65+
required: false

0 commit comments

Comments
 (0)