1. はじめに
こんにちは。
これから AWS 公式のハンズオン資料に沿って学習を進めます。ハンズオンを実施しただけでは理解が浅くなりがちなので、設定内容や気づきをブログに整理して知識を定着させることを目的とします。対象のハンズオン動画は約5年前のため、現在の AWS マネジメントコンソールと画面が異なる点を適宜補足します。また、提供されている CloudFormation テンプレートや記載コマンドがそのまま動作しない場合は、現行仕様に合わせて修正していきます。
2. 筆者について
私は AWS認定 Solutions Architect – Professional(SAP) 、SCS、SAA、SOA、DVA を取得済みですが、実務経験はまだありません。
資格取得のために知識を詰め込んだ状態からのスタートです。
3. ハンズオンを実施する目的
- 実際に手を動かせるようになること
- 公式ハンズオンに加えて、自分のやりたい構成や機能を組み込み、理解を深めること
- 古い内容で動作しない箇所や注意点を記録し、最新環境で再現可能にすること
記事はまず公式ハンズオンに沿って進め、その後 CodeBuild、CodeDeploy、CodePipeline、CloudFormation、Terraform などの自動化を取り入れて構築を拡張していきます。
最終的な目標は AWS 業務に参画すること です。
このブログが、自分自身のスキルアップと AWS 実務参画に向けた助けとなることを期待しています。
4. ハンズオン
AWS公式ハンズオンから題材を選び、順次実施していきます。 試行錯誤して進めていますので、後半になるほど洗練されていると思います。
追記:ハンズオン一覧のページがリニューアルで消えている
-
【AWSハンズオン実践】AWS Hands-on for Beginners AWS 上で静的な Web サイトを公開しよう!
-
【AWSハンズオン実践】Amazon CloudFrontおよびAWS WAFを用いて エッジサービスの活用方法を学ぼう
-
【AWSハンズオン実践】Amazon Elastic Container Service 入門 コンテナイメージを作って動かしてみよう
次回候補
- cognito
- system parameter
- system manager(保存)をやりたい
- config
- フェールオーバー系
- マルチアカウント戦略を試す
- ローリングアップデート
5. ナレッジ
ハンズオンを通して得たナレッジを作成していきます。
6. 参考情報
6.1. 作業環境
- Windows 10
- Chrome
- PowerShell
- VSCode(Cloud9は使用しない)
- GitHub(CodeCommitは使用しない。S3を代用する場合あり)
6.2. 設定内容の書き方
- CodeCommitは利用しません。GitHubを代用しますのでご用意ください
- 🔴はAWSコンソールのデフォルト設定から変更する箇所です。変更する箇所だけ書くということもできるのですが、それだと他にどんな設定があるのか把握できないのでできるだけ全部書くようにしてます。そしてパラメータシート的ものとして役立てるように表にしています
- 業務で役に立つドキュメントを目指しています。書き方について質問、要望があればコメントいただければ、できる範囲で反映します
- コンソール上の詳細な操作手順は記載しません(動画で確認可能)。
- 設定内容は、2025年8~9月頃のAWSコンソールから抽出した項目を設定順に表形式で記載します。表データは一旦グーグルスプレッドシートで作成して、Markdownに変換してブログに張り付けています。
- プルダウンやチェックボックス等の設定項目は、内容を把握できるようできるだけ網羅して記載します。
6.3. 学習したいサービス
触ったものは〇
- AMI 〇
- API Gateway 〇
- Auto Scaling 〇
- Backup
- CloudFormation 〇
- CloudFront〇
- Lambda@Edge
- CloudWatch 〇
- CodeBuild 〇
- CodeDeploy 〇
- CodePipeline 〇
- Cognito
- Config
- Detective
- DynamoDB 〇
- EC2 〇
- ECS / Fargate 〇
- ECR 〇
- EventBridge 〇
- GuardDuty
- Kinesis Firehose
- KMS
- Lambda(デプロイ方法がメイン)
- RDS 〇
- Route 53 〇
- S3 〇
- Secrets Manager 〇
- Security Hub
- Step Functions
- WAF 〇
- SSO
- Control Tower
- SAM 〇
- Amplify
6.4. ハンズオン時のテンプレートの命名方法を考える
ぱっと見ハンズオン用だとわかること。どのステップで利用するかわかること。ファイル選択するときstepが識別しやすい。繰り返し実行しやすいこと
- ディレクトリは分割しない
- 末尾に
-handson
- 先頭に
stepX-
- ステップがわかれば役割もわかるだろう
- 業務ではここに機能名を書けばわかりやすくなるんじゃなかろうか
- リソース作成
- stepX-ec2-handson.yml
- stepX-network-handson.yml
- stepX-sg-handson.yml
- stepX-bucket-handson.yml
- CFn用サービスロールを作る場合(CFn実行時に指定するロール。GitHub連携時に必須)
- stepX-cfn-RESOURCE_NAME-service-role-handson.yml
- stepX-cfn-codepipeline-service-role-handson.yml
- stepX-cfn-codedeploy-service-role-handson.yml
- stepX-cfn-codebuild-service-role-handson.yml
- ロール作成。ポリシーはこの中で作る
- stepX-ec2-profile-role-handson.yml
- Pipelineとかのサービスロール。ポリシーはこの中で作る(これは単独スタックでつくらない、CodePipeline/codedeploy/codebuildのスタックで作ること)
- stepX-RESOURCE_NAME-service-role-handson.yml
- stepX-codepipeline-service-role-handson.yml
- stepX-codedeploy-service-role-handson.yml
- stepX-codebuild-service-role-handson.yml
step内で同一リソースを作るときは破綻しそう
テンプレート作成時の共通要件
今はこれをそのままAIに張り付けて記憶させてからテンプレート作ってます。大分便利です
XXXXXXXXXXXXは自分のアカウントIDに置換すること
テンプレート作成依頼したときは以下を共通要件として作成してほしい
メモリ機能に登録して
【共通指示】
■ 前提・出力ルール
- yml形式
- CloudFormation テンプレートの先頭に「このテンプレートで作成される主要リソースの一覧」をコメントとしてまとめる
- パラメータ化は不要。必須プロパティは全て記述し、必須でないものは「CloudFormationリソース仕様のデフォルト」から変更があるものだけ定義すること。
- ${AWS::Partition} は使用禁止。ARNは !Sub と ${AWS::AccountId} で組み立てること。
- CloudFormationの Description はコロン「:」を使わない(ハイフン等に置換)。英語で書き、改行して同じ意味の日本語を # コメントで入れる。
- # コメントは日本語で良い。テンプレ生成時/修正時は既存コメントを消さない(該当コードを丸ごと削除する場合を除く)。
- コード修正を依頼された際は、修正部分の抜粋ではなく**ファイル全量**を出力する(貼り付け前提)。
- 出力はテンプレートごとに**フルテキスト**で提示すること(省略禁止)。
- Sid は英数字のみ([0-9A-Za-z]+)
- 名前が設定できるリソースは設定してほしい
- EC2のOSはAmazon Linux 2023のlatestを使用。t2.micro → t3.micro、db.t2.micro→db.t3.microにすること
- 各リソース定義の上に、これは何のリソースか簡潔なコメントを入れる
■ GitHub Connections 権限(最重要)
- GitHubとの接続設定`arn:aws:codeconnections:ap-northeast-1:XXXXXXXXXXXX:connection/a8f8fc76-d904-4e45-8f82-c0979b312825
- 接続ARNは新旧どちらも対象にする(新: arn:aws:codeconnections:… / 旧: arn:aws:codestar-connections:…)。
- **CodeBuildのサービスロール**には `codeconnections:UseConnection` と `codestar-connections:UseConnection` を**対象の接続ARNにスコープして必ず付与**する。
- **CloudFormationの実行ロール**には `codeconnections:PassConnection` と `codestar-connections:PassConnection` に加え、**`codeconnections:UseConnection` と `codestar-connections:UseConnection` も必ず付与**する(いずれも対象接続ARNにスコープ)。※OAuthProviderException回避のため必須。
- 可能であれば `codeconnections:GetConnection` / `codestar-connections:GetConnection` を Resource:"*" で付与(検証用途・任意だが推奨)。
- codeconnections:GetConnectionToken と codestar-connections:GetConnectionToken を必須付与し、対象の接続ARNにスコープすること(CFn実行ロール/CodeBuildサービスロールの両方)。Webhook作成時のプロバイダ呼び出しで必要になるため。
- 新旧プレフィックスの“クロス組合せ”を許可すること(例:codestar-connections:* を arn:aws:codeconnections:*:connection/* にも、codeconnections:* を arn:aws:codestar-connections:*:connection/* にも許可)。
■ CloudFormation 実行ロール(サービスロール)に必須の権限
- CloudFormation API 権限:`cloudformation:CreateStack` / `UpdateStack` / `DeleteStack` / `Describe*` / `List*` / `GetTemplate` / `ValidateTemplate` などを **Resource:"*"** で付与(監査方針により必要なため必須)。
- IAM 操作:`iam:CreateRole` / `DeleteRole` / `CreatePolicy` / `DeletePolicy` / `AttachRolePolicy` / `DetachRolePolicy` / `UpdateRole` / `Tag*` / `Untag*` / `Get*` / `List*` を **Resource:"*"**。
- CodeBuild 操作:`codebuild:CreateProject` / `UpdateProject` / `DeleteProject` / `BatchGetProjects` / `CreateWebhook` / `DeleteWebhook` を **Resource:"*"**。
- Pass 権限:`iam:PassRole`(CodeBuildサービスロールのARNにスコープ)。
■ Outputs
- 項目はお任せ。exportもする
実際に依頼するときはさらに追加要件を伝えるよ