Fn 'เจคเฉ‡ เจ†เจงเจพเจฐเจฟเจค เจธเจพเจกเจพ เจ†เจชเจฃเจพ เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจฌเจฃเจพเจ‰เจฃเจพ

Fn 'เจคเฉ‡ เจ†เจงเจพเจฐเจฟเจค เจธเจพเจกเจพ เจ†เจชเจฃเจพ เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจฌเจฃเจพเจ‰เจฃเจพ

เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจ•เฉฐเจชเจฟเจŠเจŸเจฟเฉฐเจ— เจ•เจฒเจพเจ‰เจก เจ•เฉฐเจชเจฟเจŠเจŸเจฟเฉฐเจ— เจตเจฟเฉฑเจš เจธเจญ เจคเฉ‹เจ‚ เจชเฉเจฐเจฎเฉเฉฑเจ– เจฐเฉเจเจพเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจนเฉˆเฅค เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจ“เจชเจฐเฉ‡เจŸเจฟเฉฐเจ— เจธเจฟเจงเจพเจ‚เจค เจ‡เจน เจนเฉˆ เจ•เจฟ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเจพ DevOps เจฆเฉ€ เจจเจนเฉ€เจ‚, เจชเจฐ เจธเฉ‡เจตเจพ เจชเฉเจฐเจฆเจพเจคเจพ เจฆเฉ€ เจšเจฟเฉฐเจคเจพ เจนเฉˆเฅค เจธเจฐเฉ‹เจค เจธเจ•เฉ‡เจฒเจฟเฉฐเจ— เจ†เจชเจฃเฉ‡ เจ†เจช เจฒเฉ‹เจก เจ•เจฐเจจ เจฒเจˆ เจ…เจจเฉเจ•เฉ‚เจฒ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธ เจตเจฟเฉฑเจš เจคเจฌเจฆเฉ€เจฒเฉ€ เจฆเฉ€ เจ‰เฉฑเจš เจฆเจฐ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค

เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจ†เจฎ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ˜เฉฑเจŸ เจ•เจฐเจจ เจ…เจคเฉ‡ เจซเฉ‹เจ•เจธ เจ•เจฐเจจ เจฆเฉ€ เจชเฉเจฐเจตเจฟเจฐเจคเฉ€ เจนเฉˆ, เจ‡เจธเฉ‡ เจ•เจฐเจ•เฉ‡ เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจ•เฉฐเจชเจฟเจŠเจŸเจฟเฉฐเจ— เจจเฉ‚เฉฐ เจ•เจˆ เจตเจพเจฐเฉ€ เจ‡เฉฑเจ• เจธเฉ‡เจตเจพ (FaaS) เจตเจœเฉ‹เจ‚ เจซเฉฐเจ•เจธเจผเจจ เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจ‡เจคเจฟเจนเจพเจธเจ• เจคเฉŒเจฐ 'เจคเฉ‡, AWS Lambda เจฆเฉ‡ เจจเจพเจฒ FaaS เจฆเฉ€ เจชเฉ‡เจธเจผเจ•เจธเจผ เจ•เจฐเจจ เจตเจพเจฒเจพ เจชเจนเจฟเจฒเจพ เจ•เจฒเจพเจ‰เจก เจชเฉเจฐเจฆเจพเจคเจพ เจเจฎเจพเจœเจผเจพเจจ เจธเฉ€, เจ‡เจธ เจฒเจˆ เจ‡เจน เจจเจพเจฎ เจนเฉˆเฅค เจนเฉ‹เจฐ เจ•เจฒเจพเจ‰เจก เจธเฉ‡เจตเจพ เจชเฉเจฐเจฆเจพเจคเจพ เจตเฉ€ เจ‡เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ€ เจชเฉ‡เจธเจผเจ•เจธเจผ เจ•เจฐเจฆเฉ‡ เจนเจจ:

  • เจ—เฉ‚เจ—เจฒ เจคเฉ‹เจ‚ เจ•เจฒเจพเจ‰เจก เจซเฉฐเจ•เจธเจผเจจ
  • เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจพเฉฑเจซเจŸ เจคเฉ‹เจ‚ เจ…เจœเจผเฉเจฐ เจซเฉฐเจ•เจธเจผเจจ

เจ‡เจน เจธเจพเจฐเฉ€เจ†เจ‚ เจ•เฉฐเจชเจจเฉ€เจ†เจ‚ เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจ•เฉฐเจชเจฟเจŠเจŸเจฟเฉฐเจ—, เจ†เจŸเฉ‹-เจธเจ•เฉ‡เจฒเจฟเฉฐเจ— เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ€เจ†เจ‚ เจนเจจ, เจ…เจคเฉ‡ เจธเจฟเจฐเจซเจผ เจ‰เจธ เจฒเจˆ เจญเฉเจ—เจคเจพเจจ เจ•เจฐเจฆเฉ€เจ†เจ‚ เจนเจจ เจœเฉ‹ เจคเฉเจธเฉ€เจ‚ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจตเจฐเจคเจฆเฉ‡ เจนเฉ‹, เจชเจฐ เจ‰เจน เจ—เจพเจนเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจฎเจฒเจ•เฉ€เจ…เจค เจ‰เจคเจชเจพเจฆ เจตเจฟเฉฑเจš เจฒเจพเจ• เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจ•เฉฐเจชเจฟเจŠเจŸเจฟเฉฐเจ— เจฒเจˆ เจฎเฉเจซเจค เจ…เจคเฉ‡ เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจตเจฟเจ•เจฒเจช เจนเจจเฅค เจ‡เจน เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ— เจนเฉˆ:

  • เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจ…เจชเจพเจšเฉ‡ เจ“เจชเจจเจตเจฟเจธเจ•, IBM เจฆเฉเจ†เจฐเจพ เจ‡เฉฑเจ• เจ‡เจจเจ•เจฟเจŠเจฌเฉ‡เจŸเจฐ เจตเจฟเฉฑเจš เจตเจฟเจ•เจธเจค,
  • เจฌเจธเฉฐเจค เจ•เจฒเจพเจ‰เจก เจซเฉฐเจ•เจธเจผเจจ, เจ‡เฉฑเจ• เจ•เจพเจซเจผเฉ€ เจ…เจฎเฉ€เจฐ เจฌเจธเฉฐเจค เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจˆเจ•เฉ‹เจธเจฟเจธเจŸเจฎ เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจœเฉ‹เจ‚, เจœเจฟเจธเจจเฉ‚เฉฐ AWS Lambda, Azure เจซเฉฐเจ•เจธเจผเจจ เจ…เจคเฉ‡ OpenWhisk เจฒเจˆ เจ‡เฉฑเจ• เจจเจ•เจพเจฌ เจตเจœเฉ‹เจ‚ เจตเฉ€ เจตเจฐเจคเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ,
  • เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ Fn, เจ“เจฐเฉ‡เจ•เจฒ เจฆเฉเจ†เจฐเจพ เจธเจฎเจฐเจฅเจฟเจคเฅค

เจ‡เจน เจธเจพเจฐเฉ‡ เจฌเฉฑเจฆเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจธเฉเจคเฉฐเจคเจฐ เจนเจจ, เจฏเจพเจจเฉ€ เจ•เจฟ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจ•เจฒเจพเจŠเจก เจตเจฟเฉฑเจš เจธเจฅเจพเจชเจฟเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจคเฉเจนเจพเจกเจพ เจ†เจชเจฃเจพ, เจœเจจเจคเจ• เจœเจพเจ‚ เจจเจฟเฉฑเจœเฉ€, เจ…เจคเฉ‡ เจฌเฉ‡เจธเจผเฉฑเจ• Exoscale เจตเจฟเฉฑเจš เจตเฉ€ เจธเจผเจพเจฎเจฒ เจนเฉˆเฅค

Fn เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ

Fn เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจกเฉŒเจ•เจฐ 'เจคเฉ‡ เจ…เจงเจพเจฐเจค เจนเฉˆ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจฆเฉ‹ เจฎเฉเฉฑเจ– เจญเจพเจ— เจนเจจ:

  • CLI เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ Fn เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจชเจนเจฟเจฒเฉ‚เจ†เจ‚ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจ•เจฐเจจ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจ…เจคเฉ‡ Fn เจธเจฐเจตเจฐ เจจเจพเจฒ เจ—เฉฑเจฒเจฌเจพเจค เจ•เจฐเจฆเจพ เจนเฉˆ,
  • Fn เจธเจฐเจตเจฐ เจ†เจชเจฃเฉ‡ เจ†เจช เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจกเฉŒเจ•เจฐ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจตเจฟเฉฑเจš เจชเฉˆเจ• เจ•เฉ€เจคเฉ€ เจ‡เฉฑเจ• เจจเจฟเจฏเจฎเจค เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจนเฉˆเฅค

Fn เจตเจฟเฉฑเจš เจคเฉˆเจจเจพเจค เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฑเจ–เจฐเฉ‡ เจ•เฉฐเจŸเฉ‡เจจเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจตเฉ€ เจšเจฒเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจญเจพเจธเจผเจพเจตเจพเจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ... Clojure!

เจซเฉฐเจ•เจธเจผเจจ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸเจธ เจธเจŸเฉˆเจ‚เจกเจฐเจก เจ‡เจจเจชเฉเจŸ (STDIN) เจจเฉ‚เฉฐ เจชเจพเจธ เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจจเจคเฉ€เจœเฉ‡ เจธเจŸเฉˆเจ‚เจกเจฐเจก เจ†เจ‰เจŸเจชเฉเฉฑเจŸ (STDOUT) เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค เจœเฉ‡เจ•เจฐ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจœเจพเจ‚ เจตเจพเจชเจธเฉ€ เจฎเฉเฉฑเจฒ เจธเจงเจพเจฐเจจ เจฎเฉเฉฑเจฒ เจจเจนเฉ€เจ‚ เจนเจจ (เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‡เฉฑเจ• JSON เจตเจธเจคเฉ‚), เจคเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจซเฉฐเจ•เจธเจผเจจ เจกเจฟเจตเฉˆเจฒเจชเจฎเฉˆเจ‚เจŸ เจ•เจฟเฉฑเจŸ (FDK) เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš Fn เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจเจฌเจธเจŸเจฐเฉˆเจ•เจธเจผเจจ เจฒเฉ‡เจ…เจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฌเจฆเจฒเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจธเจนเฉ‚เจฒเจค เจฒเจˆ, เจตเฉฑเจ–-เจตเฉฑเจ– เจญเจพเจธเจผเจพเจตเจพเจ‚ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ (เจ—เฉ‹, เจœเจพเจตเจพ, เจชเจพเจˆเจฅเจจ, เจ†เจฆเจฟ เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚) เจฆเฉ€ เจ‡เฉฑเจ• เจตเจฟเจ†เจชเจ• เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš FaaS เจฆเฉ€ เจคเฉˆเจจเจพเจคเฉ€ เจฆเฉ€ เจธเจนเฉ‚เจฒเจค เจฒเจˆ เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸเจพเจ‚ เจฆเฉ‡ เจฌเจฟเจฒเจŸ-เจ‡เจจ เจธเฉˆเฉฑเจŸเจพเจ‚ เจฆเฉ€ เจชเฉ‡เจธเจผเจ•เจธเจผ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค

เจ‡เจธ เจšเจฟเฉฑเจคเจฐ เจฆเฉ€ เจชเจพเจฒเจฃเจพ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• FaaS เจฌเจฃเจพเจ‰เจฃเจพ เจ†เจธเจพเจจ เจนเฉˆ:

  • Fn CLI เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค เจ•เจฐเจจเจพ: Fn เจฒเจˆ เจ‡เฉฑเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจซเจพเจˆเจฒ เจšเฉเจฃเฉ‡ เจ—เจ เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจฌเจฃเจพเจˆ เจ—เจˆ เจนเฉˆเฅค
  • เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจ–เฉเจฆ เจฆเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจฐเฉ‹เจฒ เจ†เจŠเจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจฆเฉเจฌเจพเจฐเจพ CLI Fn เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ: เจ•เฉฐเจŸเฉ‡เจจเจฐ เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ–เจพเจธ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจ‡เจธ เจšเจฟเฉฑเจคเจฐ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€ เจ…เจคเฉ‡ เจชเจฒเฉ‡เจธเจฎเฉˆเจ‚เจŸ เจฌเจพเจฐเฉ‡ เจธเฉ‚เจšเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

Fn 'เจคเฉ‡ เจ†เจงเจพเจฐเจฟเจค เจธเจพเจกเจพ เจ†เจชเจฃเจพ เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจฌเจฃเจพเจ‰เจฃเจพ
Fn เจจเฉ‚เฉฐ เจซเฉฐเจ•เจธเจผเจจ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฆเจพ เจธเจฟเจงเจพเจ‚เจค

เจธเจฅเจพเจจเจ• เจธเจฅเจพเจชเจจเจพ เจ…เจคเฉ‡ เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš

เจ†เจ‰ เจฒเฉ‹เจ•เจฒ เจฎเจธเจผเฉ€เจจ เจ‰เฉฑเจคเฉ‡ Fn เจจเฉ‚เฉฐ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ€เจเฅค เจชเจนเจฟเจฒเจพเจ‚, เจกเฉŒเจ•เจฐ เจธเจฅเจพเจชเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ Fn เจฆเฉเจ†เจฐเจพ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเจพ เจนเฉˆ. เจ‡เจน เจฎเฉฐเจจ เจ•เฉ‡ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจกเฉ‡เจฌเฉ€เจ…เจจ/เจ‰เจฌเฉฐเจŸเฉ‚ 'เจคเฉ‡ เจนเจพเจ‚:

$ sudo apt-get update
$ sudo apt-get install docker.io

เจœเจพเจ‚ เจ†เจชเจฃเฉ‡ เจธเจฟเจธเจŸเจฎ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ เจชเฉˆเจ•เฉ‡เจœ เจฎเฉˆเจจเฉ‡เจœเจฐ/เจกเฉŒเจ•เจฐ เจฌเจฟเจฒเจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹เฅค เจซเจฟเจฐ เจคเฉเจธเฉ€เจ‚ เจธเจฟเฉฑเจงเฉ‡ Fn CLI เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, curl เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ:

$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ Homebrew เจจเจพเจฒ OSX 'เจคเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจฆเฉ‚เจœเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

$ brew install fn

==> Downloading https://homebrew.bintray.com/bottles/fn-0.5.8.high_sierra.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/b1/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb
######################################################################## 100.0%
==> Pouring fn-0.5.8.high_sierra.bottle.tar.gz
  /usr/local/Cellar/fn/0.5.8: 5 files, 16.7MB

เจ…เจธเฉ€เจ‚ เจนเฉเจฃ CLI เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ†เจชเจฃเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš เจคเฉˆเจจเจพเจค เจ•เจฐเจจ เจฒเจˆ เจคเจฟเจ†เจฐ เจนเจพเจ‚เฅค เจธเจฐเจฒเจคเจพ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฌเจฟเจฒเจŸ-เจ‡เจจ เจฒเจพเจ‚เจš เจตเจพเจคเจพเจตเจฐเจฃ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจจเฉ‹เจก:

$ fn init --runtime node --trigger http hellonode

Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.

เจ‡เฉฑเจ• เจจเจตเฉ€เจ‚ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจฌเจฃเจพเจˆ เจœเจพเจตเฉ‡เจ—เฉ€ hellonode เจ•เฉเจ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒเจพเจ‚ เจจเจพเจฒ เจธเจพเจกเฉ‡ Fn เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจตเจฟเจ•เจธเจค เจ•เจฐเจจ เจฒเจˆเฅค เจจเจตเฉ€เจ‚ เจฌเจฃเจพเจˆ เจ—เจˆ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ, เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ เจšเฉเจฃเฉ€ เจนเฉ‹เจˆ เจญเจพเจธเจผเจพ เจœเจพเจ‚ เจฐเจจเจŸเจพเจˆเจฎ เจฆเฉ‡ เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจฆเฉ€ เจชเจพเจฒเจฃเจพ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ†เจชเจฃเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

# ะšะฐั‚ะฐะปะพะณ ั node ะฒั‹ะณะปัะดะธั‚ ั‚ะฐะบ:

   hellonode
   โ”œโ”€โ”€ func.js
   โ”œโ”€โ”€ func.yaml
   โ””โ”€โ”€ package.json

# ะกะฒะตะถะตัƒัั‚ะฐะฝะพะฒะปะตะฝะฝะพะต ะพะบั€ัƒะถะตะฝะธะต Java11 ั‚ะฐะบะพะต:

   hellojava11
   โ”œโ”€โ”€ func.yaml
   โ”œโ”€โ”€ pom.xml
   โ””โ”€โ”€ src
       โ”œโ”€โ”€ main
       โ”‚   โ””โ”€โ”€ java
       โ”‚       โ””โ”€โ”€ com
       โ”‚           โ””โ”€โ”€ example
       โ”‚               โ””โ”€โ”€ fn
       โ”‚                   โ””โ”€โ”€ HelloFunction.java
       โ””โ”€โ”€ test
           โ””โ”€โ”€ java
               โ””โ”€โ”€ com
                   โ””โ”€โ”€ example
                       โ””โ”€โ”€ fn
                           โ””โ”€โ”€ HelloFunctionTest.java

Fn เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฌเจฃเจคเจฐ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ func.yaml, Fn เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€เจ†เจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฐเฉฑเจ–เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจฆเฉเจ†เจฐเจพ เจšเฉเจฃเฉ€ เจ—เจˆ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจš เจ•เฉ‹เจก เจฒเจˆ เจŸเฉˆเจฎเจชเจฒเฉ‡เจŸ เจธเฉˆเฉฑเจŸ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจจเฉ‹เจก เจฐเจจเจŸเจพเจˆเจฎ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ:

$ cat hellonode/func.js

const fdk=require('@fnproject/fdk');

fdk.handle(function(input){
  let name = 'World';
  if (input.name) {
    name = input.name;
  }
  return {'message': 'Hello ' + name}
})

เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจ‡เจน เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจ†เจชเจฃเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจฆเฉ€ เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจœเจพเจ‚เจš เจ•เจฐเจพเจ‚เจ—เฉ‡ เจ•เจฟ เจธเจญ เจ•เฉเจ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจชเจนเจฟเจฒเจพเจ‚, เจ…เจธเฉ€เจ‚ Fn เจธเจฐเจตเจฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฆเฉฑเจธเจฟเจ† เจ—เจฟเจ† เจนเฉˆ, Fn เจธเจฐเจตเจฐ เจ‡เฉฑเจ• เจกเฉŒเจ•เจฐ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจนเฉˆ, เจ‡เจธเจฒเจˆ, เจธเจŸเจพเจฐเจŸเจ…เจช เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‡เจน เจœเจพ เจ•เฉ‡ เจกเฉŒเจ•เจฐ เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจคเฉ‹เจ‚ เจšเจฟเฉฑเจคเจฐ เจฒเจตเฉ‡เจ—เจพเฅค

$ fn start -d                    # ะทะฐะฟัƒัะบะฐะตะผ ะปะพะบะฐะปัŒะฝั‹ะน ัะตั€ะฒะตั€ ะฒ ั„ะพะฝะต

Unable to find image 'fnproject/fnserver:latest' locally
latest: Pulling from fnproject/fnserver
ff3a5c916c92: Pull complete
1a649ea86bca: Pull complete
ce35f4d5f86a: Pull complete

...

Status: Downloaded newer image for fnproject/fnserver:latest
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5

เจธเจพเจกเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ, เจ‡เจน "เจฐเฉ‹เจฒ เจ†เจŠเจŸ" เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจ‡เจธเจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ ะธะผั ะฟั€ะธะปะพะถะตะฝะธั: Fn เจตเจฟเฉฑเจš, เจธเจพเจฐเฉ€เจ†เจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฒเจˆ เจจเฉ‡เจฎเจธเจชเฉ‡เจธ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจจเจฟเจธเจผเจšเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค

Fn CLI เจซเจพเจˆเจฒ เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเฉ‡เจ—เจพ func.yaml เจฎเฉŒเจœเฉ‚เจฆเจพ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจœเฉ‹ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจ เจฒเจˆ เจตเจฐเจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€เฅค เจ‡เจธ เจฒเจˆ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจพเจกเฉ€ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ 'เจคเฉ‡ เจœเจพเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ hellonode.

$ cd hellonode
$ fn deploy --app fnexo --local  # ะฒั‹ะบะฐั‚ั‹ะฒะฐะตะผ ั„ัƒะฝะบั†ะธัŽ ะปะพะบะฐะปัŒะฝะพ, ะธะผั ะฟั€ะธะปะพะถะตะฝะธั - fnexo.
                                 # ะฟะฐั€ะฐะผะตั‚ั€ local ะฝะต ะทะฐะปะธะฒะฐะตั‚ ะพะฑั€ะฐะท ะฒ ัƒะดะฐะปะตะฝะฝั‹ะน ั€ะตะตัั‚ั€,
                                 # ะทะฐะฟัƒัะบะฐั ะตะณะพ ะฝะฐะฟั€ัะผัƒัŽ

Deploying hellonode to app: fnexo
Bumped to version 0.0.2
Building image nfrankel/hellonode:0.0.3 .
Updating function hellonode using image nfrankel/hellonode:0.0.3...
Successfully created app:  fnexo
Successfully created function: hellonode with nfrankel/hellonode:0.0.3
Successfully created trigger: hellonode-trigger

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจก เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจคเฉ‹เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจกเฉŒเจ•เจฐ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจšเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจธเจพเจกเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจธเจผเจพเจฎเจฒ เจนเจจเฅค เจซเฉฐเจ•เจธเจผเจจ เจ•เจพเจฒ เจ•เจฐเจจ เจฒเจˆ เจคเจฟเจ†เจฐ เจนเฉˆ, เจ…เจคเฉ‡ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เจธเจจเฉ‚เฉฐ เจ•เจฐเจจ เจฆเฉ‡ เจฆเฉ‹ เจคเจฐเฉ€เจ•เฉ‡ เจนเจจ:

  • Fn เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ invoke
  • เจฐเจพเจนเฉ€เจ‚ เจธเจฟเฉฑเจงเจพ เจ•เจพเจฒ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ http

เจšเฉเจฃเฉŒเจคเฉ€ invoke Fn เจฆเฉเจ†เจฐเจพ เจ‡เจน เจธเจฟเจฐเจซเจผ เจŸเฉˆเจธเจŸเจพเจ‚ เจฒเจˆ HTTP เจฆเฉเจ†เจฐเจพ เจ•เฉฐเจฎ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจคเฉ‡เจœเจผ เจœเจพเจ‚เจš เจฒเจˆ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉˆ:

$ fn invoke fnexo hellonode      # ะฒั‹ะทั‹ะฒะฐะตะผ ั„ัƒะฝะบั†ะธัŽ hellonode ะฟั€ะธะปะพะถะตะฝะธั fnexo

{"message":"Hello World"}

เจ•เจฟเจธเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเจพ เจ•เจพเจฒ เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจชเฉ‚เจฐเจพ URL เจœเจพเจฃเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ:

$ curl http://localhost:8080/t/fnexo/hellonode-trigger

{"message":"Hello World"}

Fn เจธเจฐเจตเจฐ เจชเฉ‹เจฐเจŸ 8080 'เจคเฉ‡ เจ†เจชเจฃเฉ‡ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจ—เจŸ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจซเฉฐเจ•เจธเจผเจจ URL เจชเฉˆเจŸเจฐเจจ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจœเจพเจชเจฆเจพ เจนเฉˆ t/app/function, เจชเจฐ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจจเจนเฉ€เจ‚เฅค HTTP เจฆเฉเจ†เจฐเจพ, เจ‡เฉฑเจ• เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจจเจนเฉ€เจ‚ เจฌเฉเจฒเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจชเจฐ เจ‡เฉฑเจ• เจ…เจ–เฉŒเจคเฉ€ เจŸเจฐเจฟเฉฑเจ—เจฐ เจฆเฉเจ†เจฐเจพ, เจœเฉ‹ เจ‡เจธเจฆเฉ‡ เจจเจพเจฎ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ, เจซเฉฐเจ•เจธเจผเจจ เจ•เจพเจฒ เจจเฉ‚เฉฐ "เจธเจผเฉเจฐเฉ‚" เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจตเจฟเฉฑเจš เจŸเจฐเจฟเฉฑเจ—เจฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจ `func.yml เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ:

schema_version: 20180708
name: hellonode
version: 0.0.3
runtime: node
entrypoint: node func.js
format: json
triggers:
- name: hellonode-trigger
  type: http
  source: /hellonode-trigger    # URL ั‚ั€ะธะณะณะตั€ะฐ

เจ…เจธเฉ€เจ‚ เจซเฉฐเจ•เจธเจผเจจ เจจเจพเจฎ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ•เจฐเจจ เจฒเจˆ เจŸเจฐเจฟเฉฑเจ—เจฐ เจจเจพเจฎ เจจเฉ‚เฉฐ เจฌเจฆเจฒ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจ‡เจน เจธเจญ เจ•เฉเจ เจธเฉŒเจ–เจพ เจฌเจฃเจพ เจฆเฉ‡เจตเฉ‡เจ—เจพ:

triggers:
- name: hellonode-trigger
  type: http
  source: /hellonode    # ัะพะฒะฟะฐะดะฐะตั‚ ั ะธะผะตะฝะตะผ ั„ัƒะฝะบั†ะธะธ

เจซเจฟเจฐ เจ…เจธเฉ€เจ‚ เจซเฉฐเจ•เจธเจผเจจ เจกเจฟเจฒเฉ€เจตเจฐเฉ€ เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจจเจตเฉ‡เจ‚ เจŸเจฐเจฟเฉฑเจ—เจฐ เจคเฉ‹เจ‚ เจ•เจพเจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:

$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode

{"message":"Hello World"}

เจธเจญ เจ•เฉเจ เจ•เฉฐเจฎ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ! เจ‡เจน เจชเฉ‚เจฐเฉ‡ เจชเฉˆเจฎเจพเจจเฉ‡ เจฆเฉ‡ เจชเฉเจฐเจฏเฉ‹เจ—เจพเจ‚ 'เจคเฉ‡ เจœเจพเจฃ เจ…เจคเฉ‡ เจธเจฐเจตเจฐ 'เจคเฉ‡ เจธเจพเจกเฉ‡ FaaS เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฆเจพ เจธเจฎเจพเจ‚ เจนเฉˆ!

เจคเฉเจนเจพเจกเฉ‡ เจ†เจชเจฃเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ 'เจคเฉ‡ เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจซเฉฐเจ•เจธเจผเจจ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจเจพ

เจšเจฒเฉ‹ เจเจ•เจธเฉ‹เจธเจ•เฉ‡เจฒ CLI เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ‡เฉฑเจ• เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ เจจเฉ‚เฉฐ เจœเจฒเจฆเฉ€ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ€เจเฅค เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ…เจœเฉ‡ เจคเฉฑเจ• เจ‡เจธเจจเฉ‚เฉฐ เจธเฉˆเจŸ เจ…เจช เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจตเจฐเจค เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจธเจพเจกเฉ€ เจคเฉ‡เจœเจผ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ—เจพเจˆเจก. เจ‡เจน เจ‡เฉฑเจ• เจตเจงเฉ€เจ† เจธเจพเจงเจจ เจนเฉˆ เจœเฉ‹ เจคเฉเจนเจพเจกเฉ€ เจ‰เจคเจชเจพเจฆเจ•เจคเจพ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจตเฉ€ เจตเจงเจพเจเจ—เจพ. เจ‡เจน เจจเจพ เจญเฉเฉฑเจฒเฉ‹ เจ•เจฟ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจธเจฎเฉ‚เจน เจตเจฟเฉฑเจš เจชเฉ‹เจฐเจŸ 8080 เจ–เฉ‹เจฒเฉเจนเจฃ เจฒเจˆ เจ‡เฉฑเจ• เจจเจฟเจฏเจฎ เจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ! เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€เจ†เจ‚ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจ‡เฉฑเจ• เจธเจพเจซเจผ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ เจฒเจพเจ‚เจš เจ•เจฐเจจเจ—เฉ€เจ†เจ‚, เจธเจพเจกเฉ‡ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจฎเฉ‡เจœเจผเจฌเจพเจจเฉ€ เจ•เจฐเจจ เจฒเจˆ เจคเจฟเจ†เจฐ:

$ exo firewall create fn-securitygroup
$ exo firewall add fn-securitygroup ssh --my-ip
$ exo firewall add fn-securitygroup -p tcp -P 8080-8080 -c 0.0.0.0/0
$ exo vm create fn-server -s fn-securitygroup

เจซเจฟเจฐ เจคเฉเจธเฉ€เจ‚ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ เจตเจฟเฉฑเจš ssh เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจฐเจฟเจฎเฉ‹เจŸ Fn เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

$ exo ssh fn-server

The authenticity of host '185.19.30.175 (185.19.30.175)' can't be established.
ECDSA key fingerprint is SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '185.19.30.175' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)

เจซเจฟเจฐ เจกเฉŒเจ•เจฐ เจ…เจคเฉ‡ Fn เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจ‰เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ‹ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฒเฉ‹เจ•เจฒ เจฎเจธเจผเฉ€เจจ 'เจคเฉ‡ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจšเจพเจฒเฉ‚ เจ•เจฐเฉ‹:

$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo systemctl start docker
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
$ sudo fn start

...

    ______
   / ____/___
  / /_  / __ 
 / __/ / / / /
/_/   /_/ /_/
    v0.3.643

Fn เจซเฉฐเจ•เจธเจผเจจ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจคเจฟเจ†เจฐ เจนเฉˆ! เจ‡เฉฑเจ• เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ‡ เจจเจฟเจฏเจค เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡ deploy เจซเจฒเฉˆเจ— เจจเฉ‚เฉฐ เจ›เฉฑเจก เจ•เฉ‡ เจธเจฅเจพเจจเจ• เจ•เฉฐเจชเจฟเจŠเจŸเจฐ เจคเฉ‹เจ‚ --local.

เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, Fn เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ Fn เจธเจฐเจตเจฐ เจ…เจคเฉ‡ เจกเฉŒเจ•เจฐ เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจฆเจพ เจธเจฅเจพเจจ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ‡เจน เจตเจฟเจ•เจฒเจช เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฆเฉเจ†เจฐเจพ เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจ FN_API_URL ะธ FN_REGISTRY เจ•เฉเจฐเจฎเจตเจพเจฐ, เจชเจฐ เจคเฉˆเจจเจพเจคเฉ€ เจฒเจˆ เจธเฉฐเจฐเจšเจจเจพ เจฆเฉ€ เจฐเจšเจจเจพ เจ…เจคเฉ‡ เจชเฉเจฐเจฌเฉฐเจงเจจ เจจเฉ‚เฉฐ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจตเจงเฉ‡เจฐเฉ‡ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจคเจฐเฉ€เจ•เจพ เจตเฉ€ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

Fn เจธเจผเจฌเจฆเจพเจ‚ เจตเจฟเฉฑเจš, เจคเฉˆเจจเจพเจคเฉ€ เจฒเจˆ เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ context. เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ€ เจ•เจฎเจพเจ‚เจก เจชเฉเจฐเจธเฉฐเจ— เจฌเจฃเจพเจเจ—เฉ€:

$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankel

เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจ‰เจชเจฒเจฌเจง เจธเฉฐเจฆเจฐเจญเจพเจ‚ เจจเฉ‚เฉฐ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹:

$ fn list contexts

CURRENT NAME      PROVIDER      API URL                      REGISTRY
    default       default       http://localhost:8080/
    exoscale      default       http://185.19.30.175:8080    nfrankel

เจ…เจคเฉ‡ เจ‰เจธ เจชเฉเจฐเจธเฉฐเจ— 'เจคเฉ‡ เจธเจตเจฟเจš เจ•เจฐเฉ‹ เจœเฉ‹ เจนเฉเจฃเฉ‡ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจธเฉ€:

 $ fn use context exoscale

 Now using context: exoscale

เจ‡เฉฑเจฅเฉ‹เจ‚, Fn เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจกเจฟเจฒเฉ€เจตเจฐเฉ€ เจšเฉเจฃเฉ‡ เจนเฉ‹เจ DockerHub เจ–เจพเจคเฉ‡ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเฉ‡เจ—เฉ€ (เจฎเฉ‡เจฐเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš - nfrankel), เจ…เจคเฉ‡ เจซเจฟเจฐ เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจธเฉ‚เจšเจฟเจค เจ•เจฐเฉ‹ (เจ‡เจธ เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš - http://185.19.30.175:8080) เจคเฉเจนเจพเจกเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจตเจพเจฒเฉ‡ เจจเจตเฉ€เจจเจคเจฎ เจšเจฟเฉฑเจคเจฐ เจฆเฉ‡ เจธเจฅเจพเจจ เจ…เจคเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃ เจฌเจพเจฐเฉ‡เฅค

$ fn deploy --app fnexo .   # ะฒั‹ะฟะพะปะฝัะตั‚ัั ะฝะฐ ะปะพะบะฐะปัŒะฝะพะน ะผะฐัˆะธะฝะต ะธะท ะบะฐั‚ะฐะปะพะณะฐ hellonode

Deploying function at: /.
Deploying hellonode to app: fnexo
Bumped to version 0.0.5
Building image nfrankel/hellonode:0.0.5 .

เจ…เฉฐเจค เจตเจฟเฉฑเจš:

$ curl http://185.19.30.175:8080/t/fnexo/hellonode

{"message":"Hello World"}

Fn 'เจคเฉ‡ เจ†เจงเจพเจฐเจฟเจค เจธเจพเจกเจพ เจ†เจชเจฃเจพ เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจฌเจฃเจพเจ‰เจฃเจพ
Fn- เจ…เจงเจพเจฐเจฟเจค เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจ•เฉฐเจชเจฟเจŠเจŸเจฟเฉฐเจ— เจตเจฟเฉฑเจš เจซเฉฐเจ•เจธเจผเจจ เจฒเจพเจˆเจซเจธเจพเจˆเจ•เจฒ

เจคเฉเจนเจพเจกเฉ€ เจ†เจชเจฃเฉ€ เจธเจฎเจฐเฉฑเจฅเจพ 'เจคเฉ‡ เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจ•เฉฐเจชเจฟเจŠเจŸเจฟเฉฐเจ— เจฆเฉ‡ เจซเจพเจ‡เจฆเฉ‡

เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจ•เฉฐเจชเจฟเจŠเจŸเจฟเฉฐเจ— เจ‡เฉฑเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ‡ เจธเฉเจคเฉฐเจคเจฐ เจญเจพเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉฑเจฒ เจนเฉˆ เจœเฉ‹ เจตเจงเฉ‡เจฐเฉ‡ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจœเจพเจ‚ เจฎเจพเจˆเจ•เฉเจฐเฉ‹ เจธเจฐเจตเจฟเจธเจฟเจœเจผ เจจเจพเจฒ เจ‡เฉฐเจŸเจฐเฉˆเจ•เจŸ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค

เจ‡เจน เจ…เจ•เจธเจฐ เจšเฉเจฃเฉ‡ เจนเฉ‹เจ เจตเจฟเจ•เจฐเฉ‡เจคเจพ เจจเฉ‚เฉฐ เจฒเจพเจ• เจ‡เจจ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉเจ•เจตเฉ€เจ‚ เจฒเจพเจ—เจค เจฆเฉ‡ เจ•เจพเจฐเจจ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ, เจ–เจพเจธ เจตเจฐเจคเฉ‹เจ‚ เจฆเฉ‡ เจ•เฉ‡เจธ เจ…เจคเฉ‡ เจตเจพเจฒเฉ€เจ…เจฎ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเจพ เจนเฉˆ, เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš เจ‰เฉฑเจš เจฒเจพเจ—เจคเจพเจ‚ เจ…เจคเฉ‡ เจ˜เฉฑเจŸ เจฒเจšเจ•เจคเจพ เจฆเจพ เจ•เจพเจฐเจจ เจฌเจฃ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจฎเจฒเจŸเฉ€-เจ•เจฒเจพเจŠเจก เจ…เจคเฉ‡ เจนเจพเจˆเจฌเฉเจฐเจฟเจก เจ•เจฒเจพเจ‰เจก เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจตเฉ€ เจ‡เจธ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš เจชเฉ€เฉœเจค เจนเจจ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจ…เจœเจฟเจนเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจชเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจœเจฟเฉฑเจฅเฉ‡ เจคเฉเจธเฉ€เจ‚ เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจ•เฉฐเจชเจฟเจŠเจŸเจฟเฉฐเจ— เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ เจšเจพเจนเฉ‹เจ—เฉ‡, เจชเจฐ เจ•เจพเจฐเจชเฉ‹เจฐเฉ‡เจŸ เจจเฉ€เจคเฉ€เจ†เจ‚ เจ•เจพเจฐเจจ เจ‡เจน เจธเฉฐเจญเจต เจจเจนเฉ€เจ‚ เจนเฉ‹ เจธเจ•เจฆเจพเฅค

Fn เจตเจฐเจคเจฃ เจฒเจˆ เจ•เจพเจซเจผเฉ€ เจ†เจธเจพเจจ เจนเฉˆ เจ…เจคเฉ‡ เจฅเฉ‹เฉœเฉเจนเฉ‡ เจœเจฟเจนเฉ‡ เจ“เจตเจฐเจนเฉˆเฉฑเจก เจฆเฉ‡ เจจเจพเจฒ เจฒเจ—เจญเจ— เจ‡เฉฑเจ•เฉ‹ เจœเจฟเจนเจพ FaaS เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจ•เจฟเจธเฉ‡ เจตเฉ€ เจตเจฟเจ•เจฐเฉ‡เจคเจพ เจฒเจพเจ•-เจ‡เจจ เจจเฉ‚เฉฐ เจ–เจคเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจœเจพเจ‚ เจคเฉเจนเจพเจกเฉ€ เจชเจธเฉฐเจฆ เจฆเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจ•เจฒเจพเจ‰เจก เจนเฉฑเจฒ เจชเฉเจฐเจฆเจพเจคเจพ เจตเจฟเฉฑเจš เจธเจฅเจพเจชเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจญเจพเจธเจผเจพ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจตเฉ€ เจ†เจœเจผเจพเจฆเฉ€ เจนเฉˆเฅค

เจ‡เจน เจฒเฉ‡เจ– เจธเจฟเจฐเจซเจผ Fn เจฆเฉ€เจ†เจ‚ เจฎเฉ‚เจฒ เจ—เฉฑเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจตเจฐ เจ•เจฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจคเฉเจนเจพเจกเจพ เจ†เจชเจฃเจพ เจฐเจจเจŸเจพเจˆเจฎ เจฌเจฃเจพเจ‰เจฃเจพ เจ•เจพเจซเจผเฉ€ เจธเจงเจพเจฐเจจ เจนเฉˆ, เจ…เจคเฉ‡ เจธเจฎเฉเฉฑเจšเฉ€ เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• Fn เจฒเฉ‹เจก เจฌเฉˆเจฒเฉ‡เจ‚เจธเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡, เจœเจพเจ‚ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจฒเจˆ เจ‡เฉฑเจ• เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจฆเฉ‡ เจชเจฟเฉฑเจ›เฉ‡ Fn เจฐเฉฑเจ– เจ•เฉ‡ เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจ†เจชเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจคเฉˆเจจเจพเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹