カテゴリー: aws

AWSの情報をまとめる

  • CloudWatch

    CloudWatch

    CloudWatch Logsエージェントがデフォルトでデータを送信する頻度

    5秒ごと

    CloudWatchの無料枠で受け取る事ができるメトリックアップデートの頻度

    5分

    受信および集計するデータの最小時間間隔

    1分

  • VPC

    VPC

    特徴

    • 各サブネットには、単一のAZにマッピング
    • デフォルトでは、プライベートかパブリックか関わらず、全てのサブネット間でルート可能

    VPC

    単一のVPCにパブリックサブネットが1つデフォルトで設定される

    VPCを設置しないでEC2インスタンスを立ち上げる場合、サブネットの設定が必須になる

    VPCエンドポイント

    グローバルIPを持つAWSサービスに対して、VPCの内部から直接接続するための出口。

    • 無料
    • AWSが管理

     

    Gateway型

    Gateway型はサブネットに特殊なルーティングを設定し、VPC内部から直接外のサービスと通信する

    VPC peeringは一部のリージョン間に限られている。

     

    プライベートリンク型

    サブネットにエンドポイント用のプライベートIPを設定して使用する

    エンドポイントポリシーによりアクセス制御を実施

    VPC Flow log

    accepted/rejectedされたトラフィックを保持する

    10分間で収集・プロセッシング・保存する

    サブネット枯渇時の対応

    VPC内の全てのIPアドレスを利用している場合は、VPCのCIDRブロックを変更して、新しいサブネットに十分な空きスペースを作成する事で枯渇時対処することも可能。

    専用テナンシーについて

    セキュリティを高める際に利用する

    具体的には、アプリケーションが動いているインスタンスは他のAWS顧客とハードウェアを共有してはいけない場合、以下の構成を検討する事ができる

    1. デフォルトてナンシーでVPCを作成
    2. 専用てナンシーでアプリケーションが動くインスタンスを起動。
    3. 共有テナンシーで、その他インスタンス(セキュリティ要件がないインスタンス)を起動する

    単一のWebサーバを公開するのに必要な作業

    • インターネットゲートウェイの設定を行う
    • ウェブサーバにElastic IPを設定し関連付ける
    • Webサーバのセキュリティグループを変更。Webトラフィックに使用されているポート上のWebトラフィックを許可する
    • サブネットのルーティングテーブルを設定

     

     

  • RDS

    RDS

    高負荷対策

    Amazon RDS MySQL DBインスタンスで現在、利用可能な最大のインスタンスタイプで実行されているとする。

    DBインスタンスはCPUおよびネットワーク帯域幅に近いキャパシティで動作。

    今後、トラフィックが増加することを予想される。より多くのトラフィックを捌くアプローチ

     

    • 別アベイラビリティゾーンにMasterデータベースの読み取りレプリカを作成。レプリカに読み取り専用呼び出しを送信するよう、アプリケーションを設定する。
    • Amazon ElasticCacheクラスタを作成。頻繁にアクセスされるデータやクエリをキャッシュから取得するようにアプリケーションを設定する

    障害時の挙動

    プライマリDBインスタンスに障害が発生した場合、RDSマルチアベイラビリティゾーンのデプロイは、

    標準名レコード(CNAME)がプライマリからスタンバイに変更される。

    ElasticCacheについて

    セッション情報をRDSではなく、ElasticCacheを利用する際の挙動

    • セッションデータの読み取り・書き込みパフォーマンスを向上
    • データベースインスタンスの負荷を軽減

    RDSへの接続できない場合確認すべきポイント

    • VPCセキュリティグループの不正なルール
    • ローカルファイヤウォールのAmazon RDSエンドポイントポートの制限を確認する
    • Amazon RDSインスタンスが実行状態であるか

    ページの読み取り時間の改善

    • セッション情報と頻繁なDBクエリのために、アプリケーションにAmazon ElasticCacheを追加
    • Amazon CloudFront dynamic content supportを設定。サイトの再利用可能なコンテンツのキャッシングを有効にする
    • Amazon RDSデータベースをhigh memory extra largeインスタンスタイプへ変更

     

    ストレージ容量の拡大させる

    追加ストレージを割り当てる事が可能。割り当て中にパフォーマンスが低下する期間を計画する。

     

  • dynamodbへバルクインポート

    dynamodbへバルクインポート

    はじめに

    dynamodbへまとめてデータを入れたい時がある。バルクインポートの手順を紹介

    jsonファイル

    {
        "tsukada-tw": [
          {
              "PutRequest": {
                "Item": {
                  "ID": {"N":"1"},
                  "Tip": {"S":"【保存版】プレゼンで使えるグラフや図を表現する英語フレーズ集 https://www.rarejob.com/englishlab/column/20190426/"
                  }
                }
              }
          },
          {
              "PutRequest": {
                "Item": {
                  "ID": {"N":"2"},
                  "Tip": {"S":"海外でも母の日は祝うもの? Mother’s Dayの時期や英語のお祝いメッセージを紹介! https://www.rarejob.com/englishlab/column/20190425/"
                  }
                }
              }
          },
          {
              "PutRequest": {
                "Item": {
                  "ID": {"N":"3"},
                  "Tip": {"S":"英文メールの結びにはなんて書けばいい?ビジネスからカジュアルまで「よろしく」や「敬具」に代わる結びの英語表現まとめ https://www.rarejob.com/englishlab/column/20190424/"
                  }
                }
              }
          }
        ]
    }

    読み込み

    aws dynamodb batch-write-item --request-items file://bulk.json

    結果

     

  • 「徹底攻略AWS認定ソリューションアーキテクトアソシエイト教科書」を読んだ

    「徹底攻略AWS認定ソリューションアーキテクトアソシエイト教科書」を読んだ

    はじめに

    資格こそ取っていないが、AWSは常に触っている。試験を受ける受けないは別にして、知識をあるレベルまで引き上げる上で、試験用の本から多くのことを学ぶことができる。

    今回は「徹底攻略AWS認定ソリューションアーキテクトアソシエイト教科書」を通じて得られた知識についてまとめた。

    各種機能について、注意したい特徴

    Amazon Glacier

    mode解説
    迅速オンデマンドと呼ばれる。
    成功する保証がない
    標準3~5時間でアーカイブから取り出しが可能

    EFS

    共有ストレージ。ユーザー側でスナップショット取得不可

    インスタンスストア

    エフェメラルディスクとも呼ばれる。EC2停止時にはデータは消失。再起動では消失しない

    Aurora

    データは3箇所のAZに格納される

    1つのAZにつき2箇所のディスクに書き込まれる => 合計6箇所に保存される

    S3

    結果整合性モデルが一部採用されている

    メソッド種別特徴
    PUT新規追加書き込み後の、読み込み整合性
    PUT更新結果整合性
    DELETE削除結果整合性

    SQS

    TOPIC

    メッセージの送信、受信のアクセスポイント

    TOPICを作成し、購読者が購読することで通知の送受信が可能になる

    購読者(サブスクライバ)

    TOPICから発信されるメッセージの購読者を設定

    • HTTP/HTTPS
    • Email
    • SQL
    • Lambda

    の利用が可能

    PUBLISH

    作成したTOPICに対してアプリケーションからメッセージを送信。

    送信されたメッセージはSQSから購読者(サブスクライバ)へ配信される

    Cloud Formation

    定義ファイルをテンプレートと呼ぶ

    テンプレートから呼び出されるサービスの集合を、スタックと呼ばれる

    高可用アーキテクチャ

    可用性の定義

    システムが正常に継続して動作し続ける能力

    指標はパーセンテージ。一般的に稼働率と呼ばれる。

    オートスケーリング

    スケールアウト

    スケーリングプラン設定値が閾値超え

    EC2インスタンスを増加(Auto Scalingグループの設定値に従う)

     

    スケールイン

    EC2インスタンス数が最も多いAZからランダムに選ばれる

    もしインスタンス数が同じ場合は、最も古いEC2インスタンスがあるAZが選ばれる

    それも同じ場合は、次に課金が発生する時間が最も短いEC2インスタンスが選ばれる

    それも同じ場合は、この中からランダムに選ばれる

    クールダウン

    Auto Scalingが連続で実施されないようにする待ち時間

    データベース内のレコードが破損した場合の対処

    アプリケーションのバグや、オペレーションミスの場合、RDSの自動再起動を行う。

    フェールオーバでの復旧が不可能な場合、バックアップからのリストアをする必要がある。

     

    リストアについて

    1. 障害が発生したRDSのエンドポイントを控える
    2. 別のエンドポイント名に変更する
    3. バックアップから変更前のエンドポイント名でリストアする
    4. 旧RDSを削除する

    EBSのバックアップとリストア

    標準のスナップショット機能を用いる

    EC2のバックアップとリストア

    EBS もしくは AMIで取得したバックアップを用いて、リストアを行う

    AWSにおけるパフォーマンス

    プレイスメントグループについて

    単一のAZ内のEC2インスタンスを論理的にグルーピング

    複数のコンピューティングリソースを1つとして機能させる。

    クラスターコンピューティングに最適

    EBS最適化インスタンス

    最適化なしの場合

    EC2 ⇔ EBS間

    EC2 ⇔ その他が同一のネットワークになる

    最適化ありの場合

    EC2 ⇔ EBS間が専用のネットワークになる

    DynamoDB Accelerator (DAX)

    DynamoDBのインメモリキャッシュ。

    のように使う

    セキュリティ

    WebIDフェデレーション

    Google/FacebookなどのOpenID Connectをサポート

    CloudHSM、KMS

    どちらもユーザがAWSで鍵を管理・保管するサービス

    データの暗号化

    クライアントサイド(CSE)

    • S3に保存時
    • EBS ファイルシステムの暗号化

    サーバサイド暗号化(SSE)

    • S3に保管時、自動で暗号化

    Deploy/Provisioning

    AWSのサービスでは、Deployができるサービス、Provisioningができるサービス、その両方が可能なサービスが存在する。まとめると以下の通り。

    ServiceDeployProvisioning
    OpsWork
    Elastic Beanstalk
    Code Deploy×
    Cloud Formation×

    請求

    Consolidated Billing(一括請求)で統合可能

    メンバーのアカウント(Linked Account)の請求を、

    マスターのアカウント(Payer Account)に統合できる

     

  • CannotStartContainerError: API error (500): failed to initialize logging driver: failed to create Cloudwatch log stream: ResourceNotFoundException: The specified log group does not exist. status code: 400,

    CannotStartContainerError: API error (500): failed to initialize logging driver: failed to create Cloudwatch log stream: ResourceNotFoundException: The specified log group does not exist. status code: 400,

    はじめに

    fargateでタスクを登録し、起動させた時エラーが発生。原因と対処をまとめる

    An error occurs when a task is registered and started with fargate. Summarize causes and actions

    原因

    CannotStartContainerError: API error (500): failed to initialize logging driver: failed to create Cloudwatch log stream: ResourceNotFoundException: The specified log group does not exist. status code: 400,

    CloudWatch のロググループが存在しない

    CloudWatch log group does not exist

    対処

    CloudWatchにロググループを作成する

    Create a log group in CloudWatch

    その後、再度タスクを実行すれば問題は解消できる。

    After that, the problem can be solved by executing the task again.

     

  • EC2(Amazon Linux 2)のディスクサイズをオンラインで拡張する

    EC2(Amazon Linux 2)のディスクサイズをオンラインで拡張する

    作業前

    ディスクサイズを確認する

    $ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/xvda1       20G   20G  291M  99% /

    Elastic block storeで割り当てDISKを増やす

    何ギガに増やしたいのかサイズを指定する

    (増やす容量ではなく、現在のDISKと併せてトータルの容量にする)

    ブロックデバイスの変更作業

    ブロックデバイスの一覧を表示する

    $ lsblk
    NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    xvda    202:0    0  40G  0 disk 
    └─xvda1 202:1    0  20G  0 part /

    ブロックデバイスを拡張する

    (ここの手順がAmazon Linux1と2で異なる)

    以下の手順はAmazon Linux2。

    $ sudo growpart /dev/xvda 1
    CHANGED: disk=/dev/xvda partition=1: start=4096 old: size=41938910,end=41943006 new: size=83881950,end=83886046

    ブロックデバイス一覧を表示する。

    変更された事を確認する。

    $ lsblk
    NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    xvda    202:0    0  40G  0 disk 
    └─xvda1 202:1    0  40G  0 part /

    パーティションを拡張する

    $ sudo xfs_growfs /dev/xvda1
    meta-data=/dev/xvda1             isize=512    agcount=11, agsize=524159 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0 spinodes=0
    data     =                       bsize=4096   blocks=5242363, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal               bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    data blocks changed from 5242363 to 10485243

    パーティションが拡張された事を確認する

    $ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/xvda1       40G   20G   21G  50% /

    参考情報

    https://dev.classmethod.jp/cloud/aws/expand-ebs-in-online/

     

  • RDSをawsコマンドで削除する

    RDSをawsコマンドで削除する

    はじめに

    RDSをaws cliで削除したいことがある。認証さえ登録されていれば1行でできる。

    コマンド

    普通にdatabaseが消えるので要注意。

    aws rds delete-db-instance --db-instance-identifier [インスタンス名] --skip-final-snapshot

    確認

    作業前

    作業後

  • route 53をCLIで登録する

    route 53をCLIで登録する

    はじめに

    route 53の登録をコマンドで実行したい時がある。

    コマンドをまとめる。

    準備

    jsonファイルを作成

    {
     "Changes": [
     {
      "Action": "UPSERT",
      "ResourceRecordSet": {
       "Name": "server-original.stg.rds.sumito.jp",
       "TTL": 300,
       "Type": "CNAME",
       "ResourceRecords": [
       {
        "Value": "server-original-stg-rds.aaaddcda.ap-northeast-1.rds.amazonaws.com"
       }
       ]
       }
      }
      ]
    }

    aws route53コマンドで読み込ませる

    #変数登録
    DB_JSON=create_db.json
    HOST_ZONE_ID=`aws --profile staging route53 list-hosted-zones | jq -r '.[][] | select (.Name == "stg.rds.sumito.jp.") | .Id'`
    
    SDBM_ID=`aws --profile staging route53 change-resource-record-sets --hosted-zone-id ${HOST_ZONE_ID} --change-batch file://${DB_JSON} `

    ステータス確認

    echo $SDBM_ID | jq -r '.ChangeInfo.Status'
    PENDING

     

     

     

  • AWS batch + ECRなのか、fargate (EC2)なのか

    AWS batch + ECRなのか、fargate (EC2)なのか

    はじめに

    定期的にコンテナを立ち上げて処理を流したい。

    AWS batch + ECRというアプローチもあれば、fargate (EC2)でタスクスケジュールというアプローチもあります。

    それぞれメリットデメリットをまとめました。

    AWS batchについて

    aws batch 実態はEC2であります。
    CloudWatch Eventにより発火させることがユースケースとしては多いようです。

    AWS batchがEC2を起動して、コンテナをとってきて、、、という作業になるため、
    10分ほどかかる可能性があります。

    EC2のスポットインスタンスを利用することもできます。
    当然スポットインスタンスなので、突然処理が止まってしまう事もありますが、
    AWS batchには最大5回のリトライ設定も可能。
    jobのキューイング機能もあります。

    diskが難しくなったらEBSを増やせばよいというのも強みの一つです。
    ただし現状、EFSとかをattachできません。

    fargateについて

    retry処理はありません。
    AWS Step Functionsと組み合わせることができ、そちらでリロードすることは可能です。

    LambdaとLambdaを繋げるのに使われることが多いですが
    step functions にfargateを使うことで、ジョブをコントロールすることが可能です。
    fargateのdiskは10G それ以上増やすことは現状できません。

    AWS batch/fargate同じ部分

    fargate/EC2 ログは標準出力になります。

    コンテナの作成について

    AWS batchでもfargateでもdocker imageを作る必要があります。
    その作成のベストプラクティスについて

    現状のベストプラクティス

    CodePilpelineを使い以下のフローの中でコンテナのpushまで入れます。

    * source code
    * ビルド
    * デプロイ
    を一貫して行うことができます。

    実現しやすい方法

    コンテナ作れる人に適切にroleを設定します
    コンテナを作る環境を作り、そこでroleを付与します。

    creadenrial の管理

    タスクのところで環境変数で持てるので、
    そこで適当な文字を入れます(仮にAAAAA)。
    Secret manager に適当な文字(仮にAAAAA)と、実際のパスワードを記載することでcredential の管理が可能です。

    参考情報

    AWSについて体系的に学ぶことができるのでおすすめ。