ALBリスナールールの固定レスポンスコードが変更不可-CLIで解決方法を紹介


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

こんにちは!協栄情報の陳です。

今日はALBのリスナールールを設定する時、バグみたいの事象が起きました。解決方法まで
メモします。

現象

一般的に、ALBリスナールールの最後-デフォルトアクションは、「固定レスポンスを返す」を選択して、Sorryページに設定することが多いです。今日は、レスポンスコードを編集すると、ルールが保存できない事象が起きました。
file

他のルールに「固定レスポンスを返す」を設定して、レスポンスコードも変更できません。
元々できることが急にできなくなって、構築中なので設計変更も不可能のため、他の設定方法がないかを調査しないといけません。

解決方法の調査

AWSはコンソールで各サービスの新規構築と設定変更などが大体できますが、「CLI」というコマンドラインインターフェースもよく利用されます。今回の事象は画面レベルのバグと思いますので、「CLI」で作業を実施してみたいです。

参考リンク:
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/elbv2/modify-rule.html

先ずは一般ルールのレスポンスコードを変更する「CLI」を実行します。

$ aws elbv2 modify-rule \
$ --actions Type=fixed-response,FixedResponseConfig={"MessageBody=test,StatusCode=404,ContentType=text/html"} \
$ --rule-arn arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:listener-rule/app/TEST-RESPONSE-CODE/41aad90ca6992d3e/cc9584fa70f41ff3/3a4befbf420d0a9b

実行結果

{
    "Rules": [
        {
            "RuleArn": "arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:listener-rule/app/TEST-RESPONSE-CODE/41aad90ca6992d3e/cc9584fa70f41ff3/3a4befbf420d0a9b",
            "Priority": "2",
            "Conditions": [
                {
                    "Field": "path-pattern",
                    "Values": [
                        "/img/*"
                    ],
                    "PathPatternConfig": {
                        "Values": [
                            "/img/*"
                        ]
                    }
                }
            ],
            "Actions": [
                {
                    "Type": "fixed-response",
                    "FixedResponseConfig": {
                        "MessageBody": "test",
                        "StatusCode": "404",
                        "ContentType": "text/html"
                    }
                }
            ],
            "IsDefault": false
        }
    ]
}

コンソールで確認
file

次は作業対象のデフォルトルールを変更します。

$ aws elbv2 modify-rule \
$ --actions Type=fixed-response,FixedResponseConfig={"MessageBody=test,StatusCode=404,ContentType=text/html"} \
$ --rule-arn arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:listener-rule/app/TEST-RESPONSE-CODE/41aad90ca6992d3e/cc9584fa70f41ff3/5f75a5c86b047b13

実行結果

An error occurred (OperationNotPermitted) when calling the ModifyRule operation: Default rule 'arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:listener-rule/app/TEST-RESPONSE-CODE/41aad90ca6992d3e/cc9584fa70f41ff3/5f75a5c86b047b13' cannot be modified

あれ、権限がなさそうですね。ちょっと確認します。
file

やばり不一致のところが多いですね。再度AWSの資料を確認して、回答を見つかりました。
file

「modify-listener」を利用して、もう一回試します。

$ aws elbv2 modify-listener \
$ --listener-arn arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:listener/app/TEST-RESPONSE-CODE/41aad90ca6992d3e/cc9584fa70f41ff3 \
$ --default-actions Type=fixed-response,FixedResponseConfig={"MessageBody=test,StatusCode=404,ContentType=text/html"}

実行結果

{
    "Listeners": [
        {
            "ListenerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:listener/app/TEST-RESPONSE-CODE/41aad90ca6992d3e/cc9584fa70f41ff3",
            "LoadBalancerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:loadbalancer/app/TEST-RESPONSE-CODE/41aad90ca6992d3e",
            "Port": 80,
            "Protocol": "HTTP",
            "DefaultActions": [
                {
                    "Type": "fixed-response",
                    "FixedResponseConfig": {
                        "MessageBody": "test",
                        "StatusCode": "404",
                        "ContentType": "text/html"
                    }
                }
            ]
        }
    ]
}

コンソールで確認
file

やっとできました。

最後に

仕事でこの事象のせい一時中止になってしまいましたが、問題が解決できてよかったです。それに、この調査のために多くの知識を勉強できました。AWS作業を効率化したければ、「CLI」が最強武器だと思います。

Last modified: 2024-02-05

Author