Serverless: ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋™์ผํ•œ ๊ฒฝ๋กœ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 08์›” 20์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: serverless/serverless

์„œ๋ฒ„๋ฆฌ์Šค ํ”„๋ ˆ์ž„์›Œํฌ ๋ฒ„์ „:

1.0.0-๋ฒ ํƒ€.2

์šด์˜ ์ฒด์ œ:

OSX 10.11.6

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘:

๋‹ค์Œ ๊ตฌ์„ฑ์ด ์žˆ๊ณ  ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• GET user/profile $์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” POST user/profile ์ด๋ฉฐ ๋ฐฐํฌ ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

functions:
  getProfile:
    handler: handler.getProfile
    events:
      - http:
          path: user/profile
          method: get
  updateProfile:
    handler: handler.updateProfile
    events:
      - http:
          path: user/profile
          method: post
์‹ค์ œ ํ–‰๋™:
$ sls deploy
Serverless: Zipping service...
Serverless: Removing old service versions...
Serverless: Uploading .zip file to S3...
Serverless: Updating Stack...
Serverless: Checking stack update progress...
.. 
  Serverless Error ---------------------------------------

     An error occurred while provisioning your cloudformation:
     The following resource(s) failed to create: [ResourceApigEventGetprofileUserProfile].

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•„๋‹ˆ ๊ธฐ๋‹ค๋ ค! ์ทจ์†Œํ•ด! ๊ทธ๊ฒƒ์€ ์ž˜๋ชป๋œ ํ‘œํ˜„์˜ ์•ฝ๊ฐ„์˜ ์˜ค๋ฅ˜์ผ ๋ฟ์ž…๋‹ˆ๋‹ค! ๋ฏธ๋ž˜์˜ ์‚ฌ๋žŒ๋“ค! ๋‚ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

http://forum.serverless.com/t/deployment-error-a-sibling-did-of-this-resource-already-has-a-variable-path-part-only-one-is-allowed/795

๋”ฐ๋ผ์„œ ๋ณธ์งˆ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ๊ฒฝ๋กœ์™€ ํ•จ๊ป˜ ์•„๋ž˜์— ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

          path: tasks/{taskId}
          path: tasks/{taskToUpdate}

๊ทธ๋ฆฌ๊ณ  ๋‘ ๊ฒฝ๋กœ ๋ชจ๋‘ ๋™์ผํ•œ ํ‚ค๊ฐ€ ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— {taskId}๋ฅผ ๋‘ ๋ฒˆ ๋ชจ๋‘ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค!

์ด๊ฒƒ์„ ๋ณด๋Š” ๊ฐœ๋ฐœ์ž์— ๋Œ€ํ•œ ์œ ์ผํ•œ ์š”์ฒญ์€ AWS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋‚˜์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

functions:

  updateTask:
    handler: lib/endpoints.createTask
    events:
      - http:
          path: tasks/{taskToUpdate}
          method: put
          cors: true

  deleteTask:
    handler: lib/endpoints.deleteTask
    events:
      - http:
          path: tasks/{taskId}
          method: delete
          cors: true

๋ชจ๋“  3 ๋Œ“๊ธ€

์ด๊ฒƒ์€ ๋˜ํ•œ ์Šคํƒ์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์—ฌ ์ž์ฒด์ ์œผ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. #1908

๋‚˜๋„์ด ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. "serverless remove"๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ "serverless deploy -v"๋ฅผ ์‹คํ–‰ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ CRUD ํ‘œ์ค€ ํ˜•์‹(django-rest-framework ๋˜๋Š” AngularJS Resource์™€ ๊ฐ™์€)์„ ๋”ฐ๋ฅด๋Š” ์ผ๋ฐ˜ API๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ URL์„ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

POST    http://blahblah/task/            # Creates a new task
GET     http://blahblah/task/            # Gets all tasks
GET     http://blahblah/task/{taskId}    # Gets a specific task
PUT     http://blahblah/task/{taskId}    # Updates a specific task
DELETE  http://blahblah/task/{taskId}    # Deletes a specific task

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ตญ์ ์ธ ์ผ์„ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹จ์ง€ ์ด URL ํ˜•์‹์„ ์›ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์–ป๋Š” ์˜ค๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Serverless: Deployment failed!

  Serverless Error ---------------------------------------

     An error occurred while provisioning your stack: ApiGatewayResourceTasksParenttaskidVar
     - A sibling ({taskId}) of this resource already has
     a variable path part -- only one is allowed.

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues

  Your Environment Information -----------------------------
     OS:                 win32
     Node Version:       7.0.0
     Serverless Version: 1.7.0

์•„๋‹ˆ ๊ธฐ๋‹ค๋ ค! ์ทจ์†Œํ•ด! ๊ทธ๊ฒƒ์€ ์ž˜๋ชป๋œ ํ‘œํ˜„์˜ ์•ฝ๊ฐ„์˜ ์˜ค๋ฅ˜์ผ ๋ฟ์ž…๋‹ˆ๋‹ค! ๋ฏธ๋ž˜์˜ ์‚ฌ๋žŒ๋“ค! ๋‚ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

http://forum.serverless.com/t/deployment-error-a-sibling-did-of-this-resource-already-has-a-variable-path-part-only-one-is-allowed/795

๋”ฐ๋ผ์„œ ๋ณธ์งˆ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ๊ฒฝ๋กœ์™€ ํ•จ๊ป˜ ์•„๋ž˜์— ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

          path: tasks/{taskId}
          path: tasks/{taskToUpdate}

๊ทธ๋ฆฌ๊ณ  ๋‘ ๊ฒฝ๋กœ ๋ชจ๋‘ ๋™์ผํ•œ ํ‚ค๊ฐ€ ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— {taskId}๋ฅผ ๋‘ ๋ฒˆ ๋ชจ๋‘ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค!

์ด๊ฒƒ์„ ๋ณด๋Š” ๊ฐœ๋ฐœ์ž์— ๋Œ€ํ•œ ์œ ์ผํ•œ ์š”์ฒญ์€ AWS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋‚˜์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

functions:

  updateTask:
    handler: lib/endpoints.createTask
    events:
      - http:
          path: tasks/{taskToUpdate}
          method: put
          cors: true

  deleteTask:
    handler: lib/endpoints.deleteTask
    events:
      - http:
          path: tasks/{taskId}
          method: delete
          cors: true
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰