タグ: AWS

  • 【DOP-C02】Elastic Beanstalkの概要と主要な概念についてまとめてみた

    【DOP-C02】Elastic Beanstalkの概要と主要な概念についてまとめてみた

    はじめに

    DOP-C02の勉強を進めていく中で、Elastic Beanstalkに対する理解が曖昧であることに気づきました。(というか実際に触っていないのでイメージが付かない)

    今日はElastic Beanstalkの概要についてまとめます。可能ならサンプルアプリケーションを作って理解を深めようと思います。(時間なかったのでリベンジします。)

    1. Elastic Beanstalkとは?

    AWS Elastic Beanstalk は、Web アプリケーションの

    • デプロイ
    • 管理
    • スケーリング

    を簡素化するためのフルマネージドサービスです。
    カテゴリとしては、PaaSに属します。

    開発者がアプリケーションのソースコード(ZIP ファイルや WAR ファイル)や Docker コンテナイメージをアップロードするだけで、Elastic Beanstalk は容量のプロビジョニング、ロードバランシング(ALB/NLB)、Auto Scaling による自動拡張、およびアプリケーションの正常性モニタリングを自動的に調整・実行します。

    プログラムを書いてソースコードをアップするだけで、インフラを構築してくれる夢のようなサービスです。

    1-1. Elastic Beanstalkの名前の由来

    「Beanstalk(ビーンストーク)」という名称は、英語で「豆の茎(Bean + stalk)」を意味します。
    ※ 私はてっきり「Beans + talk」(豆たちの会話?)と思っていました…笑

    この名前は、有名なイギリスの童話『ジャックと豆の木(Jack and the Beanstalk)』に由来しているとされています。
    童話の中で小さな魔法の豆を庭に撒くと、一晩で天高く雲(クラウド)まで届く巨大な茎へと成長したように、「開発者が小さなコード(豆)を投じるだけで、自動的にクラウド上の堅牢でスケーラブルなインフラストラクチャ(巨大な茎)へと成長・展開できる」というサービスコンセプトが表現されています。

    参考: AWSのサービス名の意味を掘り下げてみた ~コンピューティングサービス編~

    1-2. Elastci Beanstalkの特徴とメリット

    この章では、Elastic Beanstalkの特徴とメリットについて説明をします。

    1-2-1. 幅広いランタイム・プラットフォームのサポート:

    Elastic Beanstalkは、幅広い環境をサポートしています。
    以下の以外にもDockerコンテナ環境もサポートしています。

    • Elastic Beanstalkがサポートしているプログラミング言語
      • Java
      • .NET
      • PHP
      • Node.js
      • Python
      • Ruby
      • Go
    • Webサーバ
      • Apache
      • Nginx
      • Passenger
      • IIS

    1-2-2. インフラストラクチャに対する完全な制御権

    作成されたリソースは、通常のAWSリソースと同じようにカスタマイズができます。
    ここはLightsailとは違う点ですね。

    1-2-3. 追加料金なしの明瞭な料金体系

    Elastic Beanstalk 自体の利用に対する追加料金は発生しません。
    作成・稼働する EC2 インスタンス、ロードバランサー、S3 バケットなどの AWS リソース使用料のみが発生します。

    2. Elastic Beanstalkを理解するための主要な概念

    この章では、Elastic Beanstalkを利用するために理解する必要がある概念について説明をします。

    参考: Elastic Beanstalk の概念を理解する

    2-1. アプリケーション(Application)

    Elastic Beanstalkにおける一番大きな概念です。
    「プロジェクト全体」と理解してあげると良さそうです。

    2-2. アプリケーションバージョン(Application Version)

    デプロイ可能なコードのまとまり(ZIPファイル、WARファイル、Dockerイメージの定義等)の特定のVersionです。

    アップロードされたソースコードは内部的に Amazon S3 バケットに安全に格納され、一意のバージョンラベルで管理されます。
    なので、実体は「S3のオブジェクト」と理解してあげても良さそうです。

    2-3. 環境(Environment)

    環境は、前述のアプリケーションバージョンを実行する AWS リソース(EC2, ALB, RDSとか…)の集合です。

    1環境⇔1アプリケーションバージョンという関係性です。
    当然、複数環境(例: prd, stg, dev)を作れば、複数の環境で並列稼働できます。

    環境を作成すると、Elastic Beanstalk は、指定したアプリケーションバージョンを実行するために必要なリソースを AWS アカウントで作成します。

    2-4. 環境階層(Environment Tier)

    用途に応じたインフラのパターンです。
    環境階層は、Elastic Beanstalk がサポートするリソースを決定します。

    • WebサーバTier: HTTP(S)でホストされるWebアプリケーション
    • ワーカーTier: SQSから、キューをプルするアプリケーション
    • クラスターTier: EKSコンテナを使用するアプリケーション

    2-5. プラットフォーム

    OS、プログラミング言語の実行環境、Web サーバー、に、Elastic Beanstalk 専用コンポーネント(ヘルス管理エージェント等)が組み合わせられた実行基盤です。

    環境とごちゃごちゃになりそうですが、プラットフォームがインフラの型(クラス)であるのにたいして、環境はプラットフォームから作成されたオブジェクト と理解すると良さそうです。

    むすび

    今回は、ElasticBeanstalkの概要をまとめてみました。

    実際に触ったわけではないので問題が解けるかどうかは微妙ですが、
    まぁ一度文章にしておけば、あとで参照できますしなんとかなるでしょう。

  • 【TS】LightsailでSSL/TLS 証明書の取得に失敗する

    【TS】LightsailでSSL/TLS 証明書の取得に失敗する

    about this page

    【WHAT】このページには何が書いてあるのか?

    • LightsailでSSL/TLS証明書の取得に失敗したときの対処法
    • 以下のエラーの原因と、その対処法について
    We encountered an error while configuring the Let's Encrypt SSL/TLS certificate on your instance blog in the ap-northeast-1 Region. Try again later.
    
    1 DNS records do not match instance IPs. Did not find IPv6 match for 1 domain(s). Verify the values for your DNS records are correct. After you change DNS record values, you must wait for the DNS cache to expire before you can try again.

    【WHY】このページの目的

    • 同じエラーに出くわした人の助けになるため。
    • 自分の備忘録としての記録

    【WHO】このページの対象読者

    • LightsailでWordPressを運用しており、SSL/TLS証明書の取得に失敗した人
    • 自分自身

    【HOW】どのようにして記載するのか?

    • 対処方法を端的に説明した後、原因を解説する

    発生した現象について

    エラー画面

    エラー画面
    発生したエラーの内容

    エラー内容

    Amazon LightsailでWordPressのインスタンスを作成し、Route53でドメインを取得後、Lightsailのセットアップ機能でセットアップを行っていたところ、SSL/TLS証明書の取得時に下記のエラーが発生した。

    We encountered an error while configuring the Let's Encrypt SSL/TLS certificate on your instance blog in the ap-northeast-1 Region. Try again later.
    
    1 DNS records do not match instance IPs. Did not find IPv6 match for 1 domain(s). Verify the values for your DNS records are correct. After you change DNS record values, you must wait for the DNS cache to expire before you can try again.

    対応方法

    対応方法は以下の2ステップになります。

    1. インスタンスに IPv6 アドレスをアタッチする。
    2. 対象ドメインのDNSレコードのAAAAレコードにPv6アドレス設定する。

    【手順1】インスタンスにIPv6アドレスをアタッチする

    対象インスタンスをクリックして選択してください。

    1. 対象インスタンスを選択する
    1. 対象インスタンスを選択する

    「ネットワーキング」タブを選択してください。

    2. 「ネットワーキング」タブを選択
    2. 「ネットワーキング」タブを選択

    画面を下にスクロールして、IPv6アドレスを取得してください。

    3. IPv6アドレスを取得する
    3. IPv6アドレスを取得する

    【手順2】対象ドメインのDNSレコードのAAAAレコードにPv6アドレス設定する

    左パネルから「ドメインとDNS」を選択し、対象DNSゾーンの設定画面に遷移してください。

    4. 「ドメインとDNS」を選択し、対象DNSゾーンの設定画面に飛ぶ
    4. 「ドメインとDNS」を選択し、対象DNSゾーンの設定画面に飛ぶ

    「DNSレコード」タブを選択後、「レコードの追加」をクリックし、DNSレコードの追加画面に遷移してください。

    5. レコードの追加画面に遷移
    5. レコードの追加画面に遷移

    プルダウンから「AAAA」レコードを選択し、ドメイン名の箇所に@マークを入力してください

    「解決先」テキストボックスに取得したIPv6アドレスを入力してください。

    6. AAAAレコードの設定
    6. AAAAレコードの設定

    設定が完了したら、Lightsailのコンソールから「WordPressウェブサイトをセットアップする」のガイダンスに従って操作をしてください。

    私のケースでは、これで解決しました。
    もし、上手くいかない場合や、情報が不足している場合、コメント等でフィードバックをいただけると幸いです。

    この記事が誰かの役に立つことを願いします。


    問題の原因

    以下では、「なぜSSL証明書の取得に失敗したのか?」と「なぜ、今回の作業で解決したのか?」の2点について解説していきます。

    なぜSSL証明書の取得に失敗したのか?

    エラー文言の内容を理解する

    まずは、エラー文言の内容を正しく理解するところから始めましょう。

    We encountered an error while configuring the Let's Encrypt SSL/TLS certificate on your instance blog in the ap-northeast-1 Region. Try again later.
    
    1 DNS records do not match instance IPs. Did not find IPv6 match for 1 domain(s). Verify the values for your DNS records are correct. After you change DNS record values, you must wait for the DNS cache to expire before you can try again.

    翻訳すると、以下のような文章になります。

    We encountered an error while configuring the Let's Encrypt SSL/TLS certificate on your instance blog in the ap-northeast-1 Region. Try again later.
    (インスタンス blog に対して、ap-northeast-1 リージョンで Let's Encrypt SSL/TLS 証明書の設定中にエラーが発生しました。後でもう一度試してください。)
    
    1 DNS records do not match instance IPs. Did not find IPv6 match for 1 domain(s). Verify the values for your DNS records are correct. After you change DNS record values, you must wait for the DNS cache to expire before you can try again.
    (1 DNS レコードがインスタンスの IP と一致しません。1 つのドメインに対して IPv6 の一致が見つかりませんでした。DNS レコードの値が正しいことを確認してください。DNS レコードの値を変更した後、DNS キャッシュが期限切れになるまで待ってから、もう一度試す必要があります。)

    要約すると以下のような内容です。

    「IPv6のDNSレコードが正しく設定されていないので、証明書の取得に失敗しているよ」

    なぜ、今回の作業で解決したのか?

    Lightsailで提供されているWordPressの設定ツールは、SSL/TLS証明書を取得する際に、内部的にLet’s Encryptを利用しています。

    Let’s Encryptは、ドメインの所有権を確認するために、DNSレコードをチェックします。
    AWS Lightsailでは、デュアルスタック(IPv4とIPv6の両方)をサポートしており、デフォルトでIPv6アドレスが割り当てられます。

    今回のエラーは、DNSレコード(AAAAレコード)にIPv6アドレスが正しく設定されていなかったため、Let’s Encryptがドメインの所有権を確認できず、証明書の取得に失敗していました。

    AAAAレコードに正しいIPv6アドレスを設定することで、Let’s Encryptがドメインの所有権を確認できるようになり、証明書の取得に成功した。というわけです。

    参考にしたサイト