1
- from __future__ import print_function
2
1
import os , sys
3
2
import boto3
4
3
import configparser
11
10
from email .mime .text import MIMEText
12
11
13
12
from config import *
13
+
14
+
14
15
WAIT_TIME = 60
15
16
MONITOR_TIME = 60
16
17
47
48
]
48
49
}
49
50
50
- SQS_DEFINITION = {
51
- "DelaySeconds" : "0" ,
52
- "MaximumMessageSize" : "262144" ,
53
- "MessageRetentionPeriod" : "1209600" ,
54
- "ReceiveMessageWaitTimeSeconds" : "0" ,
55
- "RedrivePolicy" : "{\" deadLetterTargetArn\" :\" " + SQS_DEAD_LETTER_QUEUE + "\" ,\" maxReceiveCount\" :\" 10\" }" ,
56
- "VisibilityTimeout" : str (SQS_MESSAGE_VISIBILITY )
57
- }
58
-
59
51
60
52
#################################
61
53
# AUXILIARY FUNCTIONS
62
54
#################################
63
55
64
56
def generate_task_definition (AWS_PROFILE ):
65
- taskRoleArn = False
66
57
task_definition = TASK_DEFINITION .copy ()
67
58
68
59
config = configparser .ConfigParser ()
@@ -79,6 +70,7 @@ def generate_task_definition(AWS_PROFILE):
79
70
print ("Using role for credentials" , config [profile_name ]['role_arn' ])
80
71
taskRoleArn = config [profile_name ]['role_arn' ]
81
72
else :
73
+ taskRoleArn = False
82
74
if config .has_option (profile_name , 'source_profile' ):
83
75
creds = configparser .ConfigParser ()
84
76
creds .read (f"{ os .environ ['HOME' ]} /.aws/credentials" )
@@ -88,6 +80,11 @@ def generate_task_definition(AWS_PROFILE):
88
80
elif config .has_option (profile_name , 'aws_access_key_id' ):
89
81
aws_access_key = config [profile_name ]['aws_access_key_id' ]
90
82
aws_secret_key = config [profile_name ]['aws_secret_access_key' ]
83
+ elif profile_name == 'default' :
84
+ creds = configparser .ConfigParser ()
85
+ creds .read (f"{ os .environ ['HOME' ]} /.aws/credentials" )
86
+ aws_access_key = creds ['default' ]['aws_access_key_id' ]
87
+ aws_secret_key = creds ['default' ]['aws_secret_access_key' ]
91
88
else :
92
89
print ("Problem getting credentials" )
93
90
task_definition ['containerDefinitions' ][0 ]['environment' ] += [
@@ -101,7 +98,7 @@ def generate_task_definition(AWS_PROFILE):
101
98
}]
102
99
103
100
sqs = boto3 .client ('sqs' )
104
- queue_name = get_queue_url (sqs )
101
+ queue_name = get_queue_url (sqs , SQS_QUEUE_NAME )
105
102
task_definition ['containerDefinitions' ][0 ]['environment' ] += [
106
103
{
107
104
'name' : 'APP_NAME' ,
@@ -188,18 +185,41 @@ def create_or_update_ecs_service(ecs, ECS_SERVICE_NAME, ECS_TASK_NAME):
188
185
ecs .create_service (cluster = ECS_CLUSTER , serviceName = ECS_SERVICE_NAME , taskDefinition = ECS_TASK_NAME , desiredCount = 0 )
189
186
print ('Service created' )
190
187
191
- def get_queue_url (sqs ):
188
+ def get_queue_url (sqs , queue_name ):
192
189
result = sqs .list_queues ()
190
+ queue_url = None
193
191
if 'QueueUrls' in result .keys ():
194
192
for u in result ['QueueUrls' ]:
195
- if u .split ('/' )[- 1 ] == SQS_QUEUE_NAME :
196
- return u
197
- return None
193
+ if u .split ('/' )[- 1 ] == queue_name :
194
+ queue_url = u
195
+ return queue_url
198
196
199
197
def get_or_create_queue (sqs ):
200
- u = get_queue_url (sqs )
201
- if u is None :
198
+ queue_url = get_queue_url (sqs , SQS_QUEUE_NAME )
199
+ dead_url = get_queue_url (sqs , SQS_DEAD_LETTER_QUEUE )
200
+ if dead_url is None :
201
+ print ("Creating DeadLetter queue" )
202
+ sqs .create_queue (QueueName = SQS_DEAD_LETTER_QUEUE )
203
+ time .sleep (WAIT_TIME )
204
+ dead_url = get_queue_url (sqs , SQS_DEAD_LETTER_QUEUE )
205
+ else :
206
+ print (f'DeadLetter queue { SQS_DEAD_LETTER_QUEUE } already exists.' )
207
+ if queue_url is None :
202
208
print ('Creating queue' )
209
+ response = sqs .get_queue_attributes (QueueUrl = dead_url , AttributeNames = ["QueueArn" ])
210
+ dead_arn = response ["Attributes" ]["QueueArn" ]
211
+
212
+ SQS_DEFINITION = {
213
+ "DelaySeconds" : "0" ,
214
+ "MaximumMessageSize" : "262144" ,
215
+ "MessageRetentionPeriod" : "1209600" ,
216
+ "ReceiveMessageWaitTimeSeconds" : "0" ,
217
+ "RedrivePolicy" : '{"deadLetterTargetArn":"'
218
+ + dead_arn
219
+ + '","maxReceiveCount":"10"}' ,
220
+ "VisibilityTimeout" : str (SQS_MESSAGE_VISIBILITY ),
221
+ }
222
+
203
223
sqs .create_queue (QueueName = SQS_QUEUE_NAME , Attributes = SQS_DEFINITION )
204
224
time .sleep (WAIT_TIME )
205
225
else :
@@ -367,10 +387,10 @@ def setup():
367
387
AWS_CREDENTIAL_FILE_NAME = os .environ ['HOME' ] + '/.aws/credentials'
368
388
sqs = boto3 .client ('sqs' )
369
389
get_or_create_queue (sqs )
370
- ecs = boto3 .client ('ecs' )
371
- get_or_create_cluster (ecs )
372
- update_ecs_task_definition (ecs , ECS_TASK_NAME , AWS_PROFILE )
373
- create_or_update_ecs_service (ecs , ECS_SERVICE_NAME , ECS_TASK_NAME )
390
+ # ecs = boto3.client('ecs')
391
+ # get_or_create_cluster(ecs)
392
+ # update_ecs_task_definition(ecs, ECS_TASK_NAME, AWS_PROFILE)
393
+ # create_or_update_ecs_service(ecs, ECS_SERVICE_NAME, ECS_TASK_NAME)
374
394
375
395
#################################
376
396
# SERVICE 2: SUBMIT JOB
0 commit comments