@@ -151,6 +151,29 @@ CFN_PARAMS="$CFN_PARAMS ParameterKey=CreateVPCEndpoints,ParameterValue=${CREATE_
151151CFN_PARAMS=" $CFN_PARAMS ParameterKey=ExistingVpcId,ParameterValue=${EXISTING_VPC_ID} "
152152CFN_PARAMS=" $CFN_PARAMS ParameterKey=ExistingSubnetId,ParameterValue=${EXISTING_SUBNET_ID} "
153153
154+
155+ # Template is 70KB — exceeds 51,200 byte inline limit, must use S3
156+ info " Uploading CloudFormation template to S3..."
157+ STAGING_BUCKET=" openclaw-deploy-${ACCOUNT_ID} -${REGION} "
158+
159+ if ! aws s3api head-bucket --bucket " $STAGING_BUCKET " 2> /dev/null; then
160+ echo " [info] Creating staging bucket s3://${STAGING_BUCKET} ..."
161+ if [ " $REGION " = " us-east-1" ]; then
162+ aws s3api create-bucket --bucket " $STAGING_BUCKET " --region " $REGION "
163+ else
164+ aws s3api create-bucket --bucket " $STAGING_BUCKET " --region " $REGION " \
165+ --create-bucket-configuration LocationConstraint=" $REGION "
166+ fi
167+ aws s3api put-public-access-block --bucket " $STAGING_BUCKET " \
168+ --public-access-block-configuration " BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
169+ fi
170+
171+ aws s3 cp " $SCRIPT_DIR /clawdbot-bedrock-agentcore-multitenancy.yaml" \
172+ " s3://${STAGING_BUCKET} /cfn/clawdbot-bedrock-agentcore-multitenancy.yaml" \
173+ --region " $REGION " --quiet
174+ TEMPLATE_URL=" https://${STAGING_BUCKET} .s3.${REGION} .amazonaws.com/cfn/clawdbot-bedrock-agentcore-multitenancy.yaml"
175+ success " Template uploaded"
176+
154177# Try to create; if stack exists, do an update instead
155178STACK_STATUS=$( aws cloudformation describe-stacks \
156179 --stack-name " $STACK_NAME " --region " $REGION " \
@@ -160,7 +183,7 @@ if [ "$STACK_STATUS" = "DOES_NOT_EXIST" ]; then
160183 info " Creating new stack (takes ~8 min)..."
161184 aws cloudformation create-stack \
162185 --stack-name " $STACK_NAME " \
163- --template-body file:// " $SCRIPT_DIR /clawdbot-bedrock-agentcore-multitenancy.yaml " \
186+ --template-url " $TEMPLATE_URL " \
164187 --capabilities CAPABILITY_NAMED_IAM \
165188 --region " $REGION " \
166189 --parameters $CFN_PARAMS
170193 info " Stack exists ($STACK_STATUS ) — updating..."
171194 aws cloudformation update-stack \
172195 --stack-name " $STACK_NAME " \
173- --template-body file:// " $SCRIPT_DIR /clawdbot-bedrock-agentcore-multitenancy.yaml " \
196+ --template-url " $TEMPLATE_URL " \
174197 --capabilities CAPABILITY_NAMED_IAM \
175198 --region " $REGION " \
176199 --parameters $CFN_PARAMS 2> /dev/null && \
377400# Create ECS Fargate services for always-on deployment mode (one per security tier).
378401# Services start with desiredCount=0 — admin enables per-position via Security Center.
379402info " [4.5/8] Setting up Fargate tier services..."
403+ if [ " $SKIP_SERVICES " = " true" ]; then
404+ info " Skipping Fargate tier services (--skip-services)"
405+ else
380406
381407ECS_CLUSTER=" ${STACK_NAME} -always-on"
382408BASE_TASK_DEF=" ${STACK_NAME} -always-on-agent"
@@ -404,29 +430,19 @@ else
404430
405431 # Define tiers: name:model:guardrailId
406432 # desiredCount=0 for all — admin activates via Security Center
407- declare -A TIER_MODELS=(
408- [standard]=" ${MODEL:- global.amazon.nova-2-lite-v1: 0} "
409- [restricted]=" us.deepseek.r1-v1:0"
410- [engineering]=" global.anthropic.claude-sonnet-4-5-20250929-v1:0"
411- [executive]=" global.anthropic.claude-sonnet-4-6"
412- )
413- declare -A TIER_GUARDRAILS=(
414- [standard]=" ${GUARDRAIL_MODERATE_ID:- } "
415- [restricted]=" ${GUARDRAIL_STRICT_ID:- } "
416- [engineering]=" "
417- [executive]=" "
418- )
419-
420433 for TIER_NAME in standard restricted engineering executive; do
421434 SERVICE_NAME=" ${STACK_NAME} -tier-${TIER_NAME} "
422- TIER_MODEL=" ${TIER_MODELS[$TIER_NAME]} "
423- TIER_GUARDRAIL=" ${TIER_GUARDRAILS[$TIER_NAME]} "
424-
425- # Register tier-specific task definition with tier env vars
426435 TIER_FAMILY=" ${STACK_NAME} -tier-${TIER_NAME} "
427-
436+ case " $TIER_NAME " in
437+ standard) TIER_MODEL=" ${MODEL:- global.amazon.nova-2-lite-v1: 0} " ; TIER_GUARDRAIL=" ${GUARDRAIL_MODERATE_ID:- } " ;;
438+ restricted) TIER_MODEL=" us.deepseek.r1-v1:0" ; TIER_GUARDRAIL=" ${GUARDRAIL_STRICT_ID:- } " ;;
439+ engineering) TIER_MODEL=" global.anthropic.claude-sonnet-4-5-20250929-v1:0" ; TIER_GUARDRAIL=" " ;;
440+ executive) TIER_MODEL=" global.anthropic.claude-sonnet-4-6" ; TIER_GUARDRAIL=" " ;;
441+ esac
428442 # Build container environment JSON
429443 TIER_ENV=$( cat << ENVJSON
444+
445+
430446[
431447 {"name":"STACK_NAME","value":"${STACK_NAME} "},
432448 {"name":"AWS_REGION","value":"${REGION} "},
@@ -512,6 +528,7 @@ print(json.dumps(defs))
512528 done
513529
514530 success " Fargate tier services configured (desiredCount=0, activate via Security Center)"
531+ fi
515532fi
516533
517534# ── Step 5: Upload SOUL templates and knowledge docs ──────────────────────────
0 commit comments