【问题标题】:aws batch: submit job using lambdaaws 批处理:使用 lambda 提交作业
【发布时间】:2018-04-30 01:46:33
【问题描述】:

上下文:AWS、S3、LambdaBatch

我有一个在 S3 存储桶中上传文件时触发的 lambda。我希望 lambda 提交一个批处理作业。

(编辑:在 S3 和 Lambda 之间一切正常。问题出在 Lambda 和 Batch 之间。)

:为了能够提交批处理作业,我必须赋予 lambda 什么角色? p>

我的 lambda 获得 AccessDeniedException 并且在以下情况下未能提交作业:

const params = {
  jobDefinition: BATCH_JOB_DEFINITION,
  jobName: BATCH_JOB_NAME,
  jobQueue: BATCH_JOB_QUEUE,
};

Batch.submitJob(params).promise() .then .......

【问题讨论】:

    标签: amazon-web-services aws-lambda roles aws-batch


    【解决方案1】:

    看来这就是我要找的角色:batch:SubmitJob。使用这个角色,lambda 能够提交作业。

    iamRoleStatements:
      - Effect: Allow
        Action:
          - batch:SubmitJob
        Resource: "arn:aws:batch:*:*:*"
    

    【讨论】:

    • 嗨科斯汀。你是怎么知道如何做到这一点的?具体来说,您是如何意识到您需要的操作是SubmitJob?你怎么知道资源必须是arn:aws:batch:*:*:*?我看到该资源与我在网上找到的其他一些示例具有相同的模式(例如n2ws.com/blog/aws-automation/lambda-function-s3-event-triggers)。但是arn:aws:batch:*:*:*batch:*有什么区别呢?
    • 我不记得我在哪里看到的了,但我认为 AWS Batch - Actions 页面是一个幸运的猜测。 arn:aws:batch:*:*:* 遵循 ARN 语法。一旦您了解了它是如何构建的,您就可以闭眼瞄准任何 AWS 资源:)
    • restrict the resources 可用可能会很好(例如,不希望您的测试 lambda 部署到生产中的批处理实例)
    【解决方案2】:

    您可以创建类似AWS Batch Managed Policy 的策略,

    以下政策允许管理员访问,您可以根据需要进行修改:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "batch:*",
                    "cloudwatch:GetMetricStatistics",
                    "ec2:DescribeSubnets",
                    "ec2:DescribeSecurityGroups",
                    "ec2:DescribeKeyPairs",
                    "ecs:DescribeClusters",
                    "ecs:Describe*",
                    "ecs:List*",
                    "logs:Describe*",
                    "logs:Get*",
                    "logs:TestMetricFilter",
                    "logs:FilterLogEvents",
                    "iam:ListInstanceProfiles",
                    "iam:ListRoles"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": ["iam:PassRole"],
                "Resource": [
                    "arn:aws:iam::*:role/AWSBatchServiceRole",
                    "arn:aws:iam::*:role/ecsInstanceRole",
                    "arn:aws:iam::*:role/iaws-ec2-spot-fleet-role",
                    "arn:aws:iam::*:role/aws-ec2-spot-fleet-role",
                    "arn:aws:iam::*:role/AWSBatchJobRole*"
                ]
            }
        ]
    }
    

    将策略附加到 lambda 并重试,请参阅 AWS Documentation

    【讨论】:

    • 谢谢库什。 S3 和 Lambda 之间没有问题。问题是 Lambda 无法启动 Batch(作业)。
    • 对不起库什,但这不是答案。这些是 Batch 的角色。我正在寻找的是 Lambda 的角色。从 lambda 中启用 submitJob() 的角色。谢谢。
    • 但是可以通过这种方式实现也可以参考aws文档
    猜你喜欢
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2021-08-01
    • 2020-05-31
    • 2019-01-09
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多