AWS Batch 的使用

1 为了提交一个任务,需要先创建调度策略、计算环境、任务定义、任务队列

1 创建任务策略

添加共享标识

2 创建计算环境

创建vpc等基本信息完成创建

3 创建任务队列,在基本信息里选择刚创建的调度策略和计算环境

4 创建任务定义

添加运行作业时需要执行的命令

5 提交执行任务

在基本信息中添加“作业定义”和“任务队列”, 共享标识填写上面常见调度策略使用的“标识符”

在下一页上"调度优先级" 填写数值

进入提交的任务里,在里面找到日志流位置

关于数组大小的使用,填上相应的数值,就可以有并行的n个任务

Bash 上添加下面打印的脚本

 

["bash", "-c", "JOB_ID=$AWS_BATCH_JOB_ID; ARRAY_INDEX=$AWS_BATCH_JOB_ARRAY_INDEX; echo \"当前作业 ID: $JOB_ID\"; echo \"数组索引: $ARRAY_INDEX\""]

下面介绍使用自定义镜像跑Batch

自定义作业

实现定时任务调用batch, batch启动fragate拉取 ECR镜像启动执行表数据更新task

RDS 创建一个数据库

创建过程略

构建自定义镜像

test_batch_1.py

 
import pymysql
import argparse


def increment_money(table_name, increment_value):
    # 数据库连接配置
    host = 'test-batch-db.crmi8wgo8li3.ap-northeast-2.rds.amazonaws.com'
    port = 3306
    user = 'deng'  # 替换为你的用户名
    password = 'dly!19892'  # 替换为你的密码
    database = 'batch_schema'  # 替换为你的数据库名称

    # 连接到数据库
    connection = pymysql.connect(
        host=host,
        port=port,
        user=user,
        password=password,
        database=database
    )

    try:
        with connection.cursor() as cursor:
            # 构建 SQL 语句
            sql = f"UPDATE {table_name} SET money = money + %s"
            cursor.execute(sql, (increment_value,))

        # 提交更改
        connection.commit()
        print(f"成功将 {increment_value} 加到 {table_name} 表的 money 字段")

    except Exception as e:
        print(f"发生错误: {e}")

    finally:
        connection.close()


# 使用示例
#increment_money('batch_info', 1)  # 替换为你的表名和增加的值


if __name__ == "__main__":
    # 创建参数解析器
    parser = argparse.ArgumentParser(description='Increment money field in a specified table.')
    parser.add_argument('table_name', type=str, help='The name of the table to update')
    parser.add_argument('increment_value', type=float, help='The value to increment the money field by')

    # 解析命令行参数
    args = parser.parse_args()

    # 调用函数
    increment_money(args.table_name, args.increment_value)

Dockerfile

# 使用官方 Python 3.10 运行时作为父镜像
FROM python:3.10

# 设置工作目录
WORKDIR /app

# 复制当前目录内容到容器中
COPY . .

# 安装依赖
RUN pip3 install --no-cache-dir --no-index ./packages/* && rm -rf ./packages

# 设置容器启动时的默认命令
ENTRYPOINT ["sleep", "infinity"]

ECR上查看推送命令

分别执行

aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin xxx.dkr.ecr.ap-northeast-2.amazonaws.com



docker build -t test/batch .



docker tag test/batch:latest xxx.dkr.ecr.ap-northeast-2.amazonaws.com/test/batch:latest



docker push xxx.dkr.ecr.ap-northeast-2.amazonaws.com/test/batch:latest

创建batch job

配置作业和编排类型

创建计算环境

创建任务队列

创建任务定义

镜像填写

xxxx.dkr.ecr.ap-northeast-2.amazonaws.com/test/batch:latest

命令填写

["python3", "test_batch_0.py", "batch_info", "1.0"]

创建完毕后,在“任务”上测试batch job

右上角“提交新作业”

选择“作业定义”,“作业队列”

覆盖项是针对任务定义里的配置而言,填写即代表要覆盖任务定义

点下一步,到达审核

点击“提交”

从starting转向runnable

Runnable 表示可运行

从runnable转向starting

查看作业如果报这个错误

ResourceInitializationError: unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. Check your task network configuration. RequestError: send request failed caused by: Post "https://api.ecr.ap-northeast-2.amazonaws.com/": dial tcp 54.180.184.245:443: i/o timeout

查看这个角色的权限

给角色添加内联策略

选择Elastic Container Registry

创建endpoint 端点

com.amazonaws.ap-northeast-2.ecr.api

com.amazonaws.ap-northeast-2.ecr.dkr

com.amazonaws.ap-northeast-2.logs

创建完毕后再次运行,查看日志

再次运行job执行作业后数据库 money字段+1

库里有两张表,利用ARRAY_INDEX 去执行两个task

job其他保持不变

修改cmd

[     
   "sh",     
   "-c",     
   "ARRAY_INDEX=$AWS_BATCH_JOB_ARRAY_INDEX; python3 test_batch_1.py batch_info_$ARRAY_INDEX 1.0" 
]

跑起来以后

查看两个task的日志

使用Amazon EventBridge定期执行Batch

创建EventBridge 规则

输入cron表达式因为是UTC时间所以你需要自己转换成你本地的时间

复制队列 arn 编号

把队列arn 贴到目标表单的下面位置

点击保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHEN_RUI_2200

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值