ラベル beanstalk の投稿を表示しています。 すべての投稿を表示
ラベル beanstalk の投稿を表示しています。 すべての投稿を表示

2024年1月4日木曜日

新しくBeanstalkで環境を作ろうとしたらaws-elasticbeanstalk-ec2-roleが無かった件

 新しいアカウントでBeanstalk環境を作成したところ、EC2の立ち上げに失敗。

みたらaws-elasticbeanstalk-ec2-roleが無いと。

自分でaws-elasticbeanstalk-ec2-roleを用意する方法をいろいろ調べてたけどどれもうまくいきませんでした。

最終的に、IAMロールを作成するときに、ユースケースで「EC2 Role for AWS Systems Manager」を選択すると、インスタンスプロファイルの ARNが割り当てられることがわかりました。

その上でBeanstalk環境を作成するとEC2プロファイルで指定ができるようになり、環境構築に成功と相成りました。

2022年8月15日月曜日

Beanstalkをamazon linux2に上げたら、cronでrakeコマンドが叩けなくなった件

 今まで、Amazon linuxベースで、Beanstalkを展開していたら、下記のようにシェルスクリプトを書いておけばrailsのタスクを実行できていましたよね。

#!/usr/bin/env bash
set -xe
EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k script_dir)
EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir)
EB_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir)
. $EB_SUPPORT_DIR/envvars
. $EB_SCRIPT_DIR/use-app-ruby.sh

cd /var/app/current
bundle exec rake ***:*****

ところがAmazon linux2になったら、/opt/elasticbeanstalk/bin/get-configの情報が変わって、script_dirが無いよ!というエラーがでるようになりました。

環境変数はAWSが公表している通り、下記ページを参考にすれば読み込むことができて、
下のように環境変数読み込み部分を削除してしまえば、サーバにログインしてから下記ファイルを直接叩いたら、動くことが確認できました。
#!/usr/bin/env bash
cd /var/app/current
bundle exec rake ***:*****
しかしながら、cronで叩くと、エラーがでて動きません。
/usr/bin/env: ruby: No such file or directory

どうしたものかと試行錯誤の結果、
crontabファイルのPATH指定部分に、rubyのディレクトリを追加
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/elasticbeanstalk/.rbenv/shims
かつ、シェルスクリプトで上記AWS公表の環境変数の更新をかけたら動きました。
#!/usr/bin/env bash
source /etc/profile.d/sh.local
cd /var/app/current
bundle exec rake ***:*****

なんかBeanstalk Amazon linux2について、CronとかRakeタスクの情報がぜんぜんないのですが、みなさんあたりまえに対応しているのか、そもそもサーバで叩かないのがセオリーなのか、どうなのでしょう・・・・・?



2022年7月12日火曜日

BeanstalkをAmazon linux2にあげるにあたって苦労した所

2022/6末に、Amazon linuxが廃止されて、Amazon linux2になるということで対応を進めていましたが、期限を過ぎてもうまくいかなかったのがようやく対応できたので、メモ。

Beanstalkで環境を作ると、100 % of CPU is in use. になり続ける。

デプロイが完了しても、この状態が続きました。ログを見ると、Pumaログに、こういったエラーが出続けていました。

[8108] ! Unable to start worker
[8108] /var/app/current/vendor/bundle/ruby/2.7.0/gems/actionmailer-6.1.6/lib/action_mailer/base.rb:589:in `method_missing'
[8108] Early termination of worker


ただ、actionmailerのバージョンや、その周りのrails関連のバージョンは問題がなさそうでした。これ以外のエラーがログに無いという状態で、Rubyを3.0の環境に変えてみたり、設定を順に削除してなるべくシステムをシンプルにしてみても解決せず。

サーバでRakeコマンドを使えるようにした。

スムーズにAL2への以降ができた別プロジェクトで、cronが動いていないことがわかり、調べていると、rakeコマンドがAL2環境で使えないことがわかりました。ネットでは、

./opt/elasticbeanstalk/support/envvars

を読み込むと簡単みたいな記事が散見されましたが、サーバ内にenvbars無い。
そこで見つけたのがこちら
https://aws.amazon.com/jp/premiumsupport/knowledge-center/elastic-beanstalk-env-variables-shell/

.ebextentions/01_set_vars.confに以下を追加してデプロイ。
commands: setvars: command: /opt/elasticbeanstalk/bin/get-config environment | jq -r 'to_entries | .[] | "export \(.key)=\"\(.value)\""' > /etc/profile.d/sh.local packages: yum: jq: []
これでrakeコマンドを始めとして色々なコマンドが使えるようになりました。
サーバにログインし、
#cd /var/app/current
#bundle exec pumactl start
PUMAを動かしてみると、rails6に変えたことで出てきたエラーが表示されました。これらのエラーはローカルではでなかったものでした。
ということで、エラーを取り除いて再度デプロイ。
解決!

2014年10月24日金曜日

AWS Beanstalkで環境を環境変数にいれる

Beanstalkで環境を、PRODUCTION、STAGING、DEVELOPMENTとか分けてCakePHPで運用しています。
データベースとかBootstrapの中身を環境でわけてます。
if (Z_ENVIRONMENT=='PRODUCTION') {
    class DATABASE_CONFIG {
      var $default = array(
      );
    }
}elseif (Z_ENVIRONMENT=='STAGING') {
    class DATABASE_CONFIG {
      var $default = array(
      );
    }
} else {
    class DATABASE_CONFIG {
      var $default = array(
      );
    }
}

Beanstalkのコンソールで、$_SERVER['PARAM1']に環境をセットして、CoreファイルでそれをZ_ENVIRONMENTにセットしていて、普通にウェブで見るには問題ないのですがcronのとき、$_SERVER['PARAM1']がカラになってしまうので、さて困ったと。

調べていたら、
/opt/elasticbeanstalk/support/envvars.d/sysenv
このファイルにPARAM1なんかが書き込まれているようだったので、

if(isset($_SERVER['PARAM1'])){
  define('Z_ENVIRONMENT', $_SERVER['PARAM1']);
}else{
  $match = array();
  if(file_exists('/opt/elasticbeanstalk/support/envvars.d/sysenv')){
    $sysenv = file_get_contents('/opt/elasticbeanstalk/support/envvars.d/sysenv');
    $preg = preg_match('/PARAM1=\"(.+)\"/', $sysenv, $match);
  }elseif(file_exists('/opt/elasticbeanstalk/support/envvars')){
    $sysenv = file_get_contents('/opt/elasticbeanstalk/support/envvars');
    $preg = preg_match('/PARAM1=\"(.+)\"/', $sysenv, $match);
  }
  if (!empty($match[1])){
    define('Z_ENVIRONMENT', $match[1]);
  }else{
    define('Z_ENVIRONMENT', 'DEVELOPMENT');
  }
}


こうかな?



2014年9月26日金曜日

AWS Elastic BeanstalkのSSLで、wwwあり、なしを統一する

Beanstalkを使っていて、wwwを統一したいとき、httpd.confはいじれないので、htaccessで行うことにしました。
httpの場合は簡単なのですが、httpsの場合はネットワークインターフェースを噛ましてるので、うまく行かず。SERVER_PORTとか取れないんですね。
いろいろ探して、以下のようにしたらできたようなのでメモ。

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTP_HOST} ^example\.jp
    RewriteCond %{HTTP:X-Forwarded-Proto} =https
    RewriteRule ^(.*)$ https://www. example.jp/$1 [r=301,L]

    RewriteCond %{HTTP_HOST} ^ example\.jp
    RewriteRule ^(.*)$ http://www. example.jp/$1 [R=301,L]

</IfModule>

2014年9月22日月曜日

Elastic BeanstalkでRDSのインスタンスを変えたい

Elastic Beanstalk(以下EB)をとりあえずdb.microでテストして、じゃあインスタンスあげようか、ってところでどうやって上げるのか迷いました。

とりあえずRDSの設定画面で該当するRDSのインスタンスを上げたのですが、EBのコンフィグでみるとRDSのインスタンスがmicroのまま。

同じような質問もあって、
http://stackoverflow.com/questions/25087682/change-rds-configuration-in-elastic-beanstalk-app
そのアンサーのとこにAWS CLIを使ってコマンドでやれって書いてたので、コマンド叩いてみたけど、エラー。

AWS CLIって何だっけ、あ、eb〜ってのがそれか。
ということで、ひとまずebコマンドでステータス見てみるか。
#eb status --verbose
RDS Database: AWSEBRDSDatabase | *******.ap-northeast-1.rds.amazonaws.com:3306
Database Engine: mysql 5.5.37
Allocated Storage: 10
Instance Class: db.m1.small
Multi AZ: False
Master Username: insightnow
Creation Time: 2014-07-17 16:41:48
DB Instance Status: available

あれ?
smallになってる。

EBのコンフィグに反映されていないだけかもしれないです・・・・。

2014年7月25日金曜日

Elastic Beanstalkでtmpフォルダを作る

Beanstalkにcakephpを乗せるとき、乗せてサイトが見れるまでを紹介してくれている記事は多いんですけど、tmpフォルダどうするの?っていうとこに言及がないので、いろいろ試してました。

githubで管理しているときって、app/tmpフォルダとかwebroot/img/tmpフォルダはローカル環境で使ってるからgitignoreしているんですよね。

SSHでbeanstalkにログインして、tmpフォルダを作ってみたけど、次のデプロイでtmpフォルダ消失。やっぱ駄目かーってことで、コンフィグファイルを触ることにしました。

appルートに「.ebextensions」っていうフォルダを作成。
その中に適当な「test.conf」作成。
container_commands:
  01mk_tmp:
    command: mkdir app/tmp
  02mk_tmp:
    command: mkdir app/tmp/cache
  03mk_tmp:
    command: mkdir app/tmp/cache/views
  04mk_tmp:
    command: mkdir app/tmp/cache/persistent
  05mk_tmp:
    command: mkdir app/tmp/cache/models
  06mk_tmp:
    command: mkdir app/webroot/img/tmp
ざっと書いてデプロイ。
よしよし、フォルダできた。

見た目が悪いのでコマンドを別ファイルにして、下記のコマンドで呼び出したところ、
container_commands:
  01mk_tmp:
    command: .ebextensions/tmp.sh
こんなエラー。
[Instance: i-******** Module: AWSEBAutoScalingGroup ConfigSet: null] Command failed on instance. Return code: 1 Output: Error occurred during build: Command 01test failed .
よくわからなかったので、やめ。


さて、この方法で本当にいいのやら?


2014年7月17日木曜日

AWS Elastic BeanstalkにMACからデプロイ。

メモです。

Elasticbeansトークに、MACからデプロイしてみたメモ。

デプロイはコマンドラインから行うとのことで、AWS Elastic Beanstalk Command Line Toolからツールをダウンロード。展開。

.bashrcに、パスを書く。
export PATH=$PATH:/Users/AWS-ElasticBeanstalk-CLI-2.6.3/eb/linux/python2.7


eb --version
でバージョンがちゃんと表示されたので、今度は設定。設定は割愛。
準備ができたらプロジェクトのフォルダに移動して、
$ git aws.push
Traceback (most recent call last):
File ".git/AWSDevTools/aws.elasticbeanstalk.push", line 21, in <module>
from aws.dev_tools import *
File "/Users/project/.git/AWSDevTools/aws/dev_tools.py", line 5, in <module>
import boto
ImportError: No module named boto
エラー。
botoというのが無いそうなので、入手。
git clone git://github.com/boto/boto.git
sudo python setup.py install
インストール完了。
$ git aws.push
Updating the AWS Elastic Beanstalk environment project-env...
Environment update initiated successfully.

成功!