Skip to content

Commit 22a428b

Browse files
committed
Enh(aws): Rotate docker logs in EC2 instanc
1 parent 954bd1b commit 22a428b

2 files changed

Lines changed: 46 additions & 5 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/usr/bin/env bash
2+
3+
# Avoid consuming lots of storage by chatty docker logs
4+
5+
set -euo pipefail
6+
7+
# Configure Docker log rotation
8+
cat <<EOF > /etc/docker/daemon.json
9+
{
10+
"log-driver": "json-file",
11+
"log-opts": {
12+
"max-size": "10m",
13+
"max-file": "3"
14+
}
15+
}
16+
EOF
17+
18+
# Restart Docker to apply changes
19+
systemctl restart docker

aws/setup/batch/push.py

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"""Push AWS resources defined in JSON files to AWS."""
33

44
import argparse
5+
import base64
56
import json
67
import logging
78
from pathlib import Path
@@ -194,20 +195,37 @@ def push_job_definition(job_data: dict, batch_client) -> None:
194195
logger.info(f"✅ Successfully pushed job definition: {job_name}:{revision}")
195196

196197

198+
def _add_user_data_to_launch_template(template_data: dict, user_data_path: Path) -> None:
199+
"""Add user data from the specified path to the template data."""
200+
if user_data_path.exists():
201+
logger.info(f"Adding user data from {user_data_path.name}")
202+
user_data_script = user_data_path.read_text()
203+
encoded_user_data = base64.b64encode(user_data_script.encode()).decode()
204+
template_data["LaunchTemplateData"]["UserData"] = encoded_user_data
205+
else:
206+
logger.warning(f"User data file not found: {user_data_path}")
207+
208+
197209
def _update_launch_template(template_data: dict, existing_template: dict, ec2_client) -> None:
198-
"""Update existing launch template by creating a new version."""
210+
"""Update existing launch template by creating a new version and setting it as default."""
199211
template_name = template_data["LaunchTemplateName"]
212+
template_id = existing_template["LaunchTemplateId"]
200213
logger.info(f"Launch template {template_name} already exists, creating new version")
201214

202215
create_params = {
203-
"LaunchTemplateId": existing_template["LaunchTemplateId"],
216+
"LaunchTemplateId": template_id,
204217
"LaunchTemplateData": template_data["LaunchTemplateData"],
205218
}
206219

207220
response = ec2_client.create_launch_template_version(**create_params)
208221
version = response["LaunchTemplateVersion"]["VersionNumber"]
209222

210-
logger.info(f"✅ Successfully created new version {version} for launch template: {template_name}")
223+
# Set the new version as the default
224+
ec2_client.modify_launch_template(LaunchTemplateId=template_id, DefaultVersion=str(version))
225+
226+
logger.info(
227+
f"✅ Successfully created new version {version} for launch template: {template_name} and set as default"
228+
)
211229

212230

213231
def _create_launch_template(template_data: dict, ec2_client) -> None:
@@ -227,10 +245,13 @@ def _create_launch_template(template_data: dict, ec2_client) -> None:
227245
logger.info(f"✅ Successfully created launch template: {template_name}")
228246

229247

230-
def push_launch_template(template_data: dict, ec2_client) -> None:
248+
def push_launch_template(template_data: dict, ec2_client, *, user_data_path: Path | None = None) -> None:
231249
"""Push EC2 launch template to AWS."""
232250
template_name = template_data["LaunchTemplateName"]
233251

252+
if user_data_path is not None:
253+
_add_user_data_to_launch_template(template_data, user_data_path)
254+
234255
try:
235256
response = ec2_client.describe_launch_templates(LaunchTemplateNames=[template_name])
236257
existing_template = response["LaunchTemplates"][0]
@@ -257,7 +278,8 @@ def push_file(json_path: Path, region: str) -> None:
257278
case "job_definition.json":
258279
push_job_definition(data, boto3.client("batch", region_name=region))
259280
case "launch_template.json":
260-
push_launch_template(data, boto3.client("ec2", region_name=region))
281+
user_data_path = json_path.parent / "launch_template_user_data.sh"
282+
push_launch_template(data, boto3.client("ec2", region_name=region), user_data_path=user_data_path)
261283
case _:
262284
logger.error(f"Unknown filename: {filename}")
263285
raise ValueError(f"Unknown filename: {filename}")

0 commit comments

Comments
 (0)