AWS Stop Function에서 ECS 작업을 정기적으로 수행하는 메커니즘을 SAM으로 설계
18642 단어 AWSStep Functionstech
개요
ECS에서 서비스의 디버깅을 하는 경우 같은 용기에서 대량으로 수행하려는 경우도 있다.이때 ECS의 기능으로'임무의 스케줄링'이 있어 콘솔에서 파치만 설정하면 정기적으로 임무를 시작할 수 있고 외부에서 명령을 주입하면 임의의 횟수를 수행할 수 있다.
단, 작업의 스케줄링 기능을 사용할 때 시간 초과와 재시도 등 상세한 설정은 할 수 없다.구체적인 위험으로는 예상을 뛰어넘는 비준 집행에 시간이 걸리고 예상을 뛰어넘는 비용이 들었다는 것을 열거할 수 있다.
이 사안에 대해서는 AWS 지원에 문의했고, Step Function을 추천했다.이 글에서 우리는 한 내용에 대해 일지와 참고 문헌을 정리할 것이다.
Step Function은
Step Function을 사용하면 AWS만의 JSON 형식의 기술을 통해 여러 램바다 함수, SNS, 배치, ECS, 다이나모DB 등 여러 서비스의 협업을 기술할 수 있다.이번 초점은 ECS와의 협력이다.
거의 무사이즈인 것 같아요.생각보다 간단하니까 이름만 들어본 느낌이라면 콘솔로 만져보는 게 좋을 것 같아요.특별히 움직이고 싶은 람다 함수 없이도 튜토리얼을 만들어 바로 피부 감각을 얻을 수 있다.
JSON 기법을 통해 실행 시 재시도나 시간 초과 등 응용 프로그램 주체와 다른 요구를 지정할 수 있다는 장점이 있다.이렇게 되면 ECS 임무 수행에 시간 초과를 설정해 최초 과제를 해결할 수 있게 된다.
SAM
SAM을 사용하면 전용 SAM CLI(주로sam 명령)를 이용하여yaml 형식으로 기술된 인프라 시설 설정을 설계할 수 있다.SAM은 Serverless Application Model의 약자로 Lambda를 활용 상황의 중심으로 고려하지만 이번 요구와 같이 ECS 임무를 수행하는 Step Function에도 해당한다.
sam init 명령을 실행하면 샘플 프로그램이 설정된 상태에서 디렉터리는 로컬에서 전개되며, 전개된 코드만 읽으면 알 수 있습니다.
나는 개인적으로 cdk와 구별되는 것을 아직 잘 모른다.장기적으로는 CDK가 더 보편화한 것 같지만 이번처럼 작은 사례로는 CDK가 어떻게 구현되는지 알기 어려워 애초에 SAM으로 해보다가 시간이 나면 CDK로 하면 딱 맞을 것 같다.이번에도 CDK에 도전했지만 형식 정의상 어떻게 해야 할지 알 수 없었고, 기릿허브의 아이슈도 방치돼 조금 힘들었다.
Step Function 상태기 설명
Step Function 상태기(워크플로우. 단계가 기술된 JSON)는 다음과 같습니다.
{
"Comment": "A Hello World example of the Amazon States Language using Pass states",
"StartAt": "Run Fargate Task",
"States": {
"Run Fargate Task": {
"Type": "Task",
"Resource": "arn:aws:states:::ecs:runTask.sync",
"TimeoutSeconds": 300,
"Parameters": {
"LaunchType": "FARGATE",
"Cluster": "CLUSTER ARN",
"TaskDefinition": "TASK DEFINITION ARN",
"NetworkConfiguration": {
"AwsvpcConfiguration": {
"Subnets": [
"SUBNET ID"
],
"SecurityGroups": [
"SECURITY GROUP ID"
],
"AssignPublicIp": "ENABLED"
}
},
"Overrides": {
"ContainerOverrides": [
{
"Name": "CONTAINER NAME",
"Command.$": "$.commands"
}
],
"TaskRoleArn": "ROLE ARN"
}
},
"Next": "Notify Success",
"Catch": [
{
"ErrorEquals": [
"States.ALL"
],
"Next": "Notify Failure"
}
]
},
"Notify Success": {
"Type": "Pass",
"Result": "Success",
"End": true
},
"Notify Failure": {
"Type": "Pass",
"Result": "Failure",
"End": true
}
}
}
여기의 JSON 설정에는 몇 가지 전제가 있으니 양해해 주십시오.Run Fargate Task
이 State를 보았는데Next라는 키에 다음 이동 상태 이름Notify Success
이 적혀 있었다.또한 오류가 발생했을 때Catch 키에 써야 하고, 거기에 옮겨야 한다. Notify Failure
그런 다음 AWS 콘솔에 다음 상태 마이그레이션 다이어그램이 자동으로 그려집니다.이곳은 매우 평범하고 대단한 곳이다.이거 직접 조립한 거예요?주제 밖의 이야기를 하자면 자바스크립트의 xstate 아이디어와 가깝게 느껴진다.( https://github.com/davidkpiano/xstate)
다음 행은 외부에서 입력을 받는 부분입니다.
"Command.$": "$.commands"
제작된 JSON은 sfn이다.asl.json의 이름으로 statemachine
디렉터리 아래에 놓으십시오.이곳의 명칭은 무엇이든지 다 된다.SAM의 template입니다.yaml
SAM 측 설정은 다음과 같습니다.
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
sam-step-functions-test
Sample SAM Template for sam-step-functions-test
Parameters:
StateMachineName:
Description: Please type the Step Functions StateMachine Name.
Type: String
Default: 'sfn-sam-app-statemachine-for-test'
Resources:
SampleStateMachine:
Type: AWS::Serverless::StateMachine
Properties:
Name: !Sub ${StateMachineName}
DefinitionUri: statemachine/sfn.asl.json
Role: ROLE_ARN
Events:
SampleScheduleEvents:
Type: Schedule
Properties:
Input: '{"commands": ["php", "artisan", "command:artisan-command"]}'
Schedule: 'rate(3 hours)'
Logging:
Level: ALL
IncludeExecutionData: True
Destinations:
- CloudWatchLogsLogGroup:
LogGroupArn: !GetAtt StateMachineLogGroup.Arn
StateMachineLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName : !Join [ "", [ '/aws/states/', !Sub '${StateMachineName}', '-Logs' ] ]
Definition Uri라는 키에는 방금 만든 JSON이 적혀 있다.DefinitionUri를 지정하여 Step Function을 실행할 수 있지만 이번 목적은 배치 처리를 수행하기 위한 것이기 때문에 Events 키를 사용하여 3시간마다 명령을 주입하여 실행하기로 결정했습니다.
다음 그림에서 보듯이 commands 키가 있는 JSON을 Input으로 지정하면 이전 섹션에서 만든 Step Function의 상태기
"$.commands"
에서 매개변수를 받은 후 실행할 수 있습니다.여기서는 같은 임무 정의지만 자유롭게 집행할 수 있을 때 지정한 명령의 운용을 구상했다. Input: '{"commands": ["php", "artisan", "command:artisan-command"]}'
SAM 측의 문서https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-resource-statemachine.html만 읽으면 무엇을 지정해야 하는지 알 수 있을 것 같습니다.명령하다
SAM 정의 구축
sam build
설계를 진행하다
sam deploy --guided
또는sam deploy --config-file samconfig.toml --config-env {任意の環境名}
함정.
참고 문헌
20190731 Black Belt Online Seminar Amazon ECS Deep Dive
단계 Function에서 Task 기술
단계 Function의 컨테이너 작업 관리(Amazon ECS, Amazon SNS)
SAM CLI 설치
SAM 자습서
SAM의 상태기(Step Function)에 대한 설명
ECS에 대한 API 참조 정보
Reference
이 문제에 관하여(AWS Stop Function에서 ECS 작업을 정기적으로 수행하는 메커니즘을 SAM으로 설계), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/meijin/articles/deploy-ecs-task-by-step-functions-on-sam텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)