Slide 1

Slide 1 text

αʔόʔϨε1)1 1)1FS,BJHJ QIQFSLBJHJC

Slide 2

Slide 2 text

XIPBNJ ֯ాɹҰฏʢ͢Έͩɹ͍ͬ΃͍ʣ ϑϦʔϥϯε8FCϓϩάϥϚʔ $PEFS%PKPຕํΦʔΨφΠβʔ ,BOTBJ8PSE1SFTT.FFUVQຕํ
 ΦʔΨφΠβʔ

Slide 3

Slide 3 text

BHFOEB w αʔόʔϨεʹ͍ͭͯ w "84ͰαʔόʔϨε1)1͜ͱ͸͡Ί w 4ZNGPOZΛಥͬࠐΜͰΈΑ͏

Slide 4

Slide 4 text

αʔόʔϨεͱ͸

Slide 5

Slide 5 text

αʔόʔϨε Ұఆͷαʔόʔ༰ྔʹґଘ͢Δ͜ͱͳ͘ɺՔಇʹඞཁͳ ϦιʔεΛಈతʹઃఆ͠ɺϚωʔδυαʔϏεΛར༻͢ ΔࣄͰγεςϜߏஙΛ͢Δӡ༻ํ๏ɻ

Slide 6

Slide 6 text

Ϣʔβ 8FC4FSWFS %# Α͋͘Δαʔόߏ੒ྫ

Slide 7

Slide 7 text

Ϣʔβ ֎෦αʔϏε "1*(BUFXBZ -BNCEB ɹ"844FSWFSMFTT"QQMJDBUJPOྫ

Slide 8

Slide 8 text

Ϣʔβ -BNCEB ֎෦αʔϏε ɹ"844FSWFSMFTT"QQMJDBUJPOྫ

Slide 9

Slide 9 text

Ϣʔβ "1*(BUFXBZ -BNCEB 8FC4FSWFS %# /FUMJGZ ؅ཧऀ αʔόʔϨε ΦϯϓϨɾΫϥ΢υ

Slide 10

Slide 10 text

αʔόʔϨεͷϝϦοτ w αʔόͷ؅ཧ΍ઃఆɺߋ৽Λ͠ͳͯ͘ྑ͍ w ࣄલʹαʔό΍ίϯςφΛ༻ҙ͠ͳͯ͘ྑ͍ w ΦϯϓϨɺΫϥ΢υͱൺ΂ͯ҆Ձ w "1*(BUFXBZ-BNCEBສϦΫΤετ·Ͱແྉ
 ʢҎ߱64%ສϦΫΤετʣ

Slide 11

Slide 11 text

IUUQTBN[OUP"ZMSL

Slide 12

Slide 12 text

$0#0- "84ۘ੡0443VOUJNF SE1BSUZۘ੡0443VOUJNF

Slide 13

Slide 13 text

αʔόϨε1)1 ͜ͱ͸͡Ί

Slide 14

Slide 14 text

"1* 8PSLFS #BUDI Ϩεϙϯε͕খ͍͞ ϑΝΠϧอଘ͕ͳ͍ ॲཧ͕୹͍ XJUI%ZOBNP%# 8FCαΠτ Ϩεϙϯε͕େ͖͍ ϑΝΠϧอଘ͋Γ ॲཧ͕௕͍ XJUI3%4 XJUI71$

Slide 15

Slide 15 text

ඞཁͳ΋ͷ w "84ΞΧ΢ϯτ w "84$-* w "844". 4FSWFSMFTT"QQMJDBUJPO.PEFM $-* w 4FSWFSMFTT'SBNFXPSL IUUQTTFSWFSMFTTDPN IUUQTBN[OUP$N3853 IUUQTBN[OUP6)4JGE

Slide 16

Slide 16 text

"84ܥͷઃఆ͸ׂѪ

Slide 17

Slide 17 text

IUUQTHJUIVCDPNTUBDLFSZQIQMBNCEBMBZFS ར༻͢ΔϨΠϠʔ

Slide 18

Slide 18 text

NZQSPKFDU ᵚᴸUFNQMBUFZBNM ᵎᴸTSD ᵎᴸQIQ ᵎᴸJOEFYQIQ σΟϨΫτϦߏ଄

Slide 19

Slide 19 text

AWSTemplateFormatVersion: 2010-09-09 Description: My PHP Application Transform: AWS::Serverless-2016-10-31 Resources: phpserver: Type: AWS::Serverless::Function Properties: FunctionName: !Sub ${AWS::StackName}-phpserver Description: PHP Webserver CodeUri: src/php Runtime: provided Handler: index.php MemorySize: 3008 Timeout: 30 Tracing: Active Layers: - !Sub arn:aws:lambda:${AWS::Region}:887080169480:layer:php73:2 Events: api: Type: Api Properties: Path: /{proxy+} Method: ANY UFNQMBUFZBNM -BNCEB'VODUJPO໊ ϓϩάϥϜͷϧʔτσΟϨΫτϦ ࣮ߦ͞ΕΔϓϩάϥϜ ࢖༻͢Δ-BNCEBΧελϜϨΠϠʔ

Slide 20

Slide 20 text

Slide 21

Slide 21 text

sam package --template-file template.yaml \ --output-template-file [ग़ྗϑΝΠϧ].yaml \ --s3-bucket [S3όέοτ໊] sam deploy --template-file [ग़ྗϑΝΠϧ].yaml \ --stack-name [ελοΫ໊] \
 --capabilities CAPABILITY_IAM

Slide 22

Slide 22 text

Ϣʔβ 4 ϓϩάϥϜΛύοέʔδͯ͠ Ξοϓϩʔυ TBNQBDLBHF $MPVE'PSNBUJPO༻
 ςϯϓϨʔτϑΝΠϧΛग़ྗ

Slide 23

Slide 23 text

Ϣʔβ 4 $MPVE'PSNBUJPO "1*(BUFXBZ -BNCEB 4ͷύοέʔδΛςϯϓϨʔτϑΝΠϧΛجʹ
 -BNCEBʹσϓϩΠ-BNCEB "1*(BUFXBZΛઃఆ TBNEFQMPZ

Slide 24

Slide 24 text

ݺͼग़͠63- ಠࣗυϝΠϯઃఆՄ

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

4ZNGPOZΛೖΕͯΈΔ

Slide 27

Slide 27 text

IUUQTHJUIVCDPNTUBDLFSZQIQMBNCEBMBZFS

Slide 28

Slide 28 text

ར༻Ͱ͖ΔϞδϡʔϧ C[TP DBMFOEBSTP DUZQFTP DVSMTP EPNTP FYJGTP pMFJOGPTP GUQTP HFUUFYUTP JDPOWTP KTPOTP QIBSTP QPTJYTP TINPQTP TJNQMFYNMTP TPDLFUTTP TZTWNTHTP TZTWTFNTP TZTWTINTP UPLFOJ[FSTP XEEYTP YNMTP YNMSFBEFSTP YNMXSJUFSTP YTMTP [JQTP

Slide 29

Slide 29 text

extension=json.so TSDQIQQIQJOJ Ϟδϡʔϧར༻ʹ͸QIQJOJͷઃఆ͕ඞཁ

Slide 30

Slide 30 text

ར༻Ͱ͖ΔϞδϡʔϧ C[TP DBMFOEBSTP DUZQFTP DVSMTP EPNTP FYJGTP pMFJOGPTP GUQTP HFUUFYUTP JDPOWTP KTPOTP QIBSTP QPTJYTP TINPQTP TJNQMFYNMTP TPDLFUTTP TZTWNTHTP TZTWTFNTP TZTWTINTP UPLFOJ[FSTP XEEYTP YNMTP YNMSFBEFSTP YNMXSJUFSTP YTMTP [JQTP

Slide 31

Slide 31 text

%#ར༻ʹ͸ಠࣗϨΠϠʔ௥Ճ΋ඞཁ

Slide 32

Slide 32 text

αʔόʔϨεͷϝϦοτ w αʔόͷ؅ཧ΍ઃఆɺߋ৽Λ͠ͳͯ͘ྑ͍ w ࣄલʹαʔό΍ίϯςφΛ༻ҙ͠ͳͯ͘ྑ͍ w ΦϯϓϨɺΫϥ΢υͱൺ΂ͯ҆Ձ ϝϦοτ͕୆ແ͠ʁ

Slide 33

Slide 33 text

4ZNGPOZಥͬࠐΊΔ͚Ͳ
 ͦͦ͜͜ΊΜͲ͍͘͞ ऴ ੍࡞ɾஶ࡞ ᴸᴸᴸᴸᴸ ⡲⡪⡲

Slide 34

Slide 34 text

ͷ༧ఆͩͬͨɻ QIQMBNCEBMBZFSͰͷઃఆɿɹIUUQTVOQMBUJOGPCMPH

Slide 35

Slide 35 text

IUUQTCSFGTI #SFG

Slide 36

Slide 36 text

#SFG͕ఏڙ͢Δ΋ͷ 1)1$VTUPN3VOUJNF-BZFS
 ˞QIQGQN
 ˞ඞཁϞδϡʔϧ༗ޮࡁΈ
 ˞QEP@NZTRM͸QIQJOJઃఆඞཁ $-* ֤छυΩϡϝϯτ

Slide 37

Slide 37 text

composer create-project symfony/website-skeleton sample cd sample composer require mnapoli/bref

Slide 38

Slide 38 text

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Globals: Function: Environment: Variables: APP_ENV: prod Resources: Website: Type: AWS::Serverless::Function Properties: FunctionName: 'bref-symfony-website' CodeUri: . Handler: public/index.php Timeout: 30 # in seconds (API Gateway has a timeout of 30 seconds) MemorySize: 1024 Runtime: provided Layers: - 'arn:aws:lambda:ap-northeast-1:209497400698:layer:php-73-fpm:1' Events: HttpRoot: Type: Api Properties: Path: / Method: ANY HttpSubPaths: Type: Api Properties: Path: /{proxy+} Method: ANY UFNQMBUFZBNM

Slide 39

Slide 39 text

Console: Type: AWS::Serverless::Function Properties: FunctionName: 'bref-symfony-console' CodeUri: . Handler: bin/console Timeout: 120 # in seconds Runtime: provided Layers: - 'arn:aws:lambda:ap-northeast-1:209497400698:layer:php-73:1' # PHP - 'arn:aws:lambda:ap-northeast-1:209497400698:layer:console:1' # The "console" layer Outputs: DemoApi: Description: 'URL of our function in the *Prod* environment' Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/' UFNQMBUFZBNM #SFGͷυΩϡϝϯτʹαϯϓϧ͋Γ

Slide 40

Slide 40 text

public function getLogDir() { // When on the lambda only /tmp is writeable if (getenv('LAMBDA_TASK_ROOT') !== false) { return '/tmp/log/'; } return $this->getProjectDir() . '/var/log'; } public function getCacheDir() { // When on the lambda only /tmp is writeable if (getenv('LAMBDA_TASK_ROOT') !== false) { return '/tmp/cache/' . $this->environment; } return $this->getProjectDir() . '/var/cache/' . $this->environment; } TSD,FSOFMQIQ MPH DBDIFͷอଘઌมߋ
 UNQͷΈॻ͖ࠐΈ͕Մೳ ,FSOFMQIQΛͪΐͬͱ͚ͩΧελϚΠζ -BNCEBͷ͚࣌ͩͳͷͰɺଞ؀ڥ͸Өڹͳ͠

Slide 41

Slide 41 text

composer install --optimize-autoloader --no-dev sam package --template-file template.yaml \ --output-template-file serverless-output.yaml \ --s3-bucket [S3όέοτ໊] sam deploy --template-file serverless-output.yaml \ --stack-name [ελοΫ໊] \
 --capabilities CAPABILITY_IAM

Slide 42

Slide 42 text

/** * @Route("/", name="top") * @param Request $request * @return \Symfony\Component\HttpFoundation\JsonResponse */ public function index(Request $request) { return $this->json([ 'message' => 'Welcome to your new controller!', 'path' => 'src/Controller/TopController.php', 'name' => $request->query->get('name'), ]); } TSD$POUSPMMFS5PQ$POUSPMMFSQIQ "OOPUBUJPOͰͷϧʔςΟϯά͕ਖ਼ৗʹಈ࡞ 3FRVFTU͔Βͷ஋΋ਖ਼͘͠ड͚औΕΔ

Slide 43

Slide 43 text

ॲཧɿ2JJUB͔ΒهࣄҰཡऔಘ
 ग़ྗɿ+40/
 ଎౓ɿNTʙT


Slide 44

Slide 44 text

IUUQTBQJQMBUGPSNDPN "1*1MBUGPSN

Slide 45

Slide 45 text

composer require api

Slide 46

Slide 46 text

Slide 47

Slide 47 text

ॲཧɿ%#͔Βσʔλऔಘ
 ̙̗ɿ֎෦αʔό.Z42-
 ग़ྗɿ+40/
 ଎౓ɿNTʙT


Slide 48

Slide 48 text

Console: Type: AWS::Serverless::Function Properties: FunctionName: 'bref-symfony-console' CodeUri: . Handler: bin/console Timeout: 120 # in seconds Runtime: provided Layers: - 'arn:aws:lambda:ap-northeast-1:209497400698:layer:php-73:1' # PHP - 'arn:aws:lambda:ap-northeast-1:209497400698:layer:console:1' # The "console" layer Outputs: DemoApi: Description: 'URL of our function in the *Prod* environment' Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/' UFNQMBUFZBNM -BNCBͰ4ZNGPOZ$POTPMF͕࣮ߦՄೳ

Slide 49

Slide 49 text

vendor/bin/bref cli --region [Ϧʔδϣϯ] [ϑΝϯΫγϣϯ໊] -— [ίϚϯυ໊]

Slide 50

Slide 50 text

vendor/bin/bref cli --region ap-northeast-1 bref-symfony-console -- app:bref-sample Array ( [0] => App\Entity\Product Object ( [id:App\Entity\Product:private] => 1 [name:App\Entity\Product:private] => ঎඼1 [price:App\Entity\Product:private] => 100 [published:App\Entity\Product:private] => 1 ) [1] => App\Entity\Product Object ( [id:App\Entity\Product:private] => 2 [name:App\Entity\Product:private] => ঎඼2 [price:App\Entity\Product:private] => 200 [published:App\Entity\Product:private] => 1 ) ) [OK] You have a new command! Now make it your own! Pass --help to see your options.

Slide 51

Slide 51 text

w αʔόΛ࣋ͭΑΓ҆Ձɺָʹӡ༻Ͱ͖Δ w "1* #BUDIͳͲൺֱతॲཧ࣌ؒͷ୹͍΋ͷʹ޲͍ͯΔ w ϑΝΠϧͷॻ͖ࠐΈ͸ෆՄʢUNQΛআ͘ʣ w 3%4 71$ͱ͸૬ੑΠϚΠν w "VSPSB4FSWFSMFTT͕"1*ܦ༝Ͱ42-࣮ߦͰ͖ΔΑ͏ʹͳΔͱ૬ੑ͍͍ʢݱࡏЌ൛ʣ w ઃఆ͕൥ࡶʹͳΔ৔߹͸ɺ4FSWFSMFTTҎ֎ͷબ୒ࢶ΋ w #SFGΛར༻͢Δ͜ͱͰɺ؆୯ʹ4FSWFSMFTT4ZNGPOZ w -BSBWFM΋Ͱ͖ΔΑ w αʔϏε࢝·ͬͯؒ΋ͳ͍ͷͰɺࣄྫগͳΊɻ DPODMVTJPO

Slide 52

Slide 52 text

!JQQFZ@T JQQFJTVNJEB JQQFZT!HNBJMDPN IUUQTVOQMBUJOGP BTLNFBOZUIJOH