0
0

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 Developer 試験メモ

Last updated at Posted at 2025-03-06

EC2

リンクローカルアドレス

http://169.254.169.254/latest/meta-data/ は、AWS EC2インスタンスメタデータサービスのエンドポイントです。これは、インスタンス自身の情報(メタデータ)を取得するための仕組みとなっており、以下のような特徴があります:

  • このURLは、EC2インスタンスの内部ネットワーク上からのみアクセス可能です
  • 外部からはアクセスできません
  • このエンドポイントを通じて以下の情報を取得できます:
    • インスタンスID
    • AMI ID
    • ホスト名やPrivate IPアドレス
    • セキュリティグループ

リクエストに署名を含める方法

以下の2つの主要な方法があります:

1. Authorizationヘッダー

  • HTTPヘッダーに署名情報を追加
  • 形式:Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
  • アクセスキー、署名付きヘッダーリスト、計算された署名が含まれる

2. X-Amz-Signatureクエリパラメータ

  • URLのクエリ文字列に署名情報を追加
  • 事前署名付きURL生成に使用(S3の署名付きURLなど)
  • 形式:?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404
  • AWSの認証情報を要求することなく、プライベートリソースへの一時的なアクセスを提供できる
    この追加により、問題で問われているAWS署名付きリクエスト(Signature

S3

署名付きURL

オブジェクトに対して、署名付きURLを発行することができます。その署名付きURLを知っているユーザーがプライベートなファイルにアクセスすることができます。

バケットポリシーとIAMポリシー

IAMポリシー バケットポリシー アクセス可否
- - Access Denied
Allow - Succeed
- Allow Succeed
Allow Allow Succeed
Deny Allow Access Denied
Allow Deny Access Denied

Amazon Macie財務情報検出

SensitiveData:S2Object/Financialの検索タイプを使用して検索結果をフィルタリングすることができます。

S3 ObjectLambda

S3に保存されているオブジェクトに対して、ユーザー定義の変換処理をオンザフライで実行できる機能です。通常、S3からオブジェクトを取得(GETリクエスト)すると、そのまま保存されているデータが返されますが、Object Lambdaを使うと、取得時にLambda関数を介してデータの変換や加工を行い、カスタムなレスポンスを返すことができます。

KMSキーを使用したS3のサーバーサイド暗号化

x-amz-server-side-encryption: aws:kms
x-amz-server-side-encryption: AES256

DynamoDB

API

Batch Item

複数のテーブルから、複数のアイテムを一括で取得するためのAPIです。1回のリクエストで最大100個のアイテムを取得可能(サイズ制限もあります)。

GetItem

単一のテーブルから、特定の主キーを持つ1つのアイテムを取得するためのAPIです。指定したテーブルと主キーに対して、対応する1件のアイテムを返します。

Scan

テーブル全体、またはインデックス全体を走査してアイテムを取得するAPIです。テーブル内の全アイテムを読み込むため、フィルタ条件を指定しても読み込んだ後に結果を絞り込みます。

Query

主キー(パーティションキー)またはセカンダリインデックスを用いて、条件に合致するアイテムを効率的に取得するためのAPIです。Queryでは以下の主要な式(Expression)を使用できます:

  • KeyConditionExpression: 必須(パーティションキー・ソートキーを指定する)
  • FilterExpression: 任意(追加のフィルタリングに使用)
  • ProjectionExpression: 任意(取得する属性を限定)
  • ExpressionAttributeNames / ExpressionAttributeValues: 上記の式内で予約語や特殊文字を扱うために使用
KeyConditionExpression の例

KeyConditionExpressionはパーティションキーの完全一致指定が必須で、オプションでソートキーの条件を指定できます。

# KeyConditionExpression の例
response = table.query(
    KeyConditionExpression="UserId = :uid",
    ExpressionAttributeValues={
        ":uid": "12345"
    }
)

パーティションキーの完全一致 + ソートキーの比較演算子を使用:

# パーティションキーの完全一致 + ソートキーの比較演算子
response = table.query(
    KeyConditionExpression="UserId = :uid AND CreatedAt > :date",
    ExpressionAttributeValues={
        ":uid": "12345",
        ":date": "2025-01-01"
    }
)

パーティションキーの完全一致 + ソートキーの範囲指定(BETWEEN):

# パーティションキーの完全一致 + ソートキーの範囲指定(BETWEEN)
response = table.query(
    KeyConditionExpression="UserId = :uid AND CreatedAt BETWEEN :start AND :end",
    ExpressionAttributeValues={
        ":uid": "12345",
        ":start": "2025-01-01",
        ":end": "2025-12-31"
    }
)

パーティションキーの完全一致 + ソートキーのプレフィックス検索:

# パーティションキーの完全一致 + ソートキーのプレフィックス検索
response = table.query(
    KeyConditionExpression="UserId = :uid AND begins_with(OrderId, :prefix)",
    ExpressionAttributeValues={
        ":uid": "12345",
        ":prefix": "ORDER-2025"
    }
)
FilterExpression の例

FilterExpressionはクエリ結果をさらに絞り込むための式です。これはキー以外の属性に対する条件指定に使います。

# FilterExpression の例
response = table.query(
    KeyConditionExpression="UserId = :uid",
    FilterExpression="Price > :amount",
    ExpressionAttributeValues={
        ":uid": "12345",
        ":amount": 1000
    }
)

複数条件を持つFilterExpression:

# 複数条件を持つFilterExpression
response = table.query(
    KeyConditionExpression="UserId = :uid",
    FilterExpression="Price > :min AND Price < :max",
    ExpressionAttributeValues={
        ":uid": "12345",
        ":min": 100,
        ":max": 500
    }
)

OR条件を持つFilterExpression:

# OR条件を持つFilterExpression
response = table.query(
    KeyConditionExpression="UserId = :uid",
    FilterExpression="Category = :cat1 OR Category = :cat2",
    ExpressionAttributeValues={
        ":uid": "12345",
        ":cat1": "Books",
        ":cat2": "Electronics"
    }
)

属性の存在確認を行うFilterExpression:

# 属性の存在確認を行うFilterExpression
response = table.query(
    KeyConditionExpression="UserId = :uid",
    FilterExpression="attribute_exists(DiscountCode)",
    ExpressionAttributeValues={
        ":uid": "12345"
    }
)
ProjectionExpression の例

ProjectionExpressionは取得する属性を限定するための式です。

# ProjectionExpression の例
response = table.query(
    KeyConditionExpression="UserId = :uid",
    ProjectionExpression="OrderId, CreatedAt, Amount",
    ExpressionAttributeValues={
        ":uid": "12345"
    }
)

予約語を含む場合のProjectionExpression:

# 予約語を含む場合のProjectionExpression
response = table.query(
    KeyConditionExpression="UserId = :uid",
    ProjectionExpression="OrderId, #date, #status",
    ExpressionAttributeNames={
        "#date": "Date",
        "#status": "Status"
    },
    ExpressionAttributeValues={
        ":uid": "12345"
    }
)

GSIとLSI

GSI(グローバルセカンダリインデックス)はパーティションキーとソートキーを自由に再定義可能です。LSI(ローカルセカンダリインデックス)はベーステーブルの同一のパーティションキーを使用します。

主な違い

項目 GSI LSI
作成タイミング テーブル作成後可能 テーブル作成時のみ
最大作成数 20 5
削除可能性 不可
容量管理 独立したプロビジョニング ベーステーブルと共有
レイテンシ 高(グローバルクエリ) 低(ローカルスコープ)
スループット 独立したキャパシティ設定 ベーステーブルに依存
クエリ整合性 結果整合性のみ 強い整合性可能
パーティション分割 新規パーティション生成 既存パーティション活用

キャパシティユニット

読み込みキャパシティユニット (RCU)

  • 基準: 4KB以下のデータ
  • 種類別消費量:
    1. 結果整合性のある読み込み: 0.5 RCU
    2. 強力な整合性のある読み込み: 1 RCU
    3. トランザクション読み込み: 2 RCU

書き込みキャパシティユニット (WCU)

  • 基準: 1KB以下のデータ
  • 種類別消費量:
    1. 通常の書き込み: 1 WCU
    2. トランザクション書き込み: 2 WCU

Lambda

Lambda実行ロール

AWSLambdaBasicExecutionRole

Lambda関数の基本的な実行環境を提供するための権限です。

AWSLambdaVPCAccessExecutionRole

Lambda関数がVPC内のリソース(例:RDS、ElastiCache、内部専用のAPIなど)にアクセスするための権限を提供します。

/tmpディレクトリ

512MB〜10240MBまでのデータを一時的に保存することができるディレクトリです。

CloudFormation

SAM

AWS SAM(Serverless Application Model)は、サーバーレスアプリケーションの開発、テスト、デプロイを簡単にするためのオープンソースフレームワークです。AWS CloudFormationの拡張として、Lambda関数、API Gateway、DynamoDBテーブルなど、サーバーレスリソースを簡単にYAML形式で記述できます。SAMを使用する場合は、Transformセクションで以下のようにSAMバージョンを指定する必要があります:

Transform: AWS::Serverless-2016-10-31

リソース

  1. AWS::Serverless::Function

    • 概要:AWS Lambda関数を定義します。コードのパッケージ方法やランタイム、イベントソース(API Gateway、S3、SQSなど)との連携設定などをまとめて管理できます。
  2. AWS::Serverless::Api

    • 概要:Amazon API Gateway (REST API)を構築するためのリソースです。SAMのテンプレート内でエンドポイントの定義とLambda関数などのバックエンドを関連付けできます。
  3. AWS::Serverless::HttpApi

    • 概要:新しいタイプのAmazon API Gateway (HTTP API)を構築するためのリソースです。REST APIに比べてシンプルかつ低コスト、低レイテンシに最適化されています。
  4. AWS::Serverless::GraphQLApi

    • 概要:AWS AppSyncを用いたGraphQL APIを定義するためのリソースです。AppSyncでGraphQLスキーマやデータソースを設定し、サーバーレス構成を構築できます。
  5. AWS::Serverless::Application

    • 概要:別のSAMアプリケーション(ネストされたアプリケーションや、AWS Serverless Application Repositoryからのアプリ)を参照・デプロイするためのリソースです。
  6. AWS::Serverless::LayerVersion

    • 概要:Lambda Layerを定義するリソースです。ライブラリや依存パッケージを切り出して共有し、複数のLambda関数で使い回せるようにします。
  7. AWS::Serverless::SimpleTable

    • 概要:シンプルな設定でDynamoDBテーブルを作成するためのリソースです。主キー(パーティションキーのみ)をすぐに定義して使いたい場合などに便利です。
  8. AWS::Serverless::StateMachine

    • 概要:AWS Step Functionsのステートマシンを定義するリソースです。Lambda関数や他のAWSサービスを組み合わせたワークフローをコード化できます。
  9. AWS::Serverless::Connect(またはConnector/その他)

    • 概要:AWS SAMで新しく追加されつつあるリソースや、一部ドキュメントで言及される「コネクタ」系リソース(Connector)です。サービス間のアクセス権限の紐付けを簡略化する仕組みとして利用される場合があります。

AWS X-Ray

分散アプリケーション(特にマイクロサービスアーキテクチャ)におけるトレーシングとデバッグを支援するサービスです。X-Rayは、アプリケーション全体のリクエストの流れを追跡し、各サービス間の通信経路を可視化します。これにより、リクエストの遅延やエラーが発生している箇所を迅速に特定できます。

主な機能:

  • 各コンポーネントの処理時間やエラー率を測定し、システム全体のパフォーマンスやボトルネックを明らかにします
  • 障害発生時に、どのサービスが原因かを特定するための詳細なトレース情報を提供し、デバッグ作業を効率化します

CloudWatch

メトリクスの保持期間

15ヶ月

メモリに関するメトリクス

CloudWatch標準メトリクスにはメモリ取得を行うことはできないのでCloudWatchカスタムメトリクスを使用する必要がある。

ECS

ecs_enable_task_iam_role

ECSコンテナインスタンスはインスタンスプロファイル(EC2インスタンスに割り当てられたIAMロール)を介してAWSリソースへアクセスします。しかし、タスクごとに必要な権限が異なる場合、インスタンスのロールだけでは柔軟なアクセス制御が難しくなります。ecs_enable_task_iam_roleを有効にすることで、各タスクが自分専用のIAMロール(タスクロール)を利用できるようになり、個別の権限設定が可能になります。

ElasticBeanstalk

ElasticBeanstalk(EB)は、アプリケーションの展開、管理、スケーリングを迅速かつ簡単に行うためのAWSサービスです。以下はEBを効率的に利用するための主要な設定ファイルです。

.ebextensions

概要

Elastic Beanstalk 環境の詳細な設定・カスタマイズを行うための設定ファイル群です。アプリケーションのルートディレクトリに .ebextensions というディレクトリを作成し、その中に拡張子が .config の YAML ファイルを置きます。

利用例

  • 必要なソフトウェアパッケージのインストール
  • OS レベルの設定変更
  • カスタムコマンドの実行(例:起動時のシェルコマンド)
  • ログローテーションや設定ファイルの上書き

特徴

  • Elastic Beanstalk がデプロイ時にこれらのファイルを読み込み、環境の構成を自動でセットアップしてくれます。
  • 複雑な環境設定や、インフラ周りのカスタマイズをコードとして管理することが可能です。

設定例

# .ebextensions/01-install-packages.config
packages:
  yum:
    git: []
    mysql-devel: []

# .ebextensions/02-commands.config
commands:
  01_create_dir:
    command: "mkdir -p /var/log/myapp"
    ignoreErrors: true

# .ebextensions/03-options.config
option_settings:
  aws:elasticbeanstalk:application:environment:
    NODE_ENV: production
  aws:elasticbeanstalk:container:nodejs:
    NodeVersion: 16.x

env.yaml

概要

env.yaml は、プロジェクトやデプロイメントの際に、環境変数やその他のオプション設定 を管理するために使われるファイルです。ただし、これは Elastic Beanstalk の標準機能というよりは、プロジェクトごとに取り入れられる運用方法のひとつです。

利用例

  • EB CLI(Elastic Beanstalk CLI)を利用する際に、環境変数を一括で設定するための情報をまとめる
  • 複数の環境(開発、ステージング、本番など)で異なる設定値(例:DBのエンドポイント、APIキーなど)を管理する

特徴

  • このファイルに定義した環境変数を使って、eb setenv コマンドで Elastic Beanstalk 環境に一括反映させることができます。
  • 環境ごとに設定値を管理しやすく、テンプレート化して再利用する際に便利です。

設定例

# env.yaml
development:
  APPLICATION_ENV: development
  DB_HOST: dev-db.example.com
  API_KEY: dev-api-key
  DEBUG: true

staging:
  APPLICATION_ENV: staging
  DB_HOST: staging-db.example.com
  API_KEY: staging-api-key
  DEBUG: false

production:
  APPLICATION_ENV: production
  DB_HOST: prod-db.example.com
  API_KEY: prod-api-key
  DEBUG: false

利用例:

# 開発環境に変数を設定
eb setenv --env development $(cat env.yaml | grep development -A4 | sed 's/development://g')

# 本番環境に変数を設定
eb setenv --env production $(cat env.yaml | grep production -A4 | sed 's/production://g')

CodeDeploy,CodeBuild,CodePipeline

BuildSpecファイル

CodeBuildで使用される設定ファイルである。YAML形式で記述される。サンプルコードは下記の通りである。

version: 0.2

env:
  variables:
    ENV_NAME: "production"

phases:
  install:
    commands:
      - echo "Installing dependencies..."
      - npm install

  pre_build:
    commands:
      - echo "Running pre-build commands..."
      - npm run lint

  build:
    commands:
      - echo "Building the application..."
      - npm run build

  post_build:
    commands:
      - echo "Post-build actions..."
      - aws s3 cp ./build s3://my-bucket/ --recursive

artifacts:
  files:
    - '**/*'
  base-directory: build

cache:
  paths:
    - 'node_modules/**/*'

AppSpecファイル

AWS CodeDeployで使用される、アプリケーションのデプロイ手順を定義したものである。YAML形式で記述される。サンプルコードは下記の通りである。

version: 0.0

os: linux

files:
  - source: /build/build.zip
    destination: /var/www/myapp
    overwrite: yes

hooks:
  BeforeInstall:
    - location: scripts/install_dependencies.sh
      timeout: 300
      runas: ec2-user

  AfterInstall:
    - location: scripts/restart_server.sh
      timeout: 60
      runas: ec2-user

  ApplicationStart:
    - location: scripts/start_application.sh
      timeout: 60
      runas: ec2-user

  ValidateService:
    - location: scripts/validate_service.sh
      timeout: 60
      runas: ec2-user

AWS X-Ray

トレースの取得

GetTraceSummaries APIを使用してアプリケーションのトレースIDのリストを取得できる。また、BatchGetTraces APIを使用することでトレースデータを取得できる。

エラー

HTTP502エラー

Bad Gateway と呼ばれているエラーです。サーバーがゲートウェイまたはプロキシとして動作し、上流のサーバーから無効なレスポンスを受け取った場合に発生します。クライアントからのリクエストは正常に受け取られますが、バックエンドサービスとの通信に問題が生じた場合に返されます。

HTTP504エラー

GatewayTimeoutと呼ばれているエラーです。上流のサーバーからタイムリーな応答が得られなかった場合に発生します。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?