Batch
# Batch examples
# Note: In some cases, you'll need to wait for a step to complete in your AWS
# account before you can successfully run the next step.
# To set up the Batch compute environment, get security group and subnet info
# for the default VPC.
ec2 <- paws::ec2()
default_vpc <- ec2$describe_vpcs(
Filters = "isDefault=true"
)$Vpcs[[1]]
security_group <- ec2$describe_security_groups(
Filters = sprintf("vpc-id=%s", default_vpc$VpcId),
GroupNames = "default"
)$SecurityGroups[[1]]
subnets <- ec2$describe_subnets(
Filters = sprintf("vpc-id=%s", default_vpc$VpcId)
)$Subnets
#-------------------------------------------------------------------------------
# Set up an IAM role for Batch.
role_name <- "TestBatchServiceRole"
policy_arn <- "arn:aws:iam::aws:policy/service-role/AWSBatchServiceRole"
trust_policy <- list(
Version = "2012-10-17",
Statement = list(
list(
Effect = "Allow",
Principal = list(
Service = "batch.amazonaws.com"
),
Action = "sts:AssumeRole"
)
)
)
iam <- paws::iam()
role <- iam$create_role(
RoleName = role_name,
AssumeRolePolicyDocument = jsonlite::toJSON(trust_policy, auto_unbox = TRUE)
)
iam$attach_role_policy(
RoleName = role_name,
PolicyArn = policy_arn
)
#-------------------------------------------------------------------------------
batch <- paws::batch()
# Set up a compute environment: the resources on which Batch jobs will run.
batch$create_compute_environment(
type = "MANAGED",
computeEnvironmentName = "TestComputeEnvironment",
computeResources = list(
type = "EC2",
desiredvCpus = 1L,
ec2KeyPair = "default",
instanceRole = "ecsInstanceRole",
instanceTypes = "optimal",
maxvCpus = 128L,
minvCpus = 0L,
securityGroupIds = security_group$GroupId,
subnets = sapply(subnets, function(x) x$SubnetId)
),
serviceRole = role$Role$Arn,
state = "ENABLED"
)
# Set up a job queue for the compute environment.
batch$create_job_queue(
computeEnvironmentOrder = list(
list(
computeEnvironment = "TestComputeEnvironment",
order = 1L
)
),
jobQueueName = "TestJobQueue",
priority = 1L,
state = "ENABLED"
)
# Add an example job definition -- sleep 10 seconds.
job_def <- batch$register_job_definition(
type = "container",
containerProperties = list(
command = list(
"sleep",
"10"
),
image = "busybox",
memory = 128L,
vcpus = 1L
),
jobDefinitionName = "sleep10"
)
# Submit a job.
job <- batch$submit_job(
jobDefinition = "sleep10",
jobName = "Example",
jobQueue = "TestJobQueue"
)
print(job)
# List the submitted job(s).
batch$list_jobs(
jobQueue = "TestJobQueue",
jobStatus = "SUBMITTED"
)
# Clean up. You may have to wait for some steps to complete.
batch$deregister_job_definition(jobDefinition = job_def$jobDefinitionArn)
batch$update_job_queue("TestJobQueue", state = "DISABLED")
batch$delete_job_queue("TestJobQueue")
batch$update_compute_environment("TestComputeEnvironment", state = "DISABLED")
batch$delete_compute_environment(computeEnvironment = "TestComputeEnvironment")
iam$detach_role_policy(role_name, policy_arn)
iam$delete_role(role_name)