Ridley Internal Service Error on berks/knife upload

I’m running Chef Server 12.2.0 in an Amazon VPC and I’m having trouble uploading cookbooks via berks or knife.

Berks gives me the generic error and stack track:

➜ my-cookbook berks upload
E, [2015-12-14T10:24:53.020742 #10071] ERROR -- : Ridley::Errors::HTTPInternalServerError: {"error":["internal service error"]}
E, [2015-12-14T10:24:53.021373 #10071] ERROR -- : /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/ridley-4.3.1/lib/ridley/middleware/chef_response.rb:24:in `on_complete'
[stack trace removed for brevity]
There was an error connecting to the Chef Server

And knife gives me an internal service error:

➜  knife upload .
ERROR: Server returned error 500 for https://chef-server-url/organizations/my-org/sandboxes/80415405f76e1a312f2b2468c6a46860, retrying 1/5 in 4s
ERROR: Server returned error 500 for https://chef-server-url/organizations/my-org/sandboxes/80415405f76e1a312f2b2468c6a46860, retrying 2/5 in 7s
ERROR: Server returned error 500 for https://chef-server-url/organizations/my-org/sandboxes/80415405f76e1a312f2b2468c6a46860, retrying 3/5 in 9s
ERROR: Server returned error 500 for https://chef-server-url/organizations/my-org/sandboxes/80415405f76e1a312f2b2468c6a46860, retrying 4/5 in 27s
ERROR: Server returned error 500 for https://chef-server-url/organizations/my-org/sandboxes/80415405f76e1a312f2b2468c6a46860, retrying 5/5 in 58s
ERROR: internal server error
Response: internal service error

Here’s the tail of “/var/log/opscode/opscode-erchef/requests.log.* | grep status=500”:
2015-12-14T18:42:10Z erchef@127.0.0.1 method=PUT; path=/organizations/my-org/sandboxes/80415405f76e1a312f2b2468c6a46860; status=500; req_id=g3IAA2QAEGVyY2hlZkAxMjcuMC4wLjEBAAA3LwAAAAAAAAAA; org_name=my-org; couchdb_groups=false; couchdb_organizations=false; couchdb_containers=false; couchdb_acls=false; 503_mode=false; couchdb_associations=false; couchdb_association_requests=false; req_time=5021; rdbms_time=5; rdbms_count=5; authz_time=8; authz_count=1; s3_time=5000; s3_count=1; user=my-org; req_api_version=1;
2015-12-14T18:42:24Z erchef@127.0.0.1 method=PUT; path=/organizations/my-org/sandboxes/80415405f76e1a312f2b2468c6a46860; status=500; req_id=g3IAA2QAEGVyY2hlZkAxMjcuMC4wLjEBAAA49gAAAAAAAAAA; org_name=my-org; couchdb_groups=false; couchdb_organizations=false; couchdb_containers=false; couchdb_acls=false; 503_mode=false; couchdb_associations=false; couchdb_association_requests=false; req_time=5020; rdbms_time=6; rdbms_count=5; authz_time=7; authz_count=1; s3_time=5001; s3_count=1; user=my-org; req_api_version=1;
2015-12-14T18:42:57Z erchef@127.0.0.1 method=PUT; path=/organizations/my-org/sandboxes/80415405f76e1a312f2b2468c6a46860; status=500; req_id=g3IAA2QAEGVyY2hlZkAxMjcuMC4wLjEBAAA73wAAAAAAAAAA; org_name=my-org; couchdb_groups=false; couchdb_organizations=false; couchdb_containers=false; couchdb_acls=false; 503_mode=false; couchdb_associations=false; couchdb_association_requests=false; req_time=5021; rdbms_time=5; rdbms_count=5; authz_time=6; authz_count=1; s3_time=5002; s3_count=1; user=my-org; req_api_version=1;
2015-12-14T18:44:00Z erchef@127.0.0.1 method=PUT; path=/organizations/my-org/sandboxes/80415405f76e1a312f2b2468c6a46860; status=500; req_id=g3IAA2QAEGVyY2hlZkAxMjcuMC4wLjEBAABA2wAAAAAAAAAA; org_name=my-org; couchdb_groups=false; couchdb_organizations=false; couchdb_containers=false; couchdb_acls=false; 503_mode=false; couchdb_associations=false; couchdb_association_requests=false; req_time=5026; rdbms_time=5; rdbms_count=5; authz_time=12; authz_count=1; s3_time=5001; s3_count=1; user=my-org; req_api_version=1;

I tried following the steps provided in this post, but my ELB and SG for the Chef server already have the same ports mentioned open/listening. Let me know what other logs I should tail to give more context to this problem.