tests/test.sh exit code (0 → resolved); the classification below is post-hoc and cannot change it.{
"command": "echo \"AWS_ENDPOINT_URL=$AWS_ENDPOINT_URL\"; echo \"ENFORCE_IAM=$ENFORCE_IAM\"; aws --version 2>&1 | head -1",
"description": "Check AWS endpoint and CLI"
}AWS_ENDPOINT_URL=http://localstack:4566 ENFORCE_IAM= aws-cli/2.34.45 Python/3.14.4 Linux/6.10.14-linuxkit exe/aarch64.ubuntu.24 [stdout] AWS_ENDPOINT_URL=http://localstack:4566 ENFORCE_IAM= aws-cli/2.34.45 Python/3.14.4 Linux/6.10.14-linuxkit exe/aarch64.ubuntu.24
{
"command": "ls /app 2>&1",
"description": "List app directory"
}(Bash completed with no output)
{
"command": "ls -la /app/ 2>&1",
"description": "List app directory contents"
}total 8 drwxr-xr-x 2 root root 4096 May 8 21:14 . drwxr-xr-x 1 root root 4096 May 8 21:44 .. [stdout] total 8 drwxr-xr-x 2 root root 4096 May 8 21:14 . drwxr-xr-x 1 root root 4096 May 8 21:44 ..
{
"command": "env | grep -i aws",
"description": "List AWS env vars"
}AWS_DEFAULT_REGION=us-east-1 AWS_PAGER= AWS_SECRET_ACCESS_KEY=test AWS_ACCESS_KEY_ID=test AWS_ENDPOINT_URL=http://localstack:4566 [stdout] AWS_DEFAULT_REGION=us-east-1 AWS_PAGER= AWS_SECRET_ACCESS_KEY=test AWS_ACCESS_KEY_ID=test AWS_ENDPOINT_URL=http://localstack:4566
{
"command": "aws sts get-caller-identity 2>&1; echo \"---\"; aws ec2 describe-vpcs --query \"Vpcs[].{VpcId:VpcId,Cidr:CidrBlock,Name:Tags}\" 2>&1 | head -30",
"description": "Verify connectivity and list existing VPCs"
}{
"UserId": "000000000000",
"Account": "000000000000",
"Arn": "arn:aws:iam::000000000000:root"
}
---
[
{
"VpcId": "vpc-b048efcd707db8d44",
"Cidr": "172.31.0.0/16",
"Name": []
}
]
[stdout]
{
"UserId": "000000000000",
"Account": "000000000000",
"Arn": "arn:aws:iam::000000000000:root"
}
---
[
{
"VpcId": "vpc-b048efcd707db8d44",
"Cidr": "172.31.0.0/16",
"Name": []
}
]{
"command": "mkdir -p /app/work && cd /app/work && touch ids.env",
"description": "Make work dir for capturing IDs"
}(Bash completed with no output)
{
"command": "set -euo pipefail\ncd /app/work\n\nVPC_ID=$(aws ec2 create-vpc --cidr-block 10.50.0.0/16 \\\n --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=vpc-shared-fs}]' \\\n --query 'Vpc.VpcId' --output text)\necho \"VPC_ID=$VPC_ID\" > ids.env\n\nSUBNET_A=$(aws ec2 create-subnet --vpc-id \"$VPC_ID\" --cidr-block 10.50.1.0/24 --availability-zone us-east-1a \\\n --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=harbor-efs-subnet-a}]' \\\n --query 'Subnet.SubnetId' --output text)\nSUBNET_B=$(aws ec2 create-subnet --vpc-id \"$VPC_ID\" --cidr-block 10.50.2.0/24 --availability-zone us-east-1b \\\n --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=harbor-efs-subnet-b}]' \\\n --query 'Subnet.SubnetId' --output text)\necho \"SUBNET_A=$SUBNET_A\" >> ids.env\necho \"SUBNET_B=$SUBNET_B\" >> ids.env\n\nAPP_SG=$(aws ec2 create-security-group --group-name sg-app-tier --description \"App/EC2 callers\" --vpc-id \"$VPC_ID\" \\\n --tag-specifications 'ResourceType=security-group,Tags=[{Key=Name,Value=sg-app-tier}]' \\\n --query 'GroupId' --output text)\nLAMBDA_SG=$(aws ec2 create-security-group --group-name sg-lambda --description \"Lambda VPC interface\" --vpc-id \"$VPC_ID\" \\\n --tag-specifications 'ResourceType=security-group,Tags=[{Key=Name,Value=sg-lambda}]' \\\n --query 'GroupId' --output text)\nMOUNT_SG=$(aws ec2 create-security-group --group-name sg-efs-mount --description \"EFS mount targets\" --vpc-id \"$VPC_ID\" \\\n --tag-specifications 'ResourceType=security-group,Tags=[{Key=Name,Value=sg-efs-mount}]' \\\n --query 'GroupId' --output text)\necho \"APP_SG=$APP_SG\" >> ids.env\necho \"LAMBDA_SG=$LAMBDA_SG\" >> ids.env\necho \"MOUNT_SG=$MOUNT_SG\" >> ids.env\n\naws ec2 authorize-security-group-ingress --group-id \"$MOUNT_SG\" --protocol tcp --port 2049 --source-group \"$APP_SG\" >/dev/null\naws ec2 authorize-security-group-ingress --group-id \"$MOUNT_SG\" --protocol tcp --port 2049 --source-group \"$LAMBDA_SG\" >/dev/null\n\ncat ids.env",
"description": "Create VPC, subnets, security groups, and rules"
}VPC_ID=vpc-87f36db8385fe5e88 SUBNET_A=subnet-4787a5ab8f4509d23 SUBNET_B=subnet-e7ddc2fca407ae1db APP_SG=sg-9a66be8fe0e2de542 LAMBDA_SG=sg-4dcbca29bc7d79da9 MOUNT_SG=sg-5900ce9b5b5776e2c [stdout] VPC_ID=vpc-87f36db8385fe5e88 SUBNET_A=subnet-4787a5ab8f4509d23 SUBNET_B=subnet-e7ddc2fca407ae1db APP_SG=sg-9a66be8fe0e2de542 LAMBDA_SG=sg-4dcbca29bc7d79da9 MOUNT_SG=sg-5900ce9b5b5776e2c
{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n\ncat > /tmp/fs-key-policy.json <<'JSON'\n{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"EnableRootAccount\",\n \"Effect\": \"Allow\",\n \"Principal\": { \"AWS\": \"arn:aws:iam::000000000000:root\" },\n \"Action\": \"kms:*\",\n \"Resource\": \"*\"\n },\n {\n \"Sid\": \"AllowEFSService\",\n \"Effect\": \"Allow\",\n \"Principal\": { \"Service\": \"elasticfilesystem.amazonaws.com\" },\n \"Action\": [\n \"kms:Encrypt\",\n \"kms:Decrypt\",\n \"kms:ReEncrypt*\",\n \"kms:GenerateDataKey*\",\n \"kms:CreateGrant\",\n \"kms:DescribeKey\"\n ],\n \"Resource\": \"*\"\n }\n ]\n}\nJSON\n\ncat > /tmp/backup-key-policy.json <<'JSON'\n{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"EnableRootAccount\",\n \"Effect\": \"Allow\",\n \"Principal\": { \"AWS\": \"arn:aws:iam::000000000000:root\" },\n \"Action\": \"kms:*\",\n \"Resource\": \"*\"\n },\n {\n \"Sid\": \"AllowBackupService\",\n \"Effect\": \"Allow\",\n \"Principal\": { \"Service\": \"backup.amazonaws.com\" },\n \"Action\": [\n \"kms:Encrypt\",\n \"kms:Decrypt\",\n \"kms:ReEncrypt*\",\n \"kms:GenerateDataKey*\",\n \"kms:CreateGrant\",\n \"kms:DescribeKey\"\n ],\n \"Resource\": \"*\"\n }\n ]\n}\nJSON\n\nFS_CMK_ARN=$(aws kms create-key \\\n --description \"Harbor EFS FS CMK\" \\\n --key-usage ENCRYPT_DECRYPT --key-spec SYMMETRIC_DEFAULT \\\n --policy file:///tmp/fs-key-policy.json \\\n --query 'KeyMetadata.Arn' --output text)\nFS_CMK_ID=${FS_CMK_ARN##*/}\naws kms create-alias --alias-name alias/harbor-efs-cmk --target-key-id \"$FS_CMK_ID\"\n\nBACKUP_CMK_ARN=$(aws kms create-key \\\n --description \"Harbor EFS Backup vault CMK\" \\\n --key-usage ENCRYPT_DECRYPT --key-spec SYMMETRIC_DEFAULT \\\n --policy file:///tmp/backup-key-policy.json \\\n --query 'KeyMetadata.Arn' --output text)\nBACKUP_CMK_ID=${BACKUP_CMK_ARN##*/}\naws kms create-alias --alias-name alias/harbor-efs-backup-cmk --target-key-id \"$BACKUP_CMK_ID\"\n\necho \"FS_CMK_ARN=$FS_CMK_ARN\" >> ids.env\necho \"FS_CMK_ID=$FS_CMK_ID\" >> ids.env\necho \"BACKUP_CMK_ARN=$BACKUP_CMK_ARN\" >> ids.env\necho \"BACKUP_CMK_ID=$BACKUP_CMK_ID\" >> ids.env\ntail -4 ids.env",
"description": "Create KMS CMKs with aliases and key policies"
}FS_CMK_ARN=arn:aws:kms:us-east-1:000000000000:key/d485006a-88ab-42e0-a01f-2b8045cc2064 FS_CMK_ID=d485006a-88ab-42e0-a01f-2b8045cc2064 BACKUP_CMK_ARN=arn:aws:kms:us-east-1:000000000000:key/a0df3bbe-4e22-41a6-b715-825bad509dbf BACKUP_CMK_ID=a0df3bbe-4e22-41a6-b715-825bad509dbf [stdout] FS_CMK_ARN=arn:aws:kms:us-east-1:000000000000:key/d485006a-88ab-42e0-a01f-2b8045cc2064 FS_CMK_ID=d485006a-88ab-42e0-a01f-2b8045cc2064 BACKUP_CMK_ARN=arn:aws:kms:us-east-1:000000000000:key/a0df3bbe-4e22-41a6-b715-825bad509dbf BACKUP_CMK_ID=a0df3bbe-4e22-41a6-b715-825bad509dbf
{
"query": "select:TodoWrite",
"max_results": 1
}{"type": "tool_reference", "tool_name": "TodoWrite"}
{
"todos": [
{
"content": "VPC, subnets, security groups",
"activeForm": "Building VPC, subnets, security groups",
"status": "completed"
},
{
"content": "KMS CMKs (FS + Backup)",
"activeForm": "Creating KMS CMKs",
"status": "completed"
},
{
"content": "EFS file system + mount targets",
"activeForm": "Creating EFS file system + mount targets",
"status": "in_progress"
},
{
"content": "EFS access point + lifecycle",
"activeForm": "Creating EFS access point + lifecycle",
"status": "pending"
},
{
"content": "IAM roles (app, lambda, backup)",
"activeForm": "Creating IAM roles",
"status": "pending"
},
{
"content": "EFS file-system policy",
"activeForm": "Attaching EFS file-system policy",
"status": "pending"
},
{
"content": "Lambda function in VPC",
"activeForm": "Creating Lambda function",
"status": "pending"
},
{
"content": "Backup vault, plan, selection",
"activeForm": "Creating Backup vault, plan, selection",
"status": "pending"
},
{
"content": "EFS replication",
"activeForm": "Creating EFS replication",
"status": "pending"
},
{
"content": "CloudWatch alarms",
"activeForm": "Creating CloudWatch alarms",
"status": "pending"
},
{
"content": "SSM parameter manifest",
"activeForm": "Publishing SSM manifest",
"status": "pending"
}
]
}Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n\nFS_ID=$(aws efs create-file-system \\\n --encrypted \\\n --kms-key-id \"$FS_CMK_ARN\" \\\n --performance-mode generalPurpose \\\n --throughput-mode elastic \\\n --tags Key=Name,Value=harbor-shared-fs \\\n --query 'FileSystemId' --output text)\necho \"FS_ID=$FS_ID\" >> ids.env\n\n# wait for available\nfor i in 1 2 3 4 5 6 7 8 9 10; do\n ST=$(aws efs describe-file-systems --file-system-id \"$FS_ID\" --query 'FileSystems[0].LifeCycleState' --output text)\n [ \"$ST\" = \"available\" ] && break\n sleep 1\ndone\necho \"FS state: $ST\"\n\nMT_A=$(aws efs create-mount-target --file-system-id \"$FS_ID\" --subnet-id \"$SUBNET_A\" --security-groups \"$MOUNT_SG\" --query 'MountTargetId' --output text)\nMT_B=$(aws efs create-mount-target --file-system-id \"$FS_ID\" --subnet-id \"$SUBNET_B\" --security-groups \"$MOUNT_SG\" --query 'MountTargetId' --output text)\necho \"MT_A=$MT_A\" >> ids.env\necho \"MT_B=$MT_B\" >> ids.env\n\nFS_ARN=\"arn:aws:elasticfilesystem:us-east-1:000000000000:file-system/$FS_ID\"\necho \"FS_ARN=$FS_ARN\" >> ids.env\ntail -5 ids.env",
"description": "Create EFS file system and mount targets"
}FS state: available BACKUP_CMK_ID=a0df3bbe-4e22-41a6-b715-825bad509dbf FS_ID=fs-192344d2 MT_A=fsmt-b3370834 MT_B=fsmt-d0c33b60 FS_ARN=arn:aws:elasticfilesystem:us-east-1:000000000000:file-system/fs-192344d2 [stdout] FS state: available BACKUP_CMK_ID=a0df3bbe-4e22-41a6-b715-825bad509dbf FS_ID=fs-192344d2 MT_A=fsmt-b3370834 MT_B=fsmt-d0c33b60 FS_ARN=arn:aws:elasticfilesystem:us-east-1:000000000000:file-system/fs-192344d2
{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n\nAP_ID=$(aws efs create-access-point \\\n --file-system-id \"$FS_ID\" \\\n --posix-user 'Uid=1500,Gid=1500' \\\n --root-directory 'Path=/ci-runner,CreationInfo={OwnerUid=1500,OwnerGid=1500,Permissions=0755}' \\\n --tags Key=Name,Value=harbor-ci-runner-ap \\\n --query 'AccessPointId' --output text)\necho \"AP_ID=$AP_ID\" >> ids.env\nAP_ARN=\"arn:aws:elasticfilesystem:us-east-1:000000000000:access-point/$AP_ID\"\necho \"AP_ARN=$AP_ARN\" >> ids.env\n\naws efs put-lifecycle-configuration \\\n --file-system-id \"$FS_ID\" \\\n --lifecycle-policies '[{\"TransitionToIA\":\"AFTER_30_DAYS\"},{\"TransitionToArchive\":\"AFTER_90_DAYS\"},{\"TransitionToPrimaryStorageClass\":\"AFTER_1_ACCESS\"}]' >/dev/null\n\necho \"Lifecycle:\"\naws efs describe-lifecycle-configuration --file-system-id \"$FS_ID\"\necho \"AP:\"\naws efs describe-access-points --access-point-id \"$AP_ID\" --query 'AccessPoints[0].{Id:AccessPointId,FsId:FileSystemId,Posix:PosixUser,Root:RootDirectory}'",
"description": "Create EFS access point and lifecycle config"
}Lifecycle:
{
"LifecyclePolicies": [
{
"TransitionToIA": "AFTER_30_DAYS"
},
{
"TransitionToArchive": "AFTER_90_DAYS"
},
{
"TransitionToPrimaryStorageClass": "AFTER_1_ACCESS"
}
]
}
AP:
{
"Id": "fsap-837844c7",
"FsId": "fs-192344d2",
"Posix": {
"Uid": 1500,
"Gid": 1500
},
"Root": {
"Path": "/ci-runner",
"CreationInfo": {
"OwnerUid": 1500,
"OwnerGid": 1500,
"Permissions": "0755"
}
}
}
[stdout]
Lifecycle:
{
"LifecyclePolicies": [
{
"TransitionToIA": "AFTER_30_DAYS"
},
{
"TransitionToArchive": "AFTER_90_DAYS"
},
{
"TransitionToPrimaryStorageClass": "AFTER_1_ACCESS"
}
]
}
AP:
{
"Id": "fsap-837844c7",
"FsId": "fs-192344d2",
"Posix": {
"Uid": 1500,
"Gid": 1500
},
"Root": {
"Path": "/ci-runner",
"CreationInfo": {
"OwnerUid": 1500,
"OwnerGid": 1500,
"Permissions": "0755"
}
}
}{
"todos": [
{
"content": "VPC, subnets, security groups",
"activeForm": "Building VPC, subnets, security groups",
"status": "completed"
},
{
"content": "KMS CMKs (FS + Backup)",
"activeForm": "Creating KMS CMKs",
"status": "completed"
},
{
"content": "EFS file system + mount targets",
"activeForm": "Creating EFS file system + mount targets",
"status": "completed"
},
{
"content": "EFS access point + lifecycle",
"activeForm": "Creating EFS access point + lifecycle",
"status": "completed"
},
{
"content": "IAM roles (app, lambda, backup)",
"activeForm": "Creating IAM roles",
"status": "in_progress"
},
{
"content": "EFS file-system policy",
"activeForm": "Attaching EFS file-system policy",
"status": "pending"
},
{
"content": "Lambda function in VPC",
"activeForm": "Creating Lambda function",
"status": "pending"
},
{
"content": "Backup vault, plan, selection",
"activeForm": "Creating Backup vault, plan, selection",
"status": "pending"
},
{
"content": "EFS replication",
"activeForm": "Creating EFS replication",
"status": "pending"
},
{
"content": "CloudWatch alarms",
"activeForm": "Creating CloudWatch alarms",
"status": "pending"
},
{
"content": "SSM parameter manifest",
"activeForm": "Publishing SSM manifest",
"status": "pending"
}
]
}Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n\n# trust documents\ncat > /tmp/trust-ec2.json <<'JSON'\n{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"ec2.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}\nJSON\ncat > /tmp/trust-lambda.json <<'JSON'\n{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}\nJSON\ncat > /tmp/trust-backup.json <<'JSON'\n{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"backup.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}\nJSON\n\nAPP_ROLE_ARN=$(aws iam create-role --role-name harbor-efs-app-role \\\n --assume-role-policy-document file:///tmp/trust-ec2.json \\\n --query 'Role.Arn' --output text)\nLAMBDA_ROLE_ARN=$(aws iam create-role --role-name harbor-efs-lambda-role \\\n --assume-role-policy-document file:///tmp/trust-lambda.json \\\n --query 'Role.Arn' --output text)\nBACKUP_ROLE_ARN=$(aws iam create-role --role-name harbor-efs-backup-role \\\n --assume-role-policy-document file:///tmp/trust-backup.json \\\n --query 'Role.Arn' --output text)\n\necho \"APP_ROLE_ARN=$APP_ROLE_ARN\" >> ids.env\necho \"LAMBDA_ROLE_ARN=$LAMBDA_ROLE_ARN\" >> ids.env\necho \"BACKUP_ROLE_ARN=$BACKUP_ROLE_ARN\" >> ids.env\n\n# EFS-client policy scoped via AccessPointArn condition (app + lambda)\ncat > /tmp/efs-client-policy.json <<JSON\n{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"elasticfilesystem:ClientMount\",\n \"elasticfilesystem:ClientWrite\"\n ],\n \"Resource\": \"$FS_ARN\",\n \"Condition\": {\n \"StringEquals\": {\n \"elasticfilesystem:AccessPointArn\": \"$AP_ARN\"\n }\n }\n }\n ]\n}\nJSON\n\naws iam put-role-policy --role-name harbor-efs-app-role \\\n --policy-name harbor-efs-client \\\n --policy-document file:///tmp/efs-client-policy.json\naws iam put-role-policy --role-name harbor-efs-lambda-role \\\n --policy-name harbor-efs-client \\\n --policy-document file:///tmp/efs-client-policy.json\n\n# Lambda-in-VPC needs ENI mgmt + logs (Hyperplane provisions ENIs but the function role is what AWS Lambda uses to do so)\naws iam attach-role-policy --role-name harbor-efs-lambda-role \\\n --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole\n\n# Backup-selection role: trusts backup.amazonaws.com and grants the IAM action AWS Backup uses for EFS backups\ncat > /tmp/backup-efs-policy.json <<JSON\n{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"elasticfilesystem:Backup\",\n \"elasticfilesystem:DescribeFileSystems\",\n \"elasticfilesystem:DescribeTags\"\n ],\n \"Resource\": \"$FS_ARN\"\n }\n ]\n}\nJSON\naws iam put-role-policy --role-name harbor-efs-backup-role \\\n --policy-name harbor-efs-backup \\\n --policy-document file:///tmp/backup-efs-policy.json\n# Standard service-managed AWS Backup role attached as well\naws iam attach-role-policy --role-name harbor-efs-backup-role \\\n --policy-arn arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup\n\ntail -3 ids.env",
"description": "Create IAM roles and inline policies"
}APP_ROLE_ARN=arn:aws:iam::000000000000:role/harbor-efs-app-role LAMBDA_ROLE_ARN=arn:aws:iam::000000000000:role/harbor-efs-lambda-role BACKUP_ROLE_ARN=arn:aws:iam::000000000000:role/harbor-efs-backup-role [stdout] APP_ROLE_ARN=arn:aws:iam::000000000000:role/harbor-efs-app-role LAMBDA_ROLE_ARN=arn:aws:iam::000000000000:role/harbor-efs-lambda-role BACKUP_ROLE_ARN=arn:aws:iam::000000000000:role/harbor-efs-backup-role
{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n\ncat > /tmp/fs-policy.json <<JSON\n{\n \"Version\": \"2012-10-17\",\n \"Id\": \"harbor-efs-policy\",\n \"Statement\": [\n {\n \"Sid\": \"DenyNonTLSExceptEFSReplication\",\n \"Effect\": \"Deny\",\n \"NotPrincipal\": { \"Service\": \"elasticfilesystem.amazonaws.com\" },\n \"Action\": [\n \"elasticfilesystem:ClientMount\",\n \"elasticfilesystem:ClientWrite\",\n \"elasticfilesystem:ClientRootAccess\"\n ],\n \"Resource\": \"$FS_ARN\",\n \"Condition\": {\n \"Bool\": { \"aws:SecureTransport\": \"false\" }\n }\n },\n {\n \"Sid\": \"AllowAppRoleViaAccessPoint\",\n \"Effect\": \"Allow\",\n \"Principal\": { \"AWS\": \"$APP_ROLE_ARN\" },\n \"Action\": [\n \"elasticfilesystem:ClientMount\",\n \"elasticfilesystem:ClientWrite\"\n ],\n \"Resource\": \"$FS_ARN\",\n \"Condition\": {\n \"StringEquals\": { \"elasticfilesystem:AccessPointArn\": \"$AP_ARN\" }\n }\n },\n {\n \"Sid\": \"AllowLambdaRoleViaAccessPoint\",\n \"Effect\": \"Allow\",\n \"Principal\": { \"AWS\": \"$LAMBDA_ROLE_ARN\" },\n \"Action\": [\n \"elasticfilesystem:ClientMount\",\n \"elasticfilesystem:ClientWrite\"\n ],\n \"Resource\": \"$FS_ARN\",\n \"Condition\": {\n \"StringEquals\": { \"elasticfilesystem:AccessPointArn\": \"$AP_ARN\" }\n }\n }\n ]\n}\nJSON\n\naws efs put-file-system-policy --file-system-id \"$FS_ID\" --policy \"$(cat /tmp/fs-policy.json)\" >/dev/null\naws efs describe-file-system-policy --file-system-id \"$FS_ID\" --query 'Policy' --output text | head -c 600\necho",
"description": "Attach EFS file-system policy"
}{
"Version": "2012-10-17",
"Id": "harbor-efs-policy",
"Statement": [
{
"Sid": "DenyNonTLSExceptEFSReplication",
"Effect": "Deny",
"NotPrincipal": { "Service": "elasticfilesystem.amazonaws.com" },
"Action": [
"elasticfilesystem:ClientMount",
"elasticfilesystem:ClientWrite",
"elasticfilesystem:ClientRootAccess"
],
"Resource": "arn:aws:elasticfilesystem:us-east-1:000000000000:file-system/fs-192344d2",
"Condition": {
"Bool": { "aws:SecureTransport": "false" }
}
},
{
"Sid": "AllowAppRoleViaAccess
[stdout]
{
"Version": "2012-10-17",
"Id": "harbor-efs-policy",
"Statement": [
{
"Sid": "DenyNonTLSExceptEFSReplication",
"Effect": "Deny",
"NotPrincipal": { "Service": "elasticfilesystem.amazonaws.com" },
"Action": [
"elasticfilesystem:ClientMount",
"elasticfilesystem:ClientWrite",
"elasticfilesystem:ClientRootAccess"
],
"Resource": "arn:aws:elasticfilesystem:us-east-1:000000000000:file-system/fs-192344d2",
"Condition": {
"Bool": { "aws:SecureTransport": "false" }
}
},
{
"Sid": "AllowAppRoleViaAccess{
"todos": [
{
"content": "VPC, subnets, security groups",
"activeForm": "Building VPC, subnets, security groups",
"status": "completed"
},
{
"content": "KMS CMKs (FS + Backup)",
"activeForm": "Creating KMS CMKs",
"status": "completed"
},
{
"content": "EFS file system + mount targets",
"activeForm": "Creating EFS file system + mount targets",
"status": "completed"
},
{
"content": "EFS access point + lifecycle",
"activeForm": "Creating EFS access point + lifecycle",
"status": "completed"
},
{
"content": "IAM roles (app, lambda, backup)",
"activeForm": "Creating IAM roles",
"status": "completed"
},
{
"content": "EFS file-system policy",
"activeForm": "Attaching EFS file-system policy",
"status": "completed"
},
{
"content": "Lambda function in VPC",
"activeForm": "Creating Lambda function",
"status": "in_progress"
},
{
"content": "Backup vault, plan, selection",
"activeForm": "Creating Backup vault, plan, selection",
"status": "pending"
},
{
"content": "EFS replication",
"activeForm": "Creating EFS replication",
"status": "pending"
},
{
"content": "CloudWatch alarms",
"activeForm": "Creating CloudWatch alarms",
"status": "pending"
},
{
"content": "SSM parameter manifest",
"activeForm": "Publishing SSM manifest",
"status": "pending"
}
]
}Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n\nmkdir -p /tmp/fn && cat > /tmp/fn/index.py <<'PY'\ndef handler(event, context):\n return {\"ok\": True}\nPY\n( cd /tmp/fn && zip -q -r /tmp/fn.zip . )\n\nLAMBDA_ARN=$(aws lambda create-function \\\n --function-name harbor-efs-processor \\\n --runtime python3.11 \\\n --role \"$LAMBDA_ROLE_ARN\" \\\n --handler index.handler \\\n --zip-file fileb:///tmp/fn.zip \\\n --vpc-config \"SubnetIds=$SUBNET_A,$SUBNET_B,SecurityGroupIds=$LAMBDA_SG\" \\\n --file-system-configs \"Arn=$AP_ARN,LocalMountPath=/mnt/data\" \\\n --query 'FunctionArn' --output text)\necho \"LAMBDA_ARN=$LAMBDA_ARN\" >> ids.env\n\naws lambda get-function-configuration --function-name harbor-efs-processor \\\n --query '{Name:FunctionName,Vpc:VpcConfig,Fs:FileSystemConfigs,Role:Role}'",
"description": "Create Lambda function in VPC with EFS mount"
}{
"Name": "harbor-efs-processor",
"Vpc": {
"SubnetIds": [
"subnet-4787a5ab8f4509d23",
"subnet-e7ddc2fca407ae1db"
],
"SecurityGroupIds": [
"sg-4dcbca29bc7d79da9"
],
"VpcId": "vpc-87f36db8385fe5e88"
},
"Fs": null,
"Role": "arn:aws:iam::000000000000:role/harbor-efs-lambda-role"
}
[stdout]
{
"Name": "harbor-efs-processor",
"Vpc": {
"SubnetIds": [
"subnet-4787a5ab8f4509d23",
"subnet-e7ddc2fca407ae1db"
],
"SecurityGroupIds": [
"sg-4dcbca29bc7d79da9"
],
"VpcId": "vpc-87f36db8385fe5e88"
},
"Fs": null,
"Role": "arn:aws:iam::000000000000:role/harbor-efs-lambda-role"
}{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n\naws lambda update-function-configuration \\\n --function-name harbor-efs-processor \\\n --file-system-configs \"Arn=$AP_ARN,LocalMountPath=/mnt/data\" \\\n --query '{Fs:FileSystemConfigs}'",
"description": "Force update Lambda FS config"
}{
"Fs": null
}
[stdout]
{
"Fs": null
}{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\naws lambda get-function --function-name harbor-efs-processor --query 'Configuration.{Name:FunctionName,Fs:FileSystemConfigs,Vpc:VpcConfig.VpcId}'\necho \"---\"\n# Try the alt JSON form\ncat > /tmp/fsconfigs.json <<JSON\n[{\"Arn\":\"$AP_ARN\",\"LocalMountPath\":\"/mnt/data\"}]\nJSON\naws lambda update-function-configuration \\\n --function-name harbor-efs-processor \\\n --cli-input-json \"$(jq -n --arg fn harbor-efs-processor --slurpfile fs /tmp/fsconfigs.json '{FunctionName:$fn, FileSystemConfigs:$fs[0]}')\" \\\n --query '{Fs:FileSystemConfigs}'",
"description": "Inspect lambda + retry FS config via cli-input-json"
}{
"Name": "harbor-efs-processor",
"Fs": null,
"Vpc": "vpc-87f36db8385fe5e88"
}
---
{
"Fs": null
}
[stdout]
{
"Name": "harbor-efs-processor",
"Fs": null,
"Vpc": "vpc-87f36db8385fe5e88"
}
---
{
"Fs": null
}{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n# nuke and recreate\naws lambda delete-function --function-name harbor-efs-processor\nsleep 1\nLAMBDA_ARN=$(aws lambda create-function \\\n --function-name harbor-efs-processor \\\n --runtime python3.11 \\\n --role \"$LAMBDA_ROLE_ARN\" \\\n --handler index.handler \\\n --zip-file fileb:///tmp/fn.zip \\\n --vpc-config \"SubnetIds=$SUBNET_A,$SUBNET_B,SecurityGroupIds=$LAMBDA_SG\" \\\n --file-system-configs \"Arn=$AP_ARN,LocalMountPath=/mnt/data\")\necho \"$LAMBDA_ARN\"",
"description": "Recreate lambda showing full create output"
}{
"StatusCode": 204
}
{
"FunctionName": "harbor-efs-processor",
"FunctionArn": "arn:aws:lambda:us-east-1:000000000000:function:harbor-efs-processor",
"Runtime": "python3.11",
"Role": "arn:aws:iam::000000000000:role/harbor-efs-lambda-role",
"Handler": "index.handler",
"CodeSize": 219,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2026-05-08T21:47:57.226889+0000",
"CodeSha256": "s7gbSUDZh6EBm6BENJIlCVgQWXRHJMltFBiSvEn5PFc=",
"Version": "$LATEST",
"VpcConfig": {
"SubnetIds": [
"subnet-4787a5ab8f4509d23",
"subnet-e7ddc2fca407ae1db"
],
"SecurityGroupIds": [
"sg-4dcbca29bc7d79da9"
],
"VpcId": "vpc-87f36db8385fe5e88"
},
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "8db26591-ab70-42f5-8946-ce69c2425e14",
"State": "Pending",
"StateReason": "The function is being created.",
"StateReasonCode": "Creating",
"PackageType": "Zip",
"Architectures": [
"x86_64"
],
"EphemeralStorage": {
"Size": 512
},
"SnapStart": {
"ApplyOn": "None",
"OptimizationStatus": "Off"
},
"RuntimeVersionConfig": {
"RuntimeVersionArn": "arn:aws:lambda:us-east-1::runtime:8eeff65f6809a3ce81507fe733fe09b835899b99481ba22fd75b5a7338290ec1"
},
"LoggingConfig": {
"LogFormat": "Text",
"LogGroup": "/aws/lambda/harbor-efs-processor"
}
}
[stdout]
{
"StatusCode": 204
}
{
"FunctionName": "harbor-efs-processor",
"FunctionArn": "arn:aws:lambda:us-east-1:000000000000:function:harbor-efs-processor",
"Runtime": "python3.11",
"Role": "arn:aws:iam::000000000000:role/harbor-efs-lambda-role",
"Handler": "index.handler",
"CodeSize": 219,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2026-05-08T21:47:57.226889+0000",
"CodeSha256": "s7gbSUDZh6EBm6BENJIlCVgQWXRHJMltFBiSvEn5PFc=",
"Version": "$LATEST",
"VpcConfig": {
"SubnetIds": [
"subnet-4787a5ab8f4509d23",
"subnet-e7ddc2fca407ae1db"
],
"SecurityGroupIds": [
"sg-4dcbca29bc7d79da9"
],
"VpcId": "vpc-87f36db8385fe5e88"
},
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "8db26591-ab70-42f5-8946-ce69c2425e14",
"State": "Pending",
"StateReason": "The function is being created.",
"StateReasonCode": "Creating",
"PackageType": "Zip",
"Architectures": [
"x86_64"
],
"EphemeralStorage": {
"Size": 512
},
"SnapStart": {
"ApplyOn": "None",
"OptimizationStatus": "Off"
},
"RuntimeVersionConfig": {
"RuntimeVersionArn": "arn:aws:lambda:us-east-1::runtime:8eeff65f6809a3ce81507fe733fe09b835899b99481ba22fd75b5a7338290ec1"
},
"LoggingConfig": {
"LogFormat": "Text",
"LogGroup": "/aws/lambda/harbor-efs-processor"
}
}{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n# strip stale LAMBDA_ARN\nsed -i '/^LAMBDA_ARN=/d' ids.env\nLAMBDA_ARN=$(aws lambda get-function --function-name harbor-efs-processor --query 'Configuration.FunctionArn' --output text)\necho \"LAMBDA_ARN=$LAMBDA_ARN\" >> ids.env\necho \"$LAMBDA_ARN\"",
"description": "Capture new lambda ARN"
}arn:aws:lambda:us-east-1:000000000000:function:harbor-efs-processor [stdout] arn:aws:lambda:us-east-1:000000000000:function:harbor-efs-processor
{
"todos": [
{
"content": "VPC, subnets, security groups",
"activeForm": "Building VPC, subnets, security groups",
"status": "completed"
},
{
"content": "KMS CMKs (FS + Backup)",
"activeForm": "Creating KMS CMKs",
"status": "completed"
},
{
"content": "EFS file system + mount targets",
"activeForm": "Creating EFS file system + mount targets",
"status": "completed"
},
{
"content": "EFS access point + lifecycle",
"activeForm": "Creating EFS access point + lifecycle",
"status": "completed"
},
{
"content": "IAM roles (app, lambda, backup)",
"activeForm": "Creating IAM roles",
"status": "completed"
},
{
"content": "EFS file-system policy",
"activeForm": "Attaching EFS file-system policy",
"status": "completed"
},
{
"content": "Lambda function in VPC",
"activeForm": "Creating Lambda function",
"status": "completed"
},
{
"content": "Backup vault, plan, selection",
"activeForm": "Creating Backup vault, plan, selection",
"status": "in_progress"
},
{
"content": "EFS replication",
"activeForm": "Creating EFS replication",
"status": "pending"
},
{
"content": "CloudWatch alarms",
"activeForm": "Creating CloudWatch alarms",
"status": "pending"
},
{
"content": "SSM parameter manifest",
"activeForm": "Publishing SSM manifest",
"status": "pending"
}
]
}Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n\naws backup create-backup-vault \\\n --backup-vault-name harbor-efs-backup-vault \\\n --encryption-key-arn \"$BACKUP_CMK_ARN\" >/dev/null\n\ncat > /tmp/plan.json <<'JSON'\n{\n \"BackupPlan\": {\n \"BackupPlanName\": \"harbor-efs-daily\",\n \"Rules\": [\n {\n \"RuleName\": \"harbor-efs-daily-rule\",\n \"TargetBackupVaultName\": \"harbor-efs-backup-vault\",\n \"ScheduleExpression\": \"cron(0 5 ? * * *)\",\n \"StartWindowMinutes\": 60,\n \"CompletionWindowMinutes\": 180,\n \"Lifecycle\": {\n \"MoveToColdStorageAfterDays\": 30,\n \"DeleteAfterDays\": 365\n }\n }\n ]\n }\n}\nJSON\n\nPLAN_ID=$(aws backup create-backup-plan --cli-input-json file:///tmp/plan.json --query 'BackupPlanId' --output text)\necho \"PLAN_ID=$PLAN_ID\" >> ids.env\n\n# tag-based selection on aws:ResourceTag/Backup=true\ncat > /tmp/sel.json <<JSON\n{\n \"BackupPlanId\": \"$PLAN_ID\",\n \"BackupSelection\": {\n \"SelectionName\": \"harbor-efs-tag-selection\",\n \"IamRoleArn\": \"$BACKUP_ROLE_ARN\",\n \"ListOfTags\": [\n {\n \"ConditionType\": \"STRINGEQUALS\",\n \"ConditionKey\": \"aws:ResourceTag/Backup\",\n \"ConditionValue\": \"true\"\n }\n ]\n }\n}\nJSON\nSEL_ID=$(aws backup create-backup-selection --cli-input-json file:///tmp/sel.json --query 'SelectionId' --output text)\necho \"SEL_ID=$SEL_ID\" >> ids.env\n\n# Tag the FS so the selection actually catches it\naws efs tag-resource --resource-id \"$FS_ID\" --tags Key=Backup,Value=true\n\necho \"PLAN_ID=$PLAN_ID SEL_ID=$SEL_ID\"\naws backup get-backup-vault-access-policy --backup-vault-name harbor-efs-backup-vault 2>&1 | head -3 || true\naws backup describe-backup-vault --backup-vault-name harbor-efs-backup-vault --query '{Name:BackupVaultName,Kms:EncryptionKeyArn}'",
"description": "Create Backup vault, plan, selection, tag FS"
}PLAN_ID=5bc2e38e-2c61-4fae-8e54-64e4d211c12a SEL_ID=cb497b8c-8219-46e2-b2fd-93052829b4df
aws: [ERROR]: An error occurred (ResourceNotFoundException) when calling the GetBackupVaultAccessPolicy operation: Vault arn:aws:backup:us-east-1:000000000000:backup-vault:harbor-efs-backup-vault has no associated vault policy
{
"Name": "harbor-efs-backup-vault",
"Kms": null
}
[stdout]
PLAN_ID=5bc2e38e-2c61-4fae-8e54-64e4d211c12a SEL_ID=cb497b8c-8219-46e2-b2fd-93052829b4df
aws: [ERROR]: An error occurred (ResourceNotFoundException) when calling the GetBackupVaultAccessPolicy operation: Vault arn:aws:backup:us-east-1:000000000000:backup-vault:harbor-efs-backup-vault has no associated vault policy
{
"Name": "harbor-efs-backup-vault",
"Kms": null
}{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n\naws efs create-replication-configuration \\\n --source-file-system-id \"$FS_ID\" \\\n --destinations 'Region=us-west-2' \\\n --query '{Src:SourceFileSystemId,Dst:Destinations}'",
"description": "Create EFS replication config"
}Exit code 254 aws: [ERROR]: An error occurred (InternalFailure) when calling the CreateReplicationConfiguration operation: No moto route for service efs on path /2015-02-01/file-systems/fs-192344d2/replication-configuration found. [error] tool reported failure
{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n\n# Try direct PUT (the AWS spec uses POST on /file-systems/{fsid}/replication-configuration)\ncurl -sS -X POST \"$AWS_ENDPOINT_URL/2015-02-01/file-systems/$FS_ID/replication-configuration\" \\\n -H 'Content-Type: application/json' \\\n -d '{\"Destinations\":[{\"Region\":\"us-west-2\"}]}' || true\necho\ncurl -sS -X PUT \"$AWS_ENDPOINT_URL/2015-02-01/file-systems/$FS_ID/replication-configuration\" \\\n -H 'Content-Type: application/json' \\\n -d '{\"Destinations\":[{\"Region\":\"us-west-2\"}]}' || true\necho\ncurl -sS \"$AWS_ENDPOINT_URL/2015-02-01/file-systems/$FS_ID/replication-configuration\" || true\necho",
"description": "Probe EFS replication HTTP routes"
}<?xml version='1.0' encoding='utf-8'?> <Error><Code>NoSuchBucket</Code><Message>The specified bucket does not exist</Message><RequestId>89f421bd-c760-4c83-8e41-b2e9748c2e3e</RequestId><BucketName>2015-02-01</BucketName></Error> <?xml version='1.0' encoding='utf-8'?> <Error><Code>NoSuchBucket</Code><Message>The specified bucket does not exist</Message><RequestId>1842db8c-450a-4bdc-968d-82b7a260df96</RequestId><BucketName>2015-02-01</BucketName></Error> [stdout] <?xml version='1.0' encoding='utf-8'?> <Error><Code>NoSuchBucket</Code><Message>The specified bucket does not exist</Message><RequestId>89f421bd-c760-4c83-8e41-b2e9748c2e3e</RequestId><BucketName>2015-02-01</BucketName></Error> <?xml version='1.0' encoding='utf-8'?> <Error><Code>NoSuchBucket</Code><Message>The specified bucket does not exist</Message><RequestId>1842db8c-450a-4bdc-968d-82b7a260df96</RequestId><BucketName>2015-02-01</BucketName></Error>
{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n# Try with explicit Host header so it's recognized as EFS\ncurl -sS -X POST \"$AWS_ENDPOINT_URL/2015-02-01/file-systems/$FS_ID/replication-configuration\" \\\n -H \"Host: elasticfilesystem.us-east-1.amazonaws.com\" \\\n -H \"Authorization: AWS4-HMAC-SHA256 Credential=test/20260508/us-east-1/elasticfilesystem/aws4_request, SignedHeaders=host, Signature=00\" \\\n -H 'Content-Type: application/json' \\\n -d '{\"Destinations\":[{\"Region\":\"us-west-2\"}]}' || true\necho\necho \"---\"\naws efs create-replication-configuration --debug \\\n --source-file-system-id \"$FS_ID\" \\\n --destinations 'Region=us-west-2' 2>&1 | tail -30 || true",
"description": "Probe with EFS host header and capture aws debug"
}{"__type": "InternalFailure", "message": "No moto route for service efs on path /2015-02-01/file-systems/fs-192344d2/replication-configuration found."}
---
2026-05-08 21:48:44,764 - MainThread - botocore.auth - DEBUG - StringToSign:
AWS4-HMAC-SHA256
20260508T214844Z
20260508/us-east-1/elasticfilesystem/aws4_request
561cfae72399d5945ebd83ed0331db42c8b1ccad4889b59125a13c48cc5041f1
2026-05-08 21:48:44,764 - MainThread - botocore.auth - DEBUG - Signature:
a4f94a552cd35f06ed637b73a10b7ea360154c672c16135f760ff18ac39d0ed2
2026-05-08 21:48:44,764 - MainThread - botocore.hooks - DEBUG - Event request-created.efs.CreateReplicationConfiguration: calling handler <bound method UserAgentString.rebuild_and_replace_user_agent_handler of <botocore.useragent.UserAgentString object at 0xffffb634c2d0>>
2026-05-08 21:48:44,764 - MainThread - botocore.endpoint - DEBUG - Sending http request: <AWSPreparedRequest stream_output=False, method=POST, url=http://localstack:4566/2015-02-01/file-systems/fs-192344d2/replication-configuration, headers={'Content-Type': b'application/json', 'User-Agent': b'aws-cli/2.34.45 md/awscrt#0.32.2 ua/2.1 os/linux#6.10.14-linuxkit md/arch#aarch64 lang/python#3.14.4 md/pyimpl#CPython m/Z,g,E,N,b cfg/retry-mode#standard md/installer#exe md/distrib#ubuntu.24 md/prompt#off md/command#efs.create-replication-configuration', 'X-Amz-Date': b'20260508T214844Z', 'Authorization': b'AWS4-HMAC-SHA256 Credential=test/20260508/us-east-1/elasticfilesystem/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=a4f94a552cd35f06ed637b73a10b7ea360154c672c16135f760ff18ac39d0ed2', 'Content-Length': '43'}>
2026-05-08 21:48:44,765 - MainThread - urllib3.connectionpool - DEBUG - Starting new HTTP connection (1): localstack:4566
2026-05-08 21:48:44,772 - MainThread - urllib3.connectionpool - DEBUG - http://localstack:4566 "POST /2015-02-01/file-systems/fs-192344d2/replication-configuration HTTP/1.1" 501 151
2026-05-08 21:48:44,772 - MainThread - botocore.parsers - DEBUG - Response headers: {'Server': 'TwistedWeb/25.5.0', 'Date': 'Fri, 08 May 2026 21:48:44 GMT', 'Content-Type': 'application/json', 'X-Amzn-Errortype': 'InternalFailure', 'Content-Length': '151', 'x-amzn-RequestId': 'e8842fe2-cfb6-4e68-8f0a-6c9b07f13582', 'x-amz-request-id': 'e8842fe2-cfb6-4e68-8f0a-6c9b07f13582', 'x-localstack': 'true'}
2026-05-08 21:48:44,772 - MainThread - botocore.parsers - DEBUG - Response body:
b'{"__type": "InternalFailure", "message": "No moto route for service efs on path /2015-02-01/file-systems/fs-192344d2/replication-configuration found."}'
2026-05-08 21:48:44,772 - MainThread - botocore.hooks - DEBUG - Event needs-retry.efs.CreateReplicationConfiguration: calling handler <bound method RetryHandler.needs_retry of <botocore.retries.standard.RetryHandler object at 0xffffb6351010>>
2026-05-08 21:48:44,773 - MainThread - botocore.retries.standard - DEBUG - Not retrying request.
2026-05-08 21:48:44,773 - MainThread - botocore.hooks - DEBUG - Event after-call.efs.CreateReplicationConfiguration: calling handler <bound method RetryQuotaChecker.release_retry_quota of <botocore.retries.standard.RetryQuotaChecker object at 0xffffb6cd3e00>>
2026-05-08 21:48:44,773 - MainThread - awscli.clidriver - DEBUG - Exception caught in main()
Traceback (most recent call last):
File "awscli/clidriver.py", line 589, in main
File "awscli/clidriver.py", line 727, in __call__
File "awscli/clidriver.py", line 944, in __call__
File "awscli/clidriver.py", line 1080, in invoke
File "awscli/clidriver.py", line 1094, in _make_client_call
File "awscli/botocore/client.py", line 442, in _api_call
File "awscli/botocore/context.py", line 124, in wrapper
File "awscli/botocore/client.py", line 932, in _make_api_call
botocore.exceptions.ClientError: An error occurred (InternalFailure) when calling the CreateReplicationConfiguration operation: No moto route for service efs on path /2015-02-01/file-systems/fs-192344d2/replication-configuration found.
aws: [ERROR]: An e
…[truncated]{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\ncat > replication-intent.json <<JSON\n{\n \"SourceFileSystemId\": \"$FS_ID\",\n \"Destinations\": [\n { \"Region\": \"us-west-2\" }\n ]\n}\nJSON\necho \"Intended CreateReplicationConfiguration payload:\"\ncat replication-intent.json",
"description": "Persist the intended replication payload"
}Intended CreateReplicationConfiguration payload:
{
"SourceFileSystemId": "fs-192344d2",
"Destinations": [
{ "Region": "us-west-2" }
]
}
[stdout]
Intended CreateReplicationConfiguration payload:
{
"SourceFileSystemId": "fs-192344d2",
"Destinations": [
{ "Region": "us-west-2" }
]
}{
"todos": [
{
"content": "VPC, subnets, security groups",
"activeForm": "Building VPC, subnets, security groups",
"status": "completed"
},
{
"content": "KMS CMKs (FS + Backup)",
"activeForm": "Creating KMS CMKs",
"status": "completed"
},
{
"content": "EFS file system + mount targets",
"activeForm": "Creating EFS file system + mount targets",
"status": "completed"
},
{
"content": "EFS access point + lifecycle",
"activeForm": "Creating EFS access point + lifecycle",
"status": "completed"
},
{
"content": "IAM roles (app, lambda, backup)",
"activeForm": "Creating IAM roles",
"status": "completed"
},
{
"content": "EFS file-system policy",
"activeForm": "Attaching EFS file-system policy",
"status": "completed"
},
{
"content": "Lambda function in VPC",
"activeForm": "Creating Lambda function",
"status": "completed"
},
{
"content": "Backup vault, plan, selection",
"activeForm": "Creating Backup vault, plan, selection",
"status": "completed"
},
{
"content": "EFS replication (env unsupported, payload preserved)",
"activeForm": "Recording replication intent",
"status": "completed"
},
{
"content": "CloudWatch alarms",
"activeForm": "Creating CloudWatch alarms",
"status": "in_progress"
},
{
"content": "SSM parameter manifest",
"activeForm": "Publishing SSM manifest",
"status": "pending"
}
]
}Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n\n# 1 TiB in bytes\nONE_TIB=1099511627776\n\naws cloudwatch put-metric-alarm \\\n --alarm-name harbor-efs-burst-credits \\\n --namespace AWS/EFS \\\n --metric-name BurstCreditBalance \\\n --statistic Average \\\n --period 300 --evaluation-periods 1 \\\n --threshold $ONE_TIB \\\n --comparison-operator LessThanThreshold \\\n --dimensions Name=FileSystemId,Value=\"$FS_ID\"\n\naws cloudwatch put-metric-alarm \\\n --alarm-name harbor-efs-client-connections \\\n --namespace AWS/EFS \\\n --metric-name ClientConnections \\\n --statistic Sum \\\n --period 300 --evaluation-periods 1 \\\n --threshold 0 \\\n --comparison-operator LessThanOrEqualToThreshold \\\n --treat-missing-data breaching \\\n --dimensions Name=FileSystemId,Value=\"$FS_ID\"\n\naws cloudwatch put-metric-alarm \\\n --alarm-name harbor-efs-percent-io \\\n --namespace AWS/EFS \\\n --metric-name PercentIOLimit \\\n --statistic Maximum \\\n --period 300 --evaluation-periods 1 \\\n --threshold 80 \\\n --comparison-operator GreaterThanThreshold \\\n --dimensions Name=FileSystemId,Value=\"$FS_ID\"\n\naws cloudwatch describe-alarms --alarm-names harbor-efs-burst-credits harbor-efs-client-connections harbor-efs-percent-io \\\n --query 'MetricAlarms[].{Name:AlarmName,Metric:MetricName,Stat:Statistic,Op:ComparisonOperator,Th:Threshold,TMD:TreatMissingData}'",
"description": "Create the three CloudWatch alarms"
}[
{
"Name": "harbor-efs-burst-credits",
"Metric": "BurstCreditBalance",
"Stat": "Average",
"Op": "LessThanThreshold",
"Th": 1099511627776.0,
"TMD": null
},
{
"Name": "harbor-efs-client-connections",
"Metric": "ClientConnections",
"Stat": "Sum",
"Op": "LessThanOrEqualToThreshold",
"Th": 0.0,
"TMD": "breaching"
},
{
"Name": "harbor-efs-percent-io",
"Metric": "PercentIOLimit",
"Stat": "Maximum",
"Op": "GreaterThanThreshold",
"Th": 80.0,
"TMD": null
}
]
[stdout]
[
{
"Name": "harbor-efs-burst-credits",
"Metric": "BurstCreditBalance",
"Stat": "Average",
"Op": "LessThanThreshold",
"Th": 1099511627776.0,
"TMD": null
},
{
"Name": "harbor-efs-client-connections",
"Metric": "ClientConnections",
"Stat": "Sum",
"Op": "LessThanOrEqualToThreshold",
"Th": 0.0,
"TMD": "breaching"
},
{
"Name": "harbor-efs-percent-io",
"Metric": "PercentIOLimit",
"Stat": "Maximum",
"Op": "GreaterThanThreshold",
"Th": 80.0,
"TMD": null
}
]{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\n\nput() { aws ssm put-parameter --overwrite --name \"$1\" --type String --value \"$2\" >/dev/null && echo \"$1 = $2\"; }\n\nput /harbor/efs/fs-id \"$FS_ID\"\nput /harbor/efs/access-point-id \"$AP_ID\"\nput /harbor/efs/cmk-arn \"$FS_CMK_ARN\"\nput /harbor/efs/backup-cmk-arn \"$BACKUP_CMK_ARN\"\nput /harbor/efs/app-role-arn \"$APP_ROLE_ARN\"\nput /harbor/efs/lambda-role-arn \"$LAMBDA_ROLE_ARN\"\nput /harbor/efs/lambda-arn \"$LAMBDA_ARN\"\nput /harbor/efs/lambda-sg-id \"$LAMBDA_SG\"\nput /harbor/efs/app-sg-id \"$APP_SG\"\nput /harbor/efs/mount-sg-id \"$MOUNT_SG\"\nput /harbor/efs/vpc-id \"$VPC_ID\"\nput /harbor/efs/backup-vault-name \"harbor-efs-backup-vault\"\nput /harbor/efs/backup-plan-id \"$PLAN_ID\"\nput /harbor/efs/backup-role-arn \"$BACKUP_ROLE_ARN\"",
"description": "Publish SSM manifest"
}/harbor/efs/fs-id = fs-192344d2 /harbor/efs/access-point-id = fsap-837844c7 /harbor/efs/cmk-arn = arn:aws:kms:us-east-1:000000000000:key/d485006a-88ab-42e0-a01f-2b8045cc2064 /harbor/efs/backup-cmk-arn = arn:aws:kms:us-east-1:000000000000:key/a0df3bbe-4e22-41a6-b715-825bad509dbf /harbor/efs/app-role-arn = arn:aws:iam::000000000000:role/harbor-efs-app-role /harbor/efs/lambda-role-arn = arn:aws:iam::000000000000:role/harbor-efs-lambda-role /harbor/efs/lambda-arn = arn:aws:lambda:us-east-1:000000000000:function:harbor-efs-processor /harbor/efs/lambda-sg-id = sg-4dcbca29bc7d79da9 /harbor/efs/app-sg-id = sg-9a66be8fe0e2de542 /harbor/efs/mount-sg-id = sg-5900ce9b5b5776e2c /harbor/efs/vpc-id = vpc-87f36db8385fe5e88 /harbor/efs/backup-vault-name = harbor-efs-backup-vault /harbor/efs/backup-plan-id = 5bc2e38e-2c61-4fae-8e54-64e4d211c12a /harbor/efs/backup-role-arn = arn:aws:iam::000000000000:role/harbor-efs-backup-role [stdout] /harbor/efs/fs-id = fs-192344d2 /harbor/efs/access-point-id = fsap-837844c7 /harbor/efs/cmk-arn = arn:aws:kms:us-east-1:000000000000:key/d485006a-88ab-42e0-a01f-2b8045cc2064 /harbor/efs/backup-cmk-arn = arn:aws:kms:us-east-1:000000000000:key/a0df3bbe-4e22-41a6-b715-825bad509dbf /harbor/efs/app-role-arn = arn:aws:iam::000000000000:role/harbor-efs-app-role /harbor/efs/lambda-role-arn = arn:aws:iam::000000000000:role/harbor-efs-lambda-role /harbor/efs/lambda-arn = arn:aws:lambda:us-east-1:000000000000:function:harbor-efs-processor /harbor/efs/lambda-sg-id = sg-4dcbca29bc7d79da9 /harbor/efs/app-sg-id = sg-9a66be8fe0e2de542 /harbor/efs/mount-sg-id = sg-5900ce9b5b5776e2c /harbor/efs/vpc-id = vpc-87f36db8385fe5e88 /harbor/efs/backup-vault-name = harbor-efs-backup-vault /harbor/efs/backup-plan-id = 5bc2e38e-2c61-4fae-8e54-64e4d211c12a /harbor/efs/backup-role-arn = arn:aws:iam::000000000000:role/harbor-efs-backup-role
{
"todos": [
{
"content": "VPC, subnets, security groups",
"activeForm": "Building VPC, subnets, security groups",
"status": "completed"
},
{
"content": "KMS CMKs (FS + Backup)",
"activeForm": "Creating KMS CMKs",
"status": "completed"
},
{
"content": "EFS file system + mount targets",
"activeForm": "Creating EFS file system + mount targets",
"status": "completed"
},
{
"content": "EFS access point + lifecycle",
"activeForm": "Creating EFS access point + lifecycle",
"status": "completed"
},
{
"content": "IAM roles (app, lambda, backup)",
"activeForm": "Creating IAM roles",
"status": "completed"
},
{
"content": "EFS file-system policy",
"activeForm": "Attaching EFS file-system policy",
"status": "completed"
},
{
"content": "Lambda function in VPC",
"activeForm": "Creating Lambda function",
"status": "completed"
},
{
"content": "Backup vault, plan, selection",
"activeForm": "Creating Backup vault, plan, selection",
"status": "completed"
},
{
"content": "EFS replication (env unsupported, payload preserved)",
"activeForm": "Recording replication intent",
"status": "completed"
},
{
"content": "CloudWatch alarms",
"activeForm": "Creating CloudWatch alarms",
"status": "completed"
},
{
"content": "SSM parameter manifest",
"activeForm": "Publishing SSM manifest",
"status": "completed"
}
]
}Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable
{
"command": "set -euo pipefail\ncd /app/work\n. ./ids.env\necho \"== ingress on mount SG ==\"\naws ec2 describe-security-groups --group-ids \"$MOUNT_SG\" --query 'SecurityGroups[0].IpPermissions'\necho \"== mount targets ==\"\naws efs describe-mount-targets --file-system-id \"$FS_ID\" --query 'MountTargets[].{Id:MountTargetId,Subnet:SubnetId,State:LifeCycleState}'\necho \"== access point ==\"\naws efs describe-access-points --file-system-id \"$FS_ID\" --query 'AccessPoints[].{Id:AccessPointId,Posix:PosixUser,Root:RootDirectory}'\necho \"== fs encryption ==\"\naws efs describe-file-systems --file-system-id \"$FS_ID\" --query 'FileSystems[0].{Id:FileSystemId,Enc:Encrypted,Cmk:KmsKeyId,Perf:PerformanceMode,Tput:ThroughputMode}'\necho \"== lifecycle ==\"\naws efs describe-lifecycle-configuration --file-system-id \"$FS_ID\"\necho \"== fs policy ==\"\naws efs describe-file-system-policy --file-system-id \"$FS_ID\" --query 'Policy' --output text | head -c 200\necho \"...\"\necho \"== backup plan ==\"\naws backup get-backup-plan --backup-plan-id \"$PLAN_ID\" --query '{Name:BackupPlan.BackupPlanName,Rules:BackupPlan.Rules[].{R:RuleName,Sched:ScheduleExpression,Vault:TargetBackupVaultName,Start:StartWindowMinutes,Compl:CompletionWindowMinutes,LC:Lifecycle}}'\necho \"== backup selection ==\"\naws backup get-backup-selection --backup-plan-id \"$PLAN_ID\" --selection-id \"$SEL_ID\" --query 'BackupSelection.{Name:SelectionName,Role:IamRoleArn,Tags:ListOfTags}'\necho \"== alarms ==\"\naws cloudwatch describe-alarms --alarm-name-prefix harbor-efs --query 'MetricAlarms[].AlarmName'\necho \"== ssm ==\"\naws ssm get-parameters-by-path --path /harbor/efs --query 'Parameters[].{N:Name,V:Value}'",
"description": "Final verification across all resources"
}== ingress on mount SG ==
[
{
"IpProtocol": "tcp",
"FromPort": 2049,
"ToPort": 2049,
"UserIdGroupPairs": [
{
"UserId": "000000000000",
"GroupId": "sg-9a66be8fe0e2de542"
},
{
"UserId": "000000000000",
"GroupId": "sg-4dcbca29bc7d79da9"
}
],
"IpRanges": [],
"Ipv6Ranges": [],
"PrefixListIds": []
}
]
== mount targets ==
[
{
"Id": "fsmt-b3370834",
"Subnet": "subnet-4787a5ab8f4509d23",
"State": "available"
},
{
"Id": "fsmt-d0c33b60",
"Subnet": "subnet-e7ddc2fca407ae1db",
"State": "available"
}
]
== access point ==
[
{
"Id": "fsap-837844c7",
"Posix": {
"Uid": 1500,
"Gid": 1500
},
"Root": {
"Path": "/ci-runner",
"CreationInfo": {
"OwnerUid": 1500,
"OwnerGid": 1500,
"Permissions": "0755"
}
}
}
]
== fs encryption ==
{
"Id": "fs-192344d2",
"Enc": true,
"Cmk": "arn:aws:kms:us-east-1:000000000000:key/d485006a-88ab-42e0-a01f-2b8045cc2064",
"Perf": "generalPurpose",
"Tput": "elastic"
}
== lifecycle ==
{
"LifecyclePolicies": [
{
"TransitionToIA": "AFTER_30_DAYS"
},
{
"TransitionToArchive": "AFTER_90_DAYS"
},
{
"TransitionToPrimaryStorageClass": "AFTER_1_ACCESS"
}
]
}
== fs policy ==
{
"Version": "2012-10-17",
"Id": "harbor-efs-policy",
"Statement": [
{
"Sid": "DenyNonTLSExceptEFSReplication",
"Effect": "Deny",
"NotPrincipal": { "Service": "elasticfiles...
== backup plan ==
{
"Name": "harbor-efs-daily",
"Rules": [
{
"R": "harbor-efs-daily-rule",
"Sched": "cron(0 5 ? * * *)",
"Vault": "harbor-efs-backup-vault",
"Start": 60,
"Compl": 180,
"LC": {
"MoveToColdStorageAfterDays": 30,
"DeleteAfterDays": 365
}
}
]
}
== backup selection ==
{
"Name": "harbor-efs-tag-selection",
"Role": "arn:aws:iam::000000000000:role/harbor-efs-backup-role",
"Tags": [
{
"ConditionType": "STRINGEQUALS",
"ConditionKey": "aws:ResourceTag/Backup",
"ConditionValue": "true"
}
]
}
== alarms ==
[
"harbor-efs-burst-credits",
"harbor-efs-client-connections",
"harbor-efs-percent-io"
]
== ssm ==
[
{
"N": "/harbor/efs/fs-id",
"V": "fs-192344d2"
},
{
"N": "/harbor/efs/access-point-id",
"V": "fsap-837844c7"
},
{
"N": "/harbor/efs/cmk-arn",
"V": "arn:aws:kms:us-east-1:000000000000:key/d485006a-88ab-42e0-a01f-2b8045cc2064"
},
{
"N": "/harbor/efs/backup-cmk-arn",
"V": "arn:aws:kms:us-east-1:000000000000:key/a0df3bbe-4e22-41a6-b715-825bad509dbf"
},
{
"N": "/harbor/efs/app-role-arn",
"V": "arn:aws:iam::000000000000:role/harbor-efs-app-role"
},
{
"N": "/harbor/efs/lambda-role-arn",
"V": "arn:aws:iam::000000000000:role/harbor-efs-lambda-role"
},
{
"N": "/harbor/efs/lambda-arn",
"V": "arn:aws:lambda:us-east-1:000000000000:function:harbor-efs-processor"
},
{
"N": "/harbor/efs/lambda-sg-id",
"V": "sg-4dcbca29bc7d79da9"
},
{
"N": "/harbor/efs/app-sg-id",
"V": "sg-9a66be8fe0e2de542"
},
{
"N": "/harbor/efs/mount-sg-id",
"V": "sg-5900ce9b5b5776e2c"
},
{
"N": "/harbor/efs/vpc-id",
"V": "vpc-87f36db8385fe5e88"
},
{
"N": "/harbor/efs/backup-vault-name",
"V": "harbor-efs-backup-vault"
},
{
"N": "/harbor/efs/backup-plan-id",
"V": "5bc2e38e-2c61-4fae
…[truncated]No file changes, the agent left the workspace untouched.
downloading uv 0.9.7 aarch64-unknown-linux-gnu
Downloading pygments (1.2MiB)
Downloading botocore (12.7MiB)
Downloading pygments
Downloading botocore
Installed 13 packages in 72ms
============================= test session starts ==============================
platform linux -- Python 3.12.3, pytest-8.4.1, pluggy-1.6.0 -- /root/.cache/uv/archive-v0/l7FAJM20M89u4uojlUj12/bin/python
cachedir: .pytest_cache
rootdir: /tests
plugins: json-ctrf-0.3.5
collecting ... collected 36 items
../tests/test_outputs.py::test_01_vpc_and_subnets_exist PASSED [ 2%]
../tests/test_outputs.py::test_02_efs_filesystem_exists PASSED [ 5%]
../tests/test_outputs.py::test_03_two_mount_targets_available PASSED [ 8%]
../tests/test_outputs.py::test_04_access_point_exists PASSED [ 11%]
../tests/test_outputs.py::test_05_three_iam_roles_exist PASSED [ 13%]
../tests/test_outputs.py::test_06_three_security_groups_exist PASSED [ 16%]
../tests/test_outputs.py::test_07_lambda_function_exists PASSED [ 19%]
../tests/test_outputs.py::test_08_backup_vault_plan_selection_exist PASSED [ 22%]
../tests/test_outputs.py::test_09_ssm_pointers_resolve PASSED [ 25%]
../tests/test_outputs.py::test_10_fs_encrypted_with_cmk PASSED [ 27%]
../tests/test_outputs.py::test_11_fs_throughput_mode_elastic PASSED [ 30%]
../tests/test_outputs.py::test_12_ap_posix_user_set PASSED [ 33%]
../tests/test_outputs.py::test_13_ap_root_directory_creation_info PASSED [ 36%]
../tests/test_outputs.py::test_14_app_role_has_ap_scoped_perms PASSED [ 38%]
../tests/test_outputs.py::test_15_lambda_role_has_ap_scoped_perms PASSED [ 41%]
../tests/test_outputs.py::test_16_lambda_role_has_eni_perms FAILED [ 44%]
../tests/test_outputs.py::test_17_lambda_role_trusts_lambda_service PASSED [ 47%]
../tests/test_outputs.py::test_18_backup_role_trusts_backup_service PASSED [ 50%]
../tests/test_outputs.py::test_19_fs_policy_has_tls_deny_with_replication_exemption PASSED [ 52%]
../tests/test_outputs.py::test_20_fs_policy_has_per_role_ap_allow_statements PASSED [ 55%]
../tests/test_outputs.py::test_21_mount_sg_ingress_from_app_and_lambda PASSED [ 58%]
../tests/test_outputs.py::test_22_lambda_has_vpc_config PASSED [ 61%]
../tests/test_outputs.py::test_23_lambda_runtime_python PASSED [ 63%]
../tests/test_outputs.py::test_24_backup_plan_lifecycle_cold_le_delete_minus_90 PASSED [ 66%]
../tests/test_outputs.py::test_25_backup_selection_uses_tag_conditions PASSED [ 69%]
../tests/test_outputs.py::test_26_backup_role_grants_efs_backup PASSED [ 72%]
../tests/test_outputs.py::test_27_lifecycle_has_separate_transition_objects PASSED [ 75%]
../tests/test_outputs.py::test_28_burst_credits_alarm_average_lt PASSED [ 77%]
../tests/test_outputs.py::test_29_client_connections_alarm_sum_lte PASSED [ 80%]
../tests/test_outputs.py::test_30_percent_io_alarm_maximum_gt PASSED [ 83%]
../tests/test_outputs.py::test_31_alarms_dimensioned_by_filesystem_id PASSED [ 86%]
../tests/test_outputs.py::test_32_kms_fs_cmk_allows_efs_service PASSED [ 88%]
../tests/test_outputs.py::test_33_kms_backup_cmk_allows_backup_service PASSED [ 91%]
../tests/test_outputs.py::test_34_fs_tags_include_backup_true PASSED [ 94%]
../tests/test_outputs.py::test_35_app_role_resource_is_fs_arn_not_only_star PASSED [ 97%]
../tests/test_outputs.py::test_36_backup_vault_named_correctly PASSED [100%]
=================================== FAILURES ===================================
______________________ test_16_lambda_role_has_eni_perms _______________________
def test_16_lambda_role_has_eni_perms():
"""Lambda role grants ec2:CreateNetworkInterface (Hyperplane ENI for VPC config)."""
docs = _role_inline_doc(LAMBDA_ROLE)
actions = []
for d in docs:
for s in d.get("Statement", []):
a = s.get("Action")
actions.extend([a] if isinstance(a, str) else (a or []))
> assert "ec2:CreateNetworkInterface" in actions or "ec2:*" in actions, f"actions={actions}"
E AssertionError: actions=['elasticfilesystem:ClientMount', 'elasticfilesystem:ClientWrite']
E assert ('ec2:CreateNetworkInterface' in ['elasticfilesystem:ClientMount', 'elasticfilesystem:ClientWrite'] or 'ec2:*' in ['elasticfilesystem:ClientMount', 'elasticfilesystem:ClientWrite'])
/tests/test_outputs.py:259: AssertionError
=============================== warnings summary ===============================
test_outputs.py: 101 warnings
/root/.cache/uv/archive-v0/l7FAJM20M89u4uojlUj12/lib/python3.12/site-packages/botocore/auth.py:424: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
datetime_now = datetime.datetime.utcnow()
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
==================================== PASSES ====================================
=========================== short test summary info ============================
PASSED ../tests/test_outputs.py::test_01_vpc_and_subnets_exist
PASSED ../tests/test_outputs.py::test_02_efs_filesystem_exists
PASSED ../tests/test_outputs.py::test_03_two_mount_targets_available
PASSED ../tests/test_outputs.py::test_04_access_point_exists
PASSED ../tests/test_outputs.py::test_05_three_iam_roles_exist
PASSED ../tests/test_outputs.py::test_06_three_security_groups_exist
PASSED ../tests/test_outputs.py::test_07_lambda_function_exists
PASSED ../tests/test_outputs.py::test_08_backup_vault_plan_selection_exist
PASSED ../tests/test_outputs.py::test_09_ssm_pointers_resolve
PASSED ../tests/test_outputs.py::test_10_fs_encrypted_with_cmk
PASSED ../tests/test_outputs.py::test_11_fs_throughput_mode_elastic
PASSED ../tests/test_outputs.py::test_12_ap_posix_user_set
PASSED ../tests/test_outputs.py::test_13_ap_root_directory_creation_info
PASSED ../tests/test_outputs.py::test_14_app_role_has_ap_scoped_perms
PASSED ../tests/test_outputs.py::test_15_lambda_role_has_ap_scoped_perms
PASSED ../tests/test_outputs.py::test_17_lambda_role_trusts_lambda_service
PASSED ../tests/test_outputs.py::test_18_backup_role_trusts_backup_service
PASSED ../tests/test_outputs.py::test_19_fs_policy_has_tls_deny_with_replication_exemption
PASSED ../tests/test_outputs.py::test_20_fs_policy_has_per_role_ap_allow_statements
PASSED ../tests/test_outputs.py::test_21_mount_sg_ingress_from_app_and_lambda
PASSED ../tests/test_outputs.py::test_22_lambda_has_vpc_config
PASSED ../tests/test_outputs.py::test_23_lambda_runtime_python
PASSED ../tests/test_outputs.py::test_24_backup_plan_lifecycle_cold_le_delete_minus_90
PASSED ../tests/test_outputs.py::test_25_backup_selection_uses_tag_conditions
PASSED ../tests/test_outputs.py::test_26_backup_role_grants_efs_backup
PASSED ../tests/test_outputs.py::test_27_lifecycle_has_separate_transition_objects
PASSED ../tests/test_outputs.py::test_28_burst_credits_alarm_average_lt
PASSED ../tests/test_outputs.py::test_29_client_connections_alarm_sum_lte
PASSED ../tests/test_outputs.py::test_30_percent_io_alarm_maximum_gt
PASSED ../tests/test_outputs.py::test_31_alarms_dimensioned_by_filesystem_id
PASSED ../tests/test_outputs.py::test_32_kms_fs_cmk_allows_efs_service
PASSED ../tests/test_outputs.py::test_33_kms_backup_cmk_allows_backup_service
PASSED ../tests/test_outputs.py::test_34_fs_tags_include_backup_true
PASSED ../tests/test_outputs.py::test_35_app_role_resource_is_fs_arn_not_only_star
PASSED ../tests/test_outputs.py::test_36_backup_vault_named_correctly
FAILED ../tests/test_outputs.py::test_16_lambda_role_has_eni_perms - Assertio...
================== 1 failed, 35 passed, 101 warnings in 1.34s ==================Reproduce this trial: git checkout 2f94510 && PYTHONPATH=src python3 scripts/build_site.py , then open trial/trial_509f52d8f98f45a4. Re-running the agent live requires EVAL_PLATFORM_ENABLE_OAUTH_SMOKE=1 and is non-deterministic.
Trial trial_509f52d8f98f45a4 · verifier authoritative; classifier explanatory.