AWSLambdaとAWSBatchを本番環境と開発環境で分ける
AWS BatchのジョブをAWS Lambdaから実行する時に、本番環境とステージング環境を分けたい場合の構成を作ってみました。
AWSBatch
コンピューティング環境、ジョブキュー、ジョブ定義を環境別に分けます。
AWSLambda
AWSLambdaで環境別の実行環境を作るためにエイリアスを利用しました。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-aliases.html
Lambdaはエイリアス別に環境変数を定義することができません。(2021.07.03現在)
なので、環境別のAWSBatchの定義を自前で用意します。
[dev]
JOB_QUEUE = arn:aws:batch:ap-northeast-1:xxxxxxxxx-dev
JOB_DEFINITION = arn:aws:batch:ap-northeast-1:xxxxxxxxx:job-definition/xxxx-dev:1
[stg]
JOB_QUEUE = arn:aws:batch:ap-northeast-1:xxxxxxxxx-stg
JOB_DEFINITION = arn:aws:batch:ap-northeast-1:xxxxxxxxx:job-definition/xxxx-stg:1
[prd]
JOB_QUEUE = arn:aws:batch:ap-northeast-1:xxxxxxxxx-prd
JOB_DEFINITION = arn:aws:batch:ap-northeast-1:xxxxxxxxx:job-definition/xxxx-prd:1
Lambda実行側ではconfig.iniを読み取ってジョブ定義を取得します。
どのエイリアスが使用されているかはcontext引数のinvoked_function_arnからわかります。
※Lambdaの記述例
import re
import configparser
import boto3
def lambda_handler(event, context):
mo = re.search(
r'func_name:(?P<alias>dev|stg|prd)',
context.invoked_function_arn
)
config = configparser.ConfigParser()
config.read('config.ini')
JOB_QUEUE = config[mo.group('alias')]['JOB_QUEUE']
JOB_DEFINITION = config[mo.group('alias')]['JOB_DEFINITION']
JOB_NAME = 'xxxxxxxxx'
client = boto3.client('batch')
response = client.submit_job(
jobName = JOB_NAME,
jobQueue = JOB_QUEUE,
jobDefinition = JOB_DEFINITION,
)
return {
'statusCode': 200,
'body': json.dumps('run')
}
さいごに
AWSLambdaのエイリアス別に環境変数を定義できれば、わざわざconfig.iniを追加する必要ないのにと思いました。
もっと簡単な方法で環境別の構成が作っている方がいたら教えて下さい。
参考サイト
Author And Source
この問題について(AWSLambdaとAWSBatchを本番環境と開発環境で分ける), 我々は、より多くの情報をここで見つけました https://qiita.com/inunekousapon/items/4c4b642c2de5e2a12077著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .