2
2
3
3
from aws_cdk import CfnParameter , CustomResource , Duration , Stack
4
4
from aws_cdk .aws_iam import Effect , ManagedPolicy , PolicyStatement , Role , ServicePrincipal
5
- from aws_cdk .aws_lambda import Code , Function , LayerVersion , Runtime
5
+ from aws_cdk .aws_lambda import Architecture , Code , Function , LayerVersion , Runtime
6
6
from aws_cdk .aws_logs import RetentionDays
7
7
from aws_cdk .aws_ssm import StringParameter
8
8
from aws_cdk .custom_resources import Provider
9
9
from constructs import Construct
10
10
11
+ VERSION_TRACKING_EVENT_BUS_ARN : str = (
12
+ "arn:aws:events:eu-central-1:027876851704:event-bus/VersionTrackingEventBus"
13
+ )
14
+
11
15
12
16
class CanaryStack (Stack ):
13
17
def __init__ (
@@ -16,29 +20,70 @@ def __init__(
16
20
construct_id : str ,
17
21
powertools_version : str ,
18
22
ssm_paramter_layer_arn : str ,
23
+ ssm_parameter_arm64_layer_arn : str ,
19
24
** kwargs ,
20
25
) -> None :
21
26
super ().__init__ (scope , construct_id , ** kwargs )
22
27
23
- VERSION_TRACKING_EVENT_BUS_ARN : str = (
24
- "arn:aws:events:eu-central-1:027876851704:event-bus/VersionTrackingEventBus"
25
- )
26
-
27
28
layer_arn = StringParameter .from_string_parameter_attributes (
28
29
self , "LayerVersionArnParam" , parameter_name = ssm_paramter_layer_arn
29
30
).string_value
31
+ Canary (
32
+ self ,
33
+ "Canary-x86-64" ,
34
+ layer_arn = layer_arn ,
35
+ powertools_version = powertools_version ,
36
+ architecture = Architecture .X86_64 (),
37
+ )
30
38
31
- layer = LayerVersion .from_layer_version_arn (self , "PowertoolsLayer" , layer_version_arn = layer_arn )
32
- deploy_stage = CfnParameter (self , "DeployStage" , description = "Deployment stage for canary" ).value_as_string
39
+ layer_arm64_arn = StringParameter .from_string_parameter_attributes (
40
+ self ,
41
+ "LayerArm64VersionArnParam" ,
42
+ parameter_name = ssm_parameter_arm64_layer_arn ,
43
+ ).string_value
44
+ Canary (
45
+ self ,
46
+ "Canary-arm64" ,
47
+ layer_arn = layer_arm64_arn ,
48
+ powertools_version = powertools_version ,
49
+ architecture = Architecture .ARM_64 (),
50
+ )
33
51
34
- execution_role = Role (self , "LambdaExecutionRole" , assumed_by = ServicePrincipal ("lambda.amazonaws.com" ))
52
+
53
+ class Canary (Construct ):
54
+ def __init__ (
55
+ self ,
56
+ scope : Construct ,
57
+ construct_id : str ,
58
+ layer_arn : str ,
59
+ powertools_version : str ,
60
+ architecture : Architecture ,
61
+ ):
62
+ super ().__init__ (scope , construct_id )
63
+
64
+ layer = LayerVersion .from_layer_version_arn (
65
+ self , "PowertoolsLayer" , layer_version_arn = layer_arn
66
+ )
67
+ deploy_stage = CfnParameter (
68
+ self , "DeployStage" , description = "Deployment stage for canary"
69
+ ).value_as_string
70
+
71
+ execution_role = Role (
72
+ self ,
73
+ "LambdaExecutionRole" ,
74
+ assumed_by = ServicePrincipal ("lambda.amazonaws.com" ),
75
+ )
35
76
36
77
execution_role .add_managed_policy (
37
- ManagedPolicy .from_aws_managed_policy_name ("service-role/AWSLambdaBasicExecutionRole" )
78
+ ManagedPolicy .from_aws_managed_policy_name (
79
+ "service-role/AWSLambdaBasicExecutionRole"
80
+ )
38
81
)
39
82
40
83
execution_role .add_to_policy (
41
- PolicyStatement (effect = Effect .ALLOW , actions = ["lambda:GetFunction" ], resources = ["*" ])
84
+ PolicyStatement (
85
+ effect = Effect .ALLOW , actions = ["lambda:GetFunction" ], resources = ["*" ]
86
+ )
42
87
)
43
88
44
89
canary_lambda = Function (
@@ -49,7 +94,8 @@ def __init__(
49
94
layers = [layer ],
50
95
memory_size = 512 ,
51
96
timeout = Duration .seconds (10 ),
52
- runtime = Runtime .PYTHON_3_9 ,
97
+ runtime = Runtime .PYTHON_3_9 (),
98
+ architecture = architecture ,
53
99
log_retention = RetentionDays .ONE_MONTH ,
54
100
role = execution_role ,
55
101
environment = {
@@ -62,13 +108,22 @@ def __init__(
62
108
63
109
canary_lambda .add_to_role_policy (
64
110
PolicyStatement (
65
- effect = Effect .ALLOW , actions = ["events:PutEvents" ], resources = [VERSION_TRACKING_EVENT_BUS_ARN ]
111
+ effect = Effect .ALLOW ,
112
+ actions = ["events:PutEvents" ],
113
+ resources = [VERSION_TRACKING_EVENT_BUS_ARN ],
66
114
)
67
115
)
68
116
69
117
# custom resource provider configuration
70
118
provider = Provider (
71
- self , "CanaryCustomResource" , on_event_handler = canary_lambda , log_retention = RetentionDays .ONE_MONTH
119
+ self ,
120
+ "CanaryCustomResource" ,
121
+ on_event_handler = canary_lambda ,
122
+ log_retention = RetentionDays .ONE_MONTH ,
72
123
)
73
124
# force to recreate resource on each deployment with randomized name
74
- CustomResource (self , f"CanaryTrigger-{ str (uuid .uuid4 ())[0 :7 ]} " , service_token = provider .service_token )
125
+ CustomResource (
126
+ self ,
127
+ f"CanaryTrigger-{ str (uuid .uuid4 ())[0 :7 ]} " ,
128
+ service_token = provider .service_token ,
129
+ )
0 commit comments