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

2022年6月2日木曜日

Heroku CLI でセッショントークン切れが嫌な場合は Long-lived トークンを作成しよう

Heroku CLI でセッショントークン切れが嫌な場合は Long-lived トークンを作成しよう

概要

heroku login などでログインした場合に取得できるアクセストークンには期限があり 1 ヶ月で期限切れになります
期限切れになった場合は再度 heroku login を実行すれば良いのですがスクリプトなどで heroku コマンドを使っている場合は面倒です (ログインにブラウザを立ち上げる必要があるので)
その場合には期限切れのないトークンを生成しそのトークンを使って CLI を叩けるように設定します

環境

  • macOS 11.6.6
  • Heroku CLI 7.60.2

Long Lived Token の作成

以下で生成できます

  • heroku authorizations:create
Long-lived user authorization        xxx-xxx-xxx-xxx-xxx  global

こんな感じで生成できれば OK です
生成されたトークンの ID (上記の xxx-xxx-xxx-xxx-xxx の部分) はメモしておきます

Long Lived Token のアクセストークンを取得する

ID から CLI をコールするためのアクセストークンを取得します

  • heroku authorizations:info xxx-xxx-xxx-xxx-xxx

で確認できます

Client:      <none>
ID:          xxx-xxx-xxx-xxx-xxx
Description: Long-lived user authorization
Scope:       global
Token:       yyy-yyy-yyy-yyy-yyy
Updated at:  Thu Jun 02 2022 08:26:43 GMT+0900 (日本標準時) (about 1 hour ago)

上記の yyy-yyy-yyy-yyy-yyy の部分がアクセスに必要なアクセストークンになります
このアクセストークンを使って CLI をコールするようにします

.netrc の編集

heroku コマンドの認証情報は ~/.netrc に格納されています

  • vim ~/.netrc
machine api.heroku.com
  login name1@example.com
  password yyy-yyy-yyy-yyy-yyy 
machine git.heroku.com
  login name1@example.com
  password yyy-yyy-yyy-yyy-yyy 

上記のパスワードの部分を先程メモしたアクセストークンに書き換えます
書き換えたら保存します

動作確認

本当に期限のないトークンでコールできるか確認しましょう

  • heroku auto:token

で問題なくアクセスできることと期限切れの警告が表示されないことを確認しましょう
もしまだうまく設定できていない場合は以下のように表示されるはずです

 ›   Warning: token will expire tomorrow at 9:13 AM                                                                                          
 ›   Use heroku authorizations:create to generate a long-term token                                                                          
zzz-zzz-zzz-zzz-zzz

注意事項

理由は不明なのですが Long Lived Token を設定後に再度 heroku login すると設定を上書きしてしまうようです
また Long Lived Token のクライアントトークン自体も削除してしまうのでできれば設定後は heroku login しないほうが良いかもしれません

おまけ: 発行している OAuth クライアントの一覧を確認する方法

  • heroku authorizations

最後に

Heroku CLI で期限切れにならないアクセストークンを設定する方法を紹介しました

使用していないクライアントトークンは heroku authorizations:revoke コマンドで削除しても良いかなと思います
また revoke は Heroku のダッシュボード上からもできるのでどちらでも大丈夫です

参考サイト

2021年4月5日月曜日

Heroku の Redis Addon が End of Life になったのでアップグレードしてみた

Heroku の Redis Addon が End of Life になったのでアップグレードしてみた

概要

Heroku から連絡があり使っている redis-addon のバージョンが古いからバージョンアップしてくれとの連絡が来ました
なのでアップグレードしてみました

環境

  • macOS 11.2.3
  • heroku 7.51.0
  • redis 4.0.14 -> 6.0

現状の確認

まずは現在使っている redis の情報を確認しましょう
Version が 4.0.14 で End of Life になっているのが確認できます

  • heroku redis:info -a your-app-name
=== redis-silhouetted-79757 (REDIS_URL)
Plan:                   Hobby Dev
Status:                 available
Created:                2019-06-28 03:22 
Version:                4.0.14 (End of Life)
Timeout:                300
Maxmemory:              noeviction
Maintenance:            not required
Maintenance window:     Mondays 20:30 to Tuesdays 00:30 UTC
Persistence:            None
HA Status:              Unavailable
Requires TLS:           No
Keyspace Notifications: Disabled

REDIS_URL の確認

上記の REDIS_URL を確認します
今回は新しい redis にデータを移行する方式を取ります

  • heroku config:get REDIS_URL -a your-app-name

ここで表示される URL はメモしておきましょう

既存の redis のデータを元に新規で redis を作成する

先程確認した REDIS_URL を元に新規で redis を作成します
addons:create--fork オプションを使います

  • heroku addons:create heroku-redis:hobby-dev --fork redis://h:xxxxxxxxx@ec2-xxxxxxxxx:12345 -a your-app-name
Creating heroku-redis:hobby-dev on ⬢ your-app-name... free
Your add-on should be available in a few minutes.
! WARNING: Data stored in hobby plans on Heroku Redis are not persisted.
redis-silhouetted-79757 is being created in the background. The app will restart when complete...
Use heroku addons:info redis-silhouetted-79757 to check creation progress
Use heroku addons:docs heroku-redis to view documentation

作成状況の確認

すぐに新規の redis は払い出されないので状況を逐一確認しましょう
Status: available になれば新規作成+データの移行が完了しています
fork in progress になっている場合はまだデータの移行中になるので古い redis など削除しないようにしましょう

  • heroku redis:info redis-silhouetted-79757 -a your-app-name

アプリが使用する redis を変更する

作成が完了したら使用する redis を変更します
redis:promote を使います
新規で作成された redis を指定しましょう

  • heroku redis:promote redis-amorphous-58530 -a your-app-name

動作確認

アプリにアクセスして正常に動作する確認しましょう

古い redis を削除する

古いバージョンの redis は削除しましょう
addons:destroy で古い redis を指定すれば OK です

  • heroku addons:destroy redis-silhouetted-79757

おまけ: データを移行しないでアップグレードする場合は

いきなり destroy しても良いですが丁寧なのは create -> promote -> destroy かなと思います

  • heroku addons:create heroku-redis:hobby-dev -a your-app-name2
  • heroku redis:promote redis-yyyy-12345 -a your-app-name2
  • heroku addons:destroy redis-xxxxx-12345

参考サイト

2019年11月9日土曜日

Heroku にデプロイしたアプリを Google Search Console のプロパティとして登録する方法

概要

Heroku にアプリをデプロイすると https で xxxx.herokuapp.com というドメインがアプリに振られます
Google の OAuth などと連携することを考慮するとサイトの所有者であることを証明しておく必要があります
今回は Heroku にデプロイした Ruby のコンテナアプリの所有者であることを証明する方法を紹介します

環境

  • Google Search Console (2019/11/07 時点)
  • Heroku Container Registry (2019/11/07 時点)
  • docker 19.03.4
  • heroku cli 7.33.3

Heroku にテスト用のアプリ作成

まずは Heroku にアプリを作成します

  • heroku create -a test-app-20191107

サンプルアプリ作成

Heroku にデプロイする Ruby アプリを作成します
このアプリの所有者であることを Search Console を使って確認します

  • bundle init
  • vim Gemfile
gem "sinatra"
  • bundle install --path vendor
  • vim config.ru
$stdout.sync = true
require './app'
run TestWebApp
  • vim app.rb
require 'sinatra/base'

class TestWebApp < Sinatra::Base
  get '/' do
    'ok'
  end
end

Dockerfile 作成

Heroku にデプロイする際に Container Registry としてデプロイするので Dockerfile を作成します

FROM ruby

ADD . /home
WORKDIR /home
RUN gem install bundler
RUN bundle install --path vendor

CMD bundle exec rackup config.ru -o 0.0.0.0 -p $PORT

$PORT を使ってポートが Heroku によって割り当てられる変数を使うのがポイントです

Search Console にプロパティを登録する

Google Search Console にアクセスしましょう

今回は右側の「URL プレフィックス」を選択します
Heroku に作成したアプリから URL を入力します
今回であれば https://test-app-20191107.herokuapp.com になります

続行を選択するとサイトの所有者であることを確認するための HTML ファイルがダウンロードできるのでしましょう
これをアプリのルートに配置します
また HTML ファイルを配置するまで確認は押さないようにしましょう

HTML ファイルをルートに配置する

  • mkdir public
  • mv ~/Downloads/google1234567890abcd.txt public/google1234567890abcd.html

ダウンロードしたファイルが Chrome だと .txt になってしまうので .html にリネームします
Sinatra アプリの場合ルートは public ディレクトリ配下になります
ここは各自のアプリによってことなると思うので注意してください

イメージ作成

ビルドします

  • docker build -t registry.heroku.com/test-20191107/web .

イメージアップロード

作成されたイメージを Heroku Container Registry にアップロードします

  • heroku container:login
  • docker push registry.heroku.com/test-20191107/web

コンテナアプリデプロイ

イメージのアップロードが完了したらアプリをリリースしましょう

  • heroku container:release web

デプロイできたら確認用の HTML ファイルが見えるか確認しましょう
https://test-app-20191107.herokuapp.com/google1234567890abcd.html という感じのパスで確認できれば OK です

動作確認

アプリがデプロイできたら Search Console に戻って確認ボタンを押しましょう
以下のように「所有権を確認しました」となれば登録完了です

最後に

Heroku にデプロイしたアプリを Google Search Console に登録しサイトの所有者であることを証明しました
やっていることはサイトのルートに HTML ファイルを置いているだけです
なので、アプリによってルートのパスが様々なので各自のアプリにあったパスに HTML ファイルを配置してデプロイしてください
また認証などがある場合も注意してください
認証が全ページにあるようなアプリでは Search Console から HTML ファイルが見えなく確認が失敗するので HTML ファイルのパスだけは認証がかからないような工夫が必要になるかもしれません

2019年7月29日月曜日

heroku config の環境変数情報を別のコンテナに渡す方法

概要

heroku 上で動作しているコンテナには普通に渡ります
が、そうではなく heroku config コマンドで表示される環境変数の情報を別のコンテナに渡す方法を紹介します

環境

  • macOS 10.14.5
  • docker 18.09.2

やり方

  • eval $(heroku config -s); docker run --rm -e REDIS_URL=$REDIS_URL ruby echo $REDIS_URL

heroku config -s では以下の情報を返却されることにします

REDIS_URL='redis://h:xxxxxxxxx@redis:6379'

その情報を eval して一旦シェルの環境変数に設定しそれを -e オプションで渡す感じです

docker-compose の場合も同様で一旦シェルに渡してそこから YAML ファイルないでその環境変数を読み込みます
コンテナに渡す場合には environment を使います

version: '3.7'
services:
  batch:
    build:
      context: .
      dockerfile: Dockerfile_batch
    environment:
      - REDIS_URL=$REDIS_URL

heroku で動かさないコンテナに渡した場合などに使えます

参考サイト

2017年7月14日金曜日

既存の git リポジトリを既存の Heroku アプリとして登録する方法

概要

Heroku 上には既にアプリがあって新たに clone したリポジトリを Heroku のアプリとして登録した場合の方法を紹介します
というかいつもコマンドを忘れるので備忘録として残しておきます

環境

  • macOS X 10.12.5
  • heroku-cli 6.12.8-ec1843e

方法

git リポジトリ配下に移動して以下のコマンドを実行します

  • heroku git:remote --app your-existed-app-name

で Heroku アプリを登録したら

  • git push -u heroku master

で Heroku にデプロイできます

2017年2月16日木曜日

Heroku の Container Registry を試してみた

概要

Heroku に対して Docker コンテナをデプロイできる仕組みに Container Registry があります
今回はざっと触ってみたので試してみました
自作の Docker コンテナも動作させてみたのでポイントを紹介します
デプロイ対象の Heroku アプリは「test-app-20170208」

環境

  • CentOS 7.3
    • heroku-cli/5.6.18-9f6df83
  • Docker 1.12.6

とりあえず試す

既存のイメージを push してみる

まずはアプリを作成します

  • heroku container:login
  • heroku create -a test-app-20181002

次に Heroku Container Registry に Push するイメージを作成 (or pull) します
pull した場合はタグを付与して Heroku Container Registy に Push できるようにします
以下のサンプルでは pull していますが build して -t オプションでイメージに Heroku 用のタグ付けをしても OK です

  • docker pull kakakikikeke/request-dumper:for_heroku_container
  • docker tag kakakikikeke/request-dumper:for_heroku_container registry.heroku.com/test-app-20170208/web

あとはイメージを push してそのイメージをデプロイ (container:release) します

  • docker push registry.heroku.com/test-app-20170208/web
  • heroku container:release web

open で動作確認できます

  • heroku open -a test-app-20170208

イメージにタグ付けした web の部分はプロセスタイプと呼ばれるもので Web アプリなどの場合には「web」を指定します
その他に worker などがありコンテナのタイプに対応したものを指定しましょう

ポイント

実は Dockerfile を少し編集しています
編集したポイントは以下の通り

  • EXPOSE が使えません
  • $PORT という環境変数を使ってアプリが立ち上がるポートをバインドします

これ以外にも縛りがあるっぽいですが一旦、自分はそれを変更するだけでアプリが起動しました
diff 的には以下の通りです

-EXPOSE 4567
+#EXPOSE 4567

-CMD ["bundle", "exec", "rackup", "config.ru", "-o", "0.0.0.0", "-p", "4567"]
+CMD bundle exec rackup config.ru -o 0.0.0.0 -p $PORT

なので同じように EXPOSE やポートを直接して Dockerfile を作成している場合はそこを変更しておく必要があります
自分の場合は tag を使って Dockerhub に heroku 用の Dockerfile を push しました

最後に

Heroku の Container Registry を使ってみました
Dockerfile がそのまま使える感じではなかったので、少し工夫が入ります

おそらくデータを保存するコンテナや docker-compose を使う場合にも同じようにコツが必要になると予想しています
この辺も時間があったら触ってみようかなと思っています

参考サイト

2017年2月14日火曜日

CentOS 7.3 に Heroku CLI をインストールする方法

概要

Heroku CLI を CentOS7.3 にインストールする方法を紹介します
というのも最近気づいたのですが、Ruby で作られた Heroku Toolbelt はもう非推奨になっており golang で書かれた Heroku CLI を使うのがデファクトになっていました
ググるとまだ Heroku Toolbelt 時代のインストール方法が上位に来てしまっているので、間違えないようにメモしておきたいと思います

環境

  • CentOS 7.3
    • heroku-cli/5.6.18-9f6df83

インストール

最後に

インストール自体は圧縮ファイルを解凍して配置するだけなので非常に簡単です
Debian, Mac, Windows の場合は更に別のインストール方法があるので下記の参考サイトを参照してください

参考サイト