あめがえるのITブログ

頑張りすぎない。ほどほどに頑張るブログ。

【今日の話題】AWSドキュメント サイト更新

ニュースというわけではないのですが、AWSの自学習をする際、ここからネタを探すことが多いのですが、サイトがリニューアルされてました!

サイトURL

https://docs.aws.amazon.com/ja_jp/

中身

さわやかな感じ(∩´∀`)∩

下にスクロールするとこんな感じ。確かこの画面のシンプル版がトップだった記憶。

ツール系も別枠になった模様。

リンク先はいつも通り。。。


感想

レイオフの話もあるし、サービス開発はそろそろやることがなくなったからドキュメント整備をやりだしたのかな。勉強でお世話になるが、古かったりするのでその辺も整備してほしいところ(;・∀・)

PythonでWebサーバ環境を作成してみた

Python単品でWebサーバ環境を作成することができると風のうわさで聞いたので試してみた(´ω`)

やること

ローカル環境でPythonの機能を使いWebサーバとして実行する

環境

Windows11{
  Python
}

実践

1.Webサーバ起動
 1-1.下記コマンドを実行
  > python3 -m http.server 8000
  ※これだけ。。

2.動作確認
 2-1.ブラウザで下記にアクセスしフォルダ階層が表示されることを確認
  http://localhost:8000

  ※pyファイル内のHTMLも表示してほしいのだが。。。

ChatGPT様より
python3 -m http.server 8000を実行すると、Pythonが組み込みのHTTPサーバを起動しますが、これは基本的に静的なファイルサーバで、HTMLファイルや画像ファイルなどをホストします。Pythonファイル(.py)は実行されず、そのままの形で提供されます。
Pythonファイル内にHTMLを記述し、それをウェブサーバとして提供したい場合、PythonのWebフレームワークを使用する必要があります。例えば、シンプルなフレームワークであるFlaskを使用することができます。

※うーん、、、これだけじゃあれなので。

3.htmlファイル表示
 3-1.2を実行したファルダ内に下記を作成

> vim test.html

<html>
<body>
Hello World!
</body>
</html>

 3-2.ブラウザで下記にアクセスし、[Hello World!]が表示されることを確認
  http://localhost:8000/test.html

※まぁ表示されるわな。。



感想

何かに使えるかな。。

Amazon Elastic Beanstalk(Server環境)をPythonで構築してみた

下記と同じようにElastic Beanstalkでサンプルアプリケーションを使ってWebサーバ環境を構築していきます。サンプルアプリケーションと実行環境をPythonに変えただけですが。。(∩´∀`)∩
amegaeru.hatenablog.jp

やること

Elastic BeanstalkのServer環境をPythonで構築する

実践!

1.サンプルアプリケーションをダウンロード
 1-1.下記サイトからpython.zipをダウンロード
  https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/tutorials.html
  中身のapplication.pyはこんな感じ

cat application.py

import logging.handlers

# Create logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# Handler 
LOG_FILE = '/tmp/sample-app.log'
handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes=1048576, backupCount=5)
handler.setLevel(logging.INFO)

# Formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# Add Formatter to Handler
handler.setFormatter(formatter)

# add Handler to Logger
logger.addHandler(handler)

welcome = """
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <!--
    Copyright 2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.

    Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at

        http://aws.Amazon/apache2.0/

    or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
  -->
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Welcome</title>
  <style>
  body {
    color: #ffffff;
    background-color: #E0E0E0;
    font-family: Arial, sans-serif;
    font-size:14px;
    -moz-transition-property: text-shadow;
    -moz-transition-duration: 4s;
    -webkit-transition-property: text-shadow;
    -webkit-transition-duration: 4s;
    text-shadow: none;
  }
  body.blurry {
    -moz-transition-property: text-shadow;
    -moz-transition-duration: 4s;
    -webkit-transition-property: text-shadow;
    -webkit-transition-duration: 4s;
    text-shadow: #fff 0px 0px 25px;
  }
  a {
    color: #0188cc;
  }
  .textColumn, .linksColumn {
    padding: 2em;
  }
  .textColumn {
    position: absolute;
    top: 0px;
    right: 50%;
    bottom: 0px;
    left: 0px;

    text-align: right;
    padding-top: 11em;
    background-color: #1BA86D;
    background-image: -moz-radial-gradient(left top, circle, #6AF9BD 0%, #00B386 60%);
    background-image: -webkit-gradient(radial, 0 0, 1, 0 0, 500, from(#6AF9BD), to(#00B386));
  }
  .textColumn p {
    width: 75%;
    float:right;
  }
  .linksColumn {
    position: absolute;
    top:0px;
    right: 0px;
    bottom: 0px;
    left: 50%;

    background-color: #E0E0E0;
  }

  h1 {
    font-size: 500%;
    font-weight: normal;
    margin-bottom: 0em;
  }
  h2 {
    font-size: 200%;
    font-weight: normal;
    margin-bottom: 0em;
  }
  ul {
    padding-left: 1em;
    margin: 0px;
  }
  li {
    margin: 1em 0em;
  }
  </style>
</head>
<body id="sample">
  <div class="textColumn">
    <h1>Congratulations</h1>
    <p>Your first AWS Elastic Beanstalk Python Application is now running on your own dedicated environment in the AWS Cloud</p>
    <p>This environment is launched with Elastic Beanstalk Python Platform</p>
  </div>
  
  <div class="linksColumn"> 
    <h2>What's Next?</h2>
    <ul>
    <li><a href="http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/">AWS Elastic Beanstalk overview</a></li>
    <li><a href="http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/index.html?concepts.html">AWS Elastic Beanstalk concepts</a></li>
    <li><a href="http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/create_deploy_Python_django.html">Deploy a Django Application to AWS Elastic Beanstalk</a></li>
    <li><a href="http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/create_deploy_Python_flask.html">Deploy a Flask Application to AWS Elastic Beanstalk</a></li>
    <li><a href="http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/create_deploy_Python_custom_container.html">Customizing and Configuring a Python Container</a></li>
    <li><a href="http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/using-features.loggingS3.title.html">Working with Logs</a></li>

    </ul>
  </div>
</body>
</html>
"""

def application(environ, start_response):
    path = environ['PATH_INFO']
    method = environ['REQUEST_METHOD']
    if method == 'POST':
        try:
            if path == '/':
                request_body_size = int(environ['CONTENT_LENGTH'])
                request_body = environ['wsgi.input'].read(request_body_size)
                logger.info("Received message: %s" % request_body)
            elif path == '/scheduled':
                logger.info("Received task %s scheduled at %s", environ['HTTP_X_AWS_SQSD_TASKNAME'],
                            environ['HTTP_X_AWS_SQSD_SCHEDULED_AT'])
        except (TypeError, ValueError):
            logger.warning('Error retrieving request body for async work.')
        response = ''
    else:
        response = welcome
    start_response("200 OK", [
        ("Content-Type", "text/html"),
        ("Content-Length", str(len(response)))
    ])
    return [bytes(response, 'utf-8')]


pythonの中にHTMLを入れて、ファイル名と同じメソッド内にREST APIのPOSTメソッドの受信設定を入れてるようです。こう作るとREST APIアプリケーションになるんですね。(´Д`)ホエー

2.Elastic Beanstalkアプリケーション作成
 2-1.Elastic Beanstalk-[アプリケーションを作成]
 2-2.下記を入力
  ・環境枠:ウェブサーバー環境
  ・アプリケーション名:sample-python-app
  ・環境名:sample-python-env
  ・プラットフォームタイプ:マネージドプラットフォーム
  ・プラットフォーム:python
  ・アプリケーションコード:コードをアップロード
  ・バージョンラベル:1.0
  ・ソースコードのオリジン:ローカルファイル
  ・ファイル名:python.zip
  ・プリセット:単一インスタンス(無料利用枠の対象)
 2-3.[次へ]
 2-4.サービスアクセスの設定が表示されたら、[レビューまでスキップ]
 2-5.レビューが表示されたら、[送信]

3.動作確認
 3-1.Elastic Beanstalk-[環境]-[sample-python-env]
 3-2.[ドメイン]内のURLをクリックし、PythonのWelcomeページが表示されることを確認


感想

これWebサーバのアプリケーションはなにで動かしているのだろう。謎も深まり、夜も深まるね(;・∀・)

【今日の話題】Microsoft 365などのOffice製品が6月1日から値上げ

時事ネタにも詳しくなりたいのでその日目についた話題についてつぶやき程度に書いていこうと思います。


記事抜粋

タイトル:Microsoft 365などのOffice製品が6月1日から値上げ

日本マイクロソフトは、Microsoft 365とOffice製品の値上げを6月1日に実施する。同社は、ソフトウェア製品およびオンラインサービスの現地価格の影響を定期的に評価し、地域間の合理的な整合性を確保しているとし、今回の変更はその評価により調整したもの。
Microsoft 365とOffice全26製品が対象で、値上げ幅は8.7%(Microsoft 365 Basic 12カ月版)~16%(Microsoft 365 Personal 1カ月版)。
Microsoft 365 Personal 1ヶ月版」は、1,167円から1,354円(16%)、12ヶ月版は11,800円から13,545円(14.8%)。

感想

IT業界にも値上げブーム到来。。
ChatGPTやAzureなんかにも課金しているのでこりゃほんとに困る。
(当然M365も課金済み)
どうも2023年4月1日には先行してOffice製品の法人向けライセンスも値上げしていたらしい。
個人用途はLabraOfficeにしようかな。。

AWS Elastic Beanstalkの.ebextensionsについて調べてみた

.ebextensionsはElastic Beanstalkの環境の設定ができるらしいのですがそれ以上はよくわかってなかったので調べてみた。(∩´∀`)∩ < イエー

.ebextensionsとは

ウェブアプリケーションソースコードに追加することで、環境を設定し、環境に含まれるAWSリソースをカスタマイズできる。

使い方

 ・設定ファイルの拡張子は.configとしてYAMLもしくはJSON形式で作成する。
 ・設定ファイルを作成したら.extensionsというフォルダ内に配置してでデプロイする。
 ・設定ファイルが正しくフォーマットされていない場合、新しい環境の起動は失敗し、回復不可能になる。
  ※こわっ。。。(;・∀・)

.ebextensionsで設定できるリソースと詳細

設定ファイルに下記キーと値を設定することで設定が可能

◆オプション設定
option_settingsキーで環境変数の設定ができる。

WindowsLinuxサーバ

キー 詳細
packages ElasticBeanstalkがサポートしているパッケージマネージャ(yumpythonなど)を使用してアプリケーションのダウンロード、インストールができる。
groups Linux/UnixグループをEC2インスタンス上に作成できる。(Linuxサーバのみ)
users Linux/UnixユーザをEC2インスタンス上に作成できる。(Linuxサーバのみ)
Source 公開URLからアーカイブファイルをダウンロードし、EC2インスタンス上のディレクトリに解凍できる。
files EC2インスタンス上にファイルを作成できる。すでにファイルが存在する場合は既存ファイルの拡張子に.bakが付加されて保持される。
commands EC2インスタンスでコマンドが実行できる。
services インスタンスが起動されるときに開始または停止する必要のあるサービスを定義できる。
container_commands アプリケーションのソースコードに影響するコマンドを実行できる。


◆カスタムリソース
Elastic Beanstalkで作成される下記のAWSリソースに対してResourcesキーで設定ができる。

  • DynamoDB
  • CloudWatch
  • SNS
  • ELB
  • Elastic Cache
  • RDS
  • SQS


感想

実際設定しているのはこまごま入っていて大変そうな印象だったけど、一つ一つはサクッと設定できそう。
※だいたいそうか。。。

Amazon Elastic Beanstalkで.ebextensionsを設定してみた

.ebextensionsを実際に設定してみてイメージをつかんでいきたいと思います!!

やること

.ebextensionsを利用してElastic Beanstalkで構築されるEC2インスタンスに対し下記設定を行う。

  • パッケージインストール
  • グループ作成
  • ユーザ作成
  • bashコマンド実行

環境

下記で作成したものを利用
amegaeru.hatenablog.jp

実践!

1.configファイルを作成
下記内容でtest.configファイルを作成

### パッケージ(packages) ###
packages: 
  yum:
    docker: ['18.03.1ce-3.amzn2.x86_64']
    ## versionは[$ yum --showduplicates search docker]で確認
    ## パッケージ名が[docker-18.03.1ce-3.amzn2.x86_64]の場合、[docker-]が自動で付与されるため、以降の18.~を記載する必要がある。
    dnsmasq: [] 
    ## 空白の場合、最新バージョンをインストールする形になる。

### グループ(groups) ###
groups:
  groupOne: {} 
  ## 空白の場合、gidはランダムで付与される
  groupTwo:
    gid: "45"

### ユーザ(users) ###
users:
  myuser:
    groups:
      - groupOne
      - groupTwo
    uid: "50"
    homeDir: "/tmp"

### コマンド(commands) ###
commands:
  command1:
    command: echo "test1" >> /tmp/test1.txt
  command2:
    command: touch /tmp/test2.txt


2.アプリケーションへconfigファイルを組み込み
 2-1.php.zipを解凍
 2-2..ebextensions配下に作成したtest.configファイルをコピー
 2-3.phpフォルダの中身をZip圧縮

◆Zipファイルの構成
php.zip
 ├ .ebextensions
 │  ├ logging.config
 │  └ test.config
 ├ cron.yaml
 ├ EBSampleApp-PHP.iml
 ├ index.php
 ├ logo_aws_reduced.gif
 ├ scheduled.php
 └ styles.css


3.アプリケーションをデプロイ
 3-1.[環境]-[sample-env]-ナビゲーションペインから[アプリケーションバージョン]
 3-2.[アップロード]
 3-3.アプリケーションバージョンをアップロードが表示されたら下記を入力
  ・バージョンラベル:3.0
  ・説明:空白
  ・アプリケーションをアップロード:作成したZipファイルを選択
 3-4.[アップロード]をクリック
 3-5.バージョンラベルが[3.0]のアプリケーションにチェックを入れる
 3-6.[アクション]-[デプロイ]
 3-7.アプリケーションバージョンをデプロイが表示されたら下記を入力
  ・環境:sample-env
 3-8.[デプロイ]
  ※ヘルスがDegradedになる場合、EC2インスタンスへ接続し下記コマンドでチェック

$ cat /var/log/eb-engine.log
$ cat /var/log/cfn-init.log


4.動作確認
 4-1.作成されたEC2インスタンスSSH接続
 4-2.下記を実行し設定が反映されていることを確認

$ yum list installed | grep docker
docker.x86_64                       18.03.1ce-3.amzn2                @amzn2extra-docker
$ yum list installed | grep dnsmasq
dnsmasq.x86_64                      2.76-16.amzn2.1.3                @amzn2-core
$ cat /etc/passwd | grep myuser
myuser:x:50:893::/tmp:/sbin/nologin
$ cat /etc/group | grep groupOne
groupOne:x:894:myuser
$ cat /etc/group | grep groupTwo
groupTwo:x:45:myuser
$ cat /tmp/test1.txt
test1
$ cat /tmp/test2.txt
[空白]




感想

パッケージインストールのバージョン設定が苦戦した。。( ;∀;)

Python仮想環境作成してみた

とりあえず動けばいいやで作っているプログラムですが、ちゃんとパッケージ管理したほうがよいと思い始めたので(遅い)、Pythonで仮想環境を導入してみた。

やること

Windows11内にPythonの仮想環境を作成する

実践!

1.仮想環境作成
 1-1.仮想環境用フォルダ作成

> md c:\python

 1-2.仮想環境作成

> python -m venv .venv


  下記の構成でファイルが作成される

c:\python
 └ .venv
   └ Scripts
     ├ activate.bat
     └ ・・・


2.仮想環境切り替え
 2-1.下記を実行

> cd c:\python 
> .venv\Scripts\activate.bat

  プロンプトの頭に仮想環境名が表示されることを確認

(.venv) c:\python>


3.仮想環境内パッケージ確認

(.venv)> pip freeze
※何も表示されないはず


4.仮想環境終了

deactivate


5.仮想環境外パッケージ確認
※仮想環境内外でパッケージのインストール状況が違うことを確認

> pip3 freeze
anyio==3.6.2
fastapi==0.95.1
idna==3.4
pydantic==1.10.7
sniffio==1.3.0
starlette==0.26.1
typing_extensions==4.5.0


感想

パッケージのバージョンで痛い目をよく見るので極力使っていこうと思います(;・∀・)