Here are some (not all) of my notes from studying for the AWS Certified Developer Associate 2017 exam. For those of you trying to pass the 2017 version of the exam, you have until November 2018 to do so.
Note that my notes are very repetitive. They are positively framed. I tried to avoid using negatives like no, none, not, and the prefix un-. That’s a memory trick. And this list of notes won’t be enough to pass the exam.
Without further ado, here are my notes:
- With a global secondary index, the partition and sort keys can both be different from those of the table.
- A global secondary index is an index with a partition and sort key that can be different from the table’s primary key.
- A global secondary index is considerd global because queries on the index can span all of the data in a table, across partitions.
- Web Identity Federation, or WIF, removes the need for creating individual IAM users.
- With AWS WIF, users can sign into an Identity Provider and obtain temporary credentials from AWS Security Token Service (STS).
- Elastic Beanstalk has platforms for programming lanuages, web containers, and Docker containers.
- Frequent EBS snapshots can result in performance degradation.
- DynamoDB sort key – max length 1024 bytes and min length 1 byte.
- x-amz-request-id, x-amz-id-2, and x-amz-delete-marker are all common S3 response headers.
- DownloadBucket, CompleteMultipartUpload, and UploadPart are common S3 API calls.
- AWS SWF executions can live up to one year.
- By default, you can have 200 CloudFormation stacks per region. That is a soft limit.
- 0 bytes is the minimum size of an S3 bucket object.
- S3 buckets allow empty or touched files.
- Maximum S3 object size is 5 TB.
- You must use S3 multipart upload for objects larger than 5 GB.
- AWS recommends you use the S3 multipart upload for objects larger than 100 MB.
- A DynamoDB table may contain up to five local secondary indexes and up to five global secondary indexes.
- DynamoDB partition key maz length is 2048 bytes.
- S3 has a soft limit of 100 buckets per account.
- S3 API can return NoSuchBucket 404 Not Found.
- You can only create one secondary index at a time with DynamoDB.
- LimitExceededException can come from attempting to create more than one table with a secondary index at a time.
- To recoup the cost of reserced EC2 instances, sell the unused instances on AWS Reserved Instance Marketplace, or take a snapshot of the EBS volume and terminate the EC2.
- AWS SWF – Decision tasks occur when the state of the workflow changes.
- AWS SWF – A server living inside or outside AWS can perform a worker task.
- AWS SWF – Humans can perform activity tasks.
- SQS now offers FIFO queues.
- AWS SQS FIFO queues – queue names will end in the .fifo suffix.
- SQS messages can be up to 256 KB.
- SQS messages are billed in 64 KB increments.
- One DynamoDB table partition can support a maximum of 3,000 read capacity units or 1,000 write capacity units.
- AWS SQS – ContentBasedDeduplication is supported in FIFO queues.
- IncompleteSignature and InvalidParameterValue return 400 Bad Request.
- The minimum visibility timeout of an SQS message is 0 seconds.
- The conditions section of a CloudFormation template allows you to set up an instance type based on the environment.
- One strongly consistent DynamoDB requires one read capacity unit.
- A hash key and a partition key are the same thing.
- A range key and a sort key are the same thing.
- JSON errors cause an error during CloudFormation template validation.
- EC2 API – use AttachVolume to attach an EBS volume to an EC2 instance.
- DynamoDB uses optimistic concurrency control.
- BatchWriteItem, when called in a loop, puts or deletes multiple items in one or more table. It also checks for unprocessed items and submits a new BatchWriteItem request with those unprocessed units until all items have been processed.
- ChangeMessageVisibility – this action changes the visibility timeout of an SQS message.
- CloudFormation supports JSON and YML.
- DynamoDB allows conditional writes on PutItem, UpdateItem, and DeleteItem.
- DynamoDB data plane operations allow CRUD actions on a table’s data.
- DynamoDB minimum partition key length is 1 byte. DynamoDB maximum partition key length is 2048 bytes.
- AWS Elastic Beanstalk supports platforms for programming languages like Java, PHP, Python, Ruby, Go.
- AWS S3 common request headers – Content-Length, Content-Type, and Content-MD5.
- DynamoDB – to get a list of all your tables, use ListTables.
- DynamoDB ListTables can only return up to 100 results, so if you have more than 100 tables request paginated results.
- From within an EC2 instance, cURL http://169.254.169.254/latest/meta-data to get instance meta data.
- AWS provides an SDK for C++, Java, Ruby, Python, Go, PHP, iOS, Node.js, .NET, and Android.
- A dedicated host is required to use your existing Windows Server licences with EC2.
- To take an application snapshot, first shutdown the EC2 instance and detach the EBS volume.
- EBS instances can be stopped and restarted without losing any data from the volume.
- AWS S3 supports website redirects.
- S3-Standard provides 11-nines durability and 4-nines availability.
- S3-RRS provides 4-nines durability.
- S3 bucket names can only contain lowercase letters, periods, dashes, and numbers.
- AWS S3 supports IPv6.
- Transferring data between an S3 and an EC2 instance in the same region is free.
- How to fix an EC2 instance running out of CPU resources? Take an EBS snapshot and redeploy a larger instance type or create an auto-scaling group to add more servers when demand is high.
- SQS GetQueueAttributes always supports ReceiveMessageWaitTimeSeconds, DelaySeconds, and VisibilityTimeout.
- DynamoDB read operations – scan, query, BatchGetItem, GetItem, and more.
- CompleteMultiPartUpload completes and assembles parts of multipart upload.
- SNS message delivery order is indeterminate.
- DynamoDB control plane operations let you create and manage tables, and work with indexes, streams, and other objects that depend on tables.
- DynamoDB data is stored and automatically replicated across mnultiple Availability Zones within a given region.
- DescribeImages will list the AMIs available in the current region.
- VPCs and auto-scaling groups are offered for free. Charges will only be incurred for the underlying compute and storage resources.
- You can have as many CloudFormation templates as you want in a given region.
- SQS ReceiveMessageWaitTimeSeconds – when set to greater than 0, long polling is enabled.
- SQS long polling allows SQS to wait until a message is available in the queue before sending a response.
- SQS short polling continuously polls a queue and can have false positives.
- SQS long polling reduces the number of poll requests required, reduces the number of false positives, and reduces the number of empty responses.
- AMIs must be copied into whatever region you want to launch from.
- SQS visibility timeout is the time during which the message is invisible to queue workers.
- If an SQS message visibility is set to 0, the message will be immediately available.
- To speed up the uploads from your app to S3, utilitze S3 transfer acceleration or design your app to use multipart upload.
- DynamoDB table reads are either eventually consistent or strongly consistent.
- DynamoDB – PutItem, UpdateItem, and DeleteItem support conditional writes.
- Conditional writers in DynamoDB – set an expression that must evaluate to true in order for the operation to succeed.
- Humans can perform an AWS SWF activity task.
- SWF decision tasks occur when the state of the workflow changes.
- An SQS request can contain up to TEN individual messages, so long as the total size does not exceed 256 KB.
- The DynamoDB GetItem operation returns a set of attributes for an item that matches the primary key.
- The DynamoDB GetItem API call is used to query an item by its primary key.
- SQS messages are delivered in an indeterminate order unless you are using a FIFO SQS queue.
- Because each message in SQS may be delivered more than once, your app should be idempotent.
- 61% said that higher education is heading in the wrong direction
- 84% said that higher education costs are too high
- 65% said that students are not getting the skills that they need to succeed in the workplace
Source: Pew Research
We are living in strange times when one of my most controversial views enters the mainstream.
People are upset. With tuition prices so high, who can blame them?
This problem reminds me of a story. In my early 20s, I read everything that I could find about finance. I must have read hundreds of books, thousands of articles, and watched hours of videos. I read older books to learn how people used to think. And I read a fascinating anecdote about higher education.
A generation ago, people tried to make it big on Wall Street. Many would fail, but that didn’t matter. Because the ones who failed on Wall Street would go to law school. Lawyers made good money at the time and law school was relatively inexpensive.
Things change. I hear that law school is expensive these days, and jobs are few and far between. But today we have Software Engineering. Most people who try can get software jobs after 6 months of training. A career in software is a golden backup plan.
The best solution, on an individual basis, is to be a smart consumer. We have to be smart consumers of higher education. Here are some higher education best practices:
- Apply for scholarships
- Go to an affordable school
- Focus on learning a marketable skill
- If you have to work, and can’t afford the luxury of a life of leisure, pick a field that has good job prospects
Above all, think of higher education as an investment. Pay a little, get a lot. Remember that AWS Certified Developer – Associate certificate that I keep mentioning? The cost of the exam and preparation is under $500, and the average salary for those holding the AWS Certified Developer – Associate certificate is $112,984.
I am studying for the AWS Certified Developer – Associate certificate, and I don’t have all the time in the world to study. Needing more bang for my studying buck, I searched for study tips based on Cognitive Science and Psychology. These tips are new – at least, new to me. And they are powerful. Here they are:
- Put a positive frame on your notes.
- Read your notes out loud.
- Speaking of reading your notes out loud – try to engage all five senses when studying. (Sometimes you can’t engage every sense. For example, I’m not going to go out and taste an AWS server. But I can engage my sense of sight and sound when studying.)
- Have you ever read something, written it down word for word, and promptly forgotten it? A great way to prevent this is to read, rephrase, then write. Rephrasing forces your brain to pay attention.
- Change Up Your Study Spaces for Better Recall
- Startup Advice for Engineers. Do things that don’t scale.
- Timely advice on how to clean up your Twitter account.
- How Auth0 builds highly-scalable SaaS products.
- Serverless isn’t right for every scenario, but when it works, it works.
- Web scraping under the GDPR regime. . Long story short, don’t scrape the personal information of EU residents.
When Nixon said “I am not a crook,” Americans saw him as a crook.
Because negating the frame activates that frame.
I am studying for the AWS Certified Developer Associate exam. And I realized that I have been taking notes all wrong.
I caught myself writing “ObjectNotFound is not,” and stopped. I stopped and crossed that out.
Just like “Don’t think of the elephant” makes you think of elephants, “No AWS data center is cold” makes you think that data centers are cold. Our minds forget the negative word “no,” and are left with a strengthened memory of data centers being cold.
To remember that all AWS data centers are warm, write that all AWS data centers are warm. Through repetition, your brain will come to associate “AWS data centers” with “warmth.” That’s what you want. You don’t want your brain to associate “AWS data centers” with the word “cold.”
And we can throw in a little repetition for good measure. So repeat after me. “All AWS data centers are warm.”
Phrasing notes in the positive will make it easier to remember the correct info. And that will cut down on required study time, it will improve test scores, and generally make life much easier.
“Let me tell you why my tv series in the 90s was so good, besides just an inordinate amount of just pure good fortune. In most tv series, 50 percent of the time is spent working on the show, 50 percent of the time is spent dealing with personality, political, and hierarchical issues of making something. We spent 99 percent of our time writing. Me and Larry [David]. The two of us. The door was closed. It’s closed. Somebody calls. We’re not taking the call. We were gonna make this thing funny. That’s why the show was good.” – Jerry Seinfeld, https://www.wnycstudios.org/story/jerry-seinfeld/
Today I would like to share a helpful little tip. It will help you avoid problems in the future. But first the backstory.
My team is new to the company. Our average tenure with the company is about six months. And with a new team, it always takes time for the team to bond. And we’re doing great.
Anyway, to establish some norms, we use Working Agreements. Working Agreements can be helpful if done right.
We keep Working Agreements short and sweet. Three to five is plenty. And we review them during Sprint review. We ask questions like “are we living up to them,” and “are they helping.” And we have seen a lot of success from working agreements.
One of our Working Agreements states that we need to peer review pull requests within two days. How awesome is that?
I opened a pull request which took a manual process and automated it to cut toil. Don’t get me started on toil. For now, suffice it to say that toil is terrible and eliminating toil is good.
Unfortunately, the manual task got ahead of the code as the pull request waited for reviews. I had to update the pull request again and again.
That’s usually a preventable problem, but sometimes it’s not. If you can’t prevent it, at least leave yourself a note. When you create a pull request, leave a note at the top of the pull request description. It can be short and sweet. “Don’t deploy until I update foobar.” Or “not safe to merge until we merge that other thing.”
That little trick will allow us to avoid problems. Have you noticed that the best engineers have the best habits? That’ll be a blog post for another day.
“It’s important to think of API evolution in terms of growth and increasing flexibility. Graceful API evolution is additive in terms of functionality, and subtractive in terms of requirements. While change is inevitable, planning for a graceful API evolution is a good way to minimize changes that break things. For example: required input may become optional, but not the other way around.