[JAVA] J'ai créé des fonctions d'étape avec AWS CDK.

Cet article est l'article du 7ème jour du Calendrier de l'Avent Hands Lab 2019.

Bon travail. @naokiur. Je serai également responsable de cette année.

Récemment, lors de la création de ressources AWS en entreprise Avec CloudFormation et Serverless J'essaye de le coder. (Gardez le dosage et rappelez-vous le but ...)

Grâce à cela, je m'habitue à écrire des fichiers au format YAML.

Pendant ce temps, Connaître l'existence de AWS CDK De plus, AWS CDK le rend généralement disponible pour Java et .NET! !!

J'aime personnellement Java, J'ai essayé AWS CDK en Java.

Overview On m'a également recommandé, Atelier CDK publié par AWS CDK C'était vraiment bien pour moi qui n'ai rien fait!

environnement

Ce que j'ai fait

J'ai récemment créé des fonctions d'étape dans mon travail, donc Nous avons créé StepFunctions avec AWS CDK.

Contenu

installation de la commande cdk

npm install -g aws-cdk

Créer un modèle de projet

Vous pouvez générer un modèle de projet pour Java avec la commande suivante.

cdk init --a {nom du projet} --language java

スクリーンショット 2019-12-07 16.35.36.png

Projet Maven. Cela me manque personnellement. Ici, nous définissons project name = sample.

App et pile

Lorsque vous générez un modèle de projet, «SampleApp» et «SampleStack» ont été générés.

La pile est comme son nom l'indique Ce sera 1 pile de CloudFormation, Je suis conscient que.

Par défaut Il semble que ce soit une pile qui crée SQS et SNS.

スクリーンショット 2019-12-07 16.52.06.png

pom.xml En dehors de core Les dépendances sont répertoriées pour chaque service AWS. Si vous utilisez plus de services AWS, il semble que vous deviez ajouter des dépendances.

スクリーンショット 2019-12-07 16.52.54.png

Création de fonctions d'étape

Supprimez les SQS et SNS par défaut, Ajoutez des fonctions Lambda et Step à la pile.

Ajouter une dépendance

Ajoutez les bibliothèques Lambda et StepFunctions à pom.xml.

pom.xml


<dependency>
    <groupId>software.amazon.awscdk</groupId>
    <artifactId>lambda</artifactId>
    <version>1.18.0</version>
</dependency>
<dependency>
    <groupId>software.amazon.awscdk</groupId>
    <artifactId>stepfunctions</artifactId>
    <version>1.18.0</version>
</dependency>
<dependency>
    <groupId>software.amazon.awscdk</groupId>
    <artifactId>stepfunctions-tasks</artifactId>
    <version>1.18.0</version>
</dependency>

Concernant StepFunctions Pas seulement des stepfunctions Vous devez ajouter stepfunctions-tasks.

Ajouter des ressources à la pile

Ajoutez des ressources pour Lambda et Step Functions. Sous la forme de {Resource} .Builder.hoge (). Fuga () .build () Il semble qu'il soit souvent possible de générer des ressources.

C'est ma préférence personnelle, mais je pense que la description est complète et facile à lire.

SampleStack.java


public class SampleStack extends Stack {
    public SampleStack(final Construct parent, final String id) {
        this(parent, id, null);
    }

    public SampleStack(final Construct parent, final String id, final StackProps props) {
        super(parent, id, props);

        final Function hello = Function.Builder.create(this, "HelloHandler")
                .runtime(Runtime.PYTHON_3_6)
                .code(Code.fromAsset("lambda"))
                .handler("hello.lambda_handler")
                .build();

        final Function world = Function.Builder.create(this, "WorldHandler")
                .runtime(Runtime.PYTHON_3_6)
                .code(Code.fromAsset("lambda"))
                .handler("world.lambda_handler")
                .build();

        final Task helloTask = Task.Builder.create(this, "HelloTask")
                .task(InvokeFunction.Builder.create(hello).build())
                .build();

        final Task worldTask = Task.Builder.create(this, "WorldTask")
                .task(InvokeFunction.Builder.create(world).build())
                .build();

        final StateMachine machine = StateMachine.Builder.create(this, "SampleStateMachine")
                .definition(helloTask.next(worldTask))
                .build();
    }
}

Stockage de fichiers Lambda

La méthode qui fonctionne réellement sur Lambda est Il semble qu'il doive être stocké sous le répertoire dans la même ligne que le répertoire src.

La méthode qui s'exécute réellement sur Lambda ne doit pas nécessairement être Java, donc J'ai préparé un fichier Python ici.

スクリーンショット 2019-12-07 17.42.58.png

Déployer

Puisqu'il n'a pas été exécuté, exécutez d'abord la commande suivante.

cdk bootstrap

Il créera une pile pour créer un compartiment S3 pour le déploiement.

Pour le déploiement Exécutez la commande suivante.

mvn package cdk deploy

Par ce qui précède, Vous avez créé une pile sur CloudFormation.

スクリーンショット 2019-12-07 17.53.17.png

Ressource

Step Functions a été créé avec succès J'ai pu le faire!

スクリーンショット 2019-12-07 17.53.17.png スクリーンショット 2019-12-07 17.53.36.png

Impressions

Calendrier de l'Avent Hands Lab 2019, Le 8ème jour est @watarukura!

Je l'ai utilisé comme référence

Recommended Posts

J'ai créé des fonctions d'étape avec AWS CDK.
J'ai créé Code Pipeline avec AWS CDK.
Résolution du problème lorsque Azure Functions a cessé de fonctionner en Java
J'ai essayé le déploiement automatique avec CircleCI + Capistrano + AWS (EC2) + Rails
Je veux implémenter diverses fonctions avec kotlin et java!