【AWS】CodeCommit(gitリポジトリ)を作成しローカルでcloneする


(STEP)
1.CodeCommitのリポジトリを作成
2.CodeCommitを操作するIAMユーザーを作成
3.IAMユーザーの認証情報を生成
4.ローカルにgitリポジトリをcloneする


1. CodeCommitのリポジトリを作成

1.1. AWSマネジメントコンソール ⇒ CodeCommit ⇒ リポジトリ ⇒ 「リポジトリを作成」ボタン押下 f:id:daylambsbecomelions:20211221210940p:plain

1.2.「リポジトリ名」を入力 ⇒ 「作成」ボタン押下 f:id:daylambsbecomelions:20211221211446p:plain

1.3. 左のメニューから「リポジトリ」 ⇒ 「設定」 ⇒ 「全般」タブ ⇒ 「リポジトリARN」をメモしておく f:id:daylambsbecomelions:20211222083522p:plain

2. CodeCommitを操作するIAMユーザーを作成

2.1. AWSマネジメントコンソール ⇒ IAM ⇒ ユーザー⇒ 「ユーザーを追加」ボタン押下 f:id:daylambsbecomelions:20211222210512p:plain

2.2. 「ユーザー名」を入力 ⇒ 「アクセスキー・プログラムによるアクセス」にチェック ⇒ 「次のステップ:アクセス権限」ボタン押下 f:id:daylambsbecomelions:20211222210723p:plain

2.3. 「既存のポリシーを直接アタッチ」ボタンを選択し、「ポリシーの作成」ボタン押下 f:id:daylambsbecomelions:20211222215840p:plain

2.4. ポリシーの作成画面で「サービスの選択」 f:id:daylambsbecomelions:20211222084542p:plain

2.5. 「CodeCommit」と入力し、表示された「CodeCommit」のリンクを選択 f:id:daylambsbecomelions:20211222084622p:plain

2.6. 今回は全権限を付与したいので「すべてのCodeCommitアクション」のチェックボックスにチェック f:id:daylambsbecomelions:20211222204514p:plain

2.7. リソースのセクションで「ARNの追加」のリンクを押下 f:id:daylambsbecomelions:20211222205241p:plain

2.8. 「1.3.」でメモしておいたリポジトリARNを「CodeCommit_repositoryのARNの指定」に貼り付け ⇒ 「追加」ボタン押下 f:id:daylambsbecomelions:20211222205522p:plain

2.9. 「次のステップ:タグ」ボタンを押下

2.10. 「次のステップ:確認」ボタンを押下

2.11. 「名前」を入力し、「ポリシーの作成」ボタン押下 f:id:daylambsbecomelions:20211222205831p:plain

2.12. IAMユーザー作成画面に戻り、「既存のポリシーを直接アタッチ」で先ほど自作したポリシーを検索、チェックボックスをチェック f:id:daylambsbecomelions:20211222215203p:plain

2.13. 同じ要領で「IAMUserChangePassword」を検索、チェックボックスをチェック ⇒ 「次のステップ:タグ」 f:id:daylambsbecomelions:20211222215248p:plain

2.14. タグの追加(オプション)はそのままスキップ ⇒ 「次のステップ:確認」ボタン押下

2.15. 確認画面で内容を確認し、「ユーザーの作成」ボタン押下

3. IAMユーザーの認証情報を生成

3.1. AWSマネジメントコンソール ⇒ IAM ⇒ ユーザー⇒ 「2」で作成したユーザーを選択

3.2. 「認証情報」タグを選択 ⇒ 「AWS CodeCommit の HTTPS Git 認証情報」にある 「認証情報の生成」ボタン押下 f:id:daylambsbecomelions:20211222222552p:plain

3.3. 画面に表示されたIDとパスワードをメモする

4. ローカルにgitリポジトリをcloneする

4.1. CodeCommitのリポジトリ一覧から対象のリポジトリの「HTTPS」のリンクを押下し、URLをクリップボードにコピーする f:id:daylambsbecomelions:20211222223222p:plain

4.2. 「3.3.」でメモしたパスワードを以下のような形でURL内に組込む

https://{ID}:{パスワード}@git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/my-profile

4.3. 「4.2.」で作成したURLでgitをcloneする

【Laravel】FormRequestで「引数①があれば引数②を必須とする」のバリデーションの書き方

Laravelで例えば以下のようなリクエストパラメーターがあり、「start_date」があった場合は「end_date」を必須とする、というバリデーションをFormRequestで実装する場合、以下のような記述になる。

class SampleRequest extends FormRequest
{

    /** 中省略 */
    public function rules()
    {
        return [
            'start_date' => [
                'date',
            ],
            'end_date' => [
                'date',
                'required_with:start_date',
            ],
        ];
    }

【Laravel】URL内の引数に対してFormRequestでバリデーションをかける

Laravelで以下のようなURL内の引数に対して

Route::get('/sample/{param1?}/{param2?}', 'Sapmle\SampleController@index')->name('sample.index');

FormRequestの処理を使ってバリデーションを行おうとしたところ、以下のようにいつも通りに書いてもなぜかスルーされてバリデーションが実行されない。

namespace App\Http\Requests\Sample;
use Illuminate\Foundation\Http\FormRequest;

class SampleRequest extends FormRequest
{
  /** 中省略 */
  public function rules()
    {
        return [
            'param1' => [
                'integer',
            ],
            'param2' => [
                'string',
            ],
        ];
    }
  /** 中省略 */
}

調べたところ、どうやらURL内の引数はルート情報内のみに存在していてそのままではパラメーターとして拾ってくれず、継承元のFormRequestクラスにあるvalidationData()メソッドをオーバーライドして渡し直してあげる必要があるらしい。以下のように上書きメソッドを追記することで通常通り上記のようなrules()で拾うことができた。

namespace App\Http\Requests\Sample;
use Illuminate\Foundation\Http\FormRequest;

/** ↓↓ Routeを追記 ↓↓ */
use Illuminate\Support\Facades\Route;

class SampleRequest extends FormRequest
{
  /** 中省略 */
   /**
   * Override validationData() method in FormRequest to obtain parameters within URL.
   *
   * @return array
   */
    public function validationData()
    {
        return array_merge($this->request->all(), [
            'param1' => Route::input('param1'),
            'param2'   => Route::input('param2'),
        ]);
    }
  /** 中省略 */
}

【bash】How to solve : Syntax error: "(" unexpected

I wrote some shell scripts and try to execute in docker httpd environment by typing below command

sh sample.sh

then I got this error.

sample.sh: 13: Syntax error: "(" unexpected

Yes I have "(" in line 13 but what's wrong with that? The thing is if you are under Debian environment like Ubuntu, "sh" does not stand for "bash" but "dash" . You can see it by typing as below.

ls -ltra /bin/sh 
lrwxrwxrwx 1 root root 4 Dec  1 00:00 /bin/sh -> dash

Solution. In stead of "sh sample.sh", just use "bash" as below.

bash sample.sh

Then you get what you want without errors no more!

【Python】BeautifulSoupの文字化け

PythonでBeautifulSoupを使ってスクレイピングを実装している時、いつもではないけどたまに取得した値が全て文字化けしていることがあった。調査してみたところ、どうやら取得対象を「text」で指定しているのがよくないとのこと。

res = requests.get('https://www.yahoo.co.jp')
bs = BeautifulSoup(res.text, 'html.parser')


「text」の代わりに「content」を指定することで文字化けしないようになった。

res = requests.get('https://www.yahoo.co.jp')
bs = BeautifulSoup(res.content, 'html.parser')

【Javascript】APIで取得した値をHTMLにセットしたのに表示されない

JavacriptでAPIを呼び出して取得したレスポンスから値を取り出し、HTMLのDOMを指定して表示するように実装したけど、表示されない。

callSampleAPI(url, function(result) {
   console.log("RESULT : callSampleAPI:", result);
   $("#display-here").text(result.sample-text);
});


Javascriptのconsole.logで見る限りは値はちゃんと取れてるのになぜHTMLに表示されない。これはAPIからのレスポンスはjson形式になっているからで、これを「JSON.parse」でオブジェクトに変換して扱ってやる必要がある。以下のように修正して無事表示されるようになりました。めでたしめでたし。。

callSampleAPI(url, function(result) {
   console.log("RESULT : callSampleAPI:", result);
   let parsedResult = JSON.parse(result);
   $("#display-here").text(parsedResult .sample-text);
});