Slide 1

Slide 1 text

Step FunctionsのLambdaを Fargate置換/template化した話 @Saito5656 2021. 11. 26 JAWS-UG 浜松支部

Slide 2

Slide 2 text

自己紹介 @Saito 5656 情報技術者ではないが JAWS-UG浜松に出没する 変なオヂサン アイコンは同居する🐈

Slide 3

Slide 3 text

今回のお題 900秒で処理できないデータも 自動集計したい 時間制限を受けないBatch処理を構築する

Slide 4

Slide 4 text

今後抽出部分で900秒超過が発生する AWS Cloud User AWS IoT Core IoT hing / gateway IoT MQTT protocol Factory Machine Tools Amazon S3 Bucket for summary Bucket for Time line Lambda function to extract Event 0 23 * * * AWS Step Functions workflow Lambda function to summarize Bucket for summarized Bucket for queried IoT rule Bucket for archive IoT topic for Time line IoT topic for summary Life Cycle 2ds RPAで 電子日報に入力 Lambda function to archive TL Event 0 23 * * * AWS Step Functions workflow Lambda function to archive sum CloudFormation Stack CloudFormation Stack

Slide 5

Slide 5 text

ECS on Fargateへ置換え(見難い・・・) AWS Cloud User AWS IoT Core IoT hing / gateway IoT MQTT protocol Factory Machine Tools Amazon S3 Bucket for summary Bucket for Timeline chart Event 0 23 * * * AWS Step Functions workflow Lambda function to summarize Bucket for summarized Bucket for queried IoT rule Bucket for archive IoT topic for Time line IoT topic for summary Life Cycle 2ds RPAで 電子日報に入力 Lambda function to archive TL Event 0 23 * * * AWS Step Functions workflow Lambda function to archive sum VPC Private subnet Amazon ECS AWS Fargate to extract Temporary file CloudFormation Stack CloudFormation Stack Amazon ECR PrivateLink Amazon SQS Amazon EventBridge error⇒SES AWS Step Functions workflow error⇒SES

Slide 6

Slide 6 text

今回もSAMを利用 src ┣ build-network-for-ExtOpsFargate ┃ ┣ LineNo.1 ┃ ┣ ext-sum-fargate-{LineName} ┃ ┗ ext-docker-{LineName} ┃ ┣ LineNo.2 ┃ ┣ ext-sum-fargate-{LineName} ┃ ┗ ext-docker-{LineName} ┃ ┣ LineNo.3 ┃ ┣ ext-sum-fargate-{LineName} ┃ ┗ ext-docker-{LineName} ┃ VPC/subnet/routetable/sg/endpointを定義 工程1のDockerfileとapp.py 工程1のLambda/Fargate/SFN/Eventを定義 工程2のDockerfileとapp.py 工程2のLambda/Fargate/SFN/Eventを定義 工程3のDockerfileとapp.py 工程3のLambda/Fargate/SFN/Eventを定義 …

Slide 7

Slide 7 text

NWの構築 src ┣ build-network-for-ExtOpsFargate ┃ ┣ .gitignore ┃ ┣ README.md ┃ ┣ samconfig.toml ┃ ┗ template.yaml ┃ template.yaml Parameters CIDR Resources VPC Private subnet SecurityGroup RouteTable VPCEndpoint(ecr.dkr/logs/s3) ecrとlogsはPrivateLink S3はGatewayでVPCと接続

Slide 8

Slide 8 text

SFN変更箇所 ①前日データを抽出するLambda ⇒Fargateに置き換え ②開始終了/稼働/停止集計Lambda ⇒SFNを分けてTask終了で発火 Event 0 23 * * *

Slide 9

Slide 9 text

①前日データを抽出するSFN template.yaml Parameters subnet-id/sg-id/Cpu/Memory Resources Repository Cluster TaskDefinition EcsTaskExecutionRole ExtStateMachine StateMachineExecutionRole LogGroup src ┃ ┣ LineNo.1 ┃ ┣ ext-docker-{LineName} ┃ ┃ ┣ app.py ┃ ┃ ┣ Dockerfile ┃ ┃ ┗ requirements.txt ┃ ┣ functions ┃ ┗ ext-sum-fargate-{LineName} ┃ ┣ ExtSumErrorFunc ┃ ┃┣ app.py ┃ ┃┗ requirements.txt ┃ ┣ extstatemachine ┃ ┃┗ sfn.asl.json ┃ ┣ .gitignore ┃ ┣ samconfig.toml ┃ ┗ template.yaml

Slide 10

Slide 10 text

②開始終了/稼働/停止を集計するSFN src ┣ LineNo.1 ┃ ┗ ext-sum-fargate-{LineName} ┃ ┣ functions ┃ ┃ ┣ SumFunc1 ┃ ┃ ┃ ┣ app.py ┃ ┃ ┃ ┗ requirements.txt ┃ ┃ ┗ ExtSumErrorFunc ┃ ┃ ┣ app.py ┃ ┃ ┗ requirements.txt ┃ ┣ sumstatemachine ┃ ┃┗ sfn.asl.json ┃ ┣ .gitignore ┃ ┣ README.md ┃ ┣ samconfig.toml ┃ ┗ template.yaml template.yaml Parameters Bucket/Prefix Resources Function SumStateMachine StateMachineExecutionRole LogGroup

Slide 11

Slide 11 text

Architecture(900秒超過対応の最終形)

Slide 12

Slide 12 text

まとめ 主にやったこと(出来たこと) • vpc/subnet/route table/sg/endpointのCloudFormationテンプレート化 • Task定義のCloudFormationテンプレート化 • statemachine内のTaskをEventBridgeRuleで発火 • template.yamlで定義したResourcesへアタッチするroleの細かい定義 主にハマったこと(今後もハマるかも) • Gateway型endpointはroute tableへの紐づけが必要 • Resource IDの呼び出し(!Ref / !Getatt / !SubがTypeで異なる…?) • Propertiesの値をリストで記述する/しない(ちゃんとDoc読めって話) • Statemachineの定義jsonでkeyの一文字目は大文字!!

Slide 13

Slide 13 text

ご清聴ありがとうございました