125 lines
4.7 KiB
Python
125 lines
4.7 KiB
Python
import json
|
||
import os
|
||
from datetime import datetime
|
||
|
||
import boto3
|
||
|
||
# 環境変数
|
||
SFN_STATE_MACHINE_ARN=os.environ["SFN_STATE_MACHINE_ARN"]
|
||
CLUSTER_NAME = os.environ["CLUSTER_NAME"]
|
||
TASK_NAME = os.environ["TASK_NAME"]
|
||
CONTAINER_NAME = os.environ["CONTAINER_NAME"]
|
||
SUBNET_ID_AP_NORTHEAST_1A = os.environ["SUBNET_ID_AP_NORTHEAST_1A"]
|
||
SUBNET_ID_AP_NORTHEAST_1D = os.environ["SUBNET_ID_AP_NORTHEAST_1D"]
|
||
SECURITY_GROUP_ID_ECSALL = os.environ["SECURITY_GROUP_ID_ECSALL"]
|
||
SECURITY_GROUP_ID_ECSDATAIMPORT = os.environ["SECURITY_GROUP_ID_ECSDATAIMPORT"]
|
||
MODE = os.environ["MODE"]
|
||
|
||
# クラス変数
|
||
ecs_client = boto3.client('ecs')
|
||
sfn_client = boto3.client('stepfunctions')
|
||
|
||
|
||
def lambda_handler(event, context):
|
||
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Info I-1 駆動処理開始')
|
||
|
||
# イベント情報を取得する
|
||
s3_event = event["Records"][0]["s3"]
|
||
event_bucket_name = s3_event["bucket"]["name"]
|
||
event_object_key = s3_event["object"]["key"]
|
||
event_file_name = os.path.basename(event_object_key)
|
||
event_data_source_name = os.path.dirname(event_object_key).split('/')[0]
|
||
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Info I-2 バケット名:{event_bucket_name}')
|
||
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Info I-3 ファイル名:{event_file_name}')
|
||
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Info I-4 データソース名:{event_data_source_name}')
|
||
|
||
# StepFunctionsを起動する
|
||
response = sfn_client.start_execution(
|
||
stateMachineArn=SFN_STATE_MACHINE_ARN,
|
||
input=json.dumps(
|
||
{
|
||
'inputParams': {
|
||
'ecs': {
|
||
'Cluster': CLUSTER_NAME,
|
||
'TaskDefinition': TASK_NAME,
|
||
'network': {
|
||
# TODO: 配列もパラメータから組めるなら、StepFunctions側で組み立てる
|
||
"Subnets": [
|
||
SUBNET_ID_AP_NORTHEAST_1A,
|
||
SUBNET_ID_AP_NORTHEAST_1D,
|
||
],
|
||
"SecurityGroups": [
|
||
SECURITY_GROUP_ID_ECSALL,
|
||
SECURITY_GROUP_ID_ECSDATAIMPORT,
|
||
],
|
||
|
||
},
|
||
'overrides': {
|
||
"ContainerName": CONTAINER_NAME,
|
||
"Environment": [
|
||
# TODO: 環境変数以外でも使いたいので、外出しする
|
||
{"Name": 'BUCKET_NAME', "Value": event_bucket_name},
|
||
{"Name": 'TARGET_KEY', "Value": event_object_key},
|
||
{"Name": 'DATA_SOURCE_NAME', "Value": event_data_source_name},
|
||
{"Name": 'FILE_NAME', "Value": event_file_name},
|
||
{"Name": 'MODE', "Value": MODE},
|
||
],
|
||
},
|
||
},
|
||
}
|
||
}
|
||
)
|
||
)
|
||
# # ECSを起動する
|
||
# response = ecs_client.run_task(
|
||
# launchType='FARGATE',
|
||
# cluster=CLUSTER_NAME,
|
||
# taskDefinition=TASK_NAME,
|
||
# networkConfiguration={
|
||
# "awsvpcConfiguration": {
|
||
# "subnets": [
|
||
# SUBNET_ID_AP_NORTHEAST_1A,
|
||
# SUBNET_ID_AP_NORTHEAST_1D,
|
||
# ],
|
||
# "securityGroups": [
|
||
# SECURITY_GROUP_ID_ECSALL,
|
||
# SECURITY_GROUP_ID_ECSDATAIMPORT,
|
||
# ],
|
||
# }
|
||
# },
|
||
# overrides={
|
||
# "containerOverrides": [
|
||
# {
|
||
# "name": CONTAINER_NAME,
|
||
# "environment": [
|
||
# {"name": 'BUCKET_NAME', "value": event_bucket_name},
|
||
# {"name": 'TARGET_KEY', "value": event_object_key},
|
||
# {"name": 'DATA_SOURCE_NAME', "value": event_data_source_name},
|
||
# {"name": 'FILE_NAME', "value": event_file_name},
|
||
# {"name": 'MODE', "value": MODE},
|
||
# ],
|
||
# },
|
||
# ],
|
||
# },
|
||
# )
|
||
|
||
# TODO: コメントと設計修正
|
||
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Info I-5 ECS起動レスポンス:{str(response)}')
|
||
|
||
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Info I-6 駆動処理終了')
|
||
|
||
|
||
|
||
if __name__ == '__main__':
|
||
# ローカル実行用
|
||
lambda_handler({"Records": [{
|
||
"s3": {
|
||
"bucket": {
|
||
"name": "test-shimoda-bucket"
|
||
},
|
||
"object": {
|
||
"key": "folder/object_key"
|
||
}
|
||
}
|
||
}]}, {})
|