Créez facilement une infrastructure réseau et EC2 avec AWS CDK Python

L'AWS CDK est un outil très utile si vous souhaitez créer l'infrastructure AWS et EC2 en tant qu'ensemble, rapidement et facilement, de manière entièrement automatique. Cette fois, je vais vous montrer comment utiliser AWS CDK Python.

supposition

Environnement de travail
Environnement AWS

--aws keypair: Créé. Nommez-le "clé de test".

Constitution

--VPC est coupé à / 21. 10.0.0.0/21 --Sous-réseau: 1 public (/ 24), 1 privé (/ 24) --SecurityGroup: Ouvrez le port 22 entrant pour utiliser SSH pour EC2

procédure

Installer CDK
# npm install -g aws-cdk
Créer un projet de test tescdk
# mkdir testcdk
# cd testcdk
# cdk init --language python
Applying project template app for python
Initializing a new git repository...
Executing Creating virtualenv...
# Welcome to your CDK Python project!
This is a blank project for Python development with CDK.
The `cdk.json` file tells the CDK Toolkit how to execute your app.
(réduction)
## Useful commands
 * `cdk ls`          list all stacks in the app
 * `cdk synth`       emits the synthesized CloudFormation template
 * `cdk deploy`      deploy this stack to your default AWS account/region
 * `cdk diff`        compare deployed stack with current state
 * `cdk docs`        open CDK documentation
Enjoy!
Vérifier la structure des répertoires et des fichiers
# tree
.
|-- .env
|-- README.md
|-- app.py
|-- cdk.json
|-- requirements.txt
|-- setup.py
|-- source.bat
`-- testcdk
    |-- __init__.py
    `-- testcdk_stack.py
Activer l'environnement virtuel Python

# source .env/bin/activate
(.env)

Ajoutez la bibliothèque requise pour créer EC2 dans setup.py

setup.py


(réduction)
install_requires=[
        "aws-cdk.core",
        "aws_cdk.aws_ec2",
],
(réduction)
pip mettre à jour et installer les bibliothèques requises

# pip install -e .
(réduction)
Successfully installed attrs-19.3.0 aws-cdk.aws-cloudwatch-1.32.1 aws-cdk.aws-ec2-1.32.1 aws-cdk.aws-events-1.32.1 aws-cdk.aws-iam-1.32.1 aws-cdk.aws-kms-1.32.1 aws-cdk.aws-logs-1.32.1 aws-cdk.aws-s3-1.32.1 aws-cdk.aws-ssm-1.32.1 aws-cdk.core-1.32.1 aws-cdk.cx-api-1.32.1 aws-cdk.region-info-1.32.1 cattrs-1.0.0 constructs-2.0.1 jsii-1.1.0 publication-0.0.3 python-dateutil-2.8.1 six-1.14.0 testcdk typing-extensions-3.7.4.2
Spécifiez la région de destination du déploiement dans app.py

app.py


#!/usr/bin/env python3

from aws_cdk import core

from testcdk.testcdk_stack import TestcdkStack


app = core.App()
TestcdkStack(app, "testcdk", env=core.Environment(region="ap-northeast-1"))

app.synth()
Modifiez le fichier testcdk / testcdk_stack.py

Écrivez une pile pour créer VPC, SecurityGroup, EC2.

testcdk_stack.py


from aws_cdk import (
        core,
        aws_ec2 <=Ajoute ça
)


class TestcdkStack(core.Stack):

    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # The code that defines your stack goes here
        #Écrivez le code ci-dessous

        cidr = '10.0.0.0/21' #Ecrire un bloc cidr

        vpc = aws_ec2.Vpc(
            self,
            id='test-vpc',
            cidr=cidr,
            nat_gateways=1,
            subnet_configuration=[
                aws_ec2.SubnetConfiguration(
                    cidr_mask=24,  #Définir le masque de réseau pour le sous-réseau public
                    name='public',
                    subnet_type=aws_ec2.SubnetType.PUBLIC,
                ),
                aws_ec2.SubnetConfiguration(
                    cidr_mask=24, #Définir le masque de réseau pour le sous-réseau privé
                    name='private',
                    subnet_type=aws_ec2.SubnetType.PRIVATE,
                ),
            ],
        )

        security_group = aws_ec2.SecurityGroup(
            self,
            id='test-security-group',
            vpc=vpc,
            security_group_name='test-security-group'
        )

        security_group.add_ingress_rule(
            peer=aws_ec2.Peer.ipv4(cidr),
            connection=aws_ec2.Port.tcp(22), #Ouvrez le port 22 avec Inbound
        )

        image_id = aws_ec2.AmazonLinuxImage(generation=aws_ec2.AmazonLinuxGeneration.AMAZON_LINUX_2).get_image(self).image_id #Spécifiez l'image EC2

        aws_ec2.CfnInstance(
            self,
            id='testec2',
            availability_zone="ap-northeast-1a", #Spécifiez AZ
            image_id=image_id,
            instance_type="t3.micro", #Spécifier le type d'instance
            key_name='testkey', #Spécifier la paire de clés
            security_group_ids=[security_group.security_group_id],
            subnet_id=vpc.private_subnets[0].subnet_id, #Spécifiez le sous-réseau privé cette fois
            tags=[{
                "key": "Name",
                "value": "testec2" #Définissez le nom à afficher dans la console Web
            }]
        )

Vérifiez la sortie de la pile Cloudformation par cdk synth

# cdk synth
Resources:
  testvpc8985080E:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/21
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
(réduction)

Vous pouvez également enregistrer la pile en yaml avec cdk synth.


cdk synth > cdk.yaml
Consultez la liste des piles déployables
# cdk ls
testcdk
Déployer en spécifiant la pile testcdk créée
# cdk deploy testcdk
testcdk: deploying...
testcdk creating CloudFormation changeset

Cloudformation s'exécutera dans la région de compte AWS spécifiée, et le VPC et le sous-réseau, le groupe de sécurité et EC2 seront créés.

référence

Getting Started With the AWS CDK

Recommended Posts

Créez facilement une infrastructure réseau et EC2 avec AWS CDK Python
Réseau neuronal avec OpenCV 3 et Python 3
[AWS] Construire ECR avec AWS CDK
Téléchargez facilement des mp3 / mp4 avec python et youtube-dl!
Touchez AWS avec Serverless Framework et Python
Créer un environnement python avec pyenv sur EC2 (ubuntu)
[AWS] Construisons un cluster ECS avec CDK
Premiers pas avec AWS IoT facilement en Python
Génération de configuration de réseau de modèles avec Python et Jinja2
Faites facilement un bip avec python
Créez facilement du HPC sur AWS avec un cluster AWS Cfn authentique
Pages HTML dynamiques créées avec AWS Lambda et Python
# 2 Créez un environnement Python avec une instance EC2 d'AWS (ubuntu18.04)
Créez Amazon Linux avec AWS EC2 et connectez-vous
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créez des tweets ordinaires comme une flotte avec AWS Lambda et Python
Programmation avec Python et Tkinter
Essayez d'utiliser l'API Twitter rapidement et facilement avec Python
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
Écrivez facilement des conversions de classes de données JSON et Python avec quicktype et dacite
Créer un environnement python3 avec ubuntu 16.04
Construire un environnement python avec direnv
Créez facilement des CNN avec Keras
python avec pyenv et venv
Construisons git-cat avec Python
Programmation réseau avec Python Scapy
Surveillance du site et notification d'alerte avec AWS Lambda + Python + Slack
Fonctionne avec Python et R
Créez un environnement Python 2.7 64 bits avec TDM-GCC et MinGW-w64 sous Windows 7
Créez un environnement Python sur votre Mac avec Anaconda et PyCharm
# 3 Créez un environnement Python (Django) avec une instance EC2 (ubuntu18.04) d'AWS part2
Créez une application de scraping avec Python + Django + AWS et modifiez les tâches
J'ai essayé de détecter facilement les points de repère du visage avec python et dlib
[python3] Implémentez facilement la fonction de sortie du journal de débogage avec journalisation et cliquez sur
Comment créer un environnement d'exécution Python et Jupyter avec VSCode
Communiquez avec FX-5204PS avec Python et PyUSB
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Modulation et démodulation AM avec python
Scraping avec Node, Ruby et Python
Construction de l'environnement Ruby avec AWS EC2
Grattage avec Python, Selenium et Chromedriver
Implémentez facilement des sous-commandes avec python click
Extraction de texte avec AWS Textract (Python3.6)
Gérez facilement les listes avec python + sqlite3
Construire un environnement Mysql + Python avec docker
Pour moi: notes sur l'infrastructure et le réseau
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Construire mlpy avec python3.3 (64 bits) (Windows 64 bits)
Lire et écrire NetCDF avec Python