Comments (25)
Apparently changes to the runner labels have been made which seems to add additional labels to the respectful lambda environment variables. Due to this, it exceeded AWS 4kb limit and throws the error. We don't have many additional labels and they are fairly short. I can't image we are the only ones getting this error now.
I have since reverted back to 5.2.1 and the problem is gone.
from terraform-aws-github-runner.
Thanks for reporting. But 5.3.0 should not be breaking. It adds a feature for the multi runners to set a priority to the matcher. See here teh diff. Only terraform code 1829721
Do you know which parameter is causing the issue? Are you using a multi runner setup?
from terraform-aws-github-runner.
Adding ar ref to an AWS post, total size hsould be less than 4K, https://repost.aws/knowledge-center/lambda-environment-variable-size
Which mean we have to re-thing how we configure the lambda's
from terraform-aws-github-runner.
Can you share your configuration, of course without the sensitive part? So we can reproduce the isse.
from terraform-aws-github-runner.
Quickly had a chat with Amazon, there seems no easy way to pro-active warn on the size.
from terraform-aws-github-runner.
This script should give some insights in the sizes of the environment variables per function.
#!/bin/bash
functions=$(aws lambda list-functions --query 'Functions[*].FunctionName' --output text)
for function in $functions
do
env_vars=$(aws lambda get-function-configuration --function-name $function --query 'Environment.Variables' --output text)
size=$(echo -n $env_vars | wc -c)
printf "%-5s bytes -> %s\n" $size $function
done
from terraform-aws-github-runner.
Thanks for reporting. But 5.3.0 should not be breaking. It adds a feature for the multi runners to set a priority to the matcher. See here teh diff. Only terraform code 1829721
Do you know which parameter is causing the issue? Are you using a multi runner setup?
I don't know which parameter is causing the issue persay. I just know that when I reverted back to 5.2.1, it stopped erroring with the 4KB lambda update limit. Yes, I am using the multi-runner setup.
from terraform-aws-github-runner.
Can you share your configuration, of course without the sensitive part? So we can reproduce the isse.
Yes, I can shared it once I clean up the sensitive details. Let me ask, what specifically are you looking for in regards to the configuration, the whole multi-runner setup? Are you wanting the module output or terraform code?
from terraform-aws-github-runner.
@npalm please let me know specifically what you are looking for and I'll scrub it and share it. Obviously, due to the possibility of sensitive information, I want to share at least as possible. Thanks!
from terraform-aws-github-runner.
I have checked our example, they are all on the save side of the 4KB limit. Also our productions deployments are all on the safe side. But indeed depending on how large names you chose and how many paramaters are defined the list can differ a lot. The potential problem exists on all labmda's. In my opnion the risk is the biggest on the webhook in combinaiton with the multi-runner. In that case each matcher (runner) creates on or more rules. Which ar passed as in a varaible.
The new release introduce an extra attribute. Which seems in your case the one that is exceeding the limit. Would like just to understand how big your setup is roughtly.
In the end we should find a solution. Which will be most likely moving away from the environment varialbes for Lambda.
I ran another experiament to calculate the environment variables. Which is using the module output for the webhook as josn. Look up the environment variables and pipe it to wc -c
. This results seems to give a more accurate count.
from terraform-aws-github-runner.
These are the env vars from one of my runner lambdas:
ENVIRONMENT : vvvvvvvvvvvvvvvvvvvvvvvvvvvvv
LOG_LEVEL : debug
MINIMUM_RUNNING_TIME_IN_MINUTES : 5
NODE_TLS_REJECT_UNAUTHORIZED : 1
PARAMETER_GITHUB_APP_ID_NAME : /github-action-runners/prod-runners/app/github_app_id
PARAMETER_GITHUB_APP_KEY_BASE64_NAME : /github-action-runners/prod-runners/app/github_app_key_base64
POWERTOOLS_LOGGER_LOG_EVENT : true
RUNNER_BOOT_TIME_IN_MINUTES : 5
SCALE_DOWN_CONFIG : [{\"cron\":\"* * 9-23 * * 1-5\",\"evictionStrategy\":\"oldest_first\",\"idleCount\":10,\"timeZone\":\"Europe/Amsterdam\"}]
SERVICE_NAME : runners-scale-down
And I have 11 runner types.
from terraform-aws-github-runner.
These are the env vars from one of my runner lambdas:
ENVIRONMENT : vvvvvvvvvvvvvvvvvvvvvvvvvvvvv LOG_LEVEL : debug MINIMUM_RUNNING_TIME_IN_MINUTES : 5 NODE_TLS_REJECT_UNAUTHORIZED : 1 PARAMETER_GITHUB_APP_ID_NAME : /github-action-runners/prod-runners/app/github_app_id PARAMETER_GITHUB_APP_KEY_BASE64_NAME : /github-action-runners/prod-runners/app/github_app_key_base64 POWERTOOLS_LOGGER_LOG_EVENT : true RUNNER_BOOT_TIME_IN_MINUTES : 5 SCALE_DOWN_CONFIG : [{\"cron\":\"* * 9-23 * * 1-5\",\"evictionStrategy\":\"oldest_first\",\"idleCount\":10,\"timeZone\":\"Europe/Amsterdam\"}] SERVICE_NAME : runners-scale-down
And I have 11 runner types.
This would not exceed 4KB, or does it?
from terraform-aws-github-runner.
These are the env vars from one of my runner lambdas:
ENVIRONMENT : vvvvvvvvvvvvvvvvvvvvvvvvvvvvv LOG_LEVEL : debug MINIMUM_RUNNING_TIME_IN_MINUTES : 5 NODE_TLS_REJECT_UNAUTHORIZED : 1 PARAMETER_GITHUB_APP_ID_NAME : /github-action-runners/prod-runners/app/github_app_id PARAMETER_GITHUB_APP_KEY_BASE64_NAME : /github-action-runners/prod-runners/app/github_app_key_base64 POWERTOOLS_LOGGER_LOG_EVENT : true RUNNER_BOOT_TIME_IN_MINUTES : 5 SCALE_DOWN_CONFIG : [{\"cron\":\"* * 9-23 * * 1-5\",\"evictionStrategy\":\"oldest_first\",\"idleCount\":10,\"timeZone\":\"Europe/Amsterdam\"}] SERVICE_NAME : runners-scale-down
And I have 11 runner types.
This would not exceed 4KB, or does it?
Nope, however using your script, it does show that the webhook lambda to be the culprit
3646 bytes -> nnnn-runners-webhook
from terraform-aws-github-runner.
Hi @npalm here is the output from the trying to go from 5.2.1 to 5.4.0
│ Error: updating Lambda Function (nnnn-runners-webhook) configuration: operation error Lambda: UpdateFunctionConfiguration, https response error StatusCode: 400, RequestID: c9a4f8f7-8320-4e57-8082-3ea8aadea5c3, InvalidParameterValueException: Lambda was unable to configure your environment variables because the environment variables you have provided exceeded the 4KB limit. String measured:
{
"POWERTOOLS_LOGGER_LOG_EVENT": "true",
"POWERTOOLS_TRACER_CAPTURE_ERROR": "false",
"RUNNER_CONFIG": '[{"arn":"arn:aws:sqs:us-east-1:123456789012:nnnn-runners-nnnnn-arm-2xlarge-queued-builds.fifo","fifo":true,"id":"https://sqs.us-east-1.amazonaws.com/123456789012/nnnn-runners-nnnnn-arm-2xlarge-queued-builds.fifo","key":"linux-arm-2xlarge","matcherConfig":{"exactMatch":true,"labelMatchers":[["self-hosted","linux","arm64","nws-arm64-self-hosted-2xlarge"]],"priority":999}},{"arn":"arn:aws:sqs:us-east-1:123456789012:nnnn-runners-nnnnn-arm-4xlarge-queued-builds.fifo","fifo":true,"id":"https://sqs.us-east-1.amazonaws.com/123456789012/nnnn-runners-nnnnn-arm-4xlarge-queued-builds.fifo","key":"linux-arm-4xlarge","matcherConfig":{"exactMatch":true,"labelMatchers":[["self-hosted","linux","arm64","nws-arm64-self-hosted-4xlarge"]],"priority":999}},{"arn":"arn:aws:sqs:us-east-1:123456789012:nnnn-runners-nnnnn-arm-large-queued-builds.fifo","fifo":true,"id":"https://sqs.us-east-1.amazonaws.com/123456789012/nnnn-runners-nnnnn-arm-large-queued-builds.fifo","key":"linux-arm-large","matcherConfig":{"exactMatch":true,"labelMatchers":[["self-hosted","linux","arm64","nws-arm64-self-hosted"]],"priority":999}},{"arn":"arn:aws:sqs:us-east-1:123456789012:nnnn-runners-nnnnn-arm-xlarge-queued-builds.fifo","fifo":true,"id":"https://sqs.us-east-1.amazonaws.com/123456789012/nnnn-runners-nnnnn-arm-xlarge-queued-builds.fifo","key":"linux-arm-xlarge","matcherConfig":{"exactMatch":true,"labelMatchers":[["self-hosted","linux","arm64","nws-arm64-self-hosted-xlarge"]],"priority":999}},{"arn":"arn:aws:sqs:us-east-1:123456789012:nnnn-runners-nnnnn-x64-2xlarge-queued-builds.fifo","fifo":true,"id":"https://sqs.us-east-1.amazonaws.com/123456789012/nnnn-runners-nnnnn-x64-2xlarge-queued-builds.fifo","key":"linux-x64-2xlarge","matcherConfig":{"exactMatch":true,"labelMatchers":[["self-hosted","linux","x64","nws-self-hosted-2xlarge"]],"priority":999}},{"arn":"arn:aws:sqs:us-east-1:123456789012:nnnn-runners-nnnnn-x64-4xlarge-queued-builds.fifo","fifo":true,"id":"https://sqs.us-east-1.amazonaws.com/123456789012/nnnn-runners-nnnnn-x64-4xlarge-queued-builds.fifo","key":"linux-x64-4xlarge","matcherConfig":{"exactMatch":true,"labelMatchers":[["self-hosted","linux","x64","nws-self-hosted-4xlarge"]],"priority":999}},{"arn":"arn:aws:sqs:us-east-1:123456789012:nnnn-runners-nnnnn-x64-large-queued-builds.fifo","fifo":true,"id":"https://sqs.us-east-1.amazonaws.com/123456789012/nnnn-runners-nnnnn-x64-large-queued-builds.fifo","key":"linux-x64-large","matcherConfig":{"exactMatch":true,"labelMatchers":[["self-hosted","linux","x64","nws-self-hosted"]],"priority":999}},{"arn":"arn:aws:sqs:us-east-1:123456789012:nnnn-runners-nnnnn-x64-xlarge-queued-builds.fifo","fifo":true,"id":"https://sqs.us-east-1.amazonaws.com/123456789012/nnnn-runners-nnnnn-x64-xlarge-queued-builds.fifo","key":"linux-x64-xlarge","matcherConfig":{"exactMatch":true,"labelMatchers":[["self-hosted","linux","x64","nws-self-hosted-xlarge"]],"priority":999}},{"arn":"arn:aws:sqs:us-east-1:123456789012:nnnn-runners-nnnnnnn-x64-2xlarge-queued-builds.fifo","fifo":true,"id":"https://sqs.us-east-1.amazonaws.com/123456789012/nnnn-runners-nnnnnnn-x64-2xlarge-queued-builds.fifo","key":"windows-x64-2xlarge","matcherConfig":{"exactMatch":true,"labelMatchers":[["self-hosted","windows","x64","nws-windows-2xlarge"]],"priority":999}},{"arn":"arn:aws:sqs:us-east-1:123456789012:nnnn-runners-nnnnnnn-x64-large-queued-builds.fifo","fifo":true,"id":"https://sqs.us-east-1.amazonaws.com/123456789012/nnnn-runners-nnnnnnn-x64-large-queued-builds.fifo","key":"windows-x64-large","matcherConfig":{"exactMatch":true,"labelMatchers":[["self-hosted","windows","x64","nws-windows-large"]],"priority":999}},{"arn":"arn:aws:sqs:us-east-1:123456789012:nnnn-runners-nnnnnnn-x64-xlarge-queued-builds.fifo","fifo":true,"id":"https://sqs.us-east-1.amazonaws.com/123456789012/nnnn-runners-nnnnnnn-x64-xlarge-queued-builds.fifo","key":"windows-x64-xlarge","matcherConfig":{"exactMatch":true,"labelMatchers":[["self-hosted","windows","x64","nws-windows-xlarge"]],"priority":999}}]',
"ENVIRONMENT": "nnnn-runners",
"PARAMETER_GITHUB_APP_WEBHOOK_SECRET": "/github-action-runners/nnnn-runners/app/github_app_webhook_secret",
"POWERTOOLS_TRACER_CAPTURE_HTTPS_REQUESTS": "false",
"SQS_WORKFLOW_JOB_QUEUE": "",
"LOG_LEVEL": "debug",
"REPOSITORY_WHITE_LIST": "[]",
"POWERTOOLS_TRACE_ENABLED": "false",
}
│
│ with module.multi_runners["nnnn"].module.multi_runner.module.webhook.aws_lambda_function.webhook,
│ on .terraform/modules/multi_runners.multi_runner/modules/webhook/webhook.tf line 9, in resource "aws_lambda_function" "webhook":
│ 9: resource "aws_lambda_function" "webhook" {
│
╵
Looks like it's sitting at 4.37 KB
. Something with the update added ~ .40 KB to the payload.
from terraform-aws-github-runner.
I think this requires we move the RUNNER_CONFIG to SSM.
from terraform-aws-github-runner.
Hi @npalm. I saw the recent actviity, and tried with the latest 5.4.2
version, however still getting the 4KB error
╷
│ Error: updating Lambda Function (xxxx-xxxxxxx-webhook) configuration: operation error Lambda: UpdateFunctionConfiguration, https response error StatusCode: 400, RequestID: 825e0324-8a73-4915-b24c-a7d6d05b18fd, InvalidParameterValueException: Lambda was unable to configure your environment variables because the environment variables you have provided exceeded the 4KB limit. String measured:
{"POWERTOOLS_LOGGER_LOG_EVENT":"true","POWERTOOLS_TRACER_CAPTURE_ERROR":"false","RUNNER_CONFIG":"[{\"arn\":\"arn:aws:sqs:us-east-1:012345678901:xxxx-xxxxxxx-linux-arm-2xlarge-queued-builds.fifo\",\"fifo\":true,\"id\":\"https://sqs.us-east-1.amazonaws.com/012345678901/xxxx-xxxxxxx-linux-arm-2xlarge-queued-builds.fifo\",\"key\":\"linux-arm-2xlarge\",\"matcherConfig\":{\"exactMatch\":true,\"labelMatchers\":[[\"self-hosted\",\"linux\",\"arm64\",\"xxx-xxxxx-self-hosted-2xlarge\"]],\"priority\":999}},{\"arn\":\"arn:aws:sqs:us-east-1:012345678901:xxxx-xxxxxxx-linux-arm-4xlarge-queued-builds.fifo\",\"fifo\":true,\"id\":\"https://sqs.us-east-1.amazonaws.com/012345678901/xxxx-xxxxxxx-linux-arm-4xlarge-queued-builds.fifo\",\"key\":\"linux-arm-4xlarge\",\"matcherConfig\":{\"exactMatch\":true,\"labelMatchers\":[[\"self-hosted\",\"linux\",\"arm64\",\"xxx-xxxxx-self-hosted-4xlarge\"]],\"priority\":999}},{\"arn\":\"arn:aws:sqs:us-east-1:012345678901:xxxx-xxxxxxx-linux-arm-large-queued-builds.fifo\",\"fifo\":true,\"id\":\"https://sqs.us-east-1.amazonaws.com/012345678901/xxxx-xxxxxxx-linux-arm-large-queued-builds.fifo\",\"key\":\"linux-arm-large\",\"matcherConfig\":{\"exactMatch\":true,\"labelMatchers\":[[\"self-hosted\",\"linux\",\"arm64\",\"xxx-xxxxx-self-hosted\"]],\"priority\":999}},{\"arn\":\"arn:aws:sqs:us-east-1:012345678901:xxxx-xxxxxxx-linux-arm-xlarge-queued-builds.fifo\",\"fifo\":true,\"id\":\"https://sqs.us-east-1.amazonaws.com/012345678901/xxxx-xxxxxxx-linux-arm-xlarge-queued-builds.fifo\",\"key\":\"linux-arm-xlarge\",\"matcherConfig\":{\"exactMatch\":true,\"labelMatchers\":[[\"self-hosted\",\"linux\",\"arm64\",\"xxx-xxxxx-self-hosted-xlarge\"]],\"priority\":999}},{\"arn\":\"arn:aws:sqs:us-east-1:012345678901:xxxx-xxxxxxx-linux-x64-2xlarge-queued-builds.fifo\",\"fifo\":true,\"id\":\"https://sqs.us-east-1.amazonaws.com/012345678901/xxxx-xxxxxxx-linux-x64-2xlarge-queued-builds.fifo\",\"key\":\"linux-x64-2xlarge\",\"matcherConfig\":{\"exactMatch\":true,\"labelMatchers\":[[\"self-hosted\",\"linux\",\"x64\",\"xxx-self-hosted-2xlarge\"]],\"priority\":999}},{\"arn\":\"arn:aws:sqs:us-east-1:012345678901:xxxx-xxxxxxx-linux-x64-4xlarge-queued-builds.fifo\",\"fifo\":true,\"id\":\"https://sqs.us-east-1.amazonaws.com/012345678901/xxxx-xxxxxxx-linux-x64-4xlarge-queued-builds.fifo\",\"key\":\"linux-x64-4xlarge\",\"matcherConfig\":{\"exactMatch\":true,\"labelMatchers\":[[\"self-hosted\",\"linux\",\"x64\",\"xxx-self-hosted-4xlarge\"]],\"priority\":999}},{\"arn\":\"arn:aws:sqs:us-east-1:012345678901:xxxx-xxxxxxx-linux-x64-large-queued-builds.fifo\",\"fifo\":true,\"id\":\"https://sqs.us-east-1.amazonaws.com/012345678901/xxxx-xxxxxxx-linux-x64-large-queued-builds.fifo\",\"key\":\"linux-x64-large\",\"matcherConfig\":{\"exactMatch\":true,\"labelMatchers\":[[\"self-hosted\",\"linux\",\"x64\",\"xxx-self-hosted\"]],\"priority\":999}},{\"arn\":\"arn:aws:sqs:us-east-1:012345678901:xxxx-xxxxxxx-linux-x64-xlarge-queued-builds.fifo\",\"fifo\":true,\"id\":\"https://sqs.us-east-1.amazonaws.com/012345678901/xxxx-xxxxxxx-linux-x64-xlarge-queued-builds.fifo\",\"key\":\"linux-x64-xlarge\",\"matcherConfig\":{\"exactMatch\":true,\"labelMatchers\":[[\"self-hosted\",\"linux\",\"x64\",\"xxx-self-hosted-xlarge\"]],\"priority\":999}},{\"arn\":\"arn:aws:sqs:us-east-1:012345678901:xxxx-xxxxxxx-windows-x64-2xlarge-queued-builds.fifo\",\"fifo\":true,\"id\":\"https://sqs.us-east-1.amazonaws.com/012345678901/xxxx-xxxxxxx-windows-x64-2xlarge-queued-builds.fifo\",\"key\":\"windows-x64-2xlarge\",\"matcherConfig\":{\"exactMatch\":true,\"labelMatchers\":[[\"self-hosted\",\"windows\",\"x64\",\"xxx-xxxxxxx-2xlarge\"]],\"priority\":999}},{\"arn\":\"arn:aws:sqs:us-east-1:012345678901:xxxx-xxxxxxx-windows-x64-large-queued-builds.fifo\",\"fifo\":true,\"id\":\"https://sqs.us-east-1.amazonaws.com/012345678901/xxxx-xxxxxxx-windows-x64-large-queued-builds.fifo\",\"key\":\"windows-x64-large\",\"matcherConfig\":{\"exactMatch\":true,\"labelMatchers\":[[\"self-hosted\",\"windows\",\"x64\",\"xxx-xxxxxxx-large\"]],\"priority\":999}},{\"arn\":\"arn:aws:sqs:us-east-1:012345678901:xxxx-xxxxxxx-windows-x64-xlarge-queued-builds.fifo\",\"fifo\":true,\"id\":\"https://sqs.us-east-1.amazonaws.com/012345678901/xxxx-xxxxxxx-windows-x64-xlarge-queued-builds.fifo\",\"key\":\"windows-x64-xlarge\",\"matcherConfig\":{\"exactMatch\":true,\"labelMatchers\":[[\"self-hosted\",\"windows\",\"x64\",\"xxx-xxxxxxx-xlarge\"]],\"priority\":999}}]","PARAMETER_GITHUB_APP_WEBHOOK_SECRET":"/github-action-runners/xxxx-xxxxxxx/app/github_app_webhook_secret","POWERTOOLS_TRACER_CAPTURE_HTTPS_REQUESTS":"false","SQS_WORKFLOW_JOB_QUEUE":"","LOG_LEVEL":"debug","REPOSITORY_WHITE_LIST":"[]","POWERTOOLS_TRACE_ENABLED":"false"}
│
│ with module.multi_runners["prod"].module.multi_runner.module.webhook.aws_lambda_function.webhook,
│ on .terraform/modules/multi_runners.multi_runner/modules/webhook/webhook.tf line 9, in resource "aws_lambda_function" "webhook":
│ 9: resource "aws_lambda_function" "webhook" {
│
╵
from terraform-aws-github-runner.
The issue is not resolved yet. but I have refacored the lambda so the next step to move the paramters to SSM is much simpler. Help / PR's are welcome
from terraform-aws-github-runner.
The issue is not resolved yet. but I have refacored the lambda so the next step to move the paramters to SSM is much simpler. Help / PR's are welcome
Thanks. Unfortunately I don't have the experience or time to devote to refactoring this code base.
from terraform-aws-github-runner.
No problem, we keep the issue open. Hopefully our community has some time to provide a fix.
from terraform-aws-github-runner.
This issue has been automatically marked as stale because it has not had activity in the last 30 days. It will be closed if no further activity occurs. Thank you for your contributions.
from terraform-aws-github-runner.
Hey guys, any way to get this prioritized? It's blocking us from updating at the moment, as we're falling way behind.
from terraform-aws-github-runner.
It is on our radar, but would love to get some community support here.
from terraform-aws-github-runner.
Hi @npalm I have a local improvement for that. I am moving RUNNER_CONFIG to SSM as you suggested.
Question: Do you expect the ENV VAR name RUNNER_CONFIG
on the webhook to change?
I changed its value to Parameters Store's name.
I am not sure what your lambda functions expect.
from terraform-aws-github-runner.
I just saw there is a PR for that, so I will for that to be merged.
from terraform-aws-github-runner.
Thank you guys!
from terraform-aws-github-runner.
Related Issues (20)
- Runner group references do not seem to be supported with multi-runner? HOT 3
- Update Lambda runtimes to Node 20
- Warning: Argument is deprecated aws_cloudwatch_event_rule.ami_housekeeper.is_enabled HOT 3
- Got S3 Bucket StatusCode: 301: Moved Permanently error in multi-runner HOT 2
- Add support for API Gateway v1 for enhanced security HOT 4
- Unexpected Scaling Behavior with Multi-Runner Module and max-parallel Setting HOT 1
- Lambda Trigger Issue---Spot Instance Creation Problem---Workflow Execution and Runner Installation HOT 3
- Scale down with idle_config not keeping idle instances up HOT 3
- Cannot upgrade @middy/core to v5.x HOT 7
- Feature Request: Adding job runtimes to webhook logs HOT 5
- User data exceeds 16kb HOT 3
- AWS provider version specifier is too specific preventing AWS provider updates HOT 2
- Issue in functionality of enable_workflow_job_events_queue HOT 1
- v5.6.3 didn't get uploaded to TF registry HOT 1
- Windows: `User data format: unrecognized` HOT 3
- Windows: Invalid configuration provided for url HOT 10
- Multi-Runner Input Names are Different than Normal Runner Inputs HOT 3
- AL2023 Consistently Failing to boot HOT 4
- Gracefully terminate old runners when AMI changes HOT 3
- Lambda ami housekeeper and the ssm parameter store HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from terraform-aws-github-runner.