AWS

2017.12.31 study-daily

Not Posted

2017年記事にしそこねたやったこと

  • コマンドプロンプト(バッチファイル)
  • コマンドプロンプトからPowershell実行
  • シェルスクリプト
  • AWS System Manager Run Command (sum)
  • VagrantでSQL Server他DBもセットアップしたよ
  • Nano Server試そうとした
  • React Redux…etc
  • Webpack
  • Docker再入門とWP開発環境の作成
  • WordPressテーマ開発用のベースを作成した
  • AWS Lambda をPythonで
  • AWS Lambda をNode.jsで
  • CakePHP 3 tutorial 少しやった
  • Vagrant でPHP開発環境作成
  • Terraform試した
  • Hugo用テーマを作成した

忙しいというよりは怠惰だったのと、Hugoのテーマを変えてからやろうと言い訳してるうちに忘れてしまった。

コマンドプロンプト(バッチファイル)

Windowsサーバーでバッチファイルで操作しようとした時に少しおぼえた。

例えばこんなこと。実行結果を変数に入れるのが面倒。

setlocal enabledelayedexpansion
for /f %%a in ('whoami') do @set watashi=%%a
echo %date% %time% !watashi! >> execute.log

別プロセスで実行する方法

[Read More…]

2017.03.31 study-daily

jaws-ug container

JAWS-UG コンテナ支部 の勉強会に行ってきた

行ってきた。。

前佛さんのお話

Dockerは仕様でコンテナが技術っていう話。

開発環境と本番とかステージングの環境が違うっていう問題はコンテナで解決できますね。

Dockerのイメージ・レイヤの概念のおかげで?ベースイメージを共有したり、イメージをコピーするのにも差分レイヤだけコピーするので早いとか。

他のコンテナ技術との大きな違い

今までに同様の技術はあったが、Dockerが大きく違うのは、DockerHubの存在。

自分が作ったイメージはもちろん、他人が作ったものも共有(流用)できる。

docker イメージの Github版。

注意点

ストレージドライバについては要件を考慮して決めましょう的な話。

このあたりを読むと理解が深まるのでしょう。

イメージ、コンテナ、ストレージ・ドライバの理解

ストレージ・ドライバの選択

ECS関連のアップデート

Windows コンテナ も試せる Windows Server 2016 の AMIもでてるよ。とか。

ECRについて

  • フルマネージドDockerレジストリサービス
  • イメージの容量に対して課金
  • コンテナイメージは自動的に暗号化できる設定がある
  • もちろんIAM使える
  • ECRをCloudTrailで追跡可能
  • CredentialHelper使ってね

業務上プライベートなDockerイメージを置く場所を作りたい場合なんかいいですね。

社内ビッグデータ基盤にバッチ用コンテナ環境を構築してみた

既存の触りたくないバッチ環境をそのままに、API Gateway、ECS、SQSなんかを活用してバッチ処理環境を改善した話。

既存のサーバーには何も追加したくない、が、curlは基本的に入っているので処理スタートをcurlから始める。

API Gateway を通じてリクエストを受け取り、ECS環境でバッチ処理、処理結果をSQSで通知みたいな。

ボリュームはできるだけ使わない。ログは全てCloudWatchLogsに流す。

すごい。

NTTとDocker

ECSで複数コンテナ構成な場合、SpotFleetを活用するとコストを抑えられますって話。

ECSを活用する上での勘所

データについて

  • なるべくDocker Volumeを使わないで済む設計にする
    • いつでもインスタンスを捨てられるようにする設計
    • 永続DBデータはRDS,DynamoDBに、ファイルはS3に、ログはCloudWatchLogsを活用する
    • awslogs ログドライバ便利です。積極的に使っていきましょう。
  • URLパスの設計
    • ALBを活用しましょう
    • 関連サービスのエントリポイントとかは環境変数で渡しましょう。
  • セッションの管理
    • インスタンスにセッションを任せてしまうのは複数コンテナでサービスというのと相性悪い
    • ElastiCache,Redis,Memcachedを活用しましょう。

環境構築について

書き洩らした。ECS-optimized AMIを使いましょうというのとSpotFleet活用しようみたいな

[Read More…]

Vagrant、最終的にはEC2にAnsibleでWordPressを構築を試みる2

・botoが使えないってエラーになる。

 →次のURLで解決 https://groups.google.com/forum/#!topic/ansible-project/ftlmfIC1DHk

つまり、ansibleがなぜか現在動いているバージョンのライブラリを参照出来ないっぽいのでこれまたなぜか

  hostsにどこのpythonを使っているのか書いてあげる必要があったということ。なぜansible.cfgではないのか

・契約アカウント?で試してたらCredentialエラーが出てて、試しにIAMアカウント作成してそのIAMアカウントを

 使ったら成功した。なんで?

・ApacheのVHOSTのRootディレクトリが700だったので403エラーで表示されなかった。755に変更して解決。

・VirtualHostの設定を行う場合、どこかに「NameVirtualHost」の記述が必要。

 というより、NameVirtualHostの記述内容とその後のVirtualHostディレクティブの内容に整合性がないといけない。

 なので「NameVirtuakHost *:80」の記述があれば、その後<virtualhost *:80>VirtualHostディレクティブが

 ないといけない。

もしも<virtualhost {{hostname}}:80>みたいな記述をしていた場合、NameVirtualHost {{hostname}}:80の宣言もないといけない。

整合性が撮れてないと、宣言が足りないとかそんなVirtualHostディレクティブはないとか警告が出る。

・Ubuntuに入ってるApache2のVirtualHostの有効化無効化

 sites-availableディレクトリにVirtualHost設定書く

 a2ensite {{vhost_filename}} で有効化、a2dissite {{vhost_filename}} で無効化

・Hostの指定が足りない!?

Could not reliably determine the server’s fully qualified domain name, using for ServerName

こんなエラーが出る。hostsファイルに127.0.1.1 にhogehoge.localを追記してあげたら直った

 つまり、hostsファイルにhostnameが127.0.1.1で定義されている場合、Apacheが名前解決のエラー出すので、

 そこに{{hostname}}.localを追記する処理追加

・Ansible用MySQLの設定追加

Ansibleでmysql_userモジュールを使ってユーザーを追加する際に、MySQLが外部サーバーの場合は(Webサーバーから接続用ユーザーの作成の場合は)

host=%,host=localhostの記述が必要、同時に作れるのか試してない。自分は別のtaskとしてそれぞれ実行(同じユーザー名で別hostのユーザーを2回作成)

リモートユーザーにあたる側(今回はWebサーバー側)にはmysql_clientのインストールが必要

[Read More…]

Vagrant、最終的にはEC2にAnsibleでWordPressを構築を試みる

Ansibleに興味があって試そうとして、対象のサーバーをまずはVagrantを使おう、最終的にはEC2を使う形まで持って行こう。という企画です。アプリとしてはAnsibleのチュートリアルに出てきたのでWordPressを構築するのを試します。

の、前にAWSのS3試したので。

・IAMでアカウント作ってセキュリティポリシーでS3の接続出来るバケット制限したり、操作権限制限したり出来る

・Pythonのbotoを入れて最初S3の操作しようと思ったけど、マルチパートアップロードのやり方が分からなくて挫折

・AWS-CLIが楽ちん、S3に対して勝手にマルチパートアップロードしてくれる。でもWindowsで扱う場合、お決まりの文字コード警告がでますね。

・PHPのSDKでS3に対するファイルのリスト取得、ダウンロード、アップロード(マルチパートアップロード)を作成。思ってたより簡単。

Ansible試す

・Vagrantで作成したboxにAnsibleでSSHに接続する場合、SSHの設定をansible.cfgにpathを書いていない場合、デフォルトの~/.ssh/configを参照してしまう。

・Ansibleはインベントリファイルに書いた名前でSSHする。だからSSHの設定ファイルのHost名は合わせる

・AnsibleのDocument(英語)である程度分かるんですが、ansible-docコマンドで、ある程度何が出来るか雰囲気だけ分かる。

・Ansibleで指定するモジュールはユーザーを作るadd、ファイルを転送するcopy、shellを実行するshell、ファイルを実行?するcommand、aptやyumあたりがよく使うモジュール、設定ファイルで編集が1行で済む場合はlineinfile、結構いろいろある場合は完成版の設定ファイルをcopyするかJinja2で作成したtemplateファイルを使う

・Ansibleのnotifyで呼び出されるのは同じRoleのhandlerに登録されたYamlのnotifyで指定した値と同じnameのものが処理されるようだ

以下WordPressでApacheとMySQLを別サーバーにする場合に忘れず行いましょう的なMySQLに関する事

・AnsibleでlocalhostだけじゃなくてWebサーバー側のIPのも作成しましょう

・Ansibleでmy.cnfでbind_addressでWebサーバーから接続できるようループバックからIPに変更する

[Read More…]