login認証コマンド文字列をそのまま実行。これでECRにpushできるようになる。<REPOSITORY_URI>ECRに登録されたことを確認AWSのコンソールを見てもいいが、コマンドでもわかる。セクションがあり、ここで名前などを設定している。基本的に何も変えなくてもいけるはずだが、問題がある場合は変更する。タスク・スケジュールのyamlは修正必要。yamlファイルが4つあるが、ここまで分ける必要はないかもしれない。ネットワーク(network.yaml)VPC、サブネット、セキュリティグループを作成。ゲートウェイやルートテーブルなどなども作成した。あれこれ設定しているが、たぶんこれが必要最小限のはず...。CIDRとかは適当に設定しているので問題があれば変える。ロール(roles.yaml)IAM関連はCloudFormationでなく、コンソールで管理すれば十分な気もする。今回はECSタスクを実行するロールなどの作成で試行錯誤していたらカオスになったのでCloudFormationで管理するようにした。ECSクラスタとLambda(cluster.yaml)ここで作成するLambdaは、ECSタスクを実行するだけのもの。本当はCloudWatchのイベントでECSタスクを実行したいのだが、現在はまだCloudFormationでその設定ができないようなので、間にLambdaを挟んでいる。ECSタスクとスケジュール(task.template.yamlをtasks/mytask.yamlとしてコピーして修正)Parametersセクションを必ず修正する。ECRのイメージ、cronパターン、放送局と録音時間、S3バケットなどを指定する。このyamlファイル1つがcronの1行に対応するイメージ。番組をいくつも録音したいときはその数だけyamlファイルを作る。CPUやメモリは現在最小限にしているが、番組によっては足りないかも。放送局IDはここ参照。ECSTaskSchedulerPatterncronパターンを書く。癖があるのでドキュメント参照。日本時間での記述には対応していない(めんどくせえ)。ECSTaskNameタスク名を書く。なんでもいいが、わかりやすく短い名前にした方がいい。ImageNameECRで登録したイメージ名。S3BucketNameあらかじめ作成したS3バケット名を書く。CLIで実行する場合を書く。コンソール画面からそのままやっても問題ない。いずれにせよ作成する順番はこの通りにすること(ネットワークとロールは入れ替え可能)。ネットワークとロールが作成完了したあとでないとECSクラスタなどを作成できない。以下ではスタック名は適当につけている。file://./cf/network.yamlロールIAM関連なので、コンソール画面で作成するときにはチェックボックスに確認のチェックをする作業がある。CLIでもそれに対応するオプションをつける。file://./cf/tasks/mytask.yaml確認ECSタスクまで作成成功すれば録音できるようになっているはず。指定した時間にECSでタスクが実行され、録音終了すればS3に保存される。ログはCloudWatchで見れる。課題とかLambdaを使わずに済ませたいこれはAWSが対応してくれることを待つしかないようだ。日本時間でcronを書きたいこれもAWSが対応するのを待つしかない(たぶんされない)。現在はUTCで書くしかない。CloudFormationスタック間の情報受け渡し今回はスタックで作成したリソース(たとえばサブネットやロール)をパラメータストアに入れることで、他のスタックから参照できるようにしている。これだとスタックを作り直すと、それに依存するスタックも作り直さないといけない(パラメータストア内の値は、作り直す前のものなので)。ネットワークやロールのスタックを作り直すと、クラスタやタスクのスタックも作り直さないといけない。何かうまい方法があればいいのだが...。あとProjectNameなどを複数のスタックでそれぞれ定義し直しているのも気持ち悪い。CloudFormationスタック分割のベストプラクティスがわからない今回は練習の意味もあり、わりと細かく分割した。本来ならどのくらい粒度で分割するのがいいかよくわからない。ECSタスクは1つ1つ別のスタックにしたが、タスクはすべて1つのスタックにまとめてしまうというのもありだと思う。ECRdockerイメージをECRにpushする方法。CloudFormationCloudFormationテンプレートのサンプル。CloudFormationCloudFormationテンプレートの基本的な枠組みについて。CloudFormationParametersセクションの書き方。CloudFormationResourcesセクションの書き方。CloudFormationリソース一覧。ECSリソースやCloudWatchリソース、IAMリソースなどなど、リソースを書くときはここから探す。CloudFormationテンプレートで使える組み込み関数。使って、サブネットのAvailabilityZoneを設定する例がある。これならAvailabilityZoneを直に指定しなくていい。CLIでCloudFormationを操作する方法。DevelopersIO似たようなことをやってるので参考にした。Qiita似たようなことをやってるので参考にした。Qiitastack間で値を共有する方法。Storeを使う」でやった。CLIでCloudFormationのIAM関連の操作をするとエラーになる。Overflow同上。EventsCloudWatchイベントでのcronの書き方。ServiceECSをスケジュール機能で動かす。DevelopersIOFargateをスケジュール機能で動かす。(コンソール画面での方法。)これをCloudFormationでできればいいのだが、できないよう。OverflowCloudFormationでは、Fargateをスケジュール機能で動かすことができないので、Lambdaと連携して動かそうという話。CloudVPC全般。Cloudインターネットアクセスを有効にする方法。2018-02-13ローカルに作ったgitリポジトリをGithubに上げるローカルでgitリポジトリを作って何度かコミットし、それをGithubに上げた。このときcontributionsがどうなるかわからなかったが、結局ちゃんとコミットの日が緑になった。repository”で作成。このときREADMEや.gitignore、LICENSEも作れるが、既存のリポジトリと衝突するのが怖いので作らなかった。コマンドを打つ上でリポジトリ作ると、その次の画面で注意書きが出る。その中に既存リポジトリをpushする方法が書いてある。masterGithubを見て、うまくpushされたか確認するcontributionsもちゃんと緑になっていた。実はこれが一番心配だったのでほっとした。repository”は今日の日付だが、過去のコミットもcontributionsとして扱われているようだ。repository”があり、ここから既存のリポジトリ(gitでもsvnでも)をインポートできるよう。ここではURLを指定しないといけない。今回はローカルのリポジトリだったのでできなかった。Documentationはじめこれを参考にして新規リポジトリを作成した。作成したあとの注意書きに手順が書いてあったので不要になった。2017-12-18radiko録音スクリプトのdocker化radikoを録音するシェルスクリプトmatchy2/rec_radiko.shをdockerで動かすようにした。他の方のスクリプトを使うだけだが...。runはradiko_docker_run.shの中でやっている)。runするか、それともコンテナは起動しっぱなしにしてその中でCRONで録音するか迷った。(つまりCRONでコンテナを起動するか、コンテナの中でCRONするか。)だが録音しないときはこのコンテナは何もしないので、前者でいいということにした。環境構築が面倒だから。関東を離れてもTBSラジオなどが聞きたいので、ConoHaで東京リージョンのVPSを借り、そこでこのシェルスクリプトを動かすようにした。スクリプトではffmpegなど必要となるツールがあるのでそれらをインストールしないといけない。VPSではいろいろなOSの中からCentOSを(サーバならCentOSだろという固定観念から)選んだが、CentOSだとこのインストール作業がやや面倒なのでdockerにした。radikoのプレミアム会員になれば全国どこの局でも聞けるというのは知ってる。借りたサーバでは他にも何かするつもり。してもJSTにならないようだった。他にも設定の方法はあるのだろうが、ubuntuはやめてdebianのイメージを使うことにした。debianだとこれでいける。17.06からなので新しくもない...知らなかっただけ)。ホストのディレクトリ[ファイル]をコンテナのディレクトリ[ファイル]にマウントさせたいとき、以下が同じ意味になる。コロンの前と後どっちがホストのパスだっけと迷うことがよくあった。いちいちsourceなどと書くのでわかりやすい。typeが変わるのでわかりやすい。