Upgrade to Pro — share decks privately, control downloads, hide ads and more …

広告配信を支えるバッチ基盤をサーバーレス移行した話(ECS Fargate, Step Functions)@ Serverless Meetup Tokyo #16

広告配信を支えるバッチ基盤をサーバーレス移行した話(ECS Fargate, Step Functions)@ Serverless Meetup Tokyo #16

Jumpei Chikamori

February 27, 2020
Tweet

More Decks by Jumpei Chikamori

Other Decks in Technology

Transcript

  1. ޿ࠂ഑৴Λࢧ͑Δόονج൫Λ
    αʔόʔϨεҠߦͨ͠࿩
    ECS Fargate, Step Functions
    Serverless Meetup Tokyo #16
    2020/02/27

    View Slide

  2. ۙ৿३ฏ pei0804
    Zucks(VOYAGE GROUP)ΤϯδχΞ
    2018೥ʹ৽ଔೖࣾ͠ɺӡ༻͔Β։ൃΛͯ͠·͢ɻ
    ࠷ۙ͸νʔϜΛԣஅͨ͠ηΩϡϦςΟؔ࿈ͷ
    ੔උ΍DSP։ൃΛ΍ͬͯ·͢ɻ
    ޷͖ͳαʔϏε͸ɺϑϧϚωʔδυαʔϏεͰ͢ɻ

    View Slide

  3. ΞδΣϯμ
    • Ҡߦݩͷόοναʔόʔͷ՝୊
    • αʔόʔϨεҠߦ
    • ࣮૷
    • ؂ࢹ
    • ӡ༻ͯ͠ΈͯͲ͏͔ͩͬͨ

    View Slide

  4. Ҡߦݩͷόοναʔόʔͷ՝୊

    View Slide

  5. Ҡߦݩͷόοναʔόʔ
    DSPOVTFSUJNFPVUqPDLXIPHFMPDLNBLFSVOIPHF
    DSPOVTFSUJNFPVUqPDLXGVHBMPDLNBLFSVOGVHB
    DSPOVTFSUJNFPVUqPDLXGVHBMPDLNBLFSVOGPP
    ࡉ͔͍࣮૷ͷ࢓ํ͸ɺνʔϜʹΑͬͯҧ͏ͱࢥ͍·͢ɻ

    View Slide

  6. ӡ༻͕೉͘͠ͳΓ͕ͪ

    View Slide

  7. ӡ༻͕೉͍͠ཁҼ
    • ໰୊ൃੜ࣌ʹߟ͑Δ͜ͱ͕ଟ͍ɻ
    • ෮ݩͷ࢓ํ஌ͬͯΔਓډΔʁ

    View Slide

  8. ໰୊ൃੜ࣌ʹߟ͑Δ͜ͱ͕ଟ͍
    • όονॲཧ͕མͪͨ࣌ʹɺϗετͷ໰୊͔ɺ
    ͦΕͱ΋ॻ͔Ε͍ͯΔίʔυ͕ո͍͠ʁ
    ͱ͔ߟ͑ͳ͍ͱ͍͚ͳ͍ɻ
    • ৭Μͳcron͕ಈ͍͍ͯΔέʔε͕͋ͬͯɺ
    Πϯελϯε্ཱͪ͛௚͚ͩ͢Ͱ͸ͩΊͩͬͨΓ͢Δɻ
    ඍົʹಈ͍͍ͯΔόονॲཧ͕ډͨΓ

    View Slide

  9. ෮ݩͷ࢓ํ஌ͬͯΔਓډΔʁ
    • Ͳ͏΍ͬͯಈ͍͍ͯΔ͔ͷ஌͕ࣝɺ
    ଐਓԽ͍ͯ͠Δέʔε͕ଟ͍ɻ
    • ্ཱͪ͛௚͢ΦϖϨʔγϣϯΛɺ
    ීஈ΍Βͳ͍ͷͰɺૉૣ͘ग़དྷͳ͍ɻ
    • ίʔυԽ͞Ε͍ͯͳ͍෦෼͕͋ͬͨΓ͢Δɻ

    View Slide

  10. όονॲཧͰ΍Γ͍ͨ͜ͱ
    ఆظతʹಈ͘ॲཧΛɺ
    ͨͩॻ͖͍͚ͨͩͳΜ͡Όɻ
    ཉΛݴ͏ͱϗετΛؾʹͨ͘͠ͳ͍ɻ

    View Slide

  11. खܰʹѻ͑Δج൫ʹ͍ͨ͠

    View Slide

  12. όοναʔόʔ͸
    Ͳ͏͍͏࢓ࣄΛ͍ͯ͠Δͷ͔

    View Slide

  13. ௐ΂͍ͯ͘ͱόονॲཧ͸3ͭʹɺ
    ෼ྨग़དྷΔ͜ͱ͕Θ͔ͬͨɻ

    View Slide

  14. ৭Μͳόονॲཧ
    • ஞ࣮࣍ߦ
    • ఆظ࣮ߦ
    • ࣮͸ґଘؔ܎͕͋Δ
    ͦΕͧΕͷόονॲཧ͕ɺ
    ॏෳͯ͠ಈ͔ͳ͍͜ͱΛظ଴͍ͯ͠Δɻ

    View Slide

  15. ৭Μͳόονॲཧ
    • ஞ࣮࣍ߦ
    • ఆظ࣮ߦ
    • ࣮͸ґଘؔ܎͕͋Δ
    ͦΕͧΕͷόονॲཧ͕ɺ
    ॏෳͯ͠ಈ͔ͳ͍͜ͱΛظ଴͍ͯ͠Δɻ
    ͍·"84Ͱఏڙ͞ΕͯΔαʔϏεͳΒɺ
    ΋ͬͱѻ͍΍͍͢ج൫ʹग़དྷΔͷͰ͸ʁ

    View Slide

  16. ৽͍͠ج൫ʹ࢖͑ͦ͏ͳαʔϏε
    • ECS(+Fargate)
    • Step Functions

    View Slide

  17. ECS
    • Amazon Elastic Container Service (Amazon ECS) ͸ɺ
    ׬શϚωʔδυܕͷίϯςφΦʔέετϨʔγϣϯ
    αʔϏεͰ͢ɻ
    https://aws.amazon.com/jp/ecs/
    • Fargateͱ૊Έ߹ΘͤΔͱɺ
    ϗετͳ͠Ͱར༻ՄೳʹͳΔɻʢαʔόʔϨεʣ

    View Slide

  18. ECSͷಈ࡞Πϝʔδ

    View Slide

  19. {
    "executionRoleArn": "arn:aws:iam::000000:role/execRole",
    "containerDefinitions": [
    {
    "logConfiguration": {
    "logDriver": "awslogs",
    "options": {...}
    },
    "command": [
    "make",
    "run"
    ],
    "image": "00000.dkr.ecr.ap-northeast-1.amazonaws.com/batch:production",
    "name": "hoge"
    }
    ],
    "memory": "2048",
    "taskRoleArn": "arn:aws:iam::895849419934:role/taskRole",
    "family": "hoge",
    "requiresCompatibilities": [
    "FARGATE"
    ],
    "networkMode": "awsvpc",
    "cpu": "512",
    "volumes": []
    }
    taskఆٛྫ
    aws ecs register-task-definition --cli-input-json file://task.json

    View Slide

  20. Fargateʹ͍ͭͯ

    View Slide

  21. Fargateͷྑ͍ͱ͜Ζ
    2018೥12݄ࠒ͔Βɺஈ֊తʹόονॲཧΛFargate
    ʹҠߦͯ͠·͕ͨ͠ɺ
    FargateͰࠔͬͨͱ͍͏έʔε͸͍·ͷͱ͜Ζͳ͍ɻ
    αʔόʔϨεͳͷͰɺϗετͷෆௐͰ೰·͞ΕΔ
    έʔε͕ͳ͘ͳΓɺτϥϒϧγϡʔςΟϯά͸
    ҎલΑΓ΋γϯϓϧʹͳΓ·ͨ͠ɻ

    View Slide

  22. Fargate͕߹Θͳ͍έʔε
    ىಈ͕࣌ؒEC2্Ͱಈ͔͢ECSΑΓ͸஗͘ͳΔͷͰɺ
    ىಈ͕࣌ؒॏཁͳόονॲཧͰ͸͓͢͢Ί͠·ͤΜɻ
    τʔλϧͷ஗͘ͳΔ౓߹͍͸ΠϝʔδαΠζʹ΋
    ࠨӈ͞ΕΔͷͰɺ֤؀ڥͰݕূͯ͠Έ͍ͯͩ͘͞ɻ

    View Slide

  23. Step Functions
    • AWS LambdaɺAWS Fargate ͓Αͼ Amazon
    SageMaker ͳͲͷαʔϏεΛͭͳ͛ͯ
    ػೳ๛෋ͳΞϓϦέʔγϣϯʹ·ͱΊΔ
    ϫʔΫϑϩʔΛઃܭ࣮ͯ͠ߦͰ͖·͢ɻ
    https://aws.amazon.com/jp/step-functions/

    View Slide

  24. Step Functionsͷಈ࡞Πϝʔδ

    View Slide

  25. ͜Ε͍͚ΔͷͰ͸ʁ

    View Slide

  26. αʔόʔϨεҠߦ

    View Slide

  27. ৭Μͳόονॲཧʢ࠶ܝʣ
    • ஞ࣮࣍ߦ
    • ఆظ࣮ߦ
    • ࣮͸ґଘؔ܎͕͋Δ
    ͦΕͧΕͷόονॲཧ͕ɺ
    ॏෳͯ͠ಈ͔ͳ͍͜ͱΛظ଴͍ͯ͠Δɻ

    View Slide

  28. ஞ࣮࣍ߦ

    View Slide

  29. ஞ࣮࣍ߦͱ͸
    όονॲཧΛͳΔ͸΍Ͱ࣮ߦ͢Δɻ
    cron࣮૷ྫ
    * * * * * * cron-user flock -w 1 hoge.lock make run

    View Slide

  30. View Slide

  31. ECS Service
    • ࢦఆͨ͠਺ͷΠϯελϯεΛಉ࣌ʹ࣮ߦͯ͠
    ҡ࣋Ͱ͖·͢ɻ
    https://docs.aws.amazon.com/ja_jp/
    AmazonECS/latest/developerguide/
    ecs_services.html

    View Slide

  32. ECS ServiceͷྲྀΕɿඞཁ਺1ͷྫ
    1. λεΫ਺͕0ͳͨΊɺAλεΫ͕౤ೖ͞Εɺ
    λεΫ਺͕1ʹͳΔɻ
    2. AλεΫ͕ॲཧΛऴ͑Δɻ
    λεΫ਺͕0ʹͳΔɻ
    3. λεΫ਺͕0ͳͨΊɺAλεΫ͕౤ೖ͞ΕΔry
    ͜Ε͕܁Γฦ͞ΕΔɻ

    View Slide

  33. {
    "cluster": "batch",
    "taskDefinition": "arn:aws:ecs:ap-northeast-1:000000:task-definition/hoge",
    "networkConfiguration": {
    "awsvpcConfiguration": {
    "assignPublicIp": "ENABLED",
    "securityGroups": [
    "sg-hoge"
    ],
    "subnets": [
    "subnet-hoge"
    ]
    }
    },
    "desiredCount": 1ɹඞཁ਺
    }
    Serviceͷఆٛྫ
    aws ecs create-service --service-name hoge \
    --launch-type FARGATE --cli-input-json file://service.json

    View Slide

  34. ͜ͷύλʔϯͷϝϦοτ
    • ͳΔ΂͘ૣ࣮͘ߦ͢Δ͕γϯϓϧʹදݱͰ͖Δɻ

    View Slide

  35. ఆظ࣮ߦ

    View Slide

  36. ఆظ࣮ߦͱ͸
    ࢦఆ࣌ؒʹόονॲཧΛ࣮ߦ͍ͨ͠ɻ
    cron࣮૷ྫ
    45 * * * * * cron-user flock -w 1 hoge.lock make run

    View Slide

  37. View Slide

  38. Cloud Watch Events
    ECS Task Schedule
    • cron ϥΠΫͳεέδϡʔϧͰͷ
    λεΫͷ࣮ߦ͕Մೳɻ
    https://docs.aws.amazon.com/ja_jp/
    AmazonECS/latest/developerguide/
    scheduling_tasks.html

    View Slide

  39. εέδϡʔϥʔͷઃఆ
    3VMF
    ͍࣮ͭߦ͢Δ͔
    5BSHFUT
    ԿΛ͢Δ͔
    3VMFʹ5BSHFUTΛඥ෇͚Δ

    View Slide

  40. {
    "Name": "hoge",
    "ScheduleExpression": "cron(35 * * * ? *)",
    "State": "ENABLED",
    "Description": "ίϝϯτ"
    }
    Rule
    aws events put-rule --name hoge --cli-input-json file://rule.json

    View Slide

  41. {
    "Targets": [
    {
    "Id": "hoge",
    "Arn": "arn:aws:ecs:ap-northeast-1:00000:cluster/batch",
    "RoleArn": "arn:aws:iam::895849419934:role/ecsEventsRole",
    "Input": "{}",
    "EcsParameters": {
    "TaskDefinitionArn": "arn:aws:ecs:ap-northeast-1:000000:task-definition/hoge",
    "TaskCount": 1,
    "LaunchType": "FARGATE",
    "NetworkConfiguration": {
    "awsvpcConfiguration": {
    "Subnets": [
    "subnet-hoge"
    ],
    "SecurityGroups": [
    "sg-hoge"
    ],
    "AssignPublicIp": "ENABLED"
    }
    },
    "PlatformVersion": "LATEST"
    }
    }
    ]
    }
    Targets
    aws events put-targets --rule hoge —cli-input-json file://targets.json

    View Slide

  42. IUUQTEPDTBXTBNB[[email protected]"NB[PO$MPVE8BUDIMBUFTUFWFOUT$8&@5SPVCMFTIPPUJOHIUNM3VMF5SJHHFSFE.PSF5IBO0ODF
    ෳ਺ճτϦΨʔ͞ΕΔ͜ͱ͕͋Δ

    View Slide

  43. View Slide

  44. dlock
    Go੡෼ࢄγεςϜ޲͚flockϥΠΫπʔϧ
    ҠߦݩͷόοναʔόʔͷॲཧΛͦͷ··ECSͳͲʹɺ
    ࣋ͬͯ͜ΕΔ༻ʹ։ൃ͞Εͨࣾ಺πʔϧɻ
    Lock؅ཧʹDynamoDBͷςʔϒϧΛ࢖༻͍ͯ͠Δɻ
    ςʔϒϧͷΩϟύγςΟͱ͔͸ؾʹ͠ͳͯ͘ྑ͍Α͏ʹΦϯσϚϯυΛ
    ࢖͍ͬͯ·͢ɻ
    ※ഉଞ੍ޚΛؾʹ͠ͳ͍͍࣮ͯ͘૷ʹ͢Δͷ͕ϕετͰ͢ɻ
    OSSʹ͸ͯ͠·ͤΜ͕ɺधཁ͕͋Γͦ͏ͳΒެ։΋ߟ͑ͯ΋ྑͦ͞͏ɻ

    View Slide

  45. dlock
    λεΫͷίϚϯυͰҎԼΛ࣮ߦ͢Δ
    EMPDLŠSFHJPOBQOPSUIFBTUSVOEMPDLIPHFMPDLNBLFSVO
    IPHF

    View Slide

  46. ͜ͷύλʔϯͷϝϦοτ
    • cronΛ࢖ͬͨόονॲཧΛɺͦͷ··࣋ͬͯ͜ΕΔɻ
    • dlockͱ૊Έ߹ΘͤΕ͹ɺഉଞॲཧ΋Մೳɻ

    View Slide

  47. ࣮͸ґଘؔ܎͕͋Δ

    View Slide

  48. ࣮͸ґଘؔ܎͕͋Δ
    ॻ͔Ε͍ͯΔcron
    Aόον͸ຖ࣌20෼։࢝
    Bόον͸ຖ࣌40෼։࢝
    "όονॲཧ
    #όονॲཧ
    "όονॲཧͷ݁ՌΛݩʹॲཧ͢Δ
    DSPOͰ͸ݟ͑ͳ͍͚ͲɺཪͰ͸ґଘ͍ͯ͠Δ

    View Slide

  49. ࣮͸ґଘؔ܎͕͋Δ
    ૉ௚ʹcronͰґଘؔ܎Λදݱ͢Δͱɺ
    ґଘ͍ͯ͠Δόονॲཧ͕མͪΔͱɺޙஈͷόονॲཧ
    ΋མͪͯɺͦͷޙஈ΋མͪͯͱͳΔɻ
    ·ͨɺόονॲཧͷґଘؔ܎ʹৄ͘͠ͳ͍ͱɺ
    ॲཧ͠௚͠खॱ͕Θ͔Βͳ͍ɻ
    ࣗಈͰ͍͍ײ͡ʹ͢Δʹͯ͠΋ɺ
    ϦτϥΠͷ࢓૊ΈΛ࡞Δͱ͔͠ͳ͍ͱ͍͚ͳ͍ɻ

    View Slide

  50. View Slide

  51. ͜ͷύλʔϯͷϝϦοτ
    • δϣϒͷґଘؔ܎Λૉ௚ʹදݱͰ͖Δɻ
    • ϦτϥΠ΍Τϥʔॲཧ͸StepFucntionsͷඪ४ػೳ
    Λ࢖͑͹؆୯ʹ࣮૷Մೳɻ
    https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/concepts-error-handling.html
    "Retry": [ {
    "ErrorEquals": [ "States.Timeout" ],
    "IntervalSeconds": 3, ࠷ॳͷ࠶ࢼߦલͷඵ਺
    "MaxAttempts": 2,ɹ࠶ࢼߦͷ࠷େճ਺
    "BackoffRate": 1.5ɹ֤ࢼߦؒͰ࠶ࢼߦִ͕ؒ૿Ճ͢Δ৐਺
    } ]

    View Slide

  52. ৭Μͳόονॲཧʢ࠶ܝʣ
    • ஞ࣮࣍ߦ
    • ఆظ࣮ߦ
    • ࣮͸ґଘؔ܎͕͋Δ
    ͦΕͧΕͷόονॲཧ͕ɺ
    ॏෳͯ͠ಈ͔ͳ͍͜ͱΛظ଴͍ͯ͠Δɻ

    View Slide

  53. αʔόʔϨεͰ͍͚Δ΍Μ

    View Slide

  54. ؂ࢹ

    View Slide

  55. ؾʹͳΔͱ͜Ζ
    • ECSͷ࣮ߦΤϥʔൃੜ͍ͯ͠ͳ͍͔ɻ
    • StepFunctionsͷεςʔτϚγϯͷ
    ϫʔΫϑϩʔ్͕தͰࣦഊ͍ͯ͠Δ͔ɻ
    • CloudWatch Events͕ECS TaskΛ
    invokeग़དྷ͍ͯΔ͔ɻ

    View Slide

  56. ECSͷ࣮ߦΤϥʔൃੜ͍ͯ͠ͳ͍͔

    View Slide

  57. ECSͷ؂ࢹ

    View Slide

  58. Resources:
    Func:
    Type: AWS::Serverless::Function
    Properties:
    Runtime: python3.8
    MemorySize: 128
    Timeout: 60
    Handler: main.handle
    Role: !GetAtt FuncRole.Arn
    CodeUri: ./
    Environment:
    Variables:
    SLACK_SUCCESS_CHANNEL: !Ref SlackSuccessChannel
    SLACK_FAILURE_CHANNEL: !Ref SlackFailureChannel
    SLACK_HOOK_URL: !Ref SlackHookUrl
    Events:
    ECSTask:
    Type: CloudWatchEvent
    Properties:
    Pattern:
    source:
    - "aws.ecs"
    detail-type:
    - "ECS Task State Change"
    detail:
    lastStatus:
    - "STOPPED"
    ECSͷSTOPPEDΠϕϯτʢSAMʣ

    View Slide

  59. {
    ...
    "detail": {
    "clusterArn": "arn:aws:ecs:ap-northeast-1:951472794671:cluster/name",
    "containerInstanceArn": "arn:aws:ecs:ap-northeast-1:951472794671:container-instance/aaaaaaaa-bbbb-cccc-dddd-
    eeeeeeeeeeee",
    "containers": [
    {
    "containerArn": "arn:aws:ecs:ap-northeast-1:951472794671:container/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "exitCode": 0, codeΛݟΕ͹੒ޭ͔ͨ֬͠ೝՄೳ
    "lastStatus": "STOPPED",
    "name": "container_one",
    "taskArn": "arn:aws:ecs:ap-northeast-1:951472794671:task/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
    },
    {
    "containerArn": "arn:aws:ecs:ap-northeast-1:951472794671:container/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "lastStatus": "STOPPED",
    "name": “container_two",
    "reason": "CannotStartContainerError: API error (500): cannot start a stopped process: unknown\n",ɹࣦഊཧ༝
    "taskArn": "arn:aws:ecs:ap-northeast-1:951472794671:task/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
    }
    ]
    } ...
    }
    ΠϕϯτͰඈΜͰ͘Δ৘ใ

    View Slide

  60. ฐࣾͷྫ

    View Slide

  61. StepFunctionsͷεςʔτϚγϯͷ
    ϫʔΫϑϩʔ్͕தͰࣦഊ͍ͯ͠Δ͔

    View Slide

  62. StepFunctionsͷεςʔτϚγϯͷ
    ϫʔΫϑϩʔ్͕தͰࣦഊ͍ͯ͠Δ͔
    ExecutionsFailedΛݟΕ͹ɺ్தͰࣦഊ͍ͯ͠Δ͜ͱ͕෼͔Δɻ
    ฐࣾͰ͸εςʔτϚγϯͷࡉ͔͍ঢ়ଶભҠ͸ݟ͍ͯ·ͤΜ͕ɺ
    CloudWatch Eventsܦ༝Ͱऔಘ͢Δ͜ͱ΋ՄೳͰ͢ɻ

    View Slide

  63. CloudWatch Events͕ECS TaskΛ
    invokeग़དྷ͍ͯΔ͔

    View Slide

  64. CloudWatch Events͕ECS TaskΛ
    invokeग़དྷ͍ͯΔ͔
    FailedInvocationͰInvokeͷࣦഊʹؾͮ͘͜ͱ͕ग़དྷ·͢ɻ
    Ͳ͏͍͏έʔεͰinvokeࣦഊ͢Δ͔ͱ͍͏ͱɺ
    TargetsͷRole ArnͷRoleͷݖݶ͕଍Γͯͳ͍ͱ͔ɺ
    Role͕ͳ͘ͳͬͯΔͱ͔Ͱ͢ɻ
    Ξϥʔτແ͍͔Β҆ఆͯ͠ΔͳͬͯࢥͬͨΒɺInvokeࣦഊͯͨ͠
    ͱ͔স͑ͳ͍Ͱ͔͢ΒͶʢࣗ෼͸΍ͬͯ͠·ͬͨʣɻ

    View Slide

  65. ӡ༻ͯ͠ΈͯͲ͏͔ͩͬͨ

    View Slide

  66. ಘΒΕͨϝϦοτ

    View Slide

  67. ಘΒΕͨϝϦοτ
    • ৗʹ࢖͍ࣺͯ͢Δ࣮ߦ؀ڥΛ࣮ݱͰ͖ͨɻ
    2019೥8݄23೔ͷEC2ো֐࣌ʹҰ࣌తʹ
    ΤϥʔʹͳΓͭͭ΋ɺࣗಈͰ෮چͨ͠ɻ
    https://www.itmedia.co.jp/news/articles/1908/28/news127_2.html
    • ECSɺStepFunctions͑͞஌͍ͬͯΕ͹ڍಈ͕Θ͔Δɻ

    View Slide

  68. ஍ຯخ͍͠
    • 1όονॲཧɺ1ϩʔϧʹͳͬͨͷͰɺݖݶ͕࠷௿ݶ෇༩ग़དྷΔɻ
    • όονॲཧʹ߹ΘͤͯɺϚγϯύϫʔͷνϡʔχϯά͕ग़དྷΔɻ
    • ϑϧϚωʔδυ͔ͩΒɺԿ΋͠ͳͯ͘΋ศརʹͳ͍ͬͯ͘ɻ
    • ଞͷόονॲཧ͕Ͳ͏ͱ͔ؾʹ͠ͳͯ͘Α͍ɻ

    View Slide

  69. όονॲཧ͸αʔόʔϨεͰ
    ग़དྷΔ࣌୅Ͱ͢ʂ

    View Slide

  70. ·ͱΊ

    View Slide

  71. αʔόʔϨε࠷ߴ

    View Slide

  72. ฐࣾͰ͸
    ΤϯδχΞ࠾༻ͯ͠·͢ʂ

    View Slide

  73. https://techlog.voyagegroup.com/entry/2019/02/04/171325

    View Slide

  74. pei0804ͷ࠷ۙͷ࢓ࣄ
    • DSPͷػೳ։ൃ
    Ͳ͏࡞Δ͔ΒɺίʔσΟϯάɺӡ༻·Ͱ
    Ұؾ௨؏ͯ͠΍ͬͯ·͢ɻ
    • ηΩϡϦςΟ੔උ
    ηΩϡϦςΟΞΧ΢ϯτ࡞੒ͨ͠Γɺ
    GuardDutyಋೖ΍CISϕϯνϚʔΫʹ߹Θͤͨ
    ؀ڥ੔උ΍ࣾ಺޲͚ηΩϡϦςΟษڧձͷ։࠵ɻ

    View Slide

  75. https://note.com/ryosuke_kawamura/n/nb5fc4d34a7c8

    View Slide