/
function.clj
58 lines (42 loc) · 1.64 KB
/
function.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
(ns crucible.aws.serverless.function
(:require [crucible.aws.iam :as iam]
[crucible.aws.lambda :as lambda]
[crucible.aws.serverless :as sam]
[crucible.aws.serverless.function.event-source :as event-source]
[crucible.resources :refer [spec-or-ref defresource]]
[clojure.spec.alpha :as s]))
(s/def ::handler (spec-or-ref string?))
(s/def ::runtime (spec-or-ref string?))
(s/def ::code-uri
(spec-or-ref
(s/or :string string?
:s3-location ::sam/s3-location)))
(s/def ::function-name (spec-or-ref string?))
(s/def ::description (spec-or-ref string?))
(s/def ::memory-size (spec-or-ref int?))
(s/def ::timeout (spec-or-ref int?))
(s/def ::role ::sam/arn)
(s/def ::policies (s/or :name string?
:policy ::iam/policy-document
:list (s/* (s/or :name string?
:policy ::iam/policy-document))))
(s/def ::events (spec-or-ref (s/map-of (s/or :string string? :keyword keyword?)
::event-source/event-source)))
(s/def ::vpc-config ::lambda/vpc-config)
(s/def ::variables ::sam/variables)
(s/def ::environment (s/keys :req [::variables]))
(s/def ::tags ::sam/tags)
(s/def ::function
(s/keys :req [::handler
::runtime
::code-uri]
:opt [::function-name
::description
::memory-size
::timeout
::role
::policies
::environment
::vpc-config
::tags]))
(defresource function "AWS::Serverless::Function" ::function)