初心者インフラエンジニアが困ったときに試行錯誤するブログ

インフラエンジニアが,開発の勉強をするときのログを残します

【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を本番環境で運営するとき、webサーバーは標準装備のpumaと人気のunicornのどちらがいいのかと少し悩みましたので、メモです。

結論

unicornでいいかな!どちらも一長一短みたいですが、人気な分記事が多いのと、pumaはスレッド管理が大変そうです。

以下の記事を参考にしました。

https://blog.willnet.in/entry/2015/02/24/155006

【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

本記事について

本記事は,学習を目的に書かれています.

間違い,改良案などございましたら,コメントしていただけると幸いです.

基本的に編集途中ですので,何を書いてほしいかもコメントいただけると,

その情報を中心に追記します.