クラウドインフラストラクチャの管理に関して、AWSはリソースの作成と管理を自動化するのに役立つ強力なツールをいくつか提供しています。
デプロイメントを処理する最も効果的な方法の1つは、AWS CloudFormationを介して行うことです。これにより、インフラストラクチャを宣言的な方法で定義し、Elastic Beanstalk、サーバーレスアプリケーション、EC2インスタンス、セキュリティグループ、ロードバランサーなど、AWSサービスのプロビジョニングを自動化することが簡単になります。
このガイドでは、AWS CloudFormationを使用してインフラストラクチャをプログラム的に展開する方法について探求します。また、AWS Management Consoleを介してリソースを手動で展開する方法や、Elastic Beanstalk、サーバーレス関数、EC2、IAMなどのサービスを自動化ワークフローに統合する方法についても説明します。
インフラストラクチャのコードとしてのAWS CloudFormationの使用
AWS CloudFormationを使用すると、コードを使ってインフラストラクチャを定義することができます。CloudFormationは、Elastic Beanstalk、EC2インスタンス、VPC、IAMロール、Lambda関数、またはサーバーレスアプリケーションをセットアップすることで、インフラストラクチャを自動化しバージョン管理する統合フレームワークを提供します。
CloudFormationテンプレートはYAMLまたはJSON形式で記述され、プロビジョニングする必要のあるリソースを定義します。CloudFormationを使用すると、シンプルなアプリケーションから複雑なマルチサービス環境まで、すべてを自動化できます。
CloudFormationの主な機能
- 宣言的設定。 インフラストラクチャの望ましい状態を記述すると、CloudFormationは現在の状態がそれに一致するようにします。
- リソース管理。自動的にEC2インスタンス、RDSデータベース、VPC、Lambda関数、IAMロールなどのAWSリソースをプロビジョニングおよび管理します。
- 宣言的スタック更新。インフラストラクチャを変更する必要がある場合は、CloudFormationテンプレートを更新するだけで、リソースが新しい望ましい状態に調整されます。
AWSデプロイメントにCloudFormationを使用する手順
CloudFormationによるElastic Beanstalkデプロイメント
1. CloudFormationテンプレートを書く
Elastic Beanstalkアプリケーションと環境を定義するために、YAMLまたはJSONのCloudFormationテンプレートを作成します。このテンプレートには、EC2インスタンス、セキュリティグループ、スケーリングポリシー、さらにはElastic Beanstalkアプリケーション自体などのリソースを含めることができます。
CloudFormationテンプレートの例(Elastic Beanstalk):
yaml
Resources
MyElasticBeanstalkApplication
Type'AWS::ElasticBeanstalk::Application'
Properties
ApplicationName"my-application"
Description"Elastic Beanstalk Application for my React and Spring Boot app"
MyElasticBeanstalkEnvironment
Type'AWS::ElasticBeanstalk::Environment'
Properties
EnvironmentName"my-app-env"
ApplicationName !Ref MyElasticBeanstalkApplication
SolutionStackName"64bit Amazon Linux 2 v3.4.9 running Docker"
OptionSettings
Namespace"aws:autoscaling:asg"
OptionName"MaxSize"
Value"3"
Namespace"aws:autoscaling:asg"
OptionName"MinSize"
Value"2"
Namespace"aws:ec2:vpc"
OptionName"VPCId"
Value"vpc-xxxxxxx"
Namespace"aws:ec2:vpc"
OptionName"Subnets"
Value"subnet-xxxxxxx,subnet-yyyyyyy"
2. CloudFormationスタックをデプロイする
AWS CLIまたはAWS Management Consoleを使用して、CloudFormationスタックをデプロイします。デプロイが完了すると、CloudFormationはテンプレートで定義されたすべてのリソースを自動的に作成します。
AWS CLIを使用してデプロイ:
bash
aws cloudformation create-stack --stack-name MyElasticBeanstalkStack --template-body file://my-template.yml
AWS Lambda、API Gateway、およびDynamoDBを使用したサーバーレスデプロイメント
CloudFormationはサーバーレスアプリケーションのデプロイにも優れています。AWS Lambda、API Gateway、DynamoDB、およびS3などのサービスを使用することで、サーバーレスワークロードを簡単に管理できます。
1. サーバーレスCloudFormationテンプレートの作成
このテンプレートには、Lambda関数、関数へのアクセスのためのAPI Gateway、およびDynamoDBテーブルが含まれます。
CloudFormationテンプレートの例(サーバーレス):
yaml
Resources
MyLambdaFunction
Type'AWS::Lambda::Function'
Properties
FunctionName"MyServerlessFunction"
Handler"index.handler"
Role arn aws iam 123456789012 role/lambda-execution-role
Code
S3Bucket"my-serverless-code-bucket"
S3Key"function-code.zip"
Runtime nodejs14.x
MyAPIGateway
Type'AWS::ApiGateway::RestApi'
Properties
Name"MyAPI"
Description"API Gateway for My Serverless Application"
MyDynamoDBTable
Type'AWS::DynamoDB::Table'
Properties
TableName"MyTable"
AttributeDefinitions
AttributeName"id"
AttributeType"S"
KeySchema
AttributeName"id"
KeyType"HASH"
ProvisionedThroughput
ReadCapacityUnits5
WriteCapacityUnits5
2. サーバーレススタックのデプロイ
AWS CLIまたはAWS Management Consoleを使用して、サーバーレスアプリケーションをデプロイします。
bash
aws cloudformation create-stack --stack-name MyServerlessStack --template-body file://serverless-template.yml
VPCとEC2のデプロイ
CloudFormationを使用すると、より伝統的なワークロード向けに仮想プライベートクラウド(VPC)、サブネット、セキュリティグループ、およびEC2インスタンスの作成を自動化することができます。
1. VPCおよびEC2のためのCloudFormationテンプレート
このテンプレートでは、VPC内のシンプルなEC2インスタンスと、HTTPトラフィックを許可するセキュリティグループが定義されています。
CloudFormationテンプレートの例(VPCおよびEC2):
Resources
MyVPC
Type'AWS::EC2::VPC'
Properties
CidrBlock"10.0.0.0/16"
EnableDnsSupport"true"
EnableDnsHostnames"true"
MySecurityGroup
Type'AWS::EC2::SecurityGroup'
Properties
GroupDescription"Allow HTTP and SSH traffic"
SecurityGroupIngress
IpProtocol"tcp"
FromPort"80"
ToPort"80"
CidrIp"0.0.0.0/0"
IpProtocol"tcp"
FromPort"22"
ToPort"22"
CidrIp"0.0.0.0/0"
MyEC2Instance
Type'AWS::EC2::Instance'
Properties
InstanceType"t2.micro"
ImageId"ami-xxxxxxxx"
SecurityGroupIds
!Ref MySecurityGroup
SubnetId !Ref MyVPC
2. スタックのデプロイ
aws cloudformation create-stack --stack-name MyEC2Stack --template-body file://vpc-ec2-template.yml
CloudFormationの高度な機能
AWS CloudFormationには、単純なリソースのプロビジョニングだけでなく、さまざまな高度な機能も提供されています。以下は、CloudFormationをインフラストラクチャの自動化に強力なツールにするいくつかの高度な機能です:
- スタックセット。複数のAWSアカウントとリージョンでスタックを作成および管理し、組織全体でインフラストラクチャを一貫してデプロイすることができます。
- 変更セット。CloudFormationスタックに変更を適用する前に、望ましい結果を確認するために変更セットで変更をプレビューします。
- 出力。CloudFormationからの出力値を他のスタックやアプリケーションで使用できます。たとえば、API GatewayのURLやEC2インスタンスのIPアドレスを出力できます。
- パラメータ。テンプレート自体を変更せずにスタックをカスタマイズするためのパラメータを渡し、異なる環境で再利用できるようにします。
- マッピング。AWSリージョン固有の値、インスタンスタイプ、その他の環境固有のパラメータなど、構成値のマッピング用のキーと値のペアを作成します。
Elastic Beanstalk以外のAWSサービスとCloudFormationの使用
CloudFormationは、Elastic Beanstalkデプロイメントに限定されるわけではありません。API Gateway、S3、またはDynamoDBイベントなどのトリガーと一緒にサーバーレス関数の展開を自動化できます。
- AWS Lambda。CloudFormationを使用してS3バケットを作成し、構成を管理します。
- Amazon S3。リソースへのアクセスを制御するためにIAMロールとポリシーの作成を自動化します。
- AWS IAM。 RDSデータベース(MySQL、PostgreSQLなど)をVPC設定、サブネット、セキュリティグループなどの関連構成と共に定義します。
- Amazon RDS。
- Amazon SQS、SNS。CloudFormationを使用して、アプリケーションアーキテクチャのキューとトピックを管理します。
- Amazon ECSおよびEKS。ECSやEKSなどのサービスを使用して、コンテナ化されたアプリケーションの作成とデプロイを自動化します。
AWS Management Consoleからの手動インフラストラクチャデプロイ
CloudFormationがプロセスを自動化する一方で、時には手動の介入が必要です。AWS Management Consoleを使用すると、リソースを手動でデプロイできます。
1. Elastic Beanstalkアプリケーション
- Elastic Beanstalk Consoleに移動します。
- 「アプリケーションの作成」をクリックし、アプリケーション名とプラットフォーム(例:Docker、Node.js)を定義する手順に従い、その後、環境、スケーリング、およびセキュリティオプションを手動で構成します。
2. サーバーレスアプリケーション(Lambda + API Gateway)
- Lambda Consoleに移動して、関数を作成およびデプロイします。
- API Gateway Consoleを使用して、Lambda関数用のAPIを作成します。
3. EC2インスタンス
- EC2 ConsoleからEC2インスタンスを手動で起動し、選択したインスタンスタイプ、セキュリティグループ、およびキーペアで構成します。
結論
AWS CloudFormationは、Elastic Beanstalkアプリケーション、サーバーレスアーキテクチャ、およびEC2ベースのアプリケーションのインフラストラクチャを管理するための一貫した再現可能な方法を提供します。Stack Sets、Change Sets、Parametersなどの高度な機能を備えたCloudFormationは、複雑な環境のニーズに応じてスケールできます。
大規模または動的なAWS環境を管理している場合、CloudFormationはすべてのAWSデプロイメントにわたる一貫性、セキュリティ、自動化を確保するための重要なツールです。
Source:
https://dzone.com/articles/automate-aws-infrastructure-deployment