Terraform abstracts the APIs of multiple cloud providers into HCL, HashiCorp Configuration Langauge. What Terraform is essentially doing is enabling you to skip the part where you write code to talk to AWS' API, allowing you to spin an EC2 instance, or talk to GCE and store something in GCS, and instead just work in one language, via one tool. If the underlaying APIs to those providers shift and change over time, HashiCorp updates the logic under the hood within Terraform, and your code continues working. What it does not do is provide a single resource type or function/method that you can use to upload objects to both AWS and GCE - you have to write two separate resources to work with each of the two example cloud providers.
What CloudRail is saying is: the upload() function will work whether you tell it to push the object to S3 or GCS.
What Terraform forces you to do is change `resource "aws_s3_bucket_object" "picture" {}` to `resource "google_storage_bucket_object" "picture" {}` when you want to change from uploading to GCE from AWS.
As I understood it, it is more a solution for dev-ops to create the infrastructure. Like a provider agnostic CloudFormation. CloudRail is about making it super simple to integrate APIs into an app.
Terraform abstracts the APIs of multiple cloud providers into HCL, HashiCorp Configuration Langauge. What Terraform is essentially doing is enabling you to skip the part where you write code to talk to AWS' API, allowing you to spin an EC2 instance, or talk to GCE and store something in GCS, and instead just work in one language, via one tool. If the underlaying APIs to those providers shift and change over time, HashiCorp updates the logic under the hood within Terraform, and your code continues working. What it does not do is provide a single resource type or function/method that you can use to upload objects to both AWS and GCE - you have to write two separate resources to work with each of the two example cloud providers.
What CloudRail is saying is: the upload() function will work whether you tell it to push the object to S3 or GCS.
What Terraform forces you to do is change `resource "aws_s3_bucket_object" "picture" {}` to `resource "google_storage_bucket_object" "picture" {}` when you want to change from uploading to GCE from AWS.
Make sense? :)