AWS Batch ジョブを GAS (Google Apps Script) から直接投入する

AWS Batch ジョブを GAS (Google Apps Script) から直接投入するためのメモ。

前提

今回も先日の記事に書いた方法を使う。

AWS API を GAS (Google Apps Script) から直接呼び出す

AWS Batch のジョブ定義, ジョブキュー, コンピューティング環境は既にある前提。

IAM ユーザ

GAS から AWS API を呼び出すための IAM ユーザを作成し、アクセスキーを発行する。

ポリシーはこんな感じで batch:SubmitJob だけ許可すれば OK。
アクセスキーは GAS にベタ書きしちゃうので、対象リソースをしっかり制限しとく。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "batch:SubmitJob",
      "Resource": [
        "arn:aws:batch:ap-northeast-1:178282380061:job-definition/{ジョブ定義名}",
        "arn:aws:batch:ap-northeast-1:178282380061:job-queue/{ジョブキュー名}"
      ]
    }
  ]
}

GAS

発行したアクセスキーで AWS.init して、次のように AWS.request すれば OK。

function DynamoDBPutItem() {
  const res = AWS.request(
    'batch',
    'ap-northeast-1',
    'SubmitJob',
    {},
    'POST',
    {
      jobName: '{ジョブ名}',
      jobDefinition: '{ジョブ定義名}',
      jobQueue: '{ジョブキュー名}',
      parameters: {
        '{パラメータ名}': '{パラメータ値}',
      },
    },
    { 'Content-Type': 'application/json' },
    '/v1/submitjob',
  )
  const code = res.getResponseCode()
  const text = res.getContentText()
  if (code < 200 || code >= 300) throw Error(`AWS.request failed: ${code} - ${text}`)
  Logger.log(`OK: ${table} - ${JSON.stringify(item)}`)
}