はじめに
AWSの資格(CLP)は持っていたけど、実際に手を動かしたことはほぼゼロ。
そこからIaCをマスターすることを目標に学習を始めた記録です。
この記事では Phase1「AWS基礎 + CLI + CloudFormation」 で学んだことをまとめます。
目次
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を学んでいく。