【AWS Lambda】クラウドからプロジェクトをローカルに落とすには?
実現したいこと
AWSの開発をしていると,ローカルで開発したいってときありますよね? 今回は,AWSのリモートからローカルにプロジェクトをクローンしてみたいと思います.
やったこと
注意点
参考
以下の記事を参考にさせていただきました. https://dev.classmethod.jp/cloud/aws/retrieve-lambda-function-code-from-version-or-alias/
本記事について
本記事は,学習を目的に書かれています.
間違い,改良案などございましたら,コメントしていただけると幸いです.
基本的に編集途中ですので,何を書いてほしいかもコメントいただけると,
その情報を中心に追記します.
【AWS】サーバーレスフレームワークを導入してみる.
実現したいこと
AWS Lambdaをさわっていると,ローカルでデバッグしたい!開発したい!
ってなりますよね.ほんのすこし調べたら簡単にできました.
Serverless Frameworkというのを使用して,それを実現しようと思います.
やったこと
nodeのインストール
$ brew install anyenv $ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile $ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile $ exec $SHELL -l
ANYENV_DEFINITION_ROOT(/Users/ ~~~/.config/anyenv/anyenv-install) doesn't exist. You can initialize it
と言われてバグったので,指示通りに以下を行うと解決
$ anyenv install --init
各**envをupdateするためのプラグイン
$ mkdir -p $(anyenv root)/plugins $ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
nodenvのインストール
$ anyenv install nodenv $ exec $SHELL -l $ nodenv -v
nodeのインストール
$ nodenv install 11.10.0 $ nodenv global 11.10.0 $ nodenv local 11.10.0
Serverless Frameworkのインストール
$ npm install -g serverless #pathを表示 $ npm bin serverless # pathを通す $ echo 'export PATH="$HOME/node_modules/.bin/:$PATH"' >> ~/.bash_profile $ source ~/.bash_profile $ serverless -v
AWSのcredentialをslsに通す
$ serverless config credentials --provider aws --key hogehogehoge --secret fugagu
sample appを作る
$ serverless create -t aws-python3 -p sample-app
デプロイするときはこんな感じで行う
$ sls deploy
テストするときはこんな感じ
$ sls invoke -f hello
以上で,サーバーレスフレームワークの導入を完成しました!
注意点
こんなエラーがでたので,対処してみる
AWS provider credentials not found. Learn how to set up AWS provider credentials in our docs here: <http://bit.ly/aws-creds-setup>.
これはaws credentialの設定をしていなかったからでした.上記のを実行すれば解決しました.
参考
以下の記事を参考にさせていただきました. https://dev.classmethod.jp/cloud/aws/easy-deploy-of-lambda-with-serverless-framework/ https://qiita.com/tonkotsuboy_com/items/5322d226b6783d25b5df https://github.com/anyenv/anyenv https://qiita.com/zaburo/items/8ac16133c3823c6e6ad6
本記事について
本記事は,学習を目的に書かれています.
間違い,改良案などございましたら,コメントしていただけると幸いです.
基本的に編集途中ですので,何を書いてほしいかもコメントいただけると,
その情報を中心に追記します.
【AWS Lambda入門】pythonで超簡単な機能を実装してみる
実現したいこと
AWS Lambdaを使用して,pythonでサーバーレスなアプリを超簡単に実装してみます.
ファイル分割し,定数管理,共通関数などのアーキテクチャだけ,若干こだわろうと思います.
やったこと
ファイル構成
function_separate_test
└ lambda_function.py
└ function_a.py
└ function_b.py
└ constant.py
lambda_function.pyは,いわゆるハンドラを扱う関数で,トリガーが発火してlambdaが呼び出されると, その関数を実行します.そこから,function_aとfunction_bを実行するような作りにします.
lambda_function.py
import json from function_a import function_a from function_b import function_b from constant import * def lambda_handler(event, context): a = function_a(1,2); b = function_b(3,4); print(a,b); print(HOGE+FUGA)
function_a.py
def function_a(a1,a2): # print(a1) # print(a2) return a1 + a2
function_b.py
def function_b(b1,b2): # print(b1) # print(b2) return b1 * b2
constant.py
HOGE = "hogehoge" FUGA = "fugafuga"
これで,適当にテストを作成し,lambdaを呼び出すと,何を与えても 3 12 を返す関数ができあがりました
注意点
参考
以下の記事を参考にさせていただきました.
本記事について
本記事は,学習を目的に書かれています.
間違い,改良案などございましたら,コメントしていただけると幸いです.
基本的に編集途中ですので,何を書いてほしいかもコメントいただけると,
その情報を中心に追記します.
【Docker × Rails】RubyMineを使ってコンテナをデバッグモードで立ち上げる
実現したいこと
RubyMine,便利ですよね.でもコンテナで起動がうまくいかない!
これを解消してみます
やったこと
まず,ruby環境を構築しておきます
$ ruby-build 2.3.3 ~/.rbenv/versions/2.3.3-hogehoge $ rbenv local 2.3.3-hogehoge $ rbenv global 2.3.3-hogehoge $ gem install bundler $ rbenv global 2.3.3 $ rbenv versionsで確認可能
でOK.
適当なrailsプロジェクトをgit cloneしておきます. 余談ですが,
$ ssh-add ~/.ssh/id_hoge-rsa
しておくと,sshのpublic keyつくったときでもパスワードをいちいち求められなくてすみます.
本題に行く前にハマった... Dockerコンテナで,
You must use Bundler 2 or greater with this lockfile.
というエラーが...gem install bundler
は入れており,2以上のバージョンを入れたんだけど,なぜか1.14.6が認識されてしまう.
バージョン指定しても無駄なんだよな...これは後ほど解決させます.
注意点
参考
以下の記事を参考にさせていただきました.
本記事について
本記事は,学習を目的に書かれています.
間違い,改良案などございましたら,コメントしていただけると幸いです.
基本的に編集途中ですので,何を書いてほしいかもコメントいただけると,
その情報を中心に追記します.
【EC2環境構築】nginx+unicorn+railsでhelloworldする
実現したいこと
nginx+unicorn+railsでhelloworldしようと思います. 成功したら,コンテナ化するのを次回に行おうと思います.
OSは,Amazon Linux 2を使用します. RHEL7ベースなので,CentOS7系ですね.
やったこと
とりあえずEC2インスタンスのバージョンを確認
$ grep -H "" /etc/*version ; grep -H "" /etc/*release ... /etc/system-release:Amazon Linux 2
これでした
nginxのインストール
$ sudo vi /etc/yum.repos.d/nginx.repo
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
$ sudo yum install nginx $ nginx -v # 自動起動 $ sudo systemctl enable nginx $ sudo systemctl start nginx
EC2インスタンスのセキュリティグループから,インバウンドルールで自分のPCのIPのHTTP接続を許可して,接続!
Welcome to Nginx!!!!!
きた!!!
次に,適当にrails appをgit clone します.
gitのインストール
# wgetのインストール $ sudo yum install wget # gccのインストール $ sudo yum install gcc # 依存関係のライブラリインストール $ sudo yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker autoconf # git のインストール $ wget https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz $ tar vfx git-2.9.5.tar.gz $ cd git-2.9.5 $ make configure $ ./configure --prefix=/usr $ make all $ sudo make install $ git --version git version 2.17.2
EC2インスタンスにrailsインストール
# 適当にappディレクトリ作成 $ mkdir hogehoge $ cd hogehoge # 適当なrails appをgit clone $ git clone [適当なhello-worldのあるrailsリポジトリurl] # rbenvからのrubyのインストール $ git clone https://github.com/rbenv/rbenv.git ~/.rbenv $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile $ ~/.rbenv/bin/rbenv init $ source ~/.bash_profile $ rbenv -v $ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build $ sudo ~/.rbenv/plugins/ruby-build/install.sh $ rbenv install -l $ sudo yum install -y openssl-devel readline-devel zlib-devel $ sudo yum install bzip2 #bzipがないと展開できないと言われた $ rbenv install 2.3.3 $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile $ source ~/.bash_profile $ rbenv global 2.3.3 # railsのインストール $ gem install rails $ cd hogehoge $ yum install sqlite-devel #先にこれを入れておかないとsqlite3が入らない $ sudo yum -y install gcc-c++ #これを入れておかないとtherubyracerが入らない $ vi Gemfile
# javascript gem 'therubyracer' #追加
$ bundle install --path vendor/bundle $ bundle exec rails s
サーバーが立ち上がりました.まだviewの確認はしていないですが. 続きはまた後ほど行います
注意点
参考
以下の記事を参考にさせていただきました.
https://qiita.com/oo2kazuma/items/015274769744545dd081 https://qiita.com/akito1986/items/56198edcafc222b320a8 https://qiita.com/MuuKojima/items/afc0ad8309ba9c5ed5ee https://qiita.com/homines22/items/7572cdba2d60a00a3ffc https://akio0911.net/archives/2670 http://q.hatena.ne.jp/1211095909 https://qiita.com/micheleno13/items/c0f8160b0deb2984677f
本記事について
本記事は,学習を目的に書かれています.
間違い,改良案などございましたら,コメントしていただけると幸いです.
基本的に編集途中ですので,何を書いてほしいかもコメントいただけると,
その情報を中心に追記します.
railsを運営するとき、pumaとunicornのどちらを使うべきか
【Rails開発環境構築】rbenvをインストールしてbundleをプロジェクト管理してhelloworldする
実現したいこと
railsプロジェクトを複数立ち上げるときに,ruby本体のbundlerを汚さないように管理したい
やったこと
rbenvをインストールして,プロジェクト用のruby環境を管理しました.
$ brew update $ brew install rbenv $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile $ rbenv install 2.3.3 $ rbenv global 2.3.3
bundleもきれいにインストールするため,一度globalをきれいにしてから入れます
$ rbenv exec gem list $ sudo gem uninstall -axI `gem list --no-versions | egrep -v 'test-unit|rdoc|bigdecimal|io-console|json|minitest|psych|rake'` $ gem install bundler
と思いきや,パーミッションでエラーが起きました.sudo をつけると今度は,
ERROR: Error installing bundler: bundler requires RubyGems version >= 3.0.0. Try 'gem update --system' to update RubyGems itself.
というエラーが...
調べてみると,パスが通ってなかったみたい.
$ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin17] $ source ~/.bash_profile $ ruby -v ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin17]
ちゃんとrubyのバージョンが合いました.でもgem install bundler
は通りませんね.
$ which ruby /Users/username/.rbenv/shims/ruby $ which bundle /usr/local/bin/bundle
ここに,bundleがグローバルになってしまい,rbenvの管理下になってないことが原因みたい.
とりあえず出たエラーに従い,以下コマンドを実行
$ gem update --system
インストールされたっぽい表示が出たので,インストールできたのかな.再度gem install bundler
しようとするとconflict起きるのですでに入ったみたい
試しに,test/hello-railsプロジェクトを適当に立ち上げ,railsを入れて見ます
$ bundle init $ vi Gemfile #railsのコメントを入って外す $ bundle install --path=vendor/bundle --binstubs=bundle_bin
--binstubs
のおかげでbundle exec
をわざわざつけなくてもローカルのbundleから呼び出してくれるみたい.なのですが,できない.なんで.bundle exec
つければいけるけど
悔しいので再度プロジェクトを消してやり直す
$ rm -rf hello-rails $ mkdir hello-rails $ cd hello-rails $ rbenv local 2.3.3 $ bundle init $ vi Gemfile # gemの#を削除 $ bundle install --path=vendor/bundle --binstubs=bundle_bin $ rails -v
できない...
調べてみると,どうやらrails4以降は--binstubs
を使わないらしいです.
じゃあしょうがないか..とりあえずbundle exec
つけるだけでいいのでそこまでおおきな問題でもない
$ bundle exec rails s $ ls $ rm -rf Gemfile.lock bin bundle_bin $ bundle install $ bundle exec rails -v Rails 5.2.2
とりあえずRails5は入ったのですが,rails s
できない.
あ,rails newするのを忘れておりました.
$ bundle exec rails new hello-rails $ cd hello-rails $ rails s
無事みんなの顔が見れました.ただこれもしかしたらbundleがglobalになっている可能性が...rails s
で普通に立ち上がったし.てことで一応vendor
の中にいれます
$bundle install --path=vendor/bundle
どうやら,
$ bundle exec rails new プロジェクト名
ではなく,
$ bundle exec rails new .
でカレントディレクトリに入れておけばよかった模様.GemfileはYで上書きで.
以上で,ひとまずrubyのインストールからbundleのきれいなインストールまでをおさらいできました.具体的に自分でやってみるのはやはり大切ですね
ではでは.
注意点
bundle をインストールするときや消すときなど,環境汚さないように注意して下さい. Git管理している人はとくに,Gitリポジトリごと消したり上書きしてしまったりするのに注意(一回やったことがあります...)
参考
以下の記事を参考にさせていただきました.
https://blog.tokoyax.com/entry/ruby/bundler
bundle install しようとしたら ruby のバージョン違くてコケた話 - Qiita
Macに慣れていない頃にRubyのインストール設定したことの整理 - Qiita
https://qiita.com/youcune/items/222777415f00d19cccb4
本記事について
本記事は,学習を目的に書かれています.
間違い,改良案などございましたら,コメントしていただけると幸いです.
基本的に編集途中ですので,何を書いてほしいかもコメントいただけると,
その情報を中心に追記します.