AWS IaC(Infrastructure as Code)を理解しよう!CLI・CloudFormation入門

こんにちは!

AWSを使い始めて、マネジメントコンソールでポチポチとリソースを作成していませんか?

最初はそれでも良いのですが、本格的にAWSを活用するなら「Infrastructure as Code(IaC)」という考え方を知っておくと、作業効率が大幅にアップします!

今回は、AWSでのIaCの基本となるAWS CLIとAWS CloudFormationについて、初心者の方にも分かりやすく解説していきます。

図解即戦力 Amazon Web Servicesのしくみと技術が これ1冊でしっかりわかる教科書 [改訂2版] [ 小笠原 種高 ]
created by Rinker
¥2,200 (2025/09/11 16:09:31時点 楽天市場調べ-詳細)
目次

IaCって何?なぜAWSで重要なの?

Infrastructure as Codeの基本概念

Infrastructure as Code(IaC)とは、インフラストラクチャの構成をコードで管理する手法のことです。

従来のように手動でサーバーやネットワークを設定するのではなく、設定内容をテキストファイル(コード)として記述し、それを実行することでインフラを構築します。

簡単に言えば、「インフラの設計図をプログラムコードで書く」ということですね!

従来の手動構築との違い

従来の手動構築では、以下のような課題がありました:

  • 再現性の問題:同じ環境を作ろうとしても、微妙に設定が違ってしまう
  • 作業時間:毎回同じ作業を繰り返すため時間がかかる
  • ミスの発生:手動作業によるヒューマンエラーが起きやすい
  • 履歴管理:どのような変更を加えたかが分からなくなる

IaCを使うことで、これらの課題を解決できます。

AWSでIaCを使うメリット

AWSでIaCを導入すると、以下のようなメリットがあります:

効率性の向上

  • 一度コードを書けば、何度でも同じ環境を作成可能
  • 複雑な構成も短時間で構築できる

品質の向上

  • コードレビューによりミスを事前に防止
  • テストを自動化して品質を保証

管理の簡素化

  • Gitなどでバージョン管理が可能
  • 変更履歴を追跡できる

特に、複数の環境(開発・検証・本番)を管理する場合や、チームで作業する際には欠かせない手法です。

AWS CLIでインフラ操作を自動化しよう

AWS CLIとは?基本的な使い方

AWS CLI(Command Line Interface)は、AWSサービスをコマンドラインから操作できるツールです。

マネジメントコンソールで行える操作のほとんどを、コマンドで実行できます。

AWS CLIの特徴:

  • 豊富なコマンド:EC2、S3、RDSなど、ほぼ全てのAWSサービスに対応
  • スクリプト化対応:bashやPowerShellなどでスクリプトを作成可能
  • JSON出力:結果をJSON形式で取得して、他のツールと連携

基本的な使い方例:

# EC2インスタンス一覧を表示
aws ec2 describe-instances

# S3バケットを作成
aws s3 mb s3://my-bucket-name

# RDSインスタンス情報を取得
aws rds describe-db-instances

よく使うAWS CLIコマンド例

実際の業務でよく使われるコマンドをご紹介します:

EC2関連

# インスタンスを起動
aws ec2 run-instances --image-id ami-12345678 --instance-type t2.micro

# インスタンスを停止
aws ec2 stop-instances --instance-ids i-1234567890abcdef0

# セキュリティグループを作成
aws ec2 create-security-group --group-name MySecurityGroup --description "My security group"

S3関連

# ファイルをアップロード
aws s3 cp myfile.txt s3://my-bucket/

# フォルダを同期
aws s3 sync ./local-folder s3://my-bucket/remote-folder/

# バケットの内容を一覧表示
aws s3 ls s3://my-bucket/

IAM関連

# ユーザーを作成
aws iam create-user --user-name NewUser

# ポリシーをアタッチ
aws iam attach-user-policy --user-name NewUser --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess

スクリプト化による作業効率化

AWS CLIの真価は、スクリプト化にあります。

例えば、開発環境を構築するスクリプトを作成すれば:

#!/bin/bash
# 開発環境構築スクリプト

# VPCを作成
VPC_ID=$(aws ec2 create-vpc --cidr-block 10.0.0.0/16 --query 'Vpc.VpcId' --output text)

# サブネットを作成
SUBNET_ID=$(aws ec2 create-subnet --vpc-id $VPC_ID --cidr-block 10.0.1.0/24 --query 'Subnet.SubnetId' --output text)

# インターネットゲートウェイを作成・アタッチ
IGW_ID=$(aws ec2 create-internet-gateway --query 'InternetGateway.InternetGatewayId' --output text)
aws ec2 attach-internet-gateway --vpc-id $VPC_ID --internet-gateway-id $IGW_ID

echo "開発環境の構築が完了しました!"

このように、複雑な作業も一度スクリプト化すれば、何度でも簡単に実行できます。

図解即戦力 Amazon Web Servicesのしくみと技術が これ1冊でしっかりわかる教科書 [改訂2版] [ 小笠原 種高 ]
created by Rinker
¥2,200 (2025/09/11 16:09:31時点 楽天市場調べ-詳細)

AWS CloudFormationでインフラをコード化

CloudFormationの仕組みと特徴

AWS CloudFormationは、AWSが提供するIaCサービスです。

JSON・YAML形式のテンプレートファイルでインフラ構成を定義し、そのテンプレートを元にAWSリソースを自動作成・管理します。

CloudFormationの主な特徴:

宣言的な記述

  • 「何を作りたいか」を記述するだけで、「どうやって作るか」はCloudFormationが自動で判断

依存関係の自動解決

  • リソース間の依存関係を自動で判断し、適切な順序で作成

ロールバック機能

  • 作成に失敗した場合、自動的に元の状態に戻す

変更セット機能

  • 変更内容を事前に確認してから適用可能

テンプレートの基本構造

CloudFormationテンプレートは以下の構造を持ちます:

AWSTemplateFormatVersion: '2010-09-09'
Description: 'サンプルテンプレート'

Parameters:
  # 入力パラメータ

Resources:
  # 作成するAWSリソース

Outputs:
  # 出力値

実際のテンプレート例:

AWSTemplateFormatVersion: '2010-09-09'
Description: 'Simple Web Server'

Parameters:
  InstanceType:
    Type: String
    Default: t2.micro
    Description: EC2 instance type

Resources:
  WebServer:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0abcdef1234567890
      InstanceType: !Ref InstanceType
      SecurityGroups:
        - !Ref WebServerSecurityGroup

  WebServerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Security group for web server
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0

Outputs:
  WebServerPublicIP:
    Description: Public IP of the web server
    Value: !GetAtt WebServer.PublicIp

スタック管理とバージョン管理

CloudFormationでは、関連するリソースを「スタック」として管理します。

スタックのライフサイクル

  1. 作成:テンプレートを元にリソースを作成
  2. 更新:テンプレートを変更してリソースを更新
  3. 削除:スタック内の全リソースを一括削除

バージョン管理のベストプラクティス

  • テンプレートファイルをGitで管理
  • 環境ごとにパラメータファイルを分離
  • タグを使ってスタックを分類・管理

これにより、インフラの変更履歴を追跡し、必要に応じて以前のバージョンに戻すことが可能になります。

実際の構築例で理解を深めよう

簡単なWebサーバー構成をCloudFormationで

実際にCloudFormationを使って、シンプルなWebサーバー環境を構築してみましょう。

以下のような構成を作成します:

  • VPC
  • パブリックサブネット
  • インターネットゲートウェイ
  • セキュリティグループ
  • EC2インスタンス
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Complete Web Server Environment'

Parameters:
  KeyPairName:
    Type: AWS::EC2::KeyPair::KeyName
    Description: Name of an existing EC2 KeyPair

Resources:
  # VPC
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsHostnames: true
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: WebServer-VPC

  # インターネットゲートウェイ
  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: WebServer-IGW

  # VPCにIGWをアタッチ
  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId: !Ref InternetGateway

  # パブリックサブネット
  PublicSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: !Select [0, !GetAZs '']
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: WebServer-PublicSubnet

  # ルートテーブル
  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC

  # パブリックルート
  PublicRoute:
    Type: AWS::EC2::Route
    DependsOn: AttachGateway
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway

  # サブネットとルートテーブルの関連付け
  PublicSubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicSubnet
      RouteTableId: !Ref PublicRouteTable

  # セキュリティグループ
  WebServerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Security group for web server
      VpcId: !Ref VPC
      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

  # EC2インスタンス
  WebServerInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0abcdef1234567890
      InstanceType: t2.micro
      KeyName: !Ref KeyPairName
      SubnetId: !Ref PublicSubnet
      SecurityGroupIds:
        - !Ref WebServerSecurityGroup
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          yum update -y
          yum install -y httpd
          systemctl start httpd
          systemctl enable httpd
          echo "<h1>Hello from CloudFormation!</h1>" > /var/www/html/index.html

Outputs:
  WebServerURL:
    Description: URL of the web server
    Value: !Sub 'http://${WebServerInstance.PublicIp}'

このテンプレートを使えば、一度の実行で完全なWebサーバー環境が構築されます。

IaCのベストプラクティス

IaCを効果的に活用するためのベストプラクティスをご紹介します:

1. 小さく始める

  • 最初は単純な構成から始めて、徐々に複雑化
  • 一度に全てを自動化しようとしない

2. テンプレートの再利用性を考慮

  • パラメータを活用して汎用的なテンプレートを作成
  • ネストしたスタックで複雑な構成を管理

3. 命名規則を統一

  • リソース名、タグ名に一貫した命名規則を適用
  • 環境(dev、staging、prod)を明確に区別

4. セキュリティを考慮

  • 最小権限の原則を適用
  • 機密情報はParameter StoreやSecrets Managerを使用

5. テストとバリデーション

  • テンプレートの構文チェックを自動化
  • 小さな環境で動作確認してから本番適用

よくあるトラブルと対処法

IaCを導入する際によくあるトラブルと対処法をまとめました:

リソース作成の順序エラー

  • 症状:依存関係のあるリソースが正しい順序で作成されない
  • 対処法:DependsOn属性を明示的に指定

パラメータの型エラー

  • 症状:テンプレート実行時にパラメータエラーが発生
  • 対処法:AllowedValuesやConstraintDescriptionを活用

権限不足エラー

  • 症状:CloudFormationがリソースを作成できない
  • 対処法:適切なIAMロールとポリシーを設定

スタック削除の失敗

  • 症状:依存関係によりスタックが削除できない
  • 対処法:手動でリソースを削除してからスタック削除を実行

これらのトラブルは、経験を積むことで回避できるようになります。

図解即戦力 Amazon Web Servicesのしくみと技術が これ1冊でしっかりわかる教科書 [改訂2版] [ 小笠原 種高 ]
created by Rinker
¥2,200 (2025/09/11 16:09:31時点 楽天市場調べ-詳細)

IaC学習を進めるために

次に学ぶべきこと

IaCの基本を理解したら、以下のトピックに挑戦してみましょう:

AWS CDK(Cloud Development Kit)

  • TypeScript、Python、Javaなどの高級言語でインフラを定義
  • より複雑なロジックを組み込める

Terraform

  • AWSだけでなく、マルチクラウド対応のIaCツール
  • より豊富なプロバイダーとモジュール

CI/CDとの連携

  • GitHub ActionsやAWS CodePipelineとの組み合わせ
  • インフラのデプロイメント自動化

監視・ログ

  • CloudWatchやX-Rayとの連携
  • インフラの状態監視

おすすめの学習リソース

IaCをより深く学ぶためのリソースをご紹介します:

公式ドキュメント

  • AWS CloudFormation ユーザーガイド
  • AWS CLI リファレンス
  • AWS CDK Developer Guide

ハンズオン環境

  • AWS Free Tierを活用した実機演習
  • LocalStackでのローカル開発環境構築

コミュニティ

  • AWS公式フォーラム
  • Stack Overflow
  • GitHub上のサンプルコード

そして何より重要なのは、今回ご紹介した書籍のような体系的な学習教材です。

図解が豊富で、AWSの全体像を把握しながらIaCについても学べるため、初心者の方には特におすすめです。

図解即戦力 Amazon Web Servicesのしくみと技術が これ1冊でしっかりわかる教科書 [改訂2版] [ 小笠原 種高 ]
created by Rinker
¥2,200 (2025/09/11 16:09:31時点 楽天市場調べ-詳細)

まとめ

今回は、AWSにおけるInfrastructure as Code(IaC)について、AWS CLIとCloudFormationを中心に解説しました。

重要なポイント

  1. IaCの価値:手動作業の課題を解決し、効率性・品質・管理性を向上
  2. AWS CLI:コマンドラインでの操作自動化、スクリプト化による効率化
  3. CloudFormation:宣言的なテンプレートでインフラをコード化
  4. 実践的アプローチ:小さく始めて、ベストプラクティスを適用
  5. 継続的学習:新しいツールや手法を学び続ける

IaCは最初は複雑に感じるかもしれませんが、一度慣れてしまえば手動作業には戻れないほど便利です!

特に、チームで開発を行う場合や、複数の環境を管理する場合には必須のスキルと言えるでしょう。

ぜひ今回の内容を参考に、AWSでのIaC導入に挑戦してみてください。

きっと作業効率が大幅に向上するはずです!

図解即戦力 Amazon Web Servicesのしくみと技術が これ1冊でしっかりわかる教科書 [改訂2版] [ 小笠原 種高 ]
created by Rinker
¥2,200 (2025/09/11 16:09:31時点 楽天市場調べ-詳細)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA



reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次