Kategorien
Amazon AWS

AWS API Gateway für DynamoDB erstellen

Die Aufgabe ist es eine REST API zu erstellen mit AWS API Gateway, welche Daten lesen und später auch schreiben kann von einer Dynamo DB ohne eine Lambda Funktion zu verwenden.

Wir werden das API Gateway so konfigurieren, dass es die Request Daten validiert und so verändert, dass der DynamoDB Service die Daten verarbeitet.

Dazu erstellen wir in AWS ein nicht private REST API:

REST API Gateway erstellen
DynamoDB NoSql Datenbank erstellen

Berechtigungen vergeben, dass das API Gateway auf die DynamoDB Tabelle zugreifen kann in AWS IAM. Dafür erstellen wir eine Richtlinie in IAM. Die Berechtigung sieht wie folgt aus:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "dynamodb:Scan"
      ],
      "Effect": "Allow",
      "Resource": "ENTER_ARN_OF_YOUR_DYNAMO_DB_HERE"
    }
  ]
}

Die Richtlinie kann mit dem Tool genriert werden: https://awspolicygen.s3.amazonaws.com/policygen.html

Dann muss eine Rolle mit der Richtlinie für den Service API Gateway erstellt werden in IAM. Hinweis: Die Richtlinie kann erst nach dem erstellen der Rolle hinzugefügt werden.

IAM Rolle für das API Gateway mit der erstellten Richtlinie

Dann Erstellen wir in AWS API Gateway eine Resource mit der Richtlinie:

Jetzt wandeln wir den einfacher GET Request /data/all mit leerem Payload um zu einem DynamoDB POST Request, der alle Daten zurückliefert, beschrieben in: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html

Die Integrationsanforderung der Resource muss folger Maßen konfiguriert sein:

Weiterleiten des Requests an Dynamo DB als POST Scan Request

Der Request kann über den Testen Button in AWS ausprobiert werden:

Erfolgreicher Test des Endpunktes
Kategorien
Amazon AWS

AWS Policy Generator

Zum generieren von Berechtigungen gibt eine einfaches Web-Tool von AWS, welches einem die Berechtigungen im JSON Format generiert.

Type of policy ist meist IAM policy.

https://awspolicygen.s3.amazonaws.com/policygen.html

Kategorien
Amazon AWS

APIs erstellen mit AWS API Gateway

Amazon API Gateway ist eine Service mit dem man professionelle APIs erstellen kann, welche

  • skalieren
  • sich um die Authentifizierung kümmern
  • serverless sein können zu AWS Labmda oder einem AWS Datern Speicher
  • aber auch über HTTP(S) zu einer EC2 Instanz weiterleiten können
mögliche verbindbare serverless Services
serverless Datenbank Funktionalität
serverless Website Hosting

Das AWS API Gateway kann den Request validieren, verändern und auch beantworten/abbrechen um Traffic zu sparen.

Zur Authentifizierung können verschiedene Methoden verwendet werden über JWT Token, Basic Auth, Custom HTTP URLs und eigene Lambda Funktion.

https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html

AWS Cognito zur Authentifizierung und User Management

Man kann aus der Schnittstelle ein SDK generieren, welches die Client zur Integration verwenden können und die Authentifizierung erleichtern. Derzeit werden unterstützt:

  • Java
  • Android
  • iOS
  • JavaScript
  • Ruby

https://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/how-to-generate-sdk-console.html

Erstellen eines SDK für Clients zum einbinden der Schnittstelle

Alles Requests/Responses können gelogt werden und analysiert werden in AWS CloudWatch.

Die CORS Regeln können damit verwaltet werden.

Die API lässt sich mit Hilfe von Open API/Swagger 3.0 definieren.

Es können neben REST/HTTP auch Websocket APIs erstellt werden.

Canary Release Möglichkeit: Es werden nur 10% der Requests auf den neu releasten Endpunkt, um zu schauen, ob soweit alles funktioniert:

https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html

Preis-Übersicht:

https://aws.amazon.com/de/api-gateway/pricing/

Empfohlene Videos:

Kategorien
Amazon AWS

FFmpeg installieren auf Amazon Linux 2

Mit folgenden Befehlen kann man ffmpeg unter Amazon Linux 2 installieren:

sudo su
curl -o /tmp/ffmpeg.tar.xz https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.2.2-amd64-static.tar.xz
tar -xvf /tmp/ffmpeg.tar.xz -C /usr/local/bin
ln -s /usr/local/bin/ffmpeg-4.2.2-amd64-static/ffmpeg /usr/bin/ffmpeg
ln -s /usr/local/bin/ffmpeg-4.2.2-amd64-static/ffprobe /usr/bin/ffprobe
Kategorien
Amazon AWS WordPress

WordPress Bitnami Banner entfernen auf AWS AMI

Um den Bitnami Banner entfernen zu können, soll man per SSH einen Konsolenbefehl ausführen:

sudo /opt/bitnami/apps/wordpress/bnconfig --disable_banner 1

dies führte bei mir zu einer Fehlermeldung, dass die Datei bnconfig nicht vorhanden ist:

sudo: /opt/bitnami/apps/wordpress/bnconfig: command not found

Die Ursache ist, dass die Datei standradmäßig erst deaktiviert ist, es gibt eine /opt/bitnami/apps/wordpress/bnconfig.disabled

Diese muss aktiviert werden, indem sie umbenannt wird nach bnconfig:

sudo mv /opt/bitnami/apps/wordpress/bnconfig.disabled /opt/bitnami/apps/wordpress/bnconfig

Danach kann der Banner erfolgreich entfernt werden:

sudo /opt/bitnami/apps/wordpress/bnconfig --disable_banner 1
Kategorien
Amazon AWS PHP

PHP eigene Metriken in AWS Cloudwatch erstellen

Um in CloudWatch eigene Metriken anzulegen, um z.B. Alarm auszulösen und Monitoring zu betreiben mit den Daten der Applikation, kann man mit dem aws-php-sdk den folgenden Code verwenden:

 $client = new CloudWatchClient([
        'region' => 'eu-central-1',
        'version' => '2010-08-01',
        'credentials' => [
            'key'    => 'xxx',
            'secret' => 'xxx
        ],
    ]);
}
$result = $this->client->putMetricData(array(

    'Namespace' => 'MyProject',
    'MetricData' => array(
        array(
            'MetricName' => 'MyMetric,
            'Timestamp' => time(),
            'Value' => 1,
            'Unit' => 'Count',
            'Dimensions' => array(
                array(
                    'Name' => 'Environment',
                    'Value' => 'test',
                ),
            ),
        )
    )
));
Kategorien
Amazon AWS Docker PHP 7

DockerFile PHP mit XDebug und Amazon Linux 2

Ein DockerFile für eine PHP 7.2. Umgebung mit XDebug für eine Symfony 4 Umgebung unter Amazon Linux 2:

FROM amazonlinux:2.0.20190823.1

RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

# install php
RUN amazon-linux-extras install -y php7.2
RUN yum install -y php-devel.x86_64 php-xml.x86_64 php-pecl-zip.x86_64  php-intl.x86_64

#install xdebug
RUN yum install -y gcc make
RUN yum install -y php-pear.noarch
RUN pecl install xdebug
RUN echo 'zend_extension=/usr/lib64/php/modules/xdebug.so' >> /etc/php.ini
Kategorien
Amazon AWS Symfony Framework

Monolog Logging für AWS Cloudwatch Logs konfigurieren

Damit die Logs schön formatiert aus einer Symfony 4 Anwendung in AWS Cloudwatch ankommen, muss man Monolog folgendermaßen konfigurieren:

# config/services.yaml
Monolog\Formatter\JsonFormatter:
    calls:
        - [includeStacktraces]

und

# config/packages/prod/monolog.yaml
monolog:
  handlers:
    main:
      type:  stream
      level: error
      path:  '%kernel.logs_dir%/error.log'
      formatter: Monolog\Formatter\JsonFormatter

Danach muss man der Cloudwatch Daemon konfigurieren:

# /etc/awslogs/awslogs.conf
[general]
# Path to the CloudWatch Logs agent's state file. The agent uses this file to maintain
# client side state across its executions.
state_file = /var/lib/awslogs/agent-state

[/var/www/html/var/log/error.prod.log]
datetime_format = [%Y-%m-%d H:%M:%S]
file = /var/www/html/var/log/error.log
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = test_group_name/error_log

und man erhält wunderbare (aggregierte) ErrorLog Informationen in Cloudwatch Logs Insight:

 

 

Kategorien
Amazon AWS

11 AWS Cloudformation Experten Tricks

Bei meiner Arbeit mit Cloudfromation habe ich viel nützliche Tipps gesammelt, die ich gern teilen will.

1. Eine IDE mit Autocomplete verwenden

Für die Jetbrains IDEs wie PHPStorm, Webstorm oder IntelliJ gibt es ein sehr gutes AWS Cloudfromation Plugin namens AWS Cloudfromation von Leonid Shalupov:

AWS Cloudfromation Plugin von Leonid Shalupov

Dieses biete Autocomplete für die IDE an und eine automatische Formatüberprüfung, ob Attribute gesetzt werden, die dort nicht erlaubt sind. Auf diesem weg kann man viele Fehler schon vor dem validieren finden und spart viel Zeit.

AWS Cloudfromation Autocomple

2. AWS-CLI Befehle verwenden

Kategorien
Amazon AWS

Cloudformation reboot einer EC2 Instanz

Damit eine Instanz neu neugestartet wird, nachdem die Einrichtung erfolgt ist, muss man folgende Befehl in die UserData Sektion eintragen im Cloudformation Template:

UserData:
  # is executed as root user
  Fn::Base64:
    !Sub |
      #!/bin/bash -xe
      yum update -y aws-cfn-bootstrap
      /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource WebServerInstance --configsets InstallAndRun --region ${AWS::Region}
      /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerInstance --region ${AWS::Region}
      reboot