Skip to content

Commit

Permalink
Initial Commit
Browse files Browse the repository at this point in the history
  • Loading branch information
daniel-klinger committed Jun 14, 2024
1 parent 3ef4cbc commit 9474988
Show file tree
Hide file tree
Showing 6 changed files with 117 additions and 27 deletions.
8 changes: 3 additions & 5 deletions docs/_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,10 @@
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.

title: Your awesome title
email: [email protected]
title: viadee CDK Challenge
email: [email protected]
description: >- # this means to ignore newlines until "baseurl:"
Write an awesome description for your new site here. You can edit this
line in _config.yml. It will appear in your document head meta (for
Google search results) and in your feed.xml site description.
A pulumi learning challenge. Powered by [viadee](https://viadee.de)
#baseurl: "" # the subpath of your site, e.g. /blog
#url: "" # the base hostname & protocol for your site, e.g. http://example.com
#twitter_username: jekyllrb
Expand Down
48 changes: 48 additions & 0 deletions docs/_posts/2024-06-14-stufe-0-einrichtung.markdown
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
layout: post
title: "Stufe 0: Einrichtung Pulumi und GCP-Account"
date: 2024-06-14 10:24:28 +0200
permalink: /einrichtung/
---

Nutzt den bereitgestellten Google Account und logged Euch ein:

```bash
gcloud auth application-default login
```

Das lokale Dateisystem als Speicher für den State konfigurieren:

```bash
pulumi login --local
```

Erzeugt ein neues Pulumi Projekt:

```bash
pulumi new gcp-typescript
```

(Name: `pulumi-challenge`, Stack: egal, GCP project: `viadee-pulumi-training`)

In der `index.ts` die Bucket-Location auf `EU` ändern.

Einen Namen für euer Team überlegen.

Den String `"my-bucket"` auf den Teamnamen ändern.

Den Bucket deployen:

```bash
pulumi up
```

Öffnet die Google Cloud Console und prüft, dass dort Euer Storage Bucket angelegt wurde: https://console.cloud.google.com/

Sprecht uns an, zeigt uns Eure Ergebnisse und wir zeigen Euch den Weg zu Level 1.

Final: Bereinigt die erzeugte Infrastruktur:

```bash
pulumi destroy
```
15 changes: 15 additions & 0 deletions docs/_posts/2024-06-14-stufe-1-todo-app.markdown
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
layout: post
title: "Stufe 1: TODO-App Deployment Google Cloud Run"
date: 2024-06-14 10:24:28 +0200
permalink: /todo-app/
---

Nutzt ein bereitgestelltes Container Image mit einer TODO-App und deploye sie auf Google Cloud Run.
Die Applikation soll danach im öffentlichen Internet über einen Web-Browser aufrufbar sein.

Hinweise:
- Port im Container: 8080.
- Region: `europe-west3`
- Vergebt einen Service name, der mit Eurem Team Namen beginnt.
- Registry / Image: `europe-west3-docker.pkg.dev/viadee-pulumi-training/demo-app/quarkus-todo-app:1.0`
25 changes: 25 additions & 0 deletions docs/_posts/2024-06-14-stufe-2-postgres-db.markdown
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
layout: post
title: "Stufe 2: TODO-APP mit Postgres-DB"
date: 2024-06-14 10:24:28 +0200
permalink: /postgres-db/
---

Deployed die TODO-APP aus Level-1 mit einer Postgres-DB zur persistenten Datenhaltung.

Hinweise:
- Es steht ein angepasstes Container-Image für Euch bereit!

- Deployed eine Postgres-DB mittels Google Cloud SQL
- Region: `europe-west3`,
- Tier: `db-f1-micro`.
- Setzt die `deletionProtection` für die Instanz auf `false`.
- Bindet die Datenbank an die TODO-App an.
- Nutzt das für GCP SQL vorkonfigurierte Image `europe-west3-docker.pkg.dev/viadee-pulumi-training/demo-app/quarkus-todo-app:1.0-CLOUDSQL`
- Setzt die Umgebungsvariablen:
- `QUARKUS_DATASOURCE_USERNAME`, `QUARKUS_DATASOURCE_PASSWORD`: (Werte aus der `gcp.sql.Users`-Ressource)
- `QUARKUS_DATASOURCE_JDBC_URL`: `jdbc:postgresql:///<Name der DB>`
- `QUARKUS_DATASOURCE_JDBC_ADDITIONAL_JDBC_PROPERTIES_CLOUDSQLINSTANCE`: (Wert von connectionName aus der `gcp.sql.DatabaseInstance`)
- Überprüft, dass TODO-Einträge in der DB persistiert werden.

Achtung: Die Instanzierung des Postgres Services braucht etwas Zeit. Eine gute Gelegenheit, um sich zum Beispiel mit etwas zu trinken zu versorgen.
23 changes: 23 additions & 0 deletions docs/_posts/2024-06-14-stufe-3-webhook.markdown
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
layout: post
title: "Stufe 3: Function als Endpunkt für den TODO-App Webhook"
date: 2024-06-14 10:24:28 +0200
permalink: /webhook/
---

Die TODO-APP aus dem letzten level bietet einen HTTP-Webhook an.
Hierfür gilt es mit einer GCP Cloud Function einen Endpunkt bereitszustellen.

Hinweise:
- Denkt immernoch daran Eure Ressourcen mit Eurem Team Namen vorne weg zubenennen.
- Deployt eine Google Cloud Function, die den HTTP-Request-Body des Aufrufs mit `console.log` ins Log schreibt und mit dem HTTP-Status-Code 200 antwortet.
- Bei Nutzung von `gcp.cloudfunctions.HttpCallbackFunction` könnt Ihr den Quelltext der Funktion direkt in den Pulumi-Code einbetten.
- Konfiguriert die TODO-App so, dass die neue Funktion bei jeder Aktion an einem TODO-Element aufgerufen wird.
- Nutzt hierzu die Umgebungsvariable `QUARKUS_REST_CLIENT_WEBHOOK_URL`.
- Überprüft, dass die Aktionen nun ins Log der Funktion geschrieben werden:


```bash
gcloud functions list
gcloud functions logs read <function-name>
```
25 changes: 3 additions & 22 deletions docs/_posts/2024-06-14-vorbereitung.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,7 @@ title: "Vorbereitung"
date: 2024-06-14 10:24:28 +0200
permalink: /vorbereitung/
---
You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated.

Jekyll requires blog post files to be named according to the following format:

`YEAR-MONTH-DAY-title.MARKUP`

Where `YEAR` is a four-digit number, `MONTH` and `DAY` are both two-digit numbers, and `MARKUP` is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works.

Jekyll also offers powerful support for code snippets:

{% highlight ruby %}
def print_hi(name)
puts "Hi, #{name}"
end
print_hi('Tom')
#=> prints 'Hi, Tom' to STDOUT.
{% endhighlight %}

Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk].

[jekyll-docs]: https://jekyllrb.com/docs/home
[jekyll-gh]: https://github.com/jekyll/jekyll
[jekyll-talk]: https://talk.jekyllrb.com/
- Node.js installieren: [https://nodejs.org](https://nodejs.org)
- Pulumi installieren: [https://www.pulumi.com/docs/install](https://www.pulumi.com/docs/install)
- Google Cloud CLI installieren: [https://cloud.google.com/sdk/docs/install](https://cloud.google.com/sdk/docs/install)

0 comments on commit 9474988

Please sign in to comment.