0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS IaC入門】Phase1: IAM・CLI・CloudFormationで初めてのインフラをコード化した

0
Posted at

はじめに

AWSの資格(CLP)は持っていたけど、実際に手を動かしたことはほぼゼロ。
そこからIaCをマスターすることを目標に学習を始めた記録です。

この記事では Phase1「AWS基礎 + CLI + CloudFormation」 で学んだことをまとめます。


目次

  1. IAMの基礎
  2. AWS CLIのセットアップ
  3. CloudFormationの概念
  4. 実際にS3バケットをデプロイしてみた
  5. ハマったポイント
  6. まとめ

1. IAMの基礎

rootユーザーとIAMユーザーの違い

AWSアカウントを作ると最初に使えるのが rootユーザー
これはAWS全権限を持つアカウントで、漏洩したら全リソースを操作されてしまう。

なので普段使いは IAMユーザー を作って、必要な権限だけを与えるのが鉄則。

rootユーザー  → 全権限持ち。MFA設定して普段は使わない
IAMユーザー   → 権限を絞った日常使い用

アクセスキーペア

CLIやTerraformでAWSを操作するときは アクセスキーペア を使う。

キー 役割
Access Key ID 誰かを示すID(ユーザー名的なもの)
Secret Access Key 本人確認するパスワード相当

Secret Access Keyは発行画面でしか確認できない。必ずメモするかCSVをダウンロードすること。

IAMポリシー

「何ができるか」を定義するのがIAMポリシー。

  • 管理ポリシー: 独立して存在し、複数ユーザーに使い回せる。実務では基本こっち
  • インラインポリシー: 特定ユーザーに直接埋め込む。使い回し不可
キーペア  → 認証(誰か)
IAMポリシー → 認可(何ができるか)

この2つは別物!

2. AWS CLIのセットアップ

インストール

公式サイトからインストーラーをダウンロードして実行。

確認コマンド:

aws --version
# aws-cli/2.x.x Python/3.x.x ...

aws configure

CLIでAWSを操作するための認証情報を設定する。

aws configure
# AWS Access Key ID: AKIAIOSFODNN7EXAMPLE
# AWS Secret Access Key: xxxxxxxxxxxxxxxx
# Default region name: ap-northeast-1
# Default output format: json

設定内容はPCの ~/.aws/ に保存される。

~/.aws/
  ├── credentials  ← アクセスキーペア
  └── config       ← リージョンとフォーマット

プロファイルで複数アカウントを管理

開発・本番など複数のAWSアカウントを使い分けるときはプロファイルが便利。

# 名前付きプロファイルで設定
aws configure --profile dev
aws configure --profile prod

# プロファイルを指定して実行
aws s3 ls --profile prod

デプロイ前の必須確認コマンド

aws sts get-caller-identity

実行結果:

{
    "UserId": "AIDAVCILKLANKKDPCLU3S",
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:user/terraform-user"
}

今どのアカウント・ユーザーとして動いているか を確認できる。
本番環境への誤デプロイ事故を防ぐために、デプロイ前に必ず実行する習慣をつけた。


3. CloudFormationの概念

IaCとは

Infrastructure as Code。インフラの構成をコードで管理すること。

手動でAWSコンソールをポチポチするのではなく、YAMLやJSONで「こういうインフラを作れ」と宣言してAWSに投げる。

テンプレートとスタック

用語 意味
テンプレート 「何を作るか」を書いたYAML/JSONファイル(設計図)
スタック テンプレートをAWSに投げて実際に作られたリソースの集合体(建物)

テンプレートを作ってコマンド1発でスタックが作られるイメージ。

べき等性

IaCを理解する上で大事な概念。

何回実行しても同じ結果になる性質のこと。

シェルスクリプト(べき等じゃない)
  1回目: S3バケット作成 → OK
  2回目: 「既に存在します」エラー → NG

CloudFormation(べき等)
  1回目: S3バケット作成 → OK
  2回目: 「既に存在する」のでスキップ → OK

これは CloudFormation が 宣言型 だから。

手続き型(シェルスクリプト): 「バケットを作れ」という命令を実行
宣言型(IaC): 「バケットが存在する状態にしろ」と宣言

宣言型だから、すでにその状態になっていればスキップされる。


4. 実際にS3バケットをデプロイしてみた

テンプレート作成

s3.yaml を作成:

AWSTemplateFormatVersion: '2010-09-09'
Description: 'S3 bucket sample'

Resources:
  MyS3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: my-iac-practice-123456789012
      VersioningConfiguration:
        Status: Enabled

デプロイ

# スタック作成
aws cloudformation create-stack --stack-name my-first-stack --template-body file://s3.yaml

# 結果確認
aws cloudformation describe-stacks --stack-name my-first-stack

"StackStatus": "CREATE_COMPLETE" が返ってきたら成功。

{
    "Stacks": [{
        "StackName": "my-first-stack",
        "StackStatus": "CREATE_COMPLETE"
    }]
}

AWSコンソールのS3とCloudFormationの画面でも確認できた。

後片付け(重要!)

AWSはリソースが存在している間ずっと課金される。
練習で作ったものは必ず削除する。

aws cloudformation delete-stack --stack-name my-first-stack

CloudFormationを使うと、スタックを削除するだけでスタックに含まれる全リソースをまとめて削除できる。手動で1個ずつ消す必要がなくて便利。


5. ハマったポイント

Windowsで \ が使えない

Macのコマンドをそのままコピペしたらエラーになった。

# NG: Windowsのコマンドプロンプトでは \ が使えない
aws cloudformation create-stack \
  --stack-name my-first-stack \
  --template-body file://s3.yaml

# OK: 1行で書く
aws cloudformation create-stack --stack-name my-first-stack --template-body file://s3.yaml

テンプレートの日本語が原因でエラー

Description に日本語を書いたら文字コードエラーが出た。

# NG
Description: 'S3バケットを作るサンプル'

# OK
Description: 'S3 bucket sample'

6. まとめ

Phase1で学んだこと:

  • rootユーザーは使わない。IAMユーザー + 最小権限が鉄則
  • アクセスキーペアでCLI認証。Secret Keyは発行時にしか見れない
  • aws configureでキーを保存しておくと毎回入力不要
  • aws sts get-caller-identityでデプロイ前に誰として動いてるか確認する
  • CloudFormationはテンプレート(設計図)をスタック(建物)に変換するサービス
  • べき等性・宣言型がIaCの本質。何回実行しても同じ結果になる

次のPhase2ではTerraformに移行して、より実務に近いIaCを学んでいく。


参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?